顯示具有 L1EquipmentSlot 標籤的文章。 顯示所有文章
顯示具有 L1EquipmentSlot 標籤的文章。 顯示所有文章

2014年6月5日 星期四

【Java教學】裝備特殊武器角色頭上出現皇冠

L1EquipmentSlot.java


附送裝備武器可變身的傻瓜寫法

查找

[Copy to clipboard]
CODE:

private void setWeapon(L1ItemInstance weapon)

將整段修改為

[Copy to clipboard]
CODE:

private void setWeapon(L1ItemInstance weapon) {
                int itemId = weapon.getItem().getItemId();
                _owner.setWeapon(weapon);
                _owner.setCurrentWeapon(weapon.getItem().getType1());
                weapon.startEquipmentTimer(_owner);
                _weapon = weapon;
                if (itemId == 274){//肯恩權杖
            L1PolyMorph.doPoly(_owner, 3903, 0,L1PolyMorph.MORPH_BY_ITEMMAGIC);
        }
        if (itemId == 195 || itemId == 570229){//受詛咒的真冥王執行劍 新手武器
            L1PolyMorph.doPoly(_owner, 3784, 0,L1PolyMorph.MORPH_BY_ITEMMAGIC);
        }
        if (itemId == 60){//末日刀
            L1PolyMorph.doPoly(_owner, 5641, 0,L1PolyMorph.MORPH_BY_ITEMMAGIC);
        }
        if (itemId == 46){//生命之劍試寫
            _owner.sendPackets(new S_CastleMaster(7,_owner.getId()));
            _owner.broadcastPacket(new S_CastleMaster(7,_owner.getId()));
        }
        }

查找

[Copy to clipboard]
CODE:

private void removeWeapon(L1ItemInstance weapon)

將基整段修改為

[Copy to clipboard]
CODE:

private void removeWeapon(L1ItemInstance weapon) {
                int itemId = weapon.getItem().getItemId();
                _owner.setWeapon(null);
                _owner.setCurrentWeapon(0);
                weapon.stopEquipmentTimer(_owner);
                _weapon = null;
                if (itemId == 274 || itemId == 195 || itemId == 60 || itemId == 570229){
            L1PolyMorph.undoPoly(_owner);
            _owner.sendPackets(new S_CharVisualUpdate(_owner));
            _owner.broadcastPacket(new S_CharVisualUpdate(_owner));
        }
                if (itemId == 46) {
                        _owner.sendPackets(new S_CastleMaster(7,0));
                        _owner.broadcastPacket(new S_CastleMaster(7,0)); //將皇冠狀態移至不存在的角色
                        }

                if (_owner.hasSkillEffect(COUNTER_BARRIER)) {
                        _owner.removeSkillEffect(COUNTER_BARRIER);
                }
        }


原理:

裝備生命之劍后,將該角色偽裝成亞丁城主從而得到皇冠封包...因為皇冠不能消除,只能轉移,所以將皇冠轉移給一個不存在的角色ID.



注意:

此寫法,必須關閉亞丁的攻城戰... 否則可能會出現一些奇怪的現象吧~~~
生命之劍,只能出現一把,可以自制一把特殊的武器,全服絕對性的只能有一個人拿,因為皇冠只會出現在一個人頭上,即使有兩個人拿同樣的武器,也只會出現一個,所以,必須是獨一無二的. 



原作者:tjohny


2014年4月2日 星期三

【Java教學】裝備附加能力

\RevXXXX\src\l1j\server\server\model\Instance\L1ItemInstance  <===檔案位置

在此以追加體質做說明(設定裝備內衣)

第一步驟

新增以下程式碼...

    public byte getcon(){//追加體質(T)
        byte getcon = 0;
        byte conup = 0;
        if((getItemId() >= 20001 && getItemId() <= 22000)
                || (getItemId() >= 120001 && getItemId() <= 122000)
                || (getItemId() >= 220001 && getItemId() <= 222000)){
            if(getItem().getType() == 3 ){//(T)
                if(getEnchantLevel()<= getItem().get_safeenchant()){
                    getcon = 0;
                    return getcon;
                }
                if(getEnchantLevel()> getItem().get_safeenchant()+3){
                    getcon = 0;
                    conup = (byte) (getEnchantLevel() - (getItem().get_safeenchant()+2));
                    getcon += 1 + (conup /2);
                    return getcon;
                }
                if(getEnchantLevel()> getItem().get_safeenchant()){
                    getcon = 1;
                    return getcon;
                }
            }else{
                getcon = 0;
                return getcon;
            }
        }
        getcon = 0;  
        return getcon;
    }


===================================================
第二步驟

找到以下地方.

            if (getItem().get_addstr() != 0 || getstr()!= 0) {
                os.writeC(8);//str力量
                os.writeC(getItem().get_addstr()+ getstr());
            }
            if (getItem().get_adddex() != 0 || getdex()!= 0) {
                os.writeC(9);//dex敏捷
                os.writeC(getItem().get_adddex()+ getdex());
            }
            if (getItem().get_addcon() != 0 || getcon()!= 0) {
                os.writeC(10);//con體質
                os.writeC(getItem().get_addcon()+ getcon());
            }
            if (getItem().get_addwis() != 0 || getwis()!= 0) {
                os.writeC(11);//wis精神
                os.writeC(getItem().get_addwis()+ getwis());
            }
            if (getItem().get_addint() != 0 || getint()!= 0) {
                os.writeC(12);//int智力
                os.writeC(getItem().get_addint()+ getint());
            }



將這些原本的程式碼.
      if (getItem().get_addcon() != 0) {
        os.writeC(10);
        os.writeC(getItem().get_addcon());

修改成這樣.
      if (getItem().get_addcon() != 0 || getcon()!= 0) {
        os.writeC(10);//con體質
        os.writeC(getItem().get_addcon()+ getcon());

完成以上的步驟.裝備過安定值後就會增加所設定的體質(上面設定的裝備是內衣)

不過目前只是好看用.需再修改以下的程式碼.讓能力有實裝.

=====================================================

第三步驟

修改以下的程式碼



\RevXXXX\src\l1j\server\server\model\L1EquipmentSlot  <===檔案位置

裝備時追加能力.

增加<====所標示的程式碼.

    public void set(L1ItemInstance equipment) {
        L1Item item = equipment.getItem();
        if (item.getType2() == 0) {
            return;
        }

        if (item.get_addhp() != 0) {
            _owner.addMaxHp(item.get_addhp());
        }
        if (item.get_addmp() != 0) {
            _owner.addMaxMp(item.get_addmp());
        }                              //追加武防捲能力
        _owner.addStr(item.get_addstr()+ equipment.getstr());<====要修改的位置
        _owner.addCon(item.get_addcon()+ equipment.getcon());<====要修改的位置
        _owner.addDex(item.get_adddex()+ equipment.getdex());<====要修改的位置
        _owner.addInt(item.get_addint()+ equipment.getint());<====要修改的位置
        _owner.addWis(item.get_addwis()+ equipment.getwis());<====要修改的位置
        if (item.get_addwis() != 0) {
            _owner.resetBaseMr();
        }
        _owner.addCha(item.get_addcha()+ equipment.getcha());

        int addMr = 0;





=============================================================
第四步驟

修改以下的程式碼


移除時扣除能力.

增加<====所標示的程式碼.

    public void remove(L1ItemInstance equipment) {
        L1Item item = equipment.getItem();
        if (item.getType2() == 0) {
            return;
        }

        if (item.get_addhp() != 0) {
            _owner.addMaxHp(-item.get_addhp());
        }
        if (item.get_addmp() != 0) {
            _owner.addMaxMp(-item.get_addmp());
        }                                        //追加武防捲能力
        _owner.addStr((byte) -(item.get_addstr()+ equipment.getstr()));
        _owner.addCon((byte) -(item.get_addcon()+ equipment.getcon()));
        _owner.addDex((byte) -(item.get_adddex()+ equipment.getdex()));
        _owner.addInt((byte) -(item.get_addint()+ equipment.getint()));
        _owner.addWis((byte) -(item.get_addwis()+ equipment.getwis()));
        if (item.get_addwis() != 0) {  
            _owner.resetBaseMr();
        }
        _owner.addCha((byte) -(item.get_addcha()+ equipment.getcha()));

        int addMr = 0;
        addMr -= equipment.getMr();



修改完成後..
編譯放入核心即完成..

以上的設定有個小BUG
防具裝在身上時.加防捲過安定值後.沒有即時更新能力(在此並沒有寫這些)
卸裝時會減少能力.
重新登入即可解決..(看不過去想修正也行..請便)

=========================================================================



第一步驟說明..

    public byte getcon(){//追加體質(T)
        byte getcon = 0;
        byte conup = 0;
                判斷裝備是否是防具類型.
        if((getItemId() >= 20001 && getItemId() <= 22000)
                || (getItemId() >= 120001 && getItemId() <= 122000)
                || (getItemId() >= 220001 && getItemId() <= 222000)){
                判斷類型2.哪一種防具.
              1.頭 2.盔甲 3.T 4.鬥篷 5.手套 6.靴 7.盾 8.護身符 9.戒指
              10.腰帶 11.戒指2 12.耳環
            if(getItem().getType() == 3 ){//(T)
                                安定值內不加能力
                if(getEnchantLevel()<= getItem().get_safeenchant()){
                    getcon = 0;
                    return getcon;
                }
                                超過安定值3後.每過2會+1能力
                if(getEnchantLevel()> getItem().get_safeenchant()+3){
                    getcon = 0;
                    conup = (byte) (getEnchantLevel() - (getItem().get_safeenchant()+2));
                    getcon += 1 + (conup /2);
                    return getcon;
                }
                                過安定值體質+1
                if(getEnchantLevel()> getItem().get_safeenchant()){
                    getcon = 1;
                    return getcon;
                }
            }else{
                getcon = 0;
                return getcon;
            }
        }
        getcon = 0;
        return getcon;
    }




建議能力設定不要加太多..
人物本身太強.敵人就需要做修改.多此一舉..
適當就好了.