Package client.inventory
package client.inventory
角色背包與裝備子系統:道具、裝備、寵物的資料模型與持久化。
道具的基底為 Item,裝備 Equip 繼承其上並承載屬性、潛能、卷軸強化等資料;
寵物為 MaplePet。同一型別的道具集中於 MapleInventory 容器(依
MapleInventoryType 區分裝備/消耗/設置/其他/現金等格),其本身為 Iterable<Item>。
裝備的附掛物件包含 MapleRing(戒指)、MapleMount(騎乘)、
MapleAndroid(機器人),數值加成定義於 EquipAdditions;
武器類別與各式旗標由 MapleWeaponType、ItemFlag、SocketFlag、
MapleImp 等列舉描述。
持久化方面,ItemLoader 依資料表組(背包/倉庫/現金商城/僱傭商人/快遞/MTS)
從資料庫載入及寫回道具與裝備,MapleInventoryIdentifier 產生道具唯一序號;
寵物指令與飢餓值由 PetDataFactory 讀取 WZ 資料供應。
本子系統僅為資料模型;道具的增刪改、移動、合併等實際操作由
MapleInventoryManipulator 驅動,道具的靜態屬性查詢則來自
MapleItemInformationProvider。
-
ClassDescription確定性離線單元測試:
CustomDataCodec的 JSON 編解碼,以及Equip自訂屬性 API (setCustom / getCustom / getCustomMap / copy / get/setCustomJson)的行為。可裝備道具的資料模型,繼承自Item並附帶全套裝備屬性。裝備附加屬性類型的列舉,對應 WZ 資料中裝備的特殊加成鍵名。確定性離線單元測試:Equip的「原始素值(誕生之初)」系統 originStats (markOriginStats / recaptureOriginStats / restoreOriginStats=回到原始狀態 / hasOriginStats / getOriginStats / get・setOriginStatsJson / copy)。背包操作發生非預期錯誤時拋出的非受檢例外。背包道具的基礎資料模型,所有道具類型的共同基底。道具旗標位元欄位的列舉定義,對應用戶端協定中的flag短整數。道具持久化的存取策略列舉,封裝各種道具來源(角色背包、帳號倉庫、現金商城等)的資料庫表名與鍵欄位。安卓(Android)裝備的執行期資料模型,負責持久化與地圖上的移動狀態。Imp(精靈伴侶)道具的資料模型,目前尚未啟用。單一背包分頁(如裝備、消耗、設置、其他、楓點)的記憶體容器。全伺服器唯一道具識別碼(uniqueid)的單例產生器。背包分頁類型的列舉,對應用戶端協定中的背包類型編號。騎乘坐騎(Mount)的執行期狀態模型,持有等級、經驗與疲勞度。寵物道具的執行期資料模型,持有寵物狀態、位置與技能旗標。配對戒指(結婚戒指、好友戒指等)的資料模型,記錄雙方的戒指 ID 與角色關聯。武器類型的列舉,定義各類武器的傷害乘數與基礎熟練度。寵物靜態資料的工廠類別,自 WZ 檔案快取寵物指令與飢餓速率。