close_btn
로그인, 회원가입후 더 많은 혜택을 누리세요 로그인 회원가입 닫기

316 추가옵션 구현 소스

2020.03.07 20:00

DanielJSKim 조회 수:1167

package client.items;

 

import java.io.Serializable;

 

import constants.GameConstants;

import server.items.ItemInformation;

import server.items.MapleRing;

import tools.RandomStream.Randomizer;

 

public class Equip extends Item implements IEquip, Serializable {

 

    private MapleRing ring = null;

    private byte upgradeSlots, level, vicioushammer, itemLevel, enhance, state, lines, bossdmg, alldmgp, allstatp;

    private short str, dex, _int, luk, arc = 0, hp, mp, watk, matk, wdef, mdef, acc, avoid, hands, speed, jump, hpR,

            mpR, IgnoreWdef, downlevel, soulname, soulenchanter, soulpotential, itemtrace, charmExp;

    private int arcexp = 0, arclevel = 0, job, potential, durability = -1, potential1, potential2, potential3,

            potential4, potential5, potential6, potential7, anvil, itemEXP;

    private long fire = 0;

    private boolean amazing, amazingequipscroll;

    private int soulskill;

    private int[] fireStat = new int[16];

 

    public Equip(int id, short position, short flag) {

        super(id, position, (short) 1, flag);

    }

 

    public void set(Equip e) {

        upgradeSlots = e.upgradeSlots;

        level = e.level;

        vicioushammer = e.vicioushammer;

        itemLevel = e.itemLevel;

        enhance = e.enhance;

        state = e.state;

        lines = e.lines;

        fire = e.fire;

        bossdmg = e.bossdmg;

        alldmgp = e.alldmgp;

        allstatp = e.allstatp;

        downlevel = e.downlevel;

        str = e.str;

        dex = e.dex;

        _int = e._int;

        luk = e.luk;

        arc = e.arc;

        arclevel = e.arclevel;

        arcexp = e.arcexp;

        hp = e.hp;

        mp = e.mp;

        watk = e.watk;

        matk = e.matk;

        wdef = e.wdef;

        mdef = e.mdef;

        acc = e.acc;

        avoid = e.avoid;

        hands = e.hands;

        speed = e.speed;

        jump = e.jump;

        hpR = e.hpR;

        mpR = e.mpR;

        IgnoreWdef = e.IgnoreWdef;

        soulname = e.soulname;

        soulenchanter = e.soulenchanter;

        soulpotential = e.soulpotential;

        job = e.job;

        potential = e.potential;

        durability = e.durability;

        potential1 = e.potential1;

        potential2 = e.potential2;

        potential3 = e.potential3;

        potential4 = e.potential4;

        potential5 = e.potential5;

        potential6 = e.potential6;

        potential7 = e.potential7;

        anvil = e.anvil;

        itemEXP = e.itemEXP;

        amazing = e.amazing;

        soulskill = e.soulskill;

    }

 

    @Override

    public IItem copy() {

        Equip ret = new Equip(getItemId(), getPosition(), getFlag());

        ret.str = str;

        ret.dex = dex;

        ret._int = _int;

        ret.luk = luk;

        ret.arc = arc;

        ret.arcexp = arcexp;

        ret.arclevel = arclevel;

        ret.hp = hp;

        ret.mp = mp;

        ret.matk = matk;

        ret.mdef = mdef;

        ret.watk = watk;

        ret.wdef = wdef;

        ret.acc = acc;

        ret.avoid = avoid;

        ret.hands = hands;

        ret.speed = speed;

        ret.jump = jump;

        ret.enhance = enhance;

        ret.upgradeSlots = upgradeSlots;

        ret.level = level;

        ret.itemEXP = itemEXP;

        ret.itemLevel = itemLevel;

        ret.durability = durability;

        ret.vicioushammer = vicioushammer;

        ret.potential1 = potential1;

        ret.potential2 = potential2;

        ret.potential3 = potential3;

        ret.potential4 = potential4;

        ret.potential5 = potential5;

        ret.potential6 = potential6;

        ret.potential7 = potential7;

        ret.anvil = anvil;

        ret.hpR = hpR;

        ret.mpR = mpR;

        ret.state = state;

        ret.lines = lines;

        ret.fire = fire;

        ret.downlevel = downlevel;

        ret.bossdmg = bossdmg;

        ret.alldmgp = alldmgp;

        ret.allstatp = allstatp;

        ret.IgnoreWdef = IgnoreWdef;

        ret.soulenchanter = soulenchanter;

        ret.soulname = soulname;

        ret.soulskill = soulskill;

        ret.soulpotential = soulpotential;

        ret.amazingequipscroll = amazingequipscroll;

        ret.arc = arc;

        ret.arcexp = arcexp;

        ret.arclevel = arclevel;

        ret.itemtrace = itemtrace;

        ret.setOwner(getOwner());

        ret.setQuantity(getQuantity());

        ret.setExpiration(getExpiration());

        ret.setUniqueId(getUniqueId());

        ret.setCash(isCash());

        return ret;

    }

 

    @Override

    public byte getType() {

        return 1;

    }

 

    @Override

    public byte getUpgradeSlots() {

        return upgradeSlots;

    }

 

    @Override

    public short getStr() {

        return str;

    }

 

    @Override

    public short getDex() {

        return dex;

    }

 

    @Override

    public short getInt() {

        return _int;

    }

 

