天堂私服 | 人物出生道具分析/修改 (一)「L1J版」
核心版本
- L1J-3.80c
分析
1.分析資料表:
- 在茫茫的資料庫中,先觀察所有的表名,會發現一個
beginner的表名(beginner = 初學者),點進去看資料如下圖。
- 進入遊戲建立一個人物(法師)進入遊戲,觀察身上物品。
- 發現有象牙塔短劍、象牙塔魔杖、象牙塔單手劍、說話卷軸、兩根蠟燭。

- 比對資料表內的資料和身上物品。
- 發現資料表中的
activate=A的與 =W的物品是相對應。 - 在建立一個人物(騎士)進入遊戲,觀察身上物品。
- 發現有兩根蠟燭、說話卷軸、象牙塔單手劍、象牙塔雙手劍、象牙塔斧頭、象牙塔長矛、象牙塔石弓、象牙塔短劍、象牙塔箭筒。

- 比對資料表內的資料和身上物品。
- 發現資料表中的
activate=A的與 =K的物品是相對應。
- 由此可以假設
activate對應的是職業。註:其他的欄位的用途,其實透過命名大概都可以猜測的,後面會補充。
- 在茫茫的資料庫中,先觀察所有的表名,會發現一個
2.分析程式碼:
- 根據猜測
beginner為表名,那透過此關鍵字去找尋程式碼,基本上也可以找到相對應的程式。 - 這邊使用
Ctrl + Shift + F,搜尋。 - 輸入
beginner,找尋到有在SELECT此張表的語法程式,發現下面這支程式。1
src/l1j/server/server/model/Beginner.java

- 開啟後分析程式碼。

- 這邊先關注在第
54行的SQL。1
SELECT * FROM beginner WHERE activate IN(?,?)
- 可見這語法是要搜尋此表,且條件是
activate欄位內,只要是這符合兩個值其中一個的資料。 - 我們嘗試將值帶入並在
SQL工具執行並查看結果。1
SELECT * FROM beginner WHERE activate IN('A','W');
- 可見結果與人物(法師)建立後物品是相對應的。

- 再次嘗試將值帶入並在
SQL工具執行並查看結果。1
SELECT * FROM beginner WHERE activate IN('A','K');
- 可見結果與人物(騎士)建立後物品是相對應的。

- 我們回來關注程式碼的部分
56~73行。 - 程式碼中
56行的1表示對應到第54行的SQL的第一個問號,而後面的就是要替換的值,反之2表示對應的第二個問號。 - 可見程式碼中透過
If判斷是來決定1和2要帶入的值。
- 這邊可以看到類似
pc.isCrown…等等的判斷;讓我們稍微翻譯一下。
- 相信到這邊已經可以分析出判斷職業所要對應的搜尋
SQL語法是怎麼組合了。註:每次的分析和學習都是很重要的,未來在想設計和應用都會有幫助的。
- 繼續分析程式碼,關注程式碼的部分
76~100行。 - 可以看到他將上面對應
SQL結果跑while迴圈。 - 並對應塞入相對應的值於第
79行的SQL。 - 程式碼中
81~93行的數字,就是對應第79行的SQL的問號位置,而後面的就是要替換的值。
- 關注第
79行的SQL。1
2
3
4
5
6
7
8
9
10
11
12
13
14INSERT INTO character_items SET
id=?,
item_id=?,
char_id=?,
item_name=?,
count=?,
is_equipped=?,
enchantlvl=?,
is_id=?,
durability=?,
charge_count=?,
remaining_time=?,
last_used=?,
bless=? - 可以發現會於
character_items這張表中,寫入人物的相對應物品欄的資料。
- 根據猜測
- 分析資料表
- 由於剛剛建立了兩個人物,去看
character_items表中的資料。 - 發現同一組的
char_id對應的物品是可以對應上的。
- 分析資料表資料
- 分析物品對應的
ID,並找尋出相對應的資料表。 - 看到
beginner此表內的第1筆資料。
- 注意到
item_id=40005,想必此流水號一定有對應的資料表。 - 可以在資料庫中找尋到
etcitem這張表。 - 表內的
item_id=40005對應的也是蠟燭。 - 在此可以確定
etcitem這張表為物品的對應表。
- 我們回到
beginner此表內的第21筆資料。
- 此物品為武器,可以在資料庫中找尋到
weapon這張表。 - 表內的
item_id=224對應的也是象牙塔魔杖。 - 在此可以確定
weapon這張表為武器的對應表。
- 當然防具就是
armor啦。
- 分析結論
- 資料表:
beginner設定人物建立後所給的基本物品。character_items為人物身上所擁有的物品資料。etcitem物品對應資料表。weapon武器對應資料表。armor防具對應資料表。
- 程式碼:
src/l1j/server/server/model/Beginner.java用於讀取人物建立基本物品/並寫入人物擁有物品的資料。
修改
增加鑑定卷軸
- 於
etcitem找尋鑑定卷軸對應的item_id item_id=401261
SELECT * FROM etcitem WHERE name = '鑑定卷軸';

- 於
beginner內新增一筆資料對應為全部職業activate=A - 執行下方
SQL語法,新增資料。1
INSERT INTO `beginner` (`item_id`, `count`, `charge_count`, `enchantlvl`, `item_name`, `activate`, `bless`) VALUES (40126, 1, 0, 0, '鑑定卷軸', 'A', 1);

- 確認
beginner是否新增了一筆鑑定卷軸的資料。
- 進入天堂並建立新的人物(法師)。
- 可以看到身上已經有
鑑定卷軸一張了。
- 於
調整鑑定卷軸數量
- 於
beginner內找尋剛剛加入的鑑定卷軸的資料。 - 修改
count的數量 =50。 - 執行下方
SQL語法,修改資料。1
UPDATE `beginner` SET `count` = 50 WHERE `id` = 36;

- 確認
beginner是否鑑定卷軸的資料count是否變更為50。
- 進入天堂並建立新的人物(法師)。
- 可以看到身上已經有
鑑定卷軸五十張了。
- 於
結語
第一篇的核心分析修改就花了我一堆時間來撰寫文章,希望分析的越是清楚簡單,讓新手們可以盡量簡單學習Java、SQL、分析和修改思路…等等,
而此篇章會分成好幾章節進行說明,讓大家一步一腳印慢慢跟隨作者一起分析和學習。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章節目錄。
免責聲明
- 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
- 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有。
- 本部落格文章為研究SQL資料庫與修改JAVA語法使用,並非商業用途,亦無做營運事實等任何一切商業行為。
- 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容!
