您当前位置: 天堂123 > 天堂架設 > 天堂私服出生人物道具設定方法

天堂私服出生人物道具設定方法

2021/12/25

1.分析資料表:

在茫茫的資料庫中,先觀察所有的表名,會發現一個beginner的表名(beginner = 初學者),點進去看資料如下圖。

進入遊戲建立一個人物(法師)進入遊戲,觀察身上物品。
發現有象牙塔短劍、象牙塔魔杖、象牙塔單手劍、說話卷軸、兩根蠟燭。

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

比對資料表內的資料和身上物品。
發現資料表中的activate = A 的與 = K 的物品是相對應。

由此可以假設activate對應的是職業。
註:其他的欄位的用途,其實透過命名大概都可以猜測的,後面會補充。

2.分析程式碼:

根據猜測beginner為表名,那透過此關鍵字去找尋程式碼,基本上也可以找到相對應的程式。
這邊使用Ctrl + Shift + F,搜尋。
輸入beginner,找尋到有在SELECT此張表的語法程式,發現下面這支程式。
src/l1j/server/server/model/Beginner.java

開啟後分析程式碼。

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

再次嘗試將值帶入並在SQL工具執行並查看結果。
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。
INSERT 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 = 40126
SELECT * FROM etcitem WHERE name = '鑑定卷軸';

於beginner內新增一筆資料對應為全部職業 activate = A
執行下方SQL語法,新增資料。
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語法,修改資料。
UPDATE `beginner` SET `count` = 50 WHERE `id` = 36;

確認beginner是否鑑定卷軸的資料count是否變更為50。

進入天堂並建立新的人物(法師)。
可以看到身上已經有鑑定卷軸五十張了。

結語
第一篇的核心分析修改就花了我一堆時間來撰寫文章,希望分析的越是清楚簡單,讓新手們可以盡量簡單學習