mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-04-22 12:19:34 +08:00
70 lines
2.8 KiB
C#
70 lines
2.8 KiB
C#
using Milimoe.FunGame.Core.Api.Utility;
|
|
using Milimoe.FunGame.Core.Entity;
|
|
using Milimoe.FunGame.Core.Library.Constant;
|
|
|
|
namespace Milimoe.FunGame.Testing.Skills
|
|
{
|
|
public class 心灵之火 : Skill
|
|
{
|
|
public override long Id => 4002;
|
|
public override string Name => "心灵之火";
|
|
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
|
|
|
public 心灵之火(Character character) : base(SkillType.Passive, character)
|
|
{
|
|
Effects.Add(new 心灵之火特效(this));
|
|
}
|
|
|
|
public override IEnumerable<Effect> AddInactiveEffectToCharacter()
|
|
{
|
|
return Effects;
|
|
}
|
|
}
|
|
|
|
public class 心灵之火特效(Skill skill) : Effect(skill)
|
|
{
|
|
public override long Id => Skill.Id;
|
|
public override string Name => Skill.Name;
|
|
public override string Description => $"普通攻击硬直时间减少 20%。每次使用普通攻击时,额外再发动一次普通攻击,伤害特效可叠加,冷却 {基础冷却时间:0.##} 时间。" +
|
|
(冷却时间 > 0 ? $"(正在冷却:剩余 {冷却时间:0.##} 时间)" : "");
|
|
public override bool TargetSelf => true;
|
|
|
|
public double 冷却时间 { get; set; } = 0;
|
|
public double 基础冷却时间 { get; set; } = 20;
|
|
private bool 是否是嵌套普通攻击 = false;
|
|
|
|
public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult)
|
|
{
|
|
if (character == Skill.Character && isNormalAttack && 冷却时间 == 0 && !是否是嵌套普通攻击 && ActionQueue != null)
|
|
{
|
|
WriteLine($"[ {character} ] 发动了心灵之火!额外进行一次普通攻击!");
|
|
冷却时间 = 基础冷却时间;
|
|
是否是嵌套普通攻击 = true;
|
|
character.NormalAttack.Attack(ActionQueue, character, enemy);
|
|
}
|
|
|
|
if (character == Skill.Character && 是否是嵌套普通攻击)
|
|
{
|
|
是否是嵌套普通攻击 = false;
|
|
}
|
|
}
|
|
|
|
public override void OnTimeElapsed(Character character, double elapsed)
|
|
{
|
|
if (冷却时间 > 0)
|
|
{
|
|
冷却时间 = Calculation.Round2Digits(冷却时间 - elapsed);
|
|
if (冷却时间 <= 0)
|
|
{
|
|
冷却时间 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void AlterHardnessTimeAfterNormalAttack(Character character, ref double baseHardnessTime, ref bool isCheckProtected)
|
|
{
|
|
baseHardnessTime = Calculation.Round2Digits(baseHardnessTime * 0.8);
|
|
}
|
|
}
|
|
}
|