Class WzDataInitializer

java.lang.Object
tools.wztosql.WzDataInitializer

public class WzDataInitializer extends Object
開服前的 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)。
  • Method Details

    • ensureDumped

      public static void ensureDumped()
      開服前呼叫(簽章與呼叫點維持不變)。委派給 refresh(),但吞掉所有例外,確保 即使偵測/匯入失敗也不擋開服(沿用舊行為:失敗就讓後續載入流程自行處理空表)。
    • refresh

      public static WzDataInitializer.Result refresh() throws Exception
      偵測 wz/ 變更並刷新 wz_* 快取(不負責重載入記憶體快取,那由呼叫端決定)。
      Returns:
      各分類的處理結果摘要。
      Throws:
      Exception