【天堂1】游戏怎么修改让怪物放魔法
我拿我使用的核心來教學!!這是protoplast大大所發的核心!一種怪物可以讓他使用兩種魔法
有5種分分類
單體魔法、範圍魔法、全畫面魔法、召喚魔法,特殊魔法
要讓怪物使用魔法就重上面五種攻擊方式選兩種搭配
但是有些會有搭配會導緻隻有一種魔法效果
單體魔法+範圍魔法,範圍魔法就會失效
全畫面魔法+召喚魔法,全畫面魔法就會失效
但是如果用範圍+全畫面、單體+全畫面,單體+召喚就能正常使用兩種魔法!
現在開始教學如何改! 請看註解!!
PS.請用eclipse去改! 不要用JC會很多錯!
首先!
***本内容需购买可见***
改完之後DB也要改喔!!
打開NPC 找area_atk 這欄!
1=會放一種 2=會2種以上 0=不會放!
PS.怪物的攻擊距離ranged超過2都不會放魔法喔!!
原因不清楚.... 所以弓手類不能放魔法!
龍的魔法屬於特殊魔法!
特殊魔法指的是在攻擊動作中本身就附加魔法圖示的怪物
比如火龍的流星雨、水龍的水壓、風龍的全畫面閃電
這些算是特殊魔法,應為這是附加在攻擊動作上的魔法圖示!
就像是火龍放流星雨時 是丟5顆不同座標的流星雨!
所以沒有魔法編號!!
要改機率的話要打開L1MonsterInstance.java (此為killen大大的教學)
找尋以下原碼!
@Override
public void onAttackSkill() {
int chance = getRnd().nextInt(100) + 1;
if (getNpcTemplate().get_areaatk() == 2 && 95 < chance) {
_attackSkill = 10;
_attackRange = 10;
} else if (getNpcTemplate().get_areaatk() >= 1 && 5 > chance) {
_attackSkill = 6;
_attackRange = 5;
}
}
修改源碼的 95 < chance 和 5 > chance 即可提升施放的機率
95 < chance 數值越低,施展廣範圍魔法的機率越高
5 > chance5 > chance 數值越高,施展方向性魔法的機率越高
建議不要調太高!! 可能導緻當掉的情況!
改為90 < chance 和 10 > chance 就差不多!
4XX以後的核心改法!
因為4XX之後的核心把怪物放魔法DB化!
也變得比較亂...是很亂= =
但改的方式一樣!!
我舉個例子!! 先把很亂的原碼牌整齊!!
我拿rev458的原碼 整理過後!!
變成以下這樣子!
比較好看^^
/*
* if (mobskill == 10 && !is_isdead() && get_currentHp() > 0) {
* if (bid == 45685 || bid == 45684 || bid == 45683 || bid == 45682 || bid == 45681 || bid == 45673 ||
* bid == 45649 || bid == 45671 || bid == 45672) { //堕落、ヴァラカス、パプリオン、アンタラス、リンドビオル、グリムリーパー、デーモン、アリオク、リッチ
* if (bid == 45649) {// デーモン
* broadcastPacket(new S_AttackPacket(target, get_objectId(), 30));
* } else if (bid == 45672) {// リッチ broadcastPacket(new S_AttackPacket(target,get_objectId(), 18));
* } else { broadcastPacket(new S_AttackPacket(target, get_objectId(), 19));
* } areaskill(this, dmg, 10);
* } else if (bid == 45569 || bid == 45573 || bid == 45583 || bid == 45601 || bid == 45651 || bid == 45679 ||
* bid == 45499 || bid == 45604 || bid == 45606) { //這裡是召換怪物的編碼 這裡新增!!
* //バルログのバフォメット、バフォメット、ベレス、デスナイト、魔獣軍王 バランカ、バランカ、バンパイア、マーキス // バンパイア、バンパイア
* int gg =0;
* if (bid == 45569 || bid == 45573)// バルログのバフォメット、バフォメット
* gg = 45107;
* if (bid ==45583)// ベレス gg = 45241;
* if (bid == 45601)// デスナイト
* gg = 45161;
* if (bid ==45651 || bid == 45679)// 魔獣軍王 バランカ、バランカ
* gg = 45357;
* if (bid == 45499 || bid ==45604 || bid == 45606)// バンパイア、マーキス // バンパイア、バンパイア
* gg = 45290;
* if (bid ==45618 || bid == 45664)// ナイトバルド、ナイトバルド
* gg = 45503;
* if (bid == 45569 || bid ==45573 || bid == 45583 || bid == 45601) {// バルログのバフォメット、バフォメット、ベレス、デスナイト//這裡是施法動作
* broadcastPacket(new S_AttackPacket(target, get_objectId(), 18));
* broadcastPacket(new S_SkillSound(get_objectId(), 761));
* } else if (bid ==45651 || bid == 45679 || bid == 45499 || bid == 45604 || bid == 45606) {//魔獣軍王 // バランカ、バランカ、バンパイア、マーキス // バンパイア、バンパイア broadcastPacket(new
* S_AttackPacket(target, get_objectId(), 19)); } else if (bid == 45618 || bid == 45664) {// ナイトバルド、ナイトバルド
* broadcastPacket(new S_AttackPacket(target,get_objectId(), 30));
* broadcastPacket(new S_SkillSound(get_objectId(), 761)); }
* mobspawn(this, gg);
* } else if (bid == 45546 || bid == 45678 || bid == 45609 ||
* bid == 45617 || bid == 45680) { // ドッペルゲンガー、ケレニス、アイス クイーン、フェニックス、ケンラウヘル//這裡是全畫面魔法 這裡新增編號
* intgg = 0;
* if (bid == 45546 || bid == 45678 || bid == 45609)// ドッペルゲンガー、ケレニス、アイス //クイーン
* gg = 2261;
* if (bid == 45617)// フェニックス
* gg = 1793;
* if (bid == 45680)//ケンラウヘル
* gg = 4223;
* if (bid == 45678)// ケレニス
* { broadcastPacket(newS_AttackPacket(target, get_objectId(), 30));
* } else if (bid == 45546 || bid ==45609 || bid == 45617 || bid == 45680)// ドッペルゲンガー、アイス クイーン、フェニックス、ケンラウヘル//施法動作
* { broadcastPacket(new S_AttackPacket(target, get_objectId(), 18)); }
* broadcastPacket(new S_SkillSound(get_objectId(), gg));
* areaskill(this, dmg,10);
* } } else if (mobskill == 6 && !is_isdead() && get_currentHp() > 0) {
* if(bid == 45685 || bid == 45684 || bid == 45683 || bid == 45682 || bid == 45681 ||
* bid == 45673 || bid == 45529 || bid == 45578) //堕落、ヴァラカス、パプリオン、アンタラス、リンドビオル、グリムリーパー、ドレイク、ドレイク
* { Random random1 = newRandom();
* int chance1 = random1.nextInt(100) + 1;
* if (bid == 45685 || bid ==45673 || chance1 < 50 && (bid == 45684 || bid == 45683 || bid == 45682 || bid ==45681))// 堕落、グリムリーパー、ヴァラカス、パプリオン、アンタラス、リンドビオル
* { broadcastPacket(newS_AttackPacket(target, get_objectId(), 18));
* } else if (bid == 45684 || bid ==45683 || bid == 45682 || bid == 45681 || bid == 45529 || bid == 45578)//
* ヴァラカス、パプリオン、アンタラス、リンドビオル、ドレイク、ドレイク {
* broadcastPacket(newS_AttackPacket(target, get_objectId(), 30));
* } sellskill(this, dmg, 6);
* }else if (bid == 45618 || bid == 45664 || bid == 45678 || bid == 45569 || bid ==
* 45573 || bid == 45583 || bid == 45499 || bid == 45604 || bid == 45606 || bid ==
* 45456 || bid == 45456 || bid == 45464 || bid == 45473 || bid == 45488 || bid ==
* 45497 || bid == 45513 || bid == 45515 || bid == 45516 || bid == 45547 || bid ==
* 45600 || bid == 45663 || bid == 45677 || bid == 45671) { //這裡是單體魔法
* ナイトバルド、ナイトバルド、ケレニス、バルログのバフォメット、バフォメット、ベレス、バンパイア、マーキス //
* バンパイア、バンパイア、ネクロマンサー、ネクロマンサー、セマ、バルタザール、カスパー、メルキオール、ゼニス //
* クイーン、イフリート、イフリート、シアー、カーツ、魔霊軍王 ライア、ライア、アリオク
* int gg = 0;
* if (bid == 45464 ||bid == 45456 || bid == 45456)// セマ、ネクロマンサー、ネクロマンサー
* gg = 170;
* if (bid ==45473)// バルタザール
* gg = 129;
* if (bid == 45488)// カスパー
* gg = 171;
* if (bid ==45497)// メルキオール
* gg = 167;
* if (bid == 45678)// ケレニス
* gg = 762;
* if (bid ==45569)// バルログのバフォメット
* gg = 129;
* if (bid == 45573)// バフォメット
* gg = 129;
* if (bid ==45583)// ベレス
* gg = 171;
* if (bid == 45499)// バンパイア
* gg = 236;
* if (bid ==45604)// マーキス バンパイア
* gg = 236;
* if (bid == 45606)// バンパイア
* gg = 236;
* if (bid ==45513)// ゼニス クイーン
* gg = 2810;
* if (bid == 45515)// イフリート
* gg = 1776;
* if (bid ==45516)// イフリート
* gg = 1776;
* if (bid == 45547)// シアー
* gg = 4080;
* if (bid ==45671)// アリオク
* gg = 3924;
* if (bid == 45618)// ナイトバルド
* gg = 762;
* if (bid ==45664)// ナイトバルド
* gg = 762;
* if (bid == 45600)// カーツ
* gg = 10;
* if (bid ==45663)// 魔霊軍王 ライア
* gg = 1805;
* if (bid == 45677)// ライア
* gg = 1805;
* broadcastPacket(new S_UseArrowSkillMob( (L1MonsterInstance) this,target.get_objectId(), gg, target.get_x(), target.get_y()));
* sellskill(this,dmg, 2);
* }else if (bid == 45650 || bid == 45547 || bid == 45601 || bid ==
* 45546 || bid == 45584 || bid == 45610 || bid == 45613 || bid == 45685 || bid ==
* 45545 || bid == 45595 || bid == 45654) { // ゾンビ ロード、シアー、デスナイト、ドッペルゲンガー、グレート //最後是範圍魔法!!
* ミノタウルス、エンシェント // ジャイアント、バルログ、堕落、グレイヴ ガーディアン ナイト、アイリス、アイリス
* int gg = 0;
* if (bid ==45601)// デスナイト
* gg = 245;
* if (bid == 45546)// ドッペルゲンガー
* gg = 1819;
* if (bid ==45584)// グレート ミノタウルス
* gg = 2483;
* if (bid == 45610)// エンシェント ジャイアント
* gg = 2483;
* if (bid == 45613)// バルログ
* gg = 245;
* if (bid == 45545)// グレイヴ ガーディアン ナイト
* gg =758;
* if (bid == 45595)// アイリス
* gg = 758;
* if (bid == 45654)// アイリス
* gg = 758;
* if(bid == 45650 || bid == 45547 || bid == 45601)// ゾンビ // ロード、シアー、デスナイト {
* broadcastPacket(new S_AttackPacket(target, get_objectId(), 19));
* if (bid ==45601)// デスナイト
* { broadcastPacket(new S_SkillSound(get_objectId(), gg)); }
* areaskill(this, dmg, 6);
* } else if (bid == 45546 || bid == 45584 || bid == 45610 || bid == 45613) {// ドッペルゲンガー、グレート ミノタウルス、エンシェント // ジャイアント、バルログ
* broadcastPacket(new S_AttackPacket(target, get_objectId(), 18));
* broadcastPacket(new S_SkillSound(get_objectId(), gg));
* areaskill(this, dmg,6);
* } else if (bid == 45685) {// 堕落 broadcastPacket(newS_AttackPacket(target, get_objectId(), 12));
* areaskill(this, dmg, 6);
* } elseif (bid == 45545) {// グレイヴ ガーディアン ナイト broadcastPacket(new
* S_AttackPacket(target, get_objectId(), 1)); broadcastPacket(new
* S_SkillSound(get_objectId(), gg)); areaskill(this, dmg, 6);
* } else if (bid ==45595 || bid == 45654) {// アイリス、アイリス broadcastPacket(new
* S_AttackPacket(target, get_objectId(), 30)); broadcastPacket(new
* S_SkillSound(get_objectId(), gg)); areaskill(this, dmg, 6); } } }
*/
4XX以後的版本變得很亂!!
不好看= = 要整理一下!! 可以整理成跟舊版的一樣比較容易懂!!
改的方法一樣!!
關於mobskill DB 部分解析(此為killen大大的解析)
mobid = npc DB的 npcid ,用來判斷這隻怪物會不會放魔法
skilltype = 可以使用的魔法種類
area_act1 , area_ranged1 = 範圍性魔法,不用讀取圖像
area_gfxid2, area_act2 , area_ranged2 = 範圍性魔法,需要讀取圖像
spell_act1 , spell_ranged1 = 方向性魔法,不用讀取圖像
spell_gfxid2, spell_act2 , spell_ranged2 = 方向性魔法,需要讀取圖像
s_summon, ss_gfxid, ss_act = 召喚怪物的魔法
att_type = 設定特殊物攻和遠功的使用與否
att_gfxid1 = att_gfxid1+att_act1 = 需要讀取圖像的特殊物理攻擊(發動機率 < 30)
att_act1 = 特殊物理攻擊,發動機率 < 30
att_act2 = 特殊物理攻擊,發動機率 < 60 到 發動機率 <=30
att_act3 = 特殊物理攻擊,發動機率 < 50
att_act4 = 特殊物理攻擊,發動機率 100%
bow_gfxid, bow_act = 遠距離攻擊,圖像可以指定
關於 skilltype 如何設定數值
1 = 使用範圍性魔法,不用讀取圖像
2 = 使用範圍性魔法,需要讀取圖像
4 = 使用方向性魔法,不用讀取圖像
8 = 使用方向性魔法,需要讀取圖像
16 = 使用召喚術
32 = 四龍發動遠距離魔法時,會對玩家說「XXX 給你安息」
當一個怪物會 1、8、16 這三種魔法類行時
skilltype 就必須設定為 25,這是將三種類型的代號相加的值(1+8+16)
如果隻會單一種則直接輸入該類型代號即可
關於 att_type 如何設定數值
1 = 使用att_act1
2 = 使用att_act2
4 = 使用att_act3
8 = 使用att_act4
16 = 使用att_act1 + att_gfxid1
32 = 使用遠距離攻擊, bow_gfxid + bow_act
當一個怪物會 1、4、32 這三種魔法類行時
skilltype 就必須設定為 37,這是將三種類型的代號相加的值(1+4+32)
如果隻會單一種則直接輸入該類型代號即可
DB 其他欄位的設定說明
area_act1, area_act2,spell_act1, spell_act2, ss_act :
用來設定怪物施展魔法時,要做的動作代號
att_act1, att_act2, att_act3, att_act4, bow_act
用來設定怪物發動特殊攻擊時,要做的動作代號
area_ranged1, area_ranged2,spell_ranged1, spell_ranged2 :
表示射程或範圍
area_gfxid2,spell_gfxid2, ss_gfxid, att_gfxid1, bow_gfxid:
表示魔法或攻擊特效的代號
s_summon
要召喚的怪物的代號,請輸入npc DB的 npcid 3
注意:墮落的s_summon設定為0是因為他會召五種怪物,所以判斷是直接寫在源碼裡的
設定後 npc DB 當中 area_atk 的設定方法
當怪物隻會單一或複合的 4 , 8 和 32(skilltype)這三種魔法,npc DB 當中 area_atk 請設定為 1
如果會其他魔法或綜合多種(含全部skilltype代碼),npc DB 當中 area_atk 請設定為 2
當怪物會特殊物理攻擊和遠距離攻擊,npc DB 當中 area_atk 請設定為 4
但是如果怪物會多種,像是會 1 和 4,npc DB 當中 area_atk 就請設定成5 (1+4的結果)
页:
[1]