天堂123分類:天堂123新手區 天堂123玩家分享 天堂123私服技巧 天堂123架設教學 返回天堂123首頁
您当前位置: 天堂123 > 天堂架設 > 私服使用GM指令限等贈送物品

私服使用GM指令限等贈送物品

2022/6/7

效果:創建一個物品並指定等級範圍將其放入個人倉庫;對於無法強化的物品,指定強化的數值將被忽略。
範例:

.lvpresent ${minlvl} ${maxlvl} ${道具編號} ${強化等級} ${數量}
1.分析資料表:

先進入commands表,找到lvpresent的指令。
class_name是L1LevelPresent。

2.調整角色資料

修改資料表欄位characters.level、characters.Exp調整角色等級與經驗值。
等級對應的Exp經驗值,可以查看src/l1j/server/server/datatables/ExpTable.java內。
/**
 * 経験値テーブル(累積値) Lv0-100
 */
private static final int _expTable[] = { 0, 125, 300, 500, 750, 1296, 2401,
4096, 6581, 10000, 14661, 20756, 28581, 38436, 50645, 0x10014,
0x14655, 0x19a24, 0x1fd25, 0x27114, 0x2f7c5, 0x39324, 0x44535,
0x51010, 0x5f5f1, 0x6f920, 0x81c01, 0x96110, 0xacae1, 0xc5c20,
0xe1791, 0x100010, 0x121891, 0x146420, 0x16e5e1, 0x19a110,
0x1c9901, 0x1fd120, 0x234cf1, 0x271010, 0x2b1e31, 0x2f7b21,
0x342ac2, 0x393111, 0x3e9222, 0x49b332, 0x60b772, 0x960cd1,
0x12d4c4e, 0x3539b92, 0x579ead6, 0x7a03a1a, 0x9c6895e, 0xbecd8a2,
0xe1327e6, 0x1039772a, 0x125fc66e, 0x148615b2, 0x16ac64f6,
0x18d2b43a, 0x1af9037e, 0x1d1f52c2, 0x1f45a206, 0x216bf14a,
0x2392408e, 0x25b88fd2, 0x27dedf16, 0x2a052e5a, 0x2c2b7d9e,
0x2e51cce2, 0x30781c26, 0x329e6b6a, 0x34c4baae, 0x36eb09f2,
0x39115936, 0x3b37a87a, 0x3d5df7be, 0x3f844702, 0x41aa9646,
0x43d0e58a, 0x45f734ce, 0x481d8412, 0x4a43d356, 0x4c6a229a,
0x4e9071de, 0x50b6c122, 0x52dd1066, 0x55035faa, 0x5729aeee,
0x594ffe32, 0x5b764d76, 0x5d9c9cba, 0x5fc2ebfe, 0x61e93b42,
0x640f8a86, 0x6635d9ca, 0x685c290e, 0x6a827852, 0x6ca8c796,
0x6ecf16da, };
註:0x開頭的表示為16進制,例:0x10014表示10014的十六進制 = 65556的十進制。提供一個進制轉換網站

線上GM = 99, 1823000470
路人甲  = 52, 127941146

2.指令的分析:

啟動模擬器除錯模式,並啟動天堂遊戲登入兩個帳號。
線上GM
路人甲
首先確認路人甲道具欄、倉庫的內容。
倉庫無任何物品、身上無骰子匕首。

線上GM使用限等贈送的GM指令,指定等級範圍為52~60的,送一把+10 骰子匕首。
.lvpresent 52 60 2 10 1

再次確認路人甲道具欄、倉庫的內容。
倉庫依舊無任何物品、身上無歐西斯匕首。

將路人甲重新登入。
再次確認路人甲道具欄、倉庫的內容。
倉庫已經有骰子匕首。

將骰子匕首領取並鑑定。

確認線上GM道具欄、倉庫的內容。
可以發現並沒有骰子匕首。
這是因為等級不在這範圍內。
如果將等級範圍修改為52~99。
.lvpresent 52 99 2 10 1
將兩個人物重新登入確認倉庫,會發現兩個帳號倉庫都有一把骰子匕首。
至此可以確認限等贈送指令,是將判斷腳色等級將物品放置倉庫內。
3.分析程式碼:

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

多數的程式碼與前一篇已經分析完成,這邊指特別點出等級飯為判斷的語法。
50行,為主要的邏輯操作,可見使用的是L1DwarfInventory的present方法。
並將minlvl, maxlvl兩個參數帶入。
Ctrl鍵壓住,再左鍵點擊present方法即會開啟跳轉到物件與方法位置。
237行,SQL語法查詢有帶入等級範圍的條件,最後將取得的account存放在一個accountList物件內。
SELECT distinct(account_name) as account_name FROM characters WHERE level between ? and ?

後續的行為基本上於前一篇都是一樣的,這邊就不再列出。