客户端

扫码查看

手机触屏版

分享
查看: 364|回复: 0

[其他] 【天堂1】游戏怎么修改让怪物放魔法

[复制链接]

【天堂1】游戏怎么修改让怪物放魔法

发表于 2023-9-6 09:26:17 来自 其他 阅读模式 倒序浏览
364 0 查看全部
我拿我使用的核心來教學!!這是protoplast大大所發的核心!


一種怪物可以讓他使用兩種魔法
有5種分分類
單體魔法、範圍魔法、全畫面魔法、召喚魔法,特殊魔法

要讓怪物使用魔法就重上面五種攻擊方式選兩種搭配
但是有些會有搭配會導緻隻有一種魔法效果

單體魔法+範圍魔法,範圍魔法就會失效   
全畫面魔法+召喚魔法,全畫面魔法就會失效

但是如果用範圍+全畫面、單體+全畫面,單體+召喚就能正常使用兩種魔法!

現在開始教學如何改! 請看註解!!
PS.請用eclipse去改! 不要用JC會很多錯!
首先!
付费内容
游客,您好!如果您要查看本帖隐藏内容请向楼主支付5青币


改完之後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的結果)


Copyright © 2001-2024, Tencent Cloud.Comsenz Inc. Powered by Discuz! X3.5