    @Override

    public short getLuk() {

        return luk;

    }

 

    @Override

    public short getHp() {

        return hp;

    }

 

    @Override

    public short getMp() {

        return mp;

    }

 

    @Override

    public short getWatk() {

        return watk;

    }

 

    @Override

    public short getMatk() {

        return matk;

    }

 

    @Override

    public short getWdef() {

        return wdef;

    }

 

    @Override

    public short getMdef() {

        return mdef;

    }

 

    @Override

    public short getAcc() {

        return acc;

    }

 

    @Override

    public short getAvoid() {

        return avoid;

    }

 

    @Override

    public short getHands() {

        return hands;

    }

 

    @Override

    public short getSpeed() {

        return speed;

    }

 

    @Override

    public short getJump() {

        return jump;

    }

 

    @Override

    public short getArc() {

        return arc;

    }

    @Override

    public long getFire() {

        return fire;

    }

    

    public int getJob() {

        return job;

    }

  public void setStr(short str) {

        if (str < 0) {

            str = 0;

        }

        this.str = str;

    }

 

    public void addStr(short str) {

        if (this.str + str < 0) {

            this.str = 0;

        }

        this.str += str;

    }

 

    public void setDex(short dex) {

        if (dex < 0) {

            dex = 0;

        }

        this.dex = dex;

    }

 

    public void addDex(short dex) {

        if (this.dex + dex < 0) {

            this.dex = 0;

        }

        this.dex += dex;

    }

 

    public void setInt(short _int) {

        if (_int < 0) {

            _int = 0;

        }

        this._int = _int;

    }

 

    public void addInt(short dex) {

        if (this._int + dex < 0) {

            this._int = 0;

        }

        this._int += dex;

    }

 

    public void setLuk(short luk) {

        if (luk < 0) {

            luk = 0;

        }

        this.luk = luk;

    }

 

    public void addLuk(short dex) {

        if (this.luk + dex < 0) {

            this.luk = 0;

        }

        this.luk += dex;

    }

 

    public void setArc(short arc) {

        if (arc < 0) {

            arc = 0;

        }

        this.arc = arc;

    }

 

    public void setHp(short hp) {

        if (hp < 0) {

            hp = 0;

        }

        this.hp = hp;

    }

 

    public void addHp(short dex) {

        if (this.hp + dex < 0) {

            this.hp = 0;

        }

        this.hp += dex;

    }

 

    public void setMp(short mp) {

        if (mp < 0) {

            mp = 0;

        }

        this.mp = mp;

    }

 

    public void addMp(short dex) {

        if (this.mp + dex < 0) {

            this.mp = 0;

        }

        this.mp += dex;

    }

 

    public void setWatk(short watk) {

        if (watk < 0) {

            watk = 0;

        }

        this.watk = watk;

    }

 

    public void addWatk(short watk) {

        if (this.watk + watk < 0) {

            this.watk = 0;

        }

        this.watk += watk;

    }

 

    public void setMatk(short matk) {

        if (matk < 0) {

            matk = 0;

        }

        this.matk = matk;

    }

 

    public void addMatk(short watk) {

        if (this.matk + watk < 0) {

            this.matk = 0;

        }

        this.matk += watk;

    }

 

    public void setWdef(short wdef) {

        if (wdef < 0) {

            wdef = 0;

        }

        this.wdef = wdef;

    }

 

    public void addWdef(short wdef) {

        if (wdef + this.wdef < 0) {

            this.wdef = 0;

        }

        this.wdef += wdef;

    }

 

    public void setMdef(short mdef) {

        if (mdef < 0) {

            mdef = 0;

        }

        this.mdef = mdef;

    }

 

    public void addMdef(short mdef) {

        if (mdef + this.mdef < 0) {

            this.mdef = 0;

        }

        this.mdef += mdef;

    }

 

    public void setAcc(short acc) {

        if (acc < 0) {

            acc = 0;

        }

        this.acc = acc;

    }

 

    public void addAcc(short acc) {

        if (acc + this.acc < 0) {

            this.acc = 0;

        }

        this.acc += acc;

    }

 

    public void setAvoid(short avoid) {

        if (avoid < 0) {

            avoid = 0;

        }

        this.avoid = avoid;

    }

 

    public void setHands(short hands) {

        if (hands < 0) {

            hands = 0;

        }

        this.hands = hands;

    }

 

    public void setSpeed(short speed) {

        if (speed < 0) {

            speed = 0;

        }

        this.speed = speed;

    }

 

    public void addSpeed(short speed) {

        if (speed + this.speed < 0) {

            this.speed = 0;

        }

        this.speed += speed;

    }

 

    public void addJump(short jump) {

        if (jump + this.jump < 0) {

            this.jump = 0;

        }

        this.jump += jump;

    }

 

    public void setJump(short speed) {

        if (speed < 0) {

            speed = 0;

        }

        this.jump = speed;

    }

 

    public void setUpgradeSlots(byte upgradeSlots) {

        this.upgradeSlots = upgradeSlots;

    }

 

    public void addUpgradeSlots(byte upgradeSlots) {

        this.upgradeSlots += upgradeSlots;

    }

 

    @Override

    public byte getLevel() {

        return level;

    }

 

    public void setLevel(byte level) {

        this.level = level;

    }

 

    @Override

    public byte getViciousHammer() {

        return vicioushammer;

    }

 

