妖精魔法施放時繞過屬性檢測的方法
先說 我想寫的不是全屬性都可以學的精靈技能。我想做的是,妖精一樣要選一系魔法學,該系魔法就能正常學習
另外做一份祝福精靈魔法水晶,祝福的精靈魔法水晶則在學習的時候繞過屬性檢查
作法是在com\lineage\data\item_etcitem\skill下的Skill_SpiritCrystal_Earth(Fire、Water、Wind)下新增如果水晶是祝福的就繞過屬性檢查
final int bless = item.getBless();//抓精靈水晶的祝福狀態(0,1,2)
} else if (bless == 1 && pc.getElfAttr() != 1) { //如果 bless 為 1,則只允許地屬性
final S_ServerMessage msg = new S_ServerMessage(684); // 屬性系列不同無法學習。
pc.sendPackets(msg);
壓回核心後確實是可以藉由祝福精靈水晶學習到其他屬性的技能,然而....學到的他屬技能確是暗著,無法使用
原本想說會不會是施放技能的時候被屬性檢查擋住了,去\com\lineage\server\model\skill\SkillUse下看
if ((_skill.getSkillLevel() >= 17) && (_skill.getSkillLevel() <= 22) //精靈魔法等級
&& (magicattr != 0) // 如果不是無屬性魔法
&& (_player.getElfAttr()<0) // <<~~把這段判斷直接拿掉
&& !_player.isGm()) { // 如果角色不是GM
return false; // 則回傳false
} //由於以上判斷式都是用&&連接,因為角色屬性不可能<0,所以理論上不可能回傳false,應該都會是TRUE
return true;
但還是一樣...學完的別屬技能還是暗著無法使用。
不知道有沒有大大可以指點一下我還有哪個核心應該要看一下改一下的嗎?
或是有沒有同好願意一起交流的?
測試你版本GM 全技能指令
無屬性測試一次 選屬性再測試一次
觀察亮燈情況
如果GM指令 可以全屬性都亮
那其他屬性水晶 就可改用GM指令那邊的語法了 你是說把
} else if (nameId.equalsIgnoreCase("$3265")) {// 精靈水晶(體能激發)
// 技能編號
skillid = EXOTIC_VITALIZE;
// 分組
magicLv = 15;
}
// 檢查學習該法術是否成立
Skill_Check.check(pc, item, skillid, magicLv, attribute);
如果是用祝福的精靈水晶,就把最後這段檢查學習法術是否成立的語法,直接改成GM加技能的方式嗎?
for (cnt = 129; cnt <= 176; cnt++) {// エルフ魔法
final L1Skills l1skills = SkillsTable.get().getTemplate(cnt); // スキル情報を取得
skill_name = l1skills.getName();
skill_id = l1skills.getSkillId();
CharSkillReading.get().spellMastery(object_id, skill_id, skill_name, 0, 0); // DBに登録
}
把cnt直接改成該顆水晶的編號? yasioukon 發表於 2025-4-10 15:29
測試你版本GM 全技能指令
無屬性測試一次 選屬性再測試一次
觀察亮燈情況
我試著改用GM那邊的寫法
} else if (pc.isElf()) {// 精靈
pc.sendPackets(new S_AddSkill(pc, 255, 255, 127, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
127, 3, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0));
//一般魔法刪掉不貼
for (cnt = 129; cnt <= 176; cnt++) {// エルフ魔法
final L1Skills l1skills = SkillsTable.get().getTemplate(cnt); // スキル情報を取得
skill_name = l1skills.getName();
skill_id = l1skills.getSkillId();
CharSkillReading.get().spellMastery(object_id, skill_id, skill_name, 0, 0); // DBに登録
}
我把上面IMPORT放過去,應該沒缺索引
然後地水晶裡面改成
else if(bless == 0 && pc.getElfAttr() != 1) { //新增一段判斷如果水晶為祝福,套用GM方法學習
pc.sendPackets(new S_AddSkill(pc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //這邊照抄GM的L1AddSkill
127, 3, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0));
int Sid = 0; //Sid要對應到精靈魔法等級(129~176)
String skill_name = ""; // 因為一次只學一顆水晶
int skill_id = 0; // 所以把FOR拿掉照抄裡面的
final int object_id = pc.getId(); // 取得角色ID
//然後把水晶的判斷取得Sid
if (nameId.equalsIgnoreCase("$1840")) {// 精靈水晶(大地防護)
Sid=151;
} else if (nameId.equalsIgnoreCase("$1841")) {// 精靈水晶(地面障礙)
Sid=152;
} else if (nameId.equalsIgnoreCase("$1846")) {// 精靈水晶(大地屏障)
Sid=157;
} else if (nameId.equalsIgnoreCase("$1848")) {// 精靈水晶(大地的祝福)
Sid=159;
} else if (nameId.equalsIgnoreCase("$1856")) {// 精靈水晶(鋼鐵防護)
Sid=168;
} else if (nameId.equalsIgnoreCase("$3265")) {// 精靈水晶(體能激發)
Sid=169;
//以下略,反正妖精有屬性的全抄進來
} //最後用跟GM的L1AddSkill一樣的寫法去登錄DB
final L1Skills l1skills = SkillsTable.get().getTemplate(Sid); // スキル情報を取得
skill_name = l1skills.getName();
skill_id = l1skills.getSkillId();
CharSkillReading.get().spellMastery(object_id, skill_id, skill_name, 0, 0); // DBに登録
--------------------------------------------------------------------------------------------------------------------------------
然而....結果一樣
主屬的還是可以用,非主屬的就算學了還是一樣按的,沒辦法施展QQ
求救RRR~~~
所以才說你要先測試GM技能指令
沒選屬性 有選屬性 亮燈有沒有差 嗯嗯....
剛剛用GM指令測了
一樣是選的屬性才是亮燈
沒選的屬性都是暗的,跟我用祝福水晶學的其他屬技能一樣QQ
請問有解嗎 OAO GM人物完全沒選屬性也要測
沒屬性 是亮哪個屬性
全屬性亮燈 還是全沒亮 我是用GM直接去測
不選屬性時加全技能,一般魔法跟無屬魔法正常
屬性魔法全學但全暗。
這時候去選魔法就那系會亮,其他一樣暗。
然後遺忘,屬性魔法全消失(正常)
再選一個屬性(水),再加一次全技能
但一樣只有選的屬性(水)會亮,其他屬性一樣學了但是暗的 如果你的版本 GM不管有沒有選屬性都有暗燈
那就要看S封包 那邊應該有寫屬性判斷 請問....
S封包指的是哪一塊QQ 技能格子亮或暗什么的,与核心代码无关,请修改主程式相关的UI文件…… 阿.....?
所以注定修改無望了嗎 OAO...
我還以為繞過學習限制就可以用了說QQ 就是你本身屬性是什麼
他會送出一個S包到主程式接收
假設無屬性 是送出0
那他就會讓四個屬性都暗燈
那可能火是送出1
那他就會讓火屬性的亮燈
以此類推
所以才叫你先測試GM技能指令
連沒選屬性 都無法全亮
就代表他是每種屬性1對1
0不能包含所有屬性 這樣
所以 就可能要從接收端改
不管收到什麼 都判斷同屬或無屬 yasioukon 發表於 2025-4-12 09:47
就是你本身屬性是什麼
他會送出一個S包到主程式接收
看不太懂...
請問這個封包是哪裡送出來的,是送到遊戲的主程式?
那是不是只要改送出的這個封包就可以讓程式的燈全亮?
如果是的話這段封包在哪邊改呢?
他的意思是,游戏本身有没有提供精灵属性全开的功能,所以让你用GM测试,如果GM也只能一种属性的话,那么基本就没有这种功能。
技能点击使用,其实本质上就是一种按钮,首先你要过客户端的逻辑判断,才能发送封包给服务器,现在你连客户端的逻辑判断都过不去,技能是灰的,点不了,那么服务器怎么改也无济于事。
一般来说网游都会这么做,客户端先判断一遍,客户端通过了才让服务器判断,不然什么都交给服务器判断,你一秒点狂点按钮一百次,岂不是人肉攻击啦。
假设你现在主属性是风属性。
现在就看客户端是怎么锁的,如果客户端是靠服务器端提供的技能属性锁的,那么你可以尝试欺骗客户端,比如告诉客户端烈焰之魂是风属性,看看核心有没有这个封包。
当然客户端也有可能是根据技能名字和或者ID写死锁的,那么你可能需要修改烈焰之魂的名字或ID。
当然以上情况,都极有可能造成逻辑上的错误,这个需要修复,但是如果有表现上的错误,那么就麻烦了(比如假设客户端写死了风属性的释放特定特效之类的,然后你烈焰之魂出个风特效,可能怪怪的)。
还有一种可能,就是客户端是根据格子序号锁死的,那么你看看你服务器能不能修改不同技能所在格子的位置,把他们换一换,如果客户端也所在位置都是按照技能写死的,那也麻烦了。
最后一种办法就是,把其他你能使用但是你看不上的技能,改核心逻辑,改成你想要技能的效果,但是可能图标改不了,特效有没有问题也难说。
所以你修改的难度,取决于客户端的写死程度。 感謝解惑~
看起來主程式是動不了了~ 技術不到家~
現在看起來的替代的構思方案是
做兩份精靈水晶,一份詛咒的可交易,圖樣是精靈水晶但其實類似盒子概念(限制妖精使用)
妖精角色使用後轉變(盒子開出)祝福的精靈水晶(綁定),用道具觸發魔法的方式去實行
就只是把本來在技能格子變成道具格子了 你可以去抽檔技能XML
(改內容需要加解密工具 論壇看有沒有)
把 屬性標籤改掉 吃檔覆蓋看看 目前是...把水晶直接做成道具施放
但指定目標的會有問題
如果目標直接指定自己沒問題
但是如果是要選取框框的沒辦法跳出框框
比如精準射擊,汙濁之水這種....
參考了光箭魔法卷軸的寫法,但不知道為什麼就是跳不出框框qq
框框要改道具使用類型
只參考classname內容是不行的 yasioukon 發表於 2025-4-21 18:04
框框要改道具使用類型
只參考classname內容是不行的
我......終於看懂大大這句話了~XD
本來一直在核心搞半天,一直不理解到底哪裡類型弄錯了....
原來答案就在DB上...要在使用該道具的時候就只派它觸發類型
先有觸發方式是選定目標,才去執行CLASSNAME的技能觸發
感謝指點~~~XD
頁:
[1]
2