【天堂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]