    public void setViciousHammer(byte ham) {

        vicioushammer = ham;

    }

 

    @Override

    public byte getItemLevel() {

        return 6;

    }

 

    public void setItemLevel(byte itemLevel) {

        if (itemLevel < 0) {

            itemLevel = 0;

        }

        this.itemLevel = itemLevel;

    }

 

    @Override

    public int getItemEXP() {

        return itemEXP;

    }

 

    public void setItemEXP(int itemEXP) {

        if (itemEXP < 0) {

            itemEXP = 0;

        }

        this.itemEXP = itemEXP;

    }

 

    @Override

    public void setQuantity(short quantity) {

        if (quantity < 0 || quantity > 1) {

            throw new RuntimeException(

                    "Setting the quantity to " + quantity + " on an equip (itemid: " + getItemId() + ")");

        }

        super.setQuantity(quantity);

    }

 

    public void setJob(int job) {

        this.job = job;

    }

 

    @Override

    public int getDurability() {

        return durability;

    }

 

    public void setDurability(final int dur) {

        this.durability = dur;

    }

 

    @Override

    public byte getEnhance() {

        return enhance;

    }

 

    public void setEnhance(final byte en) {

        this.enhance = en;

    }

 

    @Override

    public int getPotential1() {

        return potential1;

    }

 

    public void setPotential1(final int en) {

        this.potential1 = en;

    }

 

    @Override

    public int getPotential2() {

        return potential2;

    }

 

    public void setPotential2(final int en) {

        this.potential2 = en;

    }

 

    @Override

    public int getPotential3() {

        return potential3;

    }

 

    public void setPotential3(final int en) {

        this.potential3 = en;

    }

 

    @Override

    public int getPotential4() {

        return potential4;

    }

 

    public void setPotential4(final int en) {

        this.potential4 = en;

    }

 

    @Override

    public int getPotential5() {

        return potential5;

    }

 

    public void setPotential5(final int en) {

        this.potential5 = en;

    }

 

    @Override

    public int getPotential6() {

        return potential6;

    }

 

    public void setPotential6(final int en) {

        this.potential6 = en;

    }

 

    @Override

    public int getPotential7() {

        return potential7;

    }

 

    public void setPotential7(final int en) {

        this.potential7 = en;

    }

 

    @Override

    public int getanvil() {

        return anvil;

    }

 

    public void setanvil(final int en) {

        this.anvil = en;

    }

 

    @Override

    public byte getState() {

        return state;

    }

 

    public void setState(byte state) {

        this.state = state;

    }

 

    @Override

    public byte getLines() {

        return lines;

    }

 

    public void setLines(byte lines) {

        this.lines = lines;

    }

 

 

    public void setFire(long fire) {

        this.fire = fire;

    }

 

    @Override

    public short getItemTrace() {

        return this.itemtrace;

    }

 

    public void setItemTrace(short trace) {

        this.itemtrace = trace;

    }

    public boolean isAmazingequipscroll() {

        return amazingequipscroll;

    }

 

    public void setAmazingequipscroll(boolean tt) {

        this.amazingequipscroll = tt;

    }

    public void renewPotential() {

        int epic = 7;

        int unique = 5;

        if (getState() == 17 && Randomizer.nextInt(100) <= epic) {

            setState((byte) 2);

            return;

        } else if (getState() == 18 && Randomizer.nextInt(100) <= unique) {

            setState((byte) 3);

            return;

        } else if (getState() == 19 && Randomizer.nextInt(100) <= 2) {

            setState((byte) 4);

            return;

        }

        setState((byte) (getState() - 16));

    }

 

    public void renewPotentialUniq() {

        int epic = 7;

        int unique = 5;

        if (getState() == 17 && Randomizer.nextInt(100) <= epic) {

            setState((byte) 2);

            return;

        } else if (getState() == 18 && Randomizer.nextInt(100) <= unique) {

            setState((byte) 3);

            return;

        }

        setState((byte) (getState() - 16));

    }

 

    public void giveEpicAndRenew() {

        setPotential1(-18);

        setPotential2(0);

        setPotential3(0);

    }

 

    @Override

    public short getHpR() {

        return hpR;

    }

 

    public void setHpR(final short hp) {

        this.hpR = hp;

    }

 

    @Override

    public short getMpR() {

        return mpR;

    }

 

    public void setMpR(final short mp) {

        this.mpR = mp;

    }

 

    @Override

    public short getDownLevel() {

        return downlevel;

    }

 

    public void setDownLevel(short down) {

        this.downlevel = down;

    }

 

    @Override

    public byte getBossDamage() {

        return bossdmg;

    }

 

    public void setBossDamage(byte dmg) {

        this.bossdmg = dmg;

    }

 

    public void addBossDamage(byte dmg) {

        if (this.bossdmg + dmg < 0) {

            this.bossdmg = 0;

        }

        this.bossdmg += dmg;

    }

 

    @Override

    public byte getAllDamageP() {

        return alldmgp;

    }

 

    public void setAllDamageP(byte percent) {

        this.alldmgp = percent;

    }

 

    @Override

    public short getIgnoreWdef() {

        return IgnoreWdef;

    }

 

    public void setIgnoreWdef(short percent) {

        this.IgnoreWdef = percent;

    }

 

    public void addIgnoreWdef(short IgnoreWdef) {

        if (this.IgnoreWdef + IgnoreWdef < 0) {

            this.IgnoreWdef = 0;

        }

        this.IgnoreWdef += IgnoreWdef;

    }

 

