using System; using System.Collections.Generic; using Cielonos.MainGame.Inventory; using UnityEngine; namespace Cielonos.MainGame { /// /// 玩家背包与装备数据配置包。 /// 用于记录玩家在基地(Fortress)中配置的全部装备和背包物品,并同步至战斗关卡(CityArena)中。 /// [Serializable] public class PlayerInventorySaveData : SaveDataBase { public List mainWeapons = new List(); public List preparedMainWeapons = new List(); public ItemSaveData currentMainWeapon; public List supportEquipments = new List() {}; public List currentSupportEquipments = new List(); public List passiveEquipments = new List(); public List consumables = new List(); } [Serializable] public class ItemSaveData { // 装备的类型名称(对应 Prefab 的名称,如 "Polychrome") public string itemClass; // 装备当前的等级(Passive Attribute Submodule 的 Level) public int level = 0; // 消耗品的堆叠数量(默认为1,表示单件物品;大于1表示多件同类物品) public int stackAmount = 1; public ItemSaveData() { } public ItemSaveData(string itemClass) { this.itemClass = itemClass; } public ItemBase RestoreItem() { Type type = Type.GetType($"Cielonos.MainGame.Inventory.Collections.{itemClass}"); if (type == null) { Debug.LogError($"无法找到类型 {itemClass},请确保该类存在并且命名空间正确。"); return null; } ItemBase item = MainGameManager.Player.inventorySc.backpackSm.ObtainItem(type); // 调用我们前文扩展的非泛型方法 if (item != null) { // B. 注入保存的状态 // 还原等级 if (item.passiveAttributeSm != null) { item.passiveAttributeSm.level = level; } // 还原堆叠数量(仅对消耗品有效) if (item is ConsumableBase consumable) { consumable.stackAmount = stackAmount; } } return item; } } }