新增飛天椅子
什麼是飛天椅子呢?舉些例子就是各個星球椅子、星座椅子還有什麼溜滑梯、摩天輪…等,這些都可以在高版本服裡面找到,這邊就分享幾個我實測能用的飛天椅子和椅子的代碼:
[星球椅子]
3015564 太陽;
3015572 海王星;
3015571 天王星;
3015570 土星;
3015568 火星;
3015567 地球;
3015566 金星;
3015565 水星 [星座椅子]
3015017 雙魚座;
3015018 雙子座;
3015019 巨蟹座;
3015020 獅子座;
3015021 天秤座;
3015022 天蠍座;
3015023 處女座;
3015024 射手座;
3015025 摩羯座;
3015026 水瓶座
⭐⭐⭐想看有哪些椅子可以找:【情報】椅子外型總覽,每張椅子的代碼也有附上。⭐⭐⭐
至於怎麼從高版本WZ中添加新的椅子到低版本中,這個我之前有發過文章教學了,還不會的可以看一下:
新增時的幾點注意事項:
⚡椅子都放在 Item – install 的 0301.img (高版本會有更多位,比如 03011.img 03012.img … 低版本就都放在 0301.img 裡面就可以)。
⚡確定飛天椅子的方式是:看 info 節點裡面有沒有 tamingMob。
⚡除了椅子的WZ要搬之外,tamingMob 也要搬,tamingMob 放在 Character.wz 裡面。
⚡低版本貌似不支援 tamingMob 198開頭,所以從新版本搬過來的時候需要自行新增 193開頭的 img (就順著之前193開頭最後一個 tamingMob id 再往後新增就好)。這個我不確定,如果有人知道怎麼解決可以在評論區補充~
比如 03016215 這個椅子的 tamingMob 是 1983529,我們就打開 Character.wz 找到 tamingMob – 1983529.img 把它搬到自己服的 Character.wz – tamingMob 裡面就可以。
修改 SRC
定義飛天椅子
首先我們先到 src/constants/GameConstants.java 裡面隨便找個地方加上下方程式碼。
這段程式碼的意思是:
- isFlyChair 方法傳入的參數是椅子的 id;回傳的是 tamingMob id
- switch case 判斷哪張椅子回傳哪個 tamingMob id
- 如果椅子 id 不在裡面就會 return 0,即不調用坐騎特效。
- 每新增一個椅子就再加上一個 case 就好。
// 是否為飛天椅子
public static int isFlyChair(int ItemId) {
switch (ItemId) {
case 3015564: // 太陽椅子
return 1933256;
case 3015570: // 土星椅子
return 1933262;
}
return 0; // 不調用
}修改使用椅子的方法
因為我們需要判斷是否為飛天椅子,然後改成坐騎的方式來使用,所以我們會需要在使用椅子的方法中做修改,這個方法會在 src/handling/channel/handler/PlayerHandler.java 裡面。
找到 UseChair 方法,並在裡面找到 chr.setChair(itemId); 這行程式碼,我們需要在它下面加上判斷是否為飛天椅的判斷式:
public static final void UseChair(final int itemId, final MapleClient c, final MapleCharacter chr) {
// ...
chr.setChair(itemId);
// 若使用的椅子 id 包含在飛天椅中就使用坐騎方式;如果不包含在裡面就會回傳 0,跑 else 語句,普通坐椅子的方式
if (GameConstants.isFlyChair(itemId) > 0) {
// 坐騎方式
final List<Pair<MapleBuffStat, Integer>> stat = Collections.singletonList(new Pair<>(MapleBuffStat.MONSTER\_RIDING, 0));
chr.getClient().sendPacket(MaplePacketCreator.giveMount(GameConstants.isFlyChair(itemId), 0, stat));
chr.getMap().broadcastMessage(chr, MaplePacketCreator.showMonsterRiding(chr.getId(), stat, GameConstants.isFlyChair(itemId), 0), false);
} else {
// 普通坐椅子
chr.getMap().broadcastMessage(chr, MaplePacketCreator.showChair(chr.getId(), itemId), false);
}
c.getSession().write(MaplePacketCreator.enableActions());
}在 src/client/MapleClient.java 找到 sendPacket,修改成:
public void sendPacket(MaplePacket packet) {
getSession().write(packet);
}