using System.Text; using Milimoe.FunGame.Core.Interface.Base; 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, ISkill { /// /// 普通攻击名称 /// public override string Name => "普通攻击"; /// /// 普通攻击说明 /// public string Description => $"对目标敌人造成 {(1.0 + 0.05 * (Level - 1)) * 100:0.##}% 攻击力 [ {Damage:0.##} ] 点{(IsMagic ? CharacterSet.GetMagicDamageName(MagicType) : "物理伤害")}。"; /// /// 所属的角色 /// public Character Character { get; } = character; /// /// 普通攻击的伤害 /// public double Damage => 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), GameplayEquilibriumConstant.MaxNormalAttackLevel); } } /// /// 是否是魔法伤害 /// public bool IsMagic => _IsMagic; /// /// 魔法伤害需要指定魔法类型 /// public MagicType MagicType => _MagicType; /// /// 硬直时间 /// public double HardnessTime { get; set; } = 10; /// /// 可选取自身 /// public bool CanSelectSelf { get; set; } = false; /// /// 可选取敌对角色 /// public bool CanSelectEnemy { get; set; } = true; /// /// 可选取友方角色 /// public bool CanSelectTeammate { get; set; } = false; /// /// 可选取的作用目标数量 /// public int CanSelectTargetCount { get; set; } = 1; /// /// 可选取的作用范围 /// public double CanSelectTargetRange { get; set; } = 0; /// /// 对目标(或多个目标)发起普通攻击 /// /// /// /// public void Attack(IGamingQueue queue, Character attacker, params IEnumerable enemys) { foreach (Character enemy in enemys) { if (enemy.HP > 0) { 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); queue.DamageToEnemyAsync(attacker, enemy, damage, true, IsMagic, MagicType, result); } } } /// /// 修改伤害类型 /// /// /// 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; } }