    @Override

    public byte getAllStatP() {

        return allstatp;

    }

 

    public void setAllStatP(byte percent) {

        this.allstatp = percent;

    }

 

    @Override

    public short getSoulEnchanter() {

        return soulenchanter;

    }

 

    public void setSoulEnchanter(final short soulenchanter) {

        this.soulenchanter = soulenchanter;

    }

 

    @Override

    public short getSoulPotential() {

        return this.soulpotential;

    }

 

    public void setSoulPotential(short soulpotential) {

        this.soulpotential = soulpotential;

    }

 

    @Override

    public short getSoulName() {

        return soulname;

    }

 

    public void setSoulName(final short soulname) {

        this.soulname = soulname;

    }

 

    @Override

    public int getSoulSkill() {

        return soulskill;

    }

 

    public void setFireStat(String t) {

        try {

            String[] s = t.split(",");

            for (int i = 0; i < s.length; i++) {

                fireStat[i] = Integer.parseInt(s[i]);

            }

        } catch (Exception ex) {

            fireStat = new int[16];

        }

    }

 

    public void setFireStat(int[] i) {

        fireStat = i;

    }

 

    @Override

    public int[] getFireStat() {

        return fireStat;

    }

 

    @Override

    public String getFireStatToString() {

        String t = "";

        for (int i = 0; i < fireStat.length; i++) {

            t += (t.equals("") ? "" : ",") + fireStat[i];

        }

        return t;

    }

 

    public void setSoulSkill(final int soulskill) {

        this.soulskill = soulskill;

    }

 

    public MapleRing getRing() {

        if (!GameConstants.isEffectRing(getItemId()) || getUniqueId() <= 0) {

            return null;

        }

        if (ring == null) {

            ring = MapleRing.loadFromDb(getUniqueId(), getPosition() < 0);

        }

        return ring;

    }

 

    public boolean isAmazing() {

        return amazing;

    }

 

    public void setAmazing(boolean amazing) {

        this.amazing = amazing;

    }

 

    public void resetPotential_Fuse(boolean a, boolean nopotential) { // equip first receive

        int epic = a ? 20 : 10;

        int unique = a ? 10 : 5;

        if (Randomizer.nextInt(100) <= epic && !nopotential) {

            setState((byte) 2);

        } else if (Randomizer.nextInt(100) <= unique && !nopotential) {

            setState((byte) 3);

        } else if (!nopotential) {

            setState((byte) 1);

        }

    }

 

    public short getCharmEXP() {

        return charmExp;

    }

 

    public void setCharmEXP(short s) {

        charmExp = s;

    }

 

    @Override

    public int getArcEXP() {

        return arcexp;

    }

 

    @Override

    public int getArcLevel() {

        return arclevel;

    }

 

    public void setArcEXP(int exp) {

        arcexp = exp;

    }

 

    public void setArcLevel(int lv) {

        arclevel = lv;

    }

 

    

    public void setReqLevel(byte reqLevel) {

        this.itemLevel = reqLevel;

    }

    public void setFire2(long fire) {

        this.fire = fire;

    }

    public void addTotalDamage(byte totalDamage) {

         if (this.alldmgp + totalDamage < 0) {

            this.alldmgp = 0;

        }

        this.alldmgp += totalDamage;

    }

    public void addAllStat(byte allStat) {

        if (this.allstatp + allStat < 0) {

            this.allstatp = 0;

        }

        this.allstatp += allStat;

    }

