[楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120

效果演示

影片:

圖片:

飛天椅 [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120

前言

感覺我很久沒發教學了,久違地來發一下。這個飛天椅的改法是在FB社團裡面看到的,現在基本上每個低版本服都有飛天椅子,所以我也就不私藏了直接分享出來吧,讓大家也能在低版本裡面體會到高版本的快樂🥰

https://www.facebook.com/100002090633036/videos/1912569668822702/

FB社團飛天椅子 [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120

這個改法就是把飛天椅子改成坐騎的形式。

新增飛天椅子

什麼是飛天椅子呢?舉些例子就是各個星球椅子、星座椅子還有什麼溜滑梯、摩天輪…等,這些都可以在高版本服裡面找到,這邊就分享幾個我實測能用的飛天椅子和椅子的代碼:

[星球椅子]
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 裡面就可以。

tamingMob [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120
tamingMob2 [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120

修改 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());
}

不過可能很多人到這步就卡住了😂 我一開以為這樣就解決了,結果坐椅子的時候端口報了 error: sendPacket xxxxxx: Not supported yet.,看了一下是 sendPacket 的問題,檢查才發現原來 sendPacket 原本寫法是強制 throw UnsupportedOperationException,所以不管怎樣都會卡住,自己嘗試修復了一下就可以了。

sendPacket [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120

src/client/MapleClient.java 找到 sendPacket,修改成:

public void sendPacket(MaplePacket packet) {
    getSession().write(packet);
}

講解得應該很詳細了,如果還是不會改我也沒辦法了😂 順便分享一下釣魚也是在 UseChair 裡面寫,有興趣都可以自己玩玩看。

5 1 評分
Article Rating
訂閱
通知
guest
1 Comment
在線反饋
查看所有評論
小白研究摸索
小白研究摸索
5 日 前

詢問一下 取消椅子之後 椅子會消失可是 騎乘的BUFF會存在
我該朝哪個方向 椅子還是 騎寵