using System.Text; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Model; namespace Milimoe.FunGame.Core.Entity { public class Inventory { /// /// 库存 ID 与用户 ID 绑定 /// public long Id => User.Id; /// /// 库存的名称,默认为 “的库存”;可更改 /// public string Name { get; set; } = ""; /// /// 库存属于哪个玩家 /// public User User { get; } /// /// 玩家持有 的数量 /// public double Credits { get; set; } = 0; /// /// 玩家持有 的数量 /// public double Materials { get; set; } = 0; /// /// 玩家拥有的角色 /// public HashSet Characters { get; } = []; /// /// 玩家拥有的物品 /// public HashSet Items { get; } = []; /// /// 主战角色 /// public Character MainCharacter { get { if (_character != null) { return _character; } else if (Characters.Count > 0) { _character = Characters.First(); return _character; } return Factory.GetCharacter(); } set { _character = value; } } /// /// 小队 /// public HashSet Squad { get; set; } = []; /// /// 练级中的角色 /// public Dictionary Training { get; set; } = []; private Character? _character; internal Inventory(User user) { User = user; Name = user.Username + "的库存"; } public override string ToString() { return Name + $"({User})"; } public string ToString(bool showAll) { StringBuilder builder = new(); builder.AppendLine($"☆★☆ {Name} ☆★☆"); builder.AppendLine($"{General.GameplayEquilibriumConstant.InGameCurrency}:{Credits:0.00}"); builder.AppendLine($"{General.GameplayEquilibriumConstant.InGameMaterial}:{Materials:0.00}"); builder.AppendLine($"======= 角色 ======="); Character[] characters = [.. Characters]; for (int i = 1; i <= characters.Length; i++) { Character character = characters[i - 1]; if (showAll) { builder.AppendLine($"===== 第 {i} 个角色 ====="); builder.AppendLine($"{character.GetInfo(false)}"); } else { builder.AppendLine($"{i}. {character.ToStringWithLevelWithOutUser()}"); } } builder.AppendLine($"======= 物品 ======="); Item[] items = [.. Items]; for (int i = 1; i <= items.Length; i++) { Item item = items[i - 1]; if (showAll) { builder.AppendLine($"===== 第 {i} 个物品 ====="); } else { builder.AppendLine($"{i}. [{ItemSet.GetQualityTypeName(item.QualityType)}|{ItemSet.GetItemTypeName(item.ItemType)}] {item.Name}"); } builder.AppendLine($"{item.ToStringInventory(showAll).Trim()}"); if (showAll) builder.AppendLine(); } return builder.ToString(); } } }