Class CommodityXmlConverter
Commodity.img WZ-XML 之間的雙向轉換器(後台 GUI 使用)。
權威資料表為 cashshop_modified_items(伺服器啟動時由 CashItemFactory
讀取),而玩家用戶端則是讀取自身 WZ 的 Commodity.img 來決定商城顯示內容。
本類別讓營運者能在兩者間同步:
exportXml()—— 將cashshop_modified_items匯出為 HaRepacker 風格的Commodity.img.xml(<imgdir name="Commodity.img">根節點、各商品為<imgdir name="索引">、欄位為<int name="SN" value="…"/>等), 供營運者編譯回用戶端 WZ。importXml(String)—— 反向解析既有Commodity.img.xml,以 SN 為主鍵 upsert 進cashshop_modified_items(透過CashItemFactory.saveModifiedItem(int, int, int, int, int, int, int, boolean, int),同步更新記憶體快取)。
匯出採用 v149 用戶端 Commodity.img 的正規欄位順序與結構(CRLF 換行、4 空格縮排、
standalone="yes" 宣告,與 HaRepacker 輸出一致)。伺服器追蹤的欄位直接對應 DB 欄位:
SN→serial、ItemId→itemid、Count→count、Price→discount_price、
Period→period、Priority→priority、Gender→gender、OnSale→showup;
Class→mark 僅在 mark > 0(new/hot/sale 角標)時輸出,與實機資料一致(多數商品無此欄)。
其餘 v149 用戶端欄位伺服器並未使用,依實機 Commodity.img 的主流值以常數輸出:
Bonus=0、ReqPOP=0、ReqLEV=0、PbCash=PbPoint=PbGift=30、
Refundable=1(實機資料統計:PbCash/PbPoint/PbGift 恆為 30,Bonus/ReqPOP/ReqLEV
逾 98% 為 0)。因伺服器不讀取這些欄位、且私服情境下「無等級限制/可退費」為合理預設,
cashshop_modified_items 無需為它們新增欄位。
-
Method Summary
-
Method Details
-
exportXml
將cashshop_modified_items全表匯出為Commodity.img的 WZ-XML 字串。- Returns:
- HaRepacker 風格的
Commodity.img.xml內容 - Throws:
SQLException- 讀取資料表失敗時
-
importXml
解析Commodity.img的 WZ-XML 並 upsert 進cashshop_modified_items。逐一走訪根節點下每個
<imgdir>商品,讀取其SN(必填、>0) 與其餘欄位後呼叫CashItemFactory.saveModifiedItem(int, int, int, int, int, int, int, boolean, int)(同步寫 DB+更新快取)。- Parameters:
xml-Commodity.img.xml內容- Returns:
- 成功匯入的商品筆數
- Throws:
Exception- XML 解析失敗時
-