天堂私服 | GM指令分析 (創立套裝)「L1J版」
章節用意
itemset的指令,此指令是生成套裝的物品,且分析XML設定檔的分析與使用。
核心版本
- L1J-3.80c
分析
在開始分析前,要知道GM指令的指令效果與使用方式,才方便開啟除錯(Debug)進行分析。
效果:生成指定的套裝。
範例:
1 | .itemset ${套裝名稱} |
1.分析資料表:
- 先進入
commands表,找到itemset的指令。 class_name是L1CreateItemSet。
- 先進入
2.分析程式碼:
- 透過搜尋
L1CreateItemSet開啟程式碼。1
src/l1j/server/server/command/executor/L1CreateItemSet.java

- 啟動模擬器除錯模式,並啟動天堂遊戲登入。
- 使用創立套裝的
GM指令。(由於不知道套裝設定的名稱,先帶入1)1
.imteset 1
- 會顯示
1 是未定義的套裝內容。
- 回到IDEA,斷點於
43。 - 回到天堂遊戲內,再次執行創立套裝的
GM指令。1
.imteset 1
- 使用評估表達式
Evaluate Expression來分析GMCommandsConfig.ITEM_SETS。 - 可發現抓取的
key為dkset。
- 點擊
Mute Breakpoints將所有斷點先關閉,
Resume Program恢復程式 - 回到天堂遊戲內,再次執行創立套裝的
GM指令,將1改為dkset。1
.imteset dkset
- 發現創立了
死亡騎士套裝並且全部都是+10(請用鑑定卷軸鑑定)。
- 至此可以知道有設定一個死亡騎士的套裝,並且名稱為
dkset且全部都是+10的。 - 此時我們繼續分析其他程式碼;關於
GMCommandsConfig.ITEM_SETS的部分,後面會分析。
- 透過搜尋
2.分析程式碼:
44~47行,如果套裝不存在,則傳送數據回客戶端做顯示xxx 是未定義的套裝。48~60行。- 取得物品並判斷該物品是否為不可堆疊、物品要強化的等級是不等於
0 - 然後迴圈建立物品於道具欄內,跑第一圈迴圈就會將物品產生且為
+1,會跑到指定的+10。
- 取得物品並判斷該物品是否為不可堆疊、物品要強化的等級是不等於
- 物品的
Id與強化數都存放在GMCommandsConfig.ITEM_SETS內,可見下圖。
3.分析程式碼:(
GMCommandsConfig.ITEM_SETS)- 於
ITEM_SETS上面按右鍵選擇Find Usages。 - 可以看到有對此物件的
put操作,點擊跳轉。1
src/l1j/server/server/GMCommandsConfig.java

- 可以看到程式碼,繼承了抽象類
ListLoaderAdapter。 Override掉loadElement方法。
- 注意到
103行就是操作ITEM_SETS的地方,傳入的值為list。 list是在99行被add,而add的值使用了loadItem(elem)方法與傳入的elem。loadItem方法只是單純建立一個物件存放一些資訊。elem為94行,方法傳入的值loadElement(Element element)。- 針對
loadElement方法上面按右鍵選擇Find Usages。 - 會跳轉到
58行,此段為繼承的抽象類ListLoaderAdapter。
- 可以看到
Override掉load方法。 - 直接在
load方法上面按右鍵選擇Find Usages。 - 會跳轉到
133行。 - 這邊注意到
127行,他有開啟一個xml檔。1
./data/xml/GmCommands/GMCommands.xml

- 直接在核心的資料夾內找到
GMCommands.xml並開啟。
- 可以看到在
GMCommands.xml內容,有ItemSetList和RoomList兩個大區塊。 - 目前我們只要注意到
ItemSetList就好。 - 可以發現剛剛使用的
dkset就在這邊設定。1
2
3
4
5
6
7
8<!-- +10 DKセット(定義サンプル) -->
<ItemSet Name="DKSet">
<Item Id="58" Amount="1" Enchant="10"/>
<Item Id="20010" Amount="1" Enchant="10"/>
<Item Id="20100" Amount="1" Enchant="10"/>
<Item Id="20166" Amount="1" Enchant="10"/>
<Item Id="20198" Amount="1" Enchant="10"/>
</ItemSet> - 對應的是
武器、防具的id、數量、強化值。
- 到此基本上就對創立套裝的指令分析完成。
- 於
結論
- 程式碼:
src/l1j/server/server/command/executor/L1CreateItemSet.java- 處理客戶端來的
GM指令itemset的處理。
- 處理客戶端來的
src/l1j/server/server/GMCommandsConfig.javaGM指令相關的設定檔,透過XML欄設定提供。
./data/xml/GmCommands/GMCommands.xml- 存放
GM指令對應的XML內容。
- 存放
結語
創建套裝的指令,分析過後,可以初步了解到XML的使用與對應,在後面如果要開發新功能或是將較為複雜的設定,都可以透過XML來做開發。
原創文章真的不易,希望多多支持,感謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章節目錄。
免責聲明
- 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
- 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有。
- 本部落格文章為研究SQL資料庫與修改JAVA語法使用,並非商業用途,亦無做營運事實等任何一切商業行為。
- 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容!
