Class WzDataInitializer
java.lang.Object
tools.wztosql.WzDataInitializer
開服前的 WZ 資料自動補齊 + 變更偵測快取刷新。
道具 / 任務 / 怪物技能 / OX 的「定義資料」放在 wz_* 資料表,由 tools.wztosql 下的 dump
工具從 wz/ 產生(不是由 sql/twms149.sql 帶入)。若這些表是空的(例如全新資料庫,或換機器
只匯入了 schema),伺服器會載入 0 筆道具,導致人物進遊戲完全沒有裝備。
本類別由 Start.run() 在載入內容資料前呼叫
ensureDumped()。早期版本只在「資料表為空」
時才匯入,所以改了 wz/ 下的 XML 後不會反映到快取。現在改為「變更偵測」:以各分類來源檔的
mtime+size 算出一個確定性指紋(不做內容雜湊),與上次存在 wz_cache_fingerprint 的指紋比對,
有變更才重跑對應 dump。道具另外維護 wz_equip_manifest(Character.wz 每件裝備一檔)做增量更新,
只有 Character.wz 變動時可只重解析受影響的那幾件裝備,省去整批重跑。
對應關係:
wz_itemdata → DumpItems (Item.wz / Character.wz / String.wz)
wz_questdata → DumpQuests (Quest.wz)
wz_mobskilldata → DumpMobSkills (Skill.wz)
wz_oxdata → DumpOxQuizData (Etc.wz)
註:wz_customlife 是自訂生物表,平常本就可能為空,故不在自動匯入範圍內。
執行緒模型:Start.run() 在多執行緒載入器之前單執行緒呼叫一次(無併發問題)。!reloadwz GM 指令
另開短命執行緒呼叫 refresh(),本類別內所有 SQL 皆走 DatabaseConnection(ThreadLocal)。-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class累計各分類的處理結果,供 GM 指令回報摘要使用。 -
Method Summary
Modifier and TypeMethodDescriptionstatic void開服前呼叫(簽章與呼叫點維持不變)。static WzDataInitializer.Resultrefresh()偵測 wz/ 變更並刷新 wz_* 快取(不負責重載入記憶體快取,那由呼叫端決定)。