        public void resetRebirth(int reqLevel) {

// 반지, 방패, 어깨장식, 훈장, 심장, 보조무기, 엠블렘, 뱃지, 안드로이드, 펫장비, 심볼은 추가옵션이 붙지 않음

        if (GameConstants.isRing(getItemId()) || (getItemId() / 1000) == 1092 || (getItemId() / 1000) == 1342 || (getItemId() / 1000) == 1712 || (getItemId() / 1000) == 1152 || (getItemId() / 1000) == 1143 || (getItemId() / 1000) == 1672 || GameConstants.isSecondaryWeapon(getItemId()) || (getItemId() / 1000) == 1190 || (getItemId() / 1000) == 1182 || (getItemId() / 1000) == 1662 || (getItemId() / 1000) == 1802) {

            return;

        }

 

        if (getFire() == 0) {

            return;

        }

 

        Equip ordinary = (Equip) ItemInformation.getInstance().getEquipById(getItemId());

 

        int ordinaryPad = ordinary.watk > 0 ? ordinary.watk : ordinary.matk;

        int ordinaryMad = ordinary.matk > 0 ? ordinary.matk : ordinary.watk;

 

        int[] rebirth = new int[4];

        String fire = String.valueOf(getFire());

        if (fire.length() == 12) {

            rebirth[0] = Integer.parseInt(fire.substring(0, 3));

            rebirth[1] = Integer.parseInt(fire.substring(3, 6));

            rebirth[2] = Integer.parseInt(fire.substring(6, 9));

            rebirth[3] = Integer.parseInt(fire.substring(9));

        } else if (fire.length() == 11) {

            rebirth[0] = Integer.parseInt(fire.substring(0, 2));

            rebirth[1] = Integer.parseInt(fire.substring(2, 5));

            rebirth[2] = Integer.parseInt(fire.substring(5, 8));

            rebirth[3] = Integer.parseInt(fire.substring(8));

        } else if (fire.length() == 10) {

            rebirth[0] = Integer.parseInt(fire.substring(0, 1));

            rebirth[1] = Integer.parseInt(fire.substring(1, 4));

            rebirth[2] = Integer.parseInt(fire.substring(4, 7));

            rebirth[3] = Integer.parseInt(fire.substring(7));

        } else {

            return;

        }

 

        for (int i = 0; i < 4; ++i) {

            int randomOption = rebirth[i] / 10;

            int randomValue = rebirth[i] - (rebirth[i] / 10 * 10);

 

            switch (randomOption) {

                case 0:

                    addStr((short) -((reqLevel / 20 + 1) * randomValue));

                    break;

                case 1:

                    addDex((short) -((reqLevel / 20 + 1) * randomValue));

                    break;

                case 2:

                    addInt((short) -((reqLevel / 20 + 1) * randomValue));

                    break;

                case 3:

                    addLuk((short) -((reqLevel / 20 + 1) * randomValue));

                    break;

                case 4:

                    addStr((short) -((reqLevel / 40 + 1) * randomValue));

                    addDex((short) -((reqLevel / 40 + 1) * randomValue));

                    break;

                case 5:

                    addStr((short) -((reqLevel / 40 + 1) * randomValue));

                    addInt((short) -((reqLevel / 40 + 1) * randomValue));

                    break;

                case 6:

                    addStr((short) -((reqLevel / 40 + 1) * randomValue));

                    addLuk((short) -((reqLevel / 40 + 1) * randomValue));

                    break;

                case 7:

                    addDex((short) -((reqLevel / 40 + 1) * randomValue));

                    addInt((short) -((reqLevel / 40 + 1) * randomValue));

                    break;

                case 8:

                    addDex((short) -((reqLevel / 40 + 1) * randomValue));

                    addLuk((short) -((reqLevel / 40 + 1) * randomValue));

                    break;

                case 9:

                    addInt((short) -((reqLevel / 40 + 1) * randomValue));

                    addLuk((short) -((reqLevel / 40 + 1) * randomValue));

                    break;

                case 10:

                    addHp((short) -(reqLevel * 3 * randomValue));

                    break;

                case 11:

                    addMp((short) -(reqLevel * 3 * randomValue));

                    break;

                case 13:

                    addWdef((short) -((reqLevel / 20 + 1) * randomValue));

                    break;

                case 17: {

                    if (GameConstants.isWeapon(getItemId())) {

                        switch (randomValue) {

                            case 3:

                                if (reqLevel <= 150) {

                                    addWatk((short) -(((ordinaryPad * 1200) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addWatk((short) -(((ordinaryPad * 1500) / 10000) + 1));

                                } else {

                                    addWatk((short) -(((ordinaryPad * 1800) / 10000) + 1));

                                }

                                break;

                            case 4:

                                if (reqLevel <= 150) {

                                    addWatk((short) -(((ordinaryPad * 1760) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addWatk((short) -(((ordinaryPad * 2200) / 10000) + 1));

                                } else {

                                    addWatk((short) -(((ordinaryPad * 2640) / 10000) + 1));

                                }

                                break;

                            case 5:

                                if (reqLevel <= 150) {

                                    addWatk((short) -(((ordinaryPad * 2420) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addWatk((short) -(((ordinaryPad * 3025) / 10000) + 1));

                                } else {

                                    addWatk((short) -(((ordinaryPad * 3630) / 10000) + 1));

                                }

                                break;

                            case 6:

                                if (reqLevel <= 150) {

                                    addWatk((short) -(((ordinaryPad * 3200) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addWatk((short) -(((ordinaryPad * 4000) / 10000) + 1));

                                } else {

                                    addWatk((short) -(((ordinaryPad * 4800) / 10000) + 1));

                                }

                                break;

                            case 7:

                                if (reqLevel <= 150) {

                                    addWatk((short) -(((ordinaryPad * 4100) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addWatk((short) -(((ordinaryPad * 5125) / 10000) + 1));

                                } else {

                                    addWatk((short) -(((ordinaryPad * 6150) / 10000) + 1));

                                }

                                break;

                        }

                    } else {

                        addWatk((short) -randomValue);

                    }

                    break;

                }

                case 18: {

                    if (GameConstants.isWeapon(getItemId())) {

                        switch (randomValue) {

                            case 3:

                                if (reqLevel <= 150) {

                                    addMatk((short) -(((ordinaryMad * 1200) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addMatk((short) -(((ordinaryMad * 1500) / 10000) + 1));

                                } else {

                                    addMatk((short) -(((ordinaryMad * 1800) / 10000) + 1));

                                }

                                break;

                            case 4:

                                if (reqLevel <= 150) {

                                    addMatk((short) -(((ordinaryMad * 1760) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addMatk((short) -(((ordinaryMad * 2200) / 10000) + 1));

                                } else {

                                    addMatk((short) -(((ordinaryMad * 2640) / 10000) + 1));

                                }

                                break;

                            case 5:

                                if (reqLevel <= 150) {

                                    addMatk((short) -(((ordinaryMad * 2420) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addMatk((short) -(((ordinaryMad * 3025) / 10000) + 1));

                                } else {

                                    addMatk((short) -(((ordinaryMad * 3630) / 10000) + 1));

                                }

                                break;

                            case 6:

                                if (reqLevel <= 150) {

                                    addMatk((short) -(((ordinaryMad * 3200) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addMatk((short) -(((ordinaryMad * 4000) / 10000) + 1));

                                } else {

                                    addMatk((short) -(((ordinaryMad * 4800) / 10000) + 1));

                                }

                                break;

                            case 7:

                                if (reqLevel <= 150) {

                                    addMatk((short) -(((ordinaryMad * 4100) / 10000) + 1));

                                } else if (reqLevel <= 160) {

                                    addMatk((short) -(((ordinaryMad * 5125) / 10000) + 1));

                                } else {

                                    addMatk((short) -(((ordinaryMad * 6150) / 10000) + 1));

                                }

                                break;

                        }

                    } else {

                        addMatk((short) -randomValue);

                    }

                    break;

                }

                case 19:

                    addSpeed((short) -randomValue);

                    break;

                case 20:

                    addJump((short) -randomValue);

                    break;

                case 21:

                    addBossDamage((byte) -(randomValue * 2));

                    break;

                case 22:

                    setReqLevel((byte) 0);

                    break;

                case 23:

                    addTotalDamage((byte) -randomValue);

                    break;

                case 24:

                    addAllStat((byte) -randomValue);

                    break;

            }

        }

        setFire(0);

    }

   public void setFireOption(int randomOption, int reqLevel, int randomValue, int ordinaryPad, int ordinaryMad) {

        switch (randomOption) {

            case 0:

                addStr((short) ((reqLevel / 20 + 1) * randomValue));

                break;

            case 1:

                addDex((short) ((reqLevel / 20 + 1) * randomValue));

                break;

            case 2:

                addInt((short) ((reqLevel / 20 + 1) * randomValue));

                break;

            case 3:

                addLuk((short) ((reqLevel / 20 + 1) * randomValue));

                break;

            case 4:

                addStr((short) ((reqLevel / 40 + 1) * randomValue));

                addDex((short) ((reqLevel / 40 + 1) * randomValue));

                break;

            case 5:

                addStr((short) ((reqLevel / 40 + 1) * randomValue));

                addInt((short) ((reqLevel / 40 + 1) * randomValue));

                break;

            case 6:

                addStr((short) ((reqLevel / 40 + 1) * randomValue));

                addLuk((short) ((reqLevel / 40 + 1) * randomValue));

                break;

            case 7:

                addDex((short) ((reqLevel / 40 + 1) * randomValue));

                addInt((short) ((reqLevel / 40 + 1) * randomValue));

                break;

            case 8:

                addDex((short) ((reqLevel / 40 + 1) * randomValue));

                addLuk((short) ((reqLevel / 40 + 1) * randomValue));

                break;

            case 9:

                addInt((short) ((reqLevel / 40 + 1) * randomValue));

                addLuk((short) ((reqLevel / 40 + 1) * randomValue));

                break;

            case 10:

                addHp((short) (reqLevel * 3 * randomValue));

                break;

            case 11:

                addMp((short) (reqLevel * 3 * randomValue));

                break;

            case 13:

                addWdef((short) ((reqLevel / 20 + 1) * randomValue));

                break;

            case 17: {

                if (GameConstants.isWeapon(getItemId())) {

                    switch (randomValue) {

                        case 3:

                            if (reqLevel <= 150) {

                                addWatk((short) (((ordinaryPad * 1200) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addWatk((short) (((ordinaryPad * 1500) / 10000) + 1));

                            } else {

                                addWatk((short) (((ordinaryPad * 1800) / 10000) + 1));

                            }

                            break;

                        case 4:

                            if (reqLevel <= 150) {

                                addWatk((short) (((ordinaryPad * 1760) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addWatk((short) (((ordinaryPad * 2200) / 10000) + 1));

                            } else {

                                addWatk((short) (((ordinaryPad * 2640) / 10000) + 1));

                            }

                            break;

                        case 5:

                            if (reqLevel <= 150) {

                                addWatk((short) (((ordinaryPad * 2420) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addWatk((short) (((ordinaryPad * 3025) / 10000) + 1));

                            } else {

                                addWatk((short) (((ordinaryPad * 3630) / 10000) + 1));

                            }

                            break;

                        case 6:

                            if (reqLevel <= 150) {

                                addWatk((short) (((ordinaryPad * 3200) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addWatk((short) (((ordinaryPad * 4000) / 10000) + 1));

                            } else {

                                addWatk((short) (((ordinaryPad * 4800) / 10000) + 1));

                            }

                            break;

                        case 7:

                            if (reqLevel <= 150) {

                                addWatk((short) (((ordinaryPad * 4100) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addWatk((short) (((ordinaryPad * 5125) / 10000) + 1));

                            } else {

                                addWatk((short) (((ordinaryPad * 6150) / 10000) + 1));

                            }

                            break;

                    }

                } else {

                    addWatk((short) randomValue);

                }

                break;

            }

            case 18: {

                if (GameConstants.isWeapon(getItemId())) {

                    switch (randomValue) {

                        case 3:

                            if (reqLevel <= 150) {

                                addMatk((short) (((ordinaryMad * 1200) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addMatk((short) (((ordinaryMad * 1500) / 10000) + 1));

                            } else {

                                addMatk((short) (((ordinaryMad * 1800) / 10000) + 1));

                            }

                            break;

                        case 4:

                            if (reqLevel <= 150) {

                                addMatk((short) (((ordinaryMad * 1760) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addMatk((short) (((ordinaryMad * 2200) / 10000) + 1));

                            } else {

                                addMatk((short) (((ordinaryMad * 2640) / 10000) + 1));

                            }

                            break;

                        case 5:

                            if (reqLevel <= 150) {

                                addMatk((short) (((ordinaryMad * 2420) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addMatk((short) (((ordinaryMad * 3025) / 10000) + 1));

                            } else {

                                addMatk((short) (((ordinaryMad * 3630) / 10000) + 1));

                            }

                            break;

                        case 6:

                            if (reqLevel <= 150) {

                                addMatk((short) (((ordinaryMad * 3200) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addMatk((short) (((ordinaryMad * 4000) / 10000) + 1));

                            } else {

                                addMatk((short) (((ordinaryMad * 4800) / 10000) + 1));

                            }

                            break;

                        case 7:

                            if (reqLevel <= 150) {

                                addMatk((short) (((ordinaryMad * 4100) / 10000) + 1));

                            } else if (reqLevel <= 160) {

                                addMatk((short) (((ordinaryMad * 5125) / 10000) + 1));

                            } else {

                                addMatk((short) (((ordinaryMad * 6150) / 10000) + 1));

                            }

                            break;

                    }

                } else {

                    addMatk((short) randomValue);

                }

                break;

            }

            case 19:

                addSpeed((short) randomValue);

                break;

            case 20:

                addJump((short) randomValue);

                break;

            case 21:

                addBossDamage((byte) (randomValue * 2));

                break;

            case 22:

                setReqLevel((byte) (-5 * randomValue));

                break;

            case 23:

                addTotalDamage((byte) randomValue);

                break;

            case 24:

                addAllStat((byte) randomValue);

                break;

        }

   }

    public void setRebirth(int reqLevel, int scrollId) {

// 반지, 방패, 어깨장식, 훈장, 심장, 보조무기, 엠블렘, 뱃지, 안드로이드, 펫장비, 심볼은 추가옵션이 붙지 않음

        if (GameConstants.isRing(getItemId()) || (getItemId() / 1000) == 1092 || (getItemId() / 1000) == 1342 || (getItemId() / 1000) == 1712 || (getItemId() / 1000) == 1152 || (getItemId() / 1000) == 1142 || (getItemId() / 1000) == 1143 || (getItemId() / 1000) == 1672 || GameConstants.isSecondaryWeapon(getItemId()) || (getItemId() / 1000) == 1190 || (getItemId() / 1000) == 1182 || (getItemId() / 1000) == 1662 || (getItemId() / 1000) == 1802) {

            return;

        }

 

        int maxValue = 5;

 

        if (scrollId == 2048716 || scrollId == 2048720 || scrollId == 2048724 || scrollId == 2048745) { // 강환불

            maxValue = 6;

        }

 

        if (scrollId == 2048717 || scrollId == 2048721 || scrollId == 2048723 || scrollId == 2048746 || scrollId == 2048747) { // 영환불

            maxValue = 7;

        }

 

        Equip ordinary = (Equip) ItemInformation.getInstance().getEquipById(getItemId());

 

        int ordinaryPad = ordinary.watk > 0 ? ordinary.watk : ordinary.matk;

        int ordinaryMad = ordinary.matk > 0 ? ordinary.matk : ordinary.watk;

 

        ItemInformation ii = ItemInformation.getInstance();

 

        long[] rebirth = new long[4];

 

        for (int i = 0; i < 4; ++i) {

            int randomOption = Randomizer.nextInt(25);

            int randomValue = 0; // 보통 3~7 -> 흔히 말하는 1~5급이 됨

 

            while (randomOption == 12 || randomOption == 14 || randomOption == 15 || randomOption == 16 || (!GameConstants.isWeapon(getItemId()) && (randomOption == 21 || randomOption == 23))) {

                randomOption = Randomizer.nextInt(25);

            }

 

            if (((randomOption == 17 || randomOption == 18) && !GameConstants.isWeapon(getItemId())) || randomOption == 21 || randomOption == 22 || randomOption == 23 || randomOption == 24) {

                randomValue = Randomizer.rand(1, maxValue);

            } else {

                randomValue = Randomizer.rand(3, maxValue);

            }

 

            rebirth[i] = (randomOption * 10 + randomValue);

 

            for (int j = 0; j < i; ++j) {

                rebirth[i] *= 1000;

            }

 

            setFireOption(randomOption, reqLevel, randomValue, ordinaryPad, ordinaryMad);

        }

 

        setFire(rebirth[0] + rebirth[1] + rebirth[2] + rebirth[3]);

    }

 

}

Equip.java 의 내용을 위에걸로 통째로 교체
 
MySQL에서
alter table inventoryequipment modify fire bigint(11); 
alter table auctionequipment modify fire bigint(11);
execute
 
IEquip.java 에서

public byte getFire(); 를 전부
public long getFire(); 로 교체

 

equip.setFire((rs.getByte("fire")));검색후
equip.setFire((rs.getLong("fire"))); 으로 교체

 

pse.setInt(36, equip.getFire()); 검색후
pse.setLong(36, equip.getFire());로 교체

 

packet.creators.PacketProvider.java 가서

public static final void addItemInfo(final WritingPacket w, final IItem item, final boolean zeroPosition,
            final boolean leaveOut, final boolean trade, final boolean bagSlot, final MapleCharacter chr) {
검색후
            w.write(equip.getFire() == 0 ? -1 : equip.getFire());
            if (equip.getFire() >= 0) {
                w.writeLong(Randomizer.nextInt());
            }
이부분을
            w.write(-1); //가횟
            w.writeLong(equip.getFire()); //추옵

으로 교체

 

server.items.ItemInfomation.java 가서

} else if (GameConstants.isRebirhFireScroll(scrollId.getItemId())) { 검색후 

 몇줄밑에 break; 까지부분을
} else if (GameConstants.isRebirhFireScroll(scrollId.getItemId())) {
 nEquip.resetRebirth(getReqLevel(nEquip.getItemId()));
 nEquip.setRebirth(getReqLevel(nEquip.getItemId()), scrollId.getItemId());
 return nEquip; 
으로 교체

 

DueyHandler.java 에서

pse.setInt(38, equip.getFire()); 를

pse.setLong(38, equip.getFire()); 로 교체

 

출처 : https://cafe.naver.com/fmsn067/285924

 

번호 제목 글쓴이 날짜 조회 수
공지 소스자료는 직접 올려주세요 게임존 2017.06.06 878
940 1.2.362 서버 src 입니 [1] file GV솔그린 2024.03.21 167
939 1.2.316 초원팩 jdbc ssl 에러 수정 src file GV솔그린 2024.03.21 51
938 1.2.329 로컬리디 언팩해서 만든 리디렉터 file GV솔그린 2024.03.21 51
937 1.2.329 로컬리디 file GV솔그린 2024.03.21 37
936 373 멀티로컬 file dreamin공유 2024.02.21 274
935 331팩 소스 file 스마 2024.02.12 94
934 1.2.373 새벽소스 file 스마 2024.02.12 149
933 373 솟 file garegdas 2024.02.06 92
932 스트레딧. file 하리86 2024.01.12 132
931 1.2.65 아르카나팩 스킬 변경 src [3] file 김김김스 2023.12.25 849
930 316초원팩 src파일입니다 [2] file 동동쓰 2023.11.15 266
929 gms v111 접속rn file 하리86 2023.10.23 213
928 65버전 아르카나 , 죽둥젠 늘린거입니다 file gkxo9570 2023.09.22 494
927 65버전에서도 쓴 스크립트 강의모음 file gkxo9570 2023.09.21 406
926 1.2.65 화이트스타 src file kingye 2023.07.04 1060
925 1.2.65 아르카나 src file kingye 2023.07.03 492
924 ngs 우회 file 우2우2 2023.06.07 247
923 몬스터 코드 [3] file VanBan 2022.12.10 534
922 직업 코드 [1] file VanBan 2022.12.10 285
921 362 자석펫 지급 NPC 스크립트 file 나르나르 2022.11.09 826
920 0.83 src [1] file qweqwedq1 2022.07.13 136
919 리플렉스95 src file qweqwedq1 2022.07.13 299
918 1.2.65 바콘팩 file dullggae 2021.07.30 692
917 316src입니다 file BJK 2021.02.09 209
916 331 소스 [3] file 라비앙로즈 2021.02.06 431
915 슈퍼엔진 [2] file 돼지우리 2021.01.13 425
914 kms 1.2.1104 ct입니다 [1] file 돼지우리 2021.01.12 429
913 어빌리티인포테이블.sql file 하리86 2020.12.15 167
912 잠재능력 관련 오류 수정 및 본섭화 옵션 file 하리86 2020.12.15 342
911 sql 수정 [1] file 재희0414 2020.11.23 258
910 65 천외천 소스 [1] file lIllIlllIllll 2020.10.15 395
909 로컬 소스 file 피아쨩 2020.09.22 492
908 331 노엘팩 소스 [2] 풍선씨 2020.09.08 1207
907 1.2.65 화이트스타 소스 [3] file JYH93 2020.08.14 2302
906 1.2.65 순클 idb [1] file nhsnhsn 2020.07.23 833
905 331 GM명령어 [2] 흐밍 2020.07.09 1799
904 레벨별 메소지급 소스 능이 2020.07.05 679
903 1.2.284 그랜드 접속문제 해결파일 file wls 2020.06.27 230
902 대만 메이플스토리 113 아이템코드 file 해우김123 2020.06.18 288
901 Java SE Development Kit 6 Update 10 - jdk-6u10 file 수박씨 2020.05.12 194
900 Java SE Development Kit 6 Update 6 - jdk-6u6 file 수박씨 2020.05.12 112
899 316 추옵 쿼리에서 수정하기 [1] file DanielJSKim 2020.03.07 1422
» 316 추가옵션 구현 소스 [3] DanielJSKim 2020.03.07 1167
897 알면 유용한 위젯 [1] file 오빠는요 2020.02.25 736
896 1.2.65dk [1] file 오빠는요 2020.02.25 461
895 1.2.65 아트 소스 file 오빠는요 2020.02.25 442
894 316 이너 어빌리티 미개방 캐릭터에 강제로 부여하기 [2] DanielJSKim 2020.02.22 488
893 316 듀블 파이널 컷 데미지 감소 오류 fix [1] DanielJSKim 2020.02.22 353
892 316 하이퍼스탯포인트 레벨 250에 안받아지는 오류 fix DanielJSKim 2020.02.22 244
891 316 명성치가 innerLevel로 보여지는 경우 Fix 현이s 2020.02.16 268