mirror of
https://github.com/oshima-studios/OshimaGameModule.git
synced 2025-04-22 20:09:35 +08:00
82 lines
3.6 KiB
C#
82 lines
3.6 KiB
C#
using Milimoe.FunGame.Core.Entity;
|
||
using Milimoe.FunGame.Core.Library.Constant;
|
||
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
|
||
|
||
namespace Oshima.FunGame.OshimaModules.Skills
|
||
{
|
||
public class 魔法震荡 : Skill
|
||
{
|
||
public override long Id => (long)PassiveID.魔法震荡;
|
||
public override string Name => "魔法震荡";
|
||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||
|
||
public 魔法震荡(Character? character = null) : base(SkillType.Passive, character)
|
||
{
|
||
Effects.Add(new 魔法震荡特效(this));
|
||
}
|
||
|
||
public override IEnumerable<Effect> AddPassiveEffectToCharacter()
|
||
{
|
||
return Effects;
|
||
}
|
||
}
|
||
|
||
public class 魔法震荡特效(Skill skill) : Effect(skill)
|
||
{
|
||
public override long Id => Skill.Id;
|
||
public override string Name => Skill.Name;
|
||
public override string Description => $"对处于完全行动不能、行动受限、战斗不能、技能受限、攻击受限状态的敌人额外造成 {系数 * 100:0.##}% 力量 [ {伤害加成:0.##} ] 点伤害;造成魔法伤害时使敌人眩晕 1 回合,冷却 {基础冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" +
|
||
(冷却时间 > 0 ? $"(正在冷却:剩余 {冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime})" : "");
|
||
public double 冷却时间 { get; set; } = 0;
|
||
public double 基础冷却时间 { get; set; } = 10;
|
||
private static double 系数 => 4;
|
||
private double 伤害加成 => 系数 * Skill.Character?.STR ?? 0;
|
||
|
||
public override double AlterExpectedDamageBeforeCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, Dictionary<Effect, double> totalDamageBonus)
|
||
{
|
||
if (character == Skill.Character && (
|
||
enemy.CharacterState == CharacterState.NotActionable ||
|
||
enemy.CharacterState == CharacterState.ActionRestricted ||
|
||
enemy.CharacterState == CharacterState.BattleRestricted ||
|
||
enemy.CharacterState == CharacterState.SkillRestricted ||
|
||
enemy.CharacterState == CharacterState.AttackRestricted))
|
||
{
|
||
return 伤害加成;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult)
|
||
{
|
||
if (character == Skill.Character && isMagicDamage && 冷却时间 == 0 && damageResult != DamageResult.Evaded)
|
||
{
|
||
IEnumerable<Effect> effects = enemy.Effects.Where(e => e is 眩晕 && e.Skill == Skill);
|
||
if (effects.Any())
|
||
{
|
||
effects.First().RemainDurationTurn++;
|
||
}
|
||
else
|
||
{
|
||
眩晕 e = new(Skill, character, false, 0, 1);
|
||
enemy.Effects.Add(e);
|
||
e.OnEffectGained(enemy);
|
||
}
|
||
WriteLine($"[ {character} ] 的魔法伤害触发了魔法震荡,[ {enemy} ] 被眩晕了!");
|
||
冷却时间 = 基础冷却时间;
|
||
}
|
||
}
|
||
|
||
public override void OnTimeElapsed(Character character, double elapsed)
|
||
{
|
||
if (冷却时间 > 0)
|
||
{
|
||
冷却时间 -= elapsed;
|
||
if (冷却时间 <= 0)
|
||
{
|
||
冷却时间 = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|