Like Share Discussion Bookmark Smile

J.J. Huang   2021-09-18   天堂私服   瀏覽次數:

天堂私服 | GM指令分析 (全輔助)「L1J版」

章節用意

透過分析全輔助的指令,來了解程式碼如何實現施放輔助的行為。

核心版本

  • L1J-TW_3.80c

分析

在開始分析前,要知道GM指令的指令效果與使用方式,才方便開啟除錯(Debug)進行分析。

效果:指定角色給予所有輔助魔法。
範例:

1
.allbuff ${角色名稱}
  • 1.分析資料表:

    • 先進入commands表,找到allbuff全輔助的資料。
    • class_nameL1AllBuff
  • 2.分析程式碼:

    • 透過搜尋L1AllBuff開啟程式碼。
      1
      src/l1j/server/server/command/executor/L1AllBuff.java
    • 開啟後分析程式碼。
    • 74~78建立一個陣列,存放需要施放的所有輔助魔法SkillId
    • 滑鼠可以放在隨便一個參數上,可以看到有提示註解,就可以知道是甚麼輔助魔法。
    • 80~86取得指令所要施放的角色名稱是否有在線上。
    • 88這段程式碼,可以發現到有一個haste的方法。
    • 按注鍵盤的Ctrl + 滑鼠左箭點選haste方法,開啟到此方法位置。
    • 76~85在判斷是否已經有加速的狀態在身上,如果有的話,要先將狀態做刪除。

      註:可以深入追一下killSkillEffectTimer方法,嘗試了解狀態是存放在哪、是如何刪除狀態。

    • 87~98是判斷是否有這些負面狀態的魔法在身上,如果有的話,也要將這些狀態做刪除。
    • 100施放加速技能在身上。

      註:可以深入追一下setSkillEffect,裡面包含了addSkillEffect的使用。

    • 102~106是人物動作的表現。
      • sendPackets給客戶端發送數據包。當客戶端收到,你在你的遊戲會面就會看到人物施放法術的動作聲音或是使用道具的動作聲音。
      • broadcastPacket給客戶端發送數據包(廣播),在可視你的人物角色範圍內的其他玩家,都會收到此數據包,會看到你的施法動作聲音或是使用道具的動作聲音。
    • 註:這邊要可以猜測gfxId應該就是對應變身檔的編碼了。
    • 回到L1AllBuff.java
    • 89這段程式碼,可以發現到有一個brave的方法。
    • 按注鍵盤的Ctrl + 滑鼠左箭點選brave方法,開啟到此方法位置。
    • 112~132在判斷是否已經有二段加速的狀態在身上,如果有的話,要先將狀態做刪除。
    • 134施放二段加速技能(勇敢藥水)在身上。
    • 136~141是人物動作的表現。
    • 再回到L1AllBuff.java
    • 90這段程式碼,可以發現到有一個doPoly的方法。
    • 這邊不特別分析講解,主要動作是指定施法變形術為變身檔編碼5641

      註:透過搜尋找到註解,大概可以確認,料庫polymorphs變身代碼表polyid等於圖檔編號。

    • 回到L1AllBuff.java
    • 91~950將需要施放的所有輔助魔法的陣列資料,迴圈施放。
    • 關於L1SkillUse().handleCommands這個方法,內部有很多的判斷與邏輯,建議可以除錯模式進行深入分析。

除錯

這邊針對下方兩個給客戶端發送數據包的行為確認:

  • 畫面說明:

    • 左上方為路人甲
    • 左下方為線上GM
  • 測試行為:

    • 對玩家線上GM執行allbuff的動作。
  • 除錯位置:

    • 一段加速。
      • src/l1j/server/server/model/skill/L1BuffUtil.java(102)
    • 二段加速。
      • src/l1j/server/server/model/skill/L1BuffUtil.java(137)
  • sendPackets給客戶端發送數據包。當客戶端收到,你在你的遊戲會面就會看到人物施放法術的動作聲音或是使用道具的動作聲音。

  • broadcastPacket給客戶端發送數據包(廣播),在可視你的人物角色範圍內的其他玩家,都會收到此數據包,會看到你的施法動作聲音或是使用道具的動作聲音。

結論

  • 資料表:
    • polymorphs應該是變身資料表。
  • 程式碼:
    • src/l1j/server/server/command/executor/L1AllBuff.java
      • 全輔助指令的處理程式。
    • src/l1j/server/server/model/skill/L1BuffUtil.java
      • 處理技能輔助狀態的一些方法。
  • 程式方法:
    • sendPackets發送數據包到客戶端。
      • 通常對應狀態、訊息、動作、聲音…等等。
    • broadcastPacket廣播發送數據包到客戶端。
      • 廣播方式針對主要客戶端其他可視的角色清單做發送數據包。

結語

透過分析全輔助的指令,可以了解的技能的處理。還有人物動作伺服器端與客戶端的溝通的方式。

原創文章真的不易,希望多多支持,感謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章結目錄,此處會不定時更新。

免責聲明

  • 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
  • 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有
  • 本部落格文章為研究SQL資料庫與修改JAVA語法使用,非商業用途,亦無做營運事實等任何一切商業行為
  • 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容