mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-21 19:49:34 +08:00
341 lines
8.8 KiB
C#
341 lines
8.8 KiB
C#
using Milimoe.FunGame.Core.Api.Utility;
|
|
using Milimoe.FunGame.Core.Interface.Entity;
|
|
using Milimoe.FunGame.Core.Library.Constant;
|
|
|
|
namespace Milimoe.FunGame.Core.Entity
|
|
{
|
|
public class Character : BaseEntity, ICopyable<Character>
|
|
{
|
|
/// <summary>
|
|
/// 角色的姓
|
|
/// </summary>
|
|
public override string Name { get; set; } = "";
|
|
|
|
/// <summary>
|
|
/// 角色的名字
|
|
/// </summary>
|
|
public string FirstName { get; set; } = "";
|
|
|
|
/// <summary>
|
|
/// 角色的昵称
|
|
/// </summary>
|
|
public string NickName { get; set; } = "";
|
|
|
|
/// <summary>
|
|
/// 角色所属的玩家
|
|
/// </summary>
|
|
public User? User { get; set; } = null;
|
|
|
|
/// <summary>
|
|
/// 角色统计数据
|
|
/// </summary>
|
|
public CharacterStatistics? Statistics { get; set; } = null;
|
|
|
|
/// <summary>
|
|
/// 魔法属性
|
|
/// </summary>
|
|
public MagicType MagicType { get; set; } = MagicType.Particle;
|
|
|
|
/// <summary>
|
|
/// 角色定位1
|
|
/// </summary>
|
|
public RoleType FirstRoleType { get; set; } = RoleType.Core;
|
|
|
|
/// <summary>
|
|
/// 角色定位2
|
|
/// </summary>
|
|
public RoleType SecondRoleType { get; set; } = RoleType.Guardian;
|
|
|
|
/// <summary>
|
|
/// 角色定位3
|
|
/// </summary>
|
|
public RoleType ThirdRoleType { get; set; } = RoleType.Vanguard;
|
|
|
|
/// <summary>
|
|
/// 角色评级
|
|
/// </summary>
|
|
public RoleRating RoleRating { get; set; } = RoleRating.E;
|
|
|
|
/// <summary>
|
|
/// 晋升点数
|
|
/// </summary>
|
|
public int Promotion { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 等级
|
|
/// </summary>
|
|
public int Level { get; set; } = 1;
|
|
|
|
/// <summary>
|
|
/// 经验值
|
|
/// </summary>
|
|
public decimal EXP { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础生命值
|
|
/// </summary>
|
|
public decimal BaseHP { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 生命值
|
|
/// </summary>
|
|
public decimal HP { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础魔法值
|
|
/// </summary>
|
|
public decimal BaseMP { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 魔法值
|
|
/// </summary>
|
|
public decimal MP { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 能量
|
|
/// </summary>
|
|
public decimal EP { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础攻击力
|
|
/// </summary>
|
|
public decimal BaseATK { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 攻击力
|
|
/// </summary>
|
|
public decimal ATK { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础物理护甲
|
|
/// </summary>
|
|
public decimal BaseDEF { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 物理护甲
|
|
/// </summary>
|
|
public decimal DEF { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 物理伤害减免(%)
|
|
/// </summary>
|
|
public decimal PDR { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 魔法抗性(%)
|
|
/// </summary>
|
|
public decimal MDF { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 物理穿透(%)
|
|
/// </summary>
|
|
public decimal PhysicalPenetration { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 魔法穿透(%)
|
|
/// </summary>
|
|
public decimal MagicalPenetration { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 生命回复力
|
|
/// </summary>
|
|
public decimal HR { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 魔法回复力
|
|
/// </summary>
|
|
public decimal MR { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 能量回复力
|
|
/// </summary>
|
|
public decimal ER { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础力量
|
|
/// </summary>
|
|
public decimal BaseSTR { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础敏捷
|
|
/// </summary>
|
|
public decimal BaseAGI { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 基础智力
|
|
/// </summary>
|
|
public decimal BaseINT { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 力量
|
|
/// </summary>
|
|
public decimal STR { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 敏捷
|
|
/// </summary>
|
|
public decimal AGI { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 智力
|
|
/// </summary>
|
|
public decimal INT { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 力量成长值
|
|
/// </summary>
|
|
public decimal STRGrowth { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 敏捷成长值
|
|
/// </summary>
|
|
public decimal AGIGrowth { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 智力成长值
|
|
/// </summary>
|
|
public decimal INTGrowth { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 速度
|
|
/// </summary>
|
|
public decimal SPD { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 行动系数(%)
|
|
/// </summary>
|
|
public decimal ActionCoefficient { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 加速系数(%)
|
|
/// </summary>
|
|
public decimal AccelerationCoefficient { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 攻击距离
|
|
/// </summary>
|
|
public decimal ATR { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// 暴击率(%)
|
|
/// </summary>
|
|
public decimal CritRate { get; set; } = 0.05M;
|
|
|
|
/// <summary>
|
|
/// 暴击伤害
|
|
/// </summary>
|
|
public decimal CritDMG { get; set; } = 1.25M;
|
|
|
|
/// <summary>
|
|
/// 闪避率(%)
|
|
/// </summary>
|
|
public decimal EvadeRate { get; set; } = 0.05M;
|
|
|
|
/// <summary>
|
|
/// 角色的技能组
|
|
/// </summary>
|
|
public Dictionary<string, Skill> Skills { get; set; } = [];
|
|
|
|
/// <summary>
|
|
/// 角色携带的物品
|
|
/// </summary>
|
|
public Dictionary<string, Item> Items { get; set; } = [];
|
|
|
|
protected Character()
|
|
{
|
|
|
|
}
|
|
|
|
internal static Character GetInstance()
|
|
{
|
|
return new();
|
|
}
|
|
|
|
public void SetDefaultBase()
|
|
{
|
|
HP = BaseHP;
|
|
MP = BaseMP;
|
|
ATK = BaseATK;
|
|
DEF = BaseDEF;
|
|
STR = BaseSTR;
|
|
AGI = BaseAGI;
|
|
INT = BaseINT;
|
|
}
|
|
|
|
public override bool Equals(IBaseEntity? other)
|
|
{
|
|
return other is Character c && c.Name == Name;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
bool isChineseName = NetworkUtility.IsChineseName(Name + FirstName);
|
|
string str = isChineseName ? (Name + FirstName).Trim() : (Name + " " + FirstName).Trim();
|
|
if (NickName != "")
|
|
{
|
|
if (str != "") str += ", ";
|
|
str += NickName;
|
|
}
|
|
if (User != null && User.Username != "")
|
|
{
|
|
str += "(" + User.Username + ")";
|
|
}
|
|
return str;
|
|
}
|
|
|
|
public Character Copy()
|
|
{
|
|
Character c = new()
|
|
{
|
|
Name = Name,
|
|
FirstName = FirstName,
|
|
NickName = NickName,
|
|
Statistics = Statistics,
|
|
MagicType = MagicType,
|
|
FirstRoleType = FirstRoleType,
|
|
SecondRoleType = SecondRoleType,
|
|
ThirdRoleType = ThirdRoleType,
|
|
RoleRating = RoleRating,
|
|
Promotion = Promotion,
|
|
Level = Level,
|
|
EXP = EXP,
|
|
BaseHP = BaseHP,
|
|
HP = HP,
|
|
BaseMP = BaseMP,
|
|
MP = MP,
|
|
EP = EP,
|
|
BaseATK = BaseATK,
|
|
ATK = ATK,
|
|
BaseDEF = BaseDEF,
|
|
DEF = DEF,
|
|
PDR = PDR,
|
|
MDF = MDF,
|
|
PhysicalPenetration = PhysicalPenetration,
|
|
MagicalPenetration = MagicalPenetration,
|
|
HR = HR,
|
|
MR = MR,
|
|
ER = ER,
|
|
BaseSTR = BaseSTR,
|
|
BaseAGI = BaseAGI,
|
|
BaseINT = BaseINT,
|
|
STR = STR,
|
|
AGI = AGI,
|
|
INT = INT,
|
|
STRGrowth = STRGrowth,
|
|
AGIGrowth = AGIGrowth,
|
|
INTGrowth = INTGrowth,
|
|
SPD = SPD,
|
|
ActionCoefficient = ActionCoefficient,
|
|
AccelerationCoefficient = AccelerationCoefficient,
|
|
ATR = ATR,
|
|
CritRate = CritRate,
|
|
CritDMG = CritDMG,
|
|
EvadeRate = EvadeRate,
|
|
Skills = Skills,
|
|
Items = Items,
|
|
};
|
|
return c;
|
|
}
|
|
}
|
|
}
|