【3.A.S.T】网络安全爱好者's Archiver

黑客学习

超超 发表于 2008-10-7 14:27

【天堂1】修改魔法武器

【分享&告別】新種類的魔法武器~
本帖被 waja 执行加亮操作(2007-08-10)
以前的舊版魔法武器是寫死的~
新版的魔法武器會因為『武卷強數的多寡』做變動~
以下是全碼 +  教學~
還有些變化~ 大大們可以自行運用~
‧加成多少後~ 出現魔法攻擊
‧加成多少後~ 才有範圍性效果~
‧加成多少後~ 有吸血特效? 或麻痹效果?
諸如此類~ 以此類推~


Copy code
        int i = _random.nextInt(100) + 1; // 定義亂數機率
        int j = weapon.getEnchantLevel(); // 取得武器強化數(我的設定是有點有算~ 不用過安定值)
        if(j < 0) //避免武器的負加成
            j = 0;
        int k = j;//避免高加成武器,有太高的發動機率
        if(j > 20)
            k = 20;




Copy code
        if(weaponId == 301 && i < 1 + k) // 強化數k加入機率判斷式
        {
            if(j > 20) // 如果強化超過20
            {
                d += player.get_str() * _random.nextInt(j);
                // 傷害= 角色力量 * 亂數(武卷強化數)
                areaskill(player, (int)d, 3 + j / 10);  
                //區域攻擊格數加入強化數要素( j/10:每10張+一格(去小數))
                player.sendPackets(new S_SkillSound(player.get_objectId(), 4037));
                player.broadcastPacket(new S_SkillSound(player.get_objectId(), 4037));
            } else
            {  // 如果沒有強化超過20
                d += (player.get_str() / 2) * _random.nextInt(j); //不同傷害式
                areaskill(player, (int)d, 2 + j / 10); // 範圍格數初始少1
                player.sendPackets(new S_SkillSound(player.get_objectId(), 4076)); // 不同特效
                player.broadcastPacket(new S_SkillSound(player.get_objectId(), 4076)); // 不同特效
            }
        } else



另外~ 這是小弟研究魔法武器時的參考依據~
一並分享給大大~

Copy code
取得角色職業別:player.get_classId()
男騎士:61
女騎士:48
男法師:734
女法師:1186
王子:0
公主:1
男妖精:138
女妖精:37
男黑妖:2786
女黑妖:2796

範例(傷害公式):

i = weapon; //武器傷害值
j = _random.nextInt(i) + 1; //亂數武器傷害值(+1表不為0)
d = (j + statusDamage + weaponEnchant + weaponDmg) * byte0 + player.get_dmgup();
傷害 = 亂數傷害 +力量修正 +武器加成 +武器附加傷害 *雙擊倍數 +角色傷害修正


自身角色:player
指定角色:targetPlayer
取得力量:.get_str()
取得智力:.get_int()
取得敏捷:.get_dex()
取得等級:.get_level()
取得防禦:.get_ac()
取得目前血量:.get_currentHp()
取得目前魔量:.get_currentMp()
取的攻擊距離:.get_ranged()
取得魔攻修正:.get_magicBonus()
取得迴避修正:.get_ER()
取得傷害修正:.get_dmgup()
取得命中修正:.get_hitup()
取得魔法圖像:.get_objectId()


取得武器:
weaponId = weapon.getItem().getItemId();
weaponType = weapon.getItem().getType1();
weaponHit = weapon.getItem().get_hitmodifier();
weaponDmg = weapon.getItem().get_dmgmodifier();
weaponSmall = weapon.getItem().get_dmgsmall();
weaponLarge = weapon.getItem().get_dmglarge();
weaponBless = weapon.getItem().get_bless();
weaponEnchant = weapon.getEnchantLevel() + weapon.get_durability();
weaponMaterial = weapon.getItem().get_material();


武器類別編碼:

單手劍:weaponId.put("sword", new Integer(4));
匕首:weaponId.put("dagger", new Integer(46));
雙手劍:weaponId.put("tohandsword", new Integer(50));
弓:weaponId.put("bow", new Integer(20));
斧:weaponId.put("blunt", new Integer(11));
槍:weaponId.put("spear", new Integer(24));
仗:weaponId.put("staff", new Integer(40));
飛刀:weaponId.put("throwingknife", new Integer(2922));
箭矢:weaponId.put("arrow", new Integer(66));
鐵手甲:weaponId.put("gauntlet", new Integer(62));
爪:weaponId.put("claw", new Integer(58));
雙刀:weaponId.put("edoryu", new Integer(54));



我要離開私服了~ 大家要多加油~
感謝所有幫助過我的每一張帖子~
感謝所有幫助過我的每一個人~
以私服『JAVA』來說~ 99的確是個好地方~
多努力~ 多嘗試~ 多分享~ 受人點滴~ 回以湧泉~

