您当前位置: 天堂123 > 天堂架設 > 天堂GM指令分析召喚怪物

天堂GM指令分析召喚怪物

2021/12/10

效果:傳送到指定spawnid的坐標。
範例:

.tospawn ${spawnid}
.tospawn +
.tospawn -
1.分析資料表:

先進入commands表,找到tospawn的指令。
class_name是L1ToSpawn。

再進入spawnlist表,看到id = 1,此編號為青蛙。
注意到count = 1,表示怪物量為1;如為0表示不會生怪。
以下是資料欄位的用途分析:
id = 編號
location = 名稱
count = 數量
npc_templateid = 對應npc的編號
group_id = 群怪代碼(例:精銳 黑騎士)
locx = 中心點X座標
locy = 中心點Y座標
randomx = 隨機X座標
randomy = 隨機Y座標
locx1 = 誤差座標X,請設定地圖的最左上角(↖)的座標(參照mapids.startX)
locy1 = 誤差座標Y,請設定地圖的最左上角(↖)的座標(參照mapids.startY)
locx2 = 誤差座標X,請設定地圖的最右下角(↘)的座標(參照mapids.endX)
locy2 = 誤差座標Y,請設定地圖的最右下角(↘)的座標(參照mapids.endY)
heading = 面向
min_respawn_delay = 最小出生時間 (單位/秒)
max_respawn_delay = 最大出生時間 (單位/秒)
mapid = 地圖編號
respawn_screen = 人物在畫面內是否生怪 (0 = 是, 1 = 否)
movement_distance = 離開出生點多遠會自動順移回原地
rest = 不清楚
near_spawn = 不清楚

這邊我們多注意一張資料表spawnlist_npc
這張表為創見的所有一般的NPC的清單;例:初級傳送師, 商店..等等。

注意,理論上這兩張表的id不應該有重複的。
2.指令的分析:

啟動模擬器除錯模式,並啟動天堂遊戲登入。
使用前往怪物的GM指令,參數帶入1 = 青蛙 的位置。
.tospawn 1

3.分析程式碼:

透過搜尋L1ToSpawn開啟程式碼。
src/l1j/server/server/command/executor/L1ToSpawn.java

註:程式碼內的L1Teleport的teleport方法,已於GM指令分析 (移動)分析完畢,此處將不再分析。

41~54行,用於取得記憶上次所使用的id與分析指令的參數。
如參數為 + 則將上次的 id 加上 1。
如參數為 - 則將上次的 id 減去 1。
註:這邊可以方便使用.r的方式來執行上次的指令並加上參數。例:.r +或.r -。
註:如果忘記.r怎麼來的,可以參考此篇GM指令的程式碼邏輯分析。

55~58行,根據取得的id取得spawn資料。
注意到取得spawn資料有一個先後順序,如為null,才繼續取。
首先取得NCP的資料。
次要取得怪物的資料。
註:這就是為什麼上面說,理論上兩張表的id不該重複。

後續會繼續分析NpcSpawnTable與SpawnTable是如何取得的和一些條件判斷。
59~65行,就是單純的使用teleport方法傳送,這邊就不在特別分析。
66行,記憶所使用的id。
4.分析程式碼:

首先我們分析NpcSpawnTable。

可以知道資料是由資料表spawnlist_npc取得的。
下方還有一些條件判斷和使用的參數式由config取得
Config.ALT_GMSHOP = 設定是否開啟GM商店… True=開啟, False=關閉
Config.ALT_GMSHOP_MIN_ID = 設定GM商店編號最小值設定,可查看在spawnlist_npc內的編號進行設定
Config.ALT_GMSHOP_MAX_ID = 設定GM商店編號最大值設定,可查看在spawnlist_npc內的編號進行設定
Config.ALT_HALLOWEENIVENT = 南瓜怪任務開關設置… True=開, False=關
Config.ALT_JPPRIVILEGED = 日本特典道具NPC開關設置… True=開, False=關
Config.ALT_TALKINGSCROLLQUEST = 說話卷軸任務開關設置… True=開,False=關
分析過後可以知道這些參數於altsettings.properties做設定。

首先我們分析SpawnTable。
可以知道資料是由資料表spawnlist取得的。
下方還有一些條件判斷和使用的參數式由config取得
Config.ALT_HALLOWEENIVENT = 南瓜怪任務開關設置… True=開, False=關

結論
資料表:

資料表及欄位,可於上方分析中有說明。
程式碼:

src/l1j/server/server/command/executor/L1ToSpawn.java
處理客戶端來的GM指令tospawn的處理。
src/l1j/server/server/datatables/NpcSpawnTable.java
世界的產生NPC對應表。
src/l1j/server/server/datatables/SpawnTable.java
世界的產生怪物對應表。