天堂私服 | GM指令分析 (召喚寵物)「L1J版」
章節用意
summon的指令,此指令用於召喚寵物,或許可以實裝更多道具召喚特別的NPC寵物。
核心版本
- L1J-3.80c
前言
在開始分析前,請務必先將以下文章閱讀完畢。
- GM指令分析 (召喚怪物)
- 了解
L1SpawnUtil的spawn方法行為,有助於了解這邊的分析。
- 了解
分析
效果:召喚一個馴服的NPC。如果您指定名稱,則將設置找到的第一個名稱。
範例:
1 | .summon ${怪物編號 或 怪物名稱} ${數量} |
1.分析資料表:
- 先進入
commands表,找到summon的指令。 class_name是L1Summon。
- 再進入
npc表,找到安塔瑞斯的編號 =45682,用於待會召喚用。1
SELECT * FROM `npc` WHERE `name` = '安塔瑞斯';

- 先進入
2.指令的分析:
- 啟動模擬器除錯模式,並啟動天堂遊戲登入。
- 使用召喚寵物的
GM指令,參數帶入45682=安塔瑞斯,數量 =5。1
.summon 45682 5

3.分析程式碼:
- 透過搜尋
L1Summon開啟程式碼。1
src/l1j/server/server/command/executor/L1Summon.java

36~52行,判斷輸入的參數並去取得NPC的id和數量。- 並判斷是否有找到
npcid,如無則傳送數據回客戶端做顯示找不到符合條件的NPC。。 53行,根據取得的id取得NpcTable資料。NpcTable中的資料來源為,資料表npc,對應的SQL語法如下。1
SELECT * FROM npc
54~57行,根據輸入的參數次數執行迴圈,主要是new L1SummonInstance(npc, pc);。56行,這個summonInst.setPetcost(0);參數,初步了解應該是寵物所占用的魅力值。- 後續的語法較為簡單就不在特別分析。
- 透過搜尋
4.分析程式碼:
- 分析
L1SummonInstance的建構子方法。 - 首先
L1SummonInstance繼承了L1NpcInstance。 - 傳入的參數為
L1Npc template與L1Character master。 127~128行,是父層的建構與設定該物件的id。130行,建立一個schedule計時器SummonTimer,並設定為3600秒。註:
SummonTimer下面再另外分析。132~137行,設定取得主人的位置,計算並寫入寵物的位置、面向..等等。139行,_currentPetStatus,設定寵物狀態。1= 攻撃狀態2= 防禦狀態3= 休息狀態4= 裝備5= 警戒6= 解散7= 前往主人身邊並休息註:以上分析可能有誤,可能需要再參考自行嘗試。
140行,_tamed,設定該寵物是否為迷魅術或造屍術產生的。(主要是針對時間到的時候解散會有不一樣的處理。)142~143這邊兩行特別在前一篇提到:- 將
this,也就是這個L1SummonInstance物件塞入到世界L1World的_allObjects裡面。註:基本上在遊戲看到的所有物件都會塞入到這裡面。
- 將剛剛塞入的
this變成可視。註:此行跑過以後,在遊戲畫面中就可以看到寵物出現了。
- 將
144~146行,依寵物為中心,針對畫面的所有玩家更新寵物感知?(應該就是讓玩家可以識別的物件)147行,最後就是把這寵物新增給該角色下,並顯示寵物控制圖形介面。(為您的角色添加新寵物、召喚怪物、馴服怪物或製造殭屍。)
- 分析
5.分析程式碼:
- 分析
SummonTimer的建構子方法。 - 主要實作的是
Runnable,當計時器3600秒後觸發。 - 判斷分為三個:
- 判斷它是否已經被銷毀。
- 如已經銷毀則不做事。
- 釋放馴服怪物並創造殭屍。
- 如為馴服的怪物則執行
liberate方法。
- 如為馴服的怪物則執行
- 解除召喚。
- 如上述都不是就是召喚的方式,執行
Death方法。
- 如上述都不是就是召喚的方式,執行
- 判斷它是否已經被銷毀。
- 後續接著分析兩個方法。

- 分析
liberate方法。 - 大致分析就是會將被迷魅的怪物的物件做刪除。
- 再次重新建立一個這個怪物出現。

- 分析
Death方法。 - 大致分析就是會將召喚出來的怪物物件做刪除。
- 會判斷召喚的怪物身上是否有物品,如果有的話給主人。(會判斷負重..等等)

- 上方方法中呼叫的
deleteMe這方法,滿有趣的,判斷怪物是否是迷魅的還有一個是否要回歸自然的參數。來決定怪物的消失方式。 - 沒有特別深入去分析,有興趣可以慢慢追。
註:測試方式可以迷魅個怪物來解散、召喚寵物來解散就可以看到不同的行為了。

- 分析
結論
- 程式碼:
src/l1j/server/server/command/executor/L1Summon.java- 處理客戶端來的
GM指令summon的處理。
- 處理客戶端來的
src/l1j/server/server/model/Instance/L1SummonInstance.java- 世界的產生
寵物的實例。 - 內部包含很多寵物的一些方法和
Class。
- 世界的產生
結語
分析過後可以對召喚、寵物,有一些基本的了解。其實跟召喚怪物是差不多的。
主要是多了寵物的一些控制,還有解散的時候的一些處理。
當然其中可以知道寵物死掉或是解散的時候的一些額外判斷和操作,像是寵物身上物品的處理。
原創文章真的不易,希望多多支持,感謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章節目錄。
免責聲明
- 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
- 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有。
- 本部落格文章為研究SQL資料庫與修改JAVA語法使用,並非商業用途,亦無做營運事實等任何一切商業行為。
- 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容!