工程師應該有的名言『Just try it !!』
感謝這些日子來~ 大家的照顧~ 感謝~

********************** 相關連結 **********************

『魔法箭矢』
[url=http://bbs.99nets.com/read.php?tid=547310]http://bbs.99nets.com/read.php?tid=547310[/url]

『新型態魔法武器』
[url=http://bbs.99nets.com/read.php?tid=547258]http://bbs.99nets.com/read.php?tid=547258[/url]

『魔法武器範圍攻擊的區別』
[url=http://bbs.99nets.com/read.php?tid=544132]http://bbs.99nets.com/read.php?tid=544132[/url]

『分享的心態』
[url=http://bbs.99nets.com/read.php?tid=546610]http://bbs.99nets.com/read.php?tid=546610[/url]

『百分百武卷』
[url=http://bbs.99nets.com/read.php?tid=544099]http://bbs.99nets.com/read.php?tid=544099[/url]
另外這一篇~ 我想命名為【神器覺醒】
主要目的就是~
當『裝備』某物品時~ 有魔法特效出現~
並在對話欄出現一段訊息~

Copy code
                if(k == 234) // 小弟新創神兵【封-屠龍】
                {
                l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.sendPackets(new S_SystemMessage("龍的咆哮劃破大地的寂靜。"));
                }else
                if(k == 235)// 小弟新創神兵【妖-噬光】
                {
                l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.sendPackets(new S_SystemMessage("次元的裂縫吞噬光的一切。"));
                }else
                if(k == 236)// 小弟新創神兵【逆-噬魂之黑】
                {
                l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.sendPackets(new S_SystemMessage("靈魂的弒殺才是破壞的真理。"));
                }else
                if(k == 237)// 小弟新創神兵【偽-龍戚弩斯】
                {
                l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.sendPackets(new S_SystemMessage("龍戚弩斯之力凝聚在箭尖。"));
                }else
                if(k == 238)// 小弟新創神兵【賦-亞特蘭提卡】
                {
                l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.sendPackets(new S_SystemMessage("支配四元素之力從靈魂甦醒。"));
                }else
                if(k == 239)// 小弟新創神兵【雷-克萊伊特】
                {
                l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
                l1pcinstance.sendPackets(new S_SystemMessage("以宙斯之名賦與傲視之力。"));
                }else


但小弟失敗了~
無法以『使用道具』的寫法來完成~
謹附上依據~ 希望有大大能接力並且分享~

B大~小弟對您未完成的那一篇做了個實驗,其實是可以的,小弟JAVA不是很好,提供大家一點意見,希望有人可以一起完成他,看了一下發現在道具上面有這行
int k;
        try
        {
            k = l1iteminstance.getItem().getItemId();
        }
這跟大大您留下來的數據來比較的話...我個人拙見是,這排的意思應該是k等於是道具類,所以if(k == 238)可以解讀成,我要賦予道具編號238一些能力,{}<==這個是等於附加能例如括號裡面這些,
所以是不是有辦法自下一個符號來代表武器,例如
int e;
        try
        {
            e = weapon.getItem().getItemId();
        }
可是小弟我也是失敗了,不過我把他換到套裝那部份來試試看,在套裝的部分改成
if(itemid == 20010)
                    {  
                activeChar.sendPackets(new S_SystemMessage("以宙斯之名賦與傲視之力。"));
                    activeChar.broadcastPacket(new S_SystemMessage("以宙斯之名賦與傲視之力。"));
                }
只要改一個就可以了,實驗成功,當我裝上死騎頭盔的時候確實有"以宙斯之名賦與傲視之力"的字出現,套裝這欄是可以成功的,差別在於,他畢竟是防具套裝,不包含武器,如果有大大能改出,例如裝備武士刀變身死亡騎士,這樣大大你剩下的這邊神器覺醒應該就可以成功了,神器覺醒我失敗了,不過防具覺醒成功了,希望有其他大大可以一起完成武器方面

感謝bear520大大的付出,

在下已經完成了,但並不能算是很好,只是依照防具套裝來改的。

以下是成功後的分享,等等要吃飯了。

在C_RequestItemUSe查詢【private void UseWeapon】
然後在boolean onlyOff = false;下面空行增加以下兩個(暫時做法)
L1PcInstance l1pcinstance = clientthread.getActiveChar();
int itemid = weapon.getItem().getItemId();

然後在pcInventory.setEquipped(weapon, true, false, false);下面增加以下(範例)
    if (itemid == 4)//匕首
    {
        l1pcinstance.sendPackets(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
        l1pcinstance.broadcastPacket(new S_SkillSound(l1pcinstance.get_objectId(), 4226));
        l1pcinstance.sendPackets(new S_SystemMessage("TESTING!"));
    }

就這樣,至於上線後再顯示一遍,就很容易了。

[[i] 本帖最后由 3ast 于 2008-10-12 19:08 编辑 [/i]]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.