FunGame-Core/Entity/System/Inventory.cs
yeziuku db1cad04bf
添加使用物品、角色升级、角色突破 (#103)
* 添加升级、突破

* 添加经验值平衡常数

* 修复了传入 skillsDefined 时没有按定义的 args 构造特效;添加经验值相关的功能

* 添加复制等级数据

* 添加使用物品、角色升级、角色突破

* 修复升级和突破的BUG;添加智力提升加速系数;添加突破材料

* 修改物品相关

* 更新库存相关

---------

Co-authored-by: milimoe <mili@wrss.org>
2024-12-24 00:07:54 +08:00

136 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Text;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
namespace Milimoe.FunGame.Core.Entity
{
public class Inventory
{
/// <summary>
/// 库存 ID 与用户 ID 绑定
/// </summary>
public long Id => User.Id;
/// <summary>
/// 库存的名称,默认为 “<see cref="User.Username"/>的库存”;可更改
/// </summary>
public string Name { get; set; } = "";
/// <summary>
/// 库存属于哪个玩家
/// </summary>
public User User { get; }
/// <summary>
/// 玩家持有 <see cref="EquilibriumConstant.InGameCurrency"/> 的数量
/// </summary>
public double Credits { get; set; } = 0;
/// <summary>
/// 玩家持有 <see cref="EquilibriumConstant.InGameMaterial"/> 的数量
/// </summary>
public double Materials { get; set; } = 0;
/// <summary>
/// 玩家拥有的角色
/// </summary>
public HashSet<Character> Characters { get; } = [];
/// <summary>
/// 玩家拥有的物品
/// </summary>
public HashSet<Item> Items { get; } = [];
/// <summary>
/// 主战角色
/// </summary>
public Character MainCharacter
{
get
{
if (_character != null)
{
return _character;
}
else if (Characters.Count > 0)
{
_character = Characters.First();
return _character;
}
throw new GetInstanceException();
}
set
{
_character = value;
}
}
/// <summary>
/// 小队
/// </summary>
public HashSet<Character> Squad { get; set; } = [];
/// <summary>
/// 练级中的角色
/// </summary>
public Dictionary<Character, DateTime> 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();
}
}
}