using System.Text; 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 NormalAttack(Character character, bool isMagic = false, MagicType magicType = MagicType.None) : BaseEntity { /// /// 普通攻击名称 /// public override string Name => "普通攻击"; /// /// 普通攻击说明 /// public string Description => $"对目标敌人造成 {Calculation.Round4Digits((1.0 + 0.05 * (Level - 1)) * 100)}% [ {Damage} ] 点{(IsMagic ? CharacterSet.GetMagicName(MagicType) : "物理伤害")}。"; /// /// 所属的角色 /// public Character Character { get; } = character; /// /// 普通攻击的伤害 /// public double Damage => Calculation.Round2Digits(Character.ATK * (1.0 + 0.05 * (Level - 1))); /// /// 普通攻击等级 /// public int Level { get { return Math.Max(1, _Level); } set { _Level = Math.Min(Math.Max(1, value), 8); } } /// /// 是否是魔法伤害 /// public bool IsMagic => _IsMagic; /// /// 魔法伤害需要指定魔法类型 /// public MagicType MagicType => _MagicType; /// /// 硬直时间 /// public double HardnessTime { get; } = 10; /// /// 对目标(或多个目标)发起普通攻击 /// /// /// /// public void Attack(ActionQueue queue, Character attacker, params Character[] enemys) { foreach (Character enemy in enemys) { queue.WriteLine("[ " + Character + $" ] 对 [ {enemy} ] 发起了普通攻击!"); double expected = Damage; DamageResult result = IsMagic ? queue.CalculateMagicalDamage(attacker, enemy, true, MagicType, expected, out double damage) : queue.CalculatePhysicalDamage(attacker, enemy, true, expected, out damage); if (result != DamageResult.Evaded) { queue.DamageToEnemy(attacker, enemy, damage, true, IsMagic, MagicType, result == DamageResult.Critical); } } } /// /// 修改伤害类型 /// /// /// public void SetMagicType(bool isMagic, MagicType magicType) { _IsMagic = isMagic; _MagicType = magicType; } public override bool Equals(IBaseEntity? other) { return other is NormalAttack c && c.Name == Name; } public override string ToString() { StringBuilder builder = new(); builder.AppendLine(Name + " - 等级 " + Level); builder.AppendLine("技能描述:" + Description); builder.AppendLine("硬直时间:" + HardnessTime); return builder.ToString(); } /// /// 等级 /// private int _Level = 0; /// /// 是否是魔法伤害 /// private bool _IsMagic = isMagic; /// /// 魔法类型 /// private MagicType _MagicType = magicType; } }