顯示具有 裝備 標籤的文章。 顯示所有文章
顯示具有 裝備 標籤的文章。 顯示所有文章

2014年11月23日 星期日

新增防具魔法效果

L1Attack.java去改 
位置一樣在public int PcPcDamageCalc()  


if(targetPlayer.getInventory().checkEquipped(XXX) && _random.nextInt(100) < 20)
{//若對方(被攻擊者)有穿編號為XXX的裝備 有20%的機率發動 XXX自己設
player.sendPackets(new S_SkillSound(_targetId, 228));    //特效 出現在對方身上
player.broadcastPacket(new S_SkillSound(_targetId, 228));//特效 出現在對方身上
if(!targetPlayer.check_magiclist(68))//如果對方沒聖結界的狀態
{
int timer=30*1000;//聖結界時間
L1SkillUse skilluse = new L1SkillUse();
L1SkillUse.SkillTimer skill = skilluse.new SkillTimer(targetPlayer, 68, timer);
skill.start(); 
targetPlayer.add_magiclist(68, skill);//給對方(被攻擊者)聖結界的狀態
}

}


怪物打我不會出現聖結ㄟ只有玩家打我會出現聖結這要去什麼地方改呢? 
public int NpcPcDamageCalc() 

if(targetPlayer.getInventory().checkEquipped(XXX) && _random.nextInt(100) < 20) 
{
//若對方(被攻擊者)<--就是指我  有穿編號為XXX的裝備 有20%的機率發動 
player.sendPackets(new S_SkillSound(_targetId, 228));    
//特效 出現在對方(指的是我)身上 
player.broadcastPacket(new S_SkillSound(_targetId, 228));
//特效 出現在對方(指的是我)身上 

if(!targetPlayer.check_magiclist(68))//如果對方(指的是我)沒聖結界的狀態 
{
int timer=30*1000;//聖結界時間 
L1SkillUse skilluse = new L1SkillUse(); 
L1SkillUse.SkillTimer skill = skilluse.new SkillTimer(targetPlayer, 68, timer); 
skill.start();  
targetPlayer.add_magiclist(68, skill);//給對方(被攻擊者)<--就是指給我聖結界的狀態 
} 
} 


把紅色的player改成npc就行了,來去試試 

_targetPc.killSkillEffectTimer(997); 
            _targetPc.addSkillEffect(997, 16000); 
            _targetPc.sendPackets(new S_SystemMessage("\u5927\u81EA\u7136\u7684\u7CBE\u9748\u4E4B\u529B\u570D\u7E5E\u8005\u4F60\u3002")); 
            _pc.sendPackets(new S_SkillSound(_targetId, 4540)); 
            _pc.broadcastPacket(new S_SkillSound(_targetId, 4540)); 

這是我的寫法 不過 我的沒有右上角的圖示 只有效果 @@ 可能太簡略了吧QQ 
對NPC的話 

_pc.broadcastPacket(new S_SkillSound(_targetId, 4540));<<這句 
_Npc.broadcastPacket(new S_SkillSound(_targetId, 4540));<<改成這樣 

就是npc對你攻擊會有效果哩 不會卡住 
玩家對玩家要寫在pcpc下面 
怪對玩家要寫在npcpc下面 
希望大大有新的魔法防具效果可以分享哦 

2014年8月8日 星期五

【Java教學】3.63C 戒指問題

ItemTable.java

尋找位址

        _useTypes.put("fishing_rod", new Integer(42)); // 釣魚杆

在下面新增 --->

_useTypes.put("ring3", new Integer(79)); <----編號自已想的
_useTypes.put("ring4", new Integer(80)); <----編號自已想的

日後有比較正確的 ~~~請自行改回去

尋找位址
       _armorTypes.put("guarder", new Integer(13));

在下面新增 --->
     
       _armorTypes.put("ring3", new Integer(19)); //未驗證
       _armorTypes.put("ring4", new Integer(20)); //未驗證

在來到 db 創2隻戒指  type 設 ring3、ring4 等級 min_lvl 看你要不要設定

以上是我惡搞的寫法,非正式,如有錯誤或優化代碼的話,請自行修改





------------
if (type == 9) { // type類型為9是戒指可戴2個,其他都只能戴1個
                        int T9c = pcInventory.getTypeEquipped(2, 9); 

                        equipeSpace = T9c <= 3; 
                        if(! armor.isEquipped()){ 
                                if(T9c==2){ 
                                        if(pc.getLevel()<76){ 
                                                pc.sendPackets(new S_ServerMessage("當前級別只能使用2個戒指。")); 
                                                return; 
                                        } 
                                }else if(T9c==3){ 
                                        if(pc.getLevel()<81){ 
                                                pc.sendPackets(new S_ServerMessage("當前級別只能使用3個戒指。")); 
                                                return; 
                                        } 
                                } 
                        } 
                } else { 
                        equipeSpace = pcInventory.getTypeEquipped(2, type) <= 0; 
                }














------------
實裝4戒指後~
如果套裝有戒指的部份,會產洗能力值的bug.
以營養滿分套裝為例 項鍊 腰帶 戒指 ~
全套能力加:
防禦-3點
體質+1、精神+1、魅力+1
魔防+10%
HP+20、MP+10
體力回復+5、魔力回復+3

產生bug的狀況~
1.先穿戴一套 營養滿分套裝
2.第2顆戒指,也裝備 營養滿分金戒指.(這時已經裝備2顆 營養滿分金戒指)
3.隨便準備一顆戒指(第3顆),裝備後會顯示在LV.76戒指欄位.
4.接著重複 脫穿 第2顆 營養滿分金戒指 ,套裝的效果就會重複的疊加...

請問有大大可以指點一下,如何修正這各bug嗎?
麻煩了,謝謝~!


以下為修正的方法:

L1ArmorSet.java

// リングを2つ装備していて、それが両方セット装備か調べる
                if (armor != null && isSetContainRing) {
                        int itemId = armor.getItem().getItemId();
                        if (pcInventory.getTypeEquipped(2, 9) == 2) {
                                L1ItemInstance ring[] = new L1ItemInstance[2];
                                ring = pcInventory.getRingEquipped();
                                if (ring[0].getItem().getItemId() == itemId
                                                && ring[1].getItem().getItemId() == itemId) {
                                        return true;
                                }
                        }
                        //修正戒指
                        if (pcInventory.getTypeEquipped(2, 9) >= 3) {
                                L1ItemInstance ring[] = new L1ItemInstance[4];
                                ring = pcInventory.getRingEquipped();
                                if ((ring[0].getItem().getItemId() == itemId
                                                && ring[1].getItem().getItemId() == itemId)
                                        || (ring[0].getItem().getItemId() == itemId
                                                                && ring[2].getItem().getItemId() == itemId)
                                        || (ring[0].getItem().getItemId() == itemId
                                                                && ring[3].getItem().getItemId() == itemId)                     
                                        || (ring[1].getItem().getItemId() == itemId
                                                                && ring[2].getItem().getItemId() == itemId)
                                        || (ring[1].getItem().getItemId() == itemId
                                                                && ring[3].getItem().getItemId() == itemId)
                                        || (ring[2].getItem().getItemId() == itemId
                                                                && ring[3].getItem().getItemId() == itemId)) {
                                        return true;
                                }
                        }
                        

                }

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;
    }




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