2026-01-18 04:19:12 +08:00

125 lines
6.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)SuperSkillID.;
public override string Name => "放监";
public override string Description => Effects.Count > 0 ? (()Effects.First()). : "";
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
public override double EPCost => 100;
public override double CD => 65;
public override double HardnessTime { get; set; } = 14;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
public Passive { get; set; }
public (Character? character = null) : base(SkillType.SuperSkill, character)
{
Effects.Add(new (this));
Passive = new (this);
}
public override IEnumerable<Effect> AddPassiveEffectToCharacter()
{
return [Passive];
}
}
public class (Skill skill) : Effect(skill)
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{Skill.SkillOwner()}阻止任何来自持有 [ 宫监手标记 ] 的角色所发起的指向性技能攻击。";
public override bool DurativeWithoutDuration => true;
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
public override bool BeforeSkillCasted(Character caster, Skill skill, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
if (Skill.Character != null && caster.Effects.FirstOrDefault(e => e is ) is effect)
{
WriteLine($"[ {Skill.Character} ] 高声呼喊:“宫监手,放监!”");
e = new(Skill, Skill.Character, skill)
{
Durative = false,
DurationTurn = 4,
RemainDurationTurn = 4
};
e.CopiedSkill.Values[nameof()] = 1;
e.CopiedSkill.CurrentCD = 0;
e.CopiedSkill.FreeCostEP = true;
e.CopiedSkill.FreeCostMP = true;
e.CopiedSkill.Enable = true;
e.CopiedSkill.IsInEffect = false;
e.OnEffectGained(Skill.Character);
Skill.Character.Effects.Add(e);
WriteLine($"[ {Skill.Character} ] 复制了 [ {caster} ] 的技能:{skill.Name}");
effect.(caster);
// 返回 false 让框架处理阻止技能对该角色的释放
return false;
}
return true;
}
}
public class (Skill skill) : Effect(skill)
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => ;
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
public string => $"使场上现有的时雨标记变得不可驱散,并且刷新为持续 3 回合。并给予持有时雨标记的敌方角色 [ 宫监手标记 ],宫监手标记不可驱散,持续 3 回合。{任务要求}";
public string => $"持有宫监手标记的角色,必须完成以下两个任务以消除标记,否则将在标记消失时,每个未完成的任务给予角色基于{Skill.SkillOwner()} {核心属性系数 * 100:0.##}% 核心属性 + {攻击力系数 * 100:0.##}% 攻击力 [ {Skill.Character?.PrimaryAttributeValue * 核心属性系数 + Skill.Character?.ATK * 攻击力系数:0.##} ] 的真实伤害:\r\n" +
$"1. 使用 [ 普通攻击 ] 攻击一次队友,此伤害必定暴击且无视闪避;\r\n2. 对{Skill.SkillOwner()}释放一个指向性技能,{Skill.SkillOwner()}将此技能效果无效化并且复制该技能获得使用权持续 4 回合。\r\n注意在宫监手标记被消除前对{Skill.SkillOwner()}释放指向性技能始终会触发无效化和复制效果。杀死{Skill.SkillOwner()}可以终止所有放监任务。";
public double => 0.7 * Skill.Level;
public double => 0.2 + 0.10 * (Skill.Level - 1);
public void (Character character, int count)
{
if (Skill.Character != null)
{
WriteLine($"[ {character} ] 未完成「放监」任务!");
for (int i = 0; i < count; i++)
{
double damage = Skill.Character.PrimaryAttributeValue * + Skill.Character.ATK * ;
DamageToEnemy(Skill.Character, character, DamageType.True, MagicType, damage);
}
}
}
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
if (GamingQueue != null)
{
List<Character> enemies = GamingQueue.GetEnemies(caster);
foreach (Character character in GamingQueue.Queue)
{
if (character.Effects.FirstOrDefault(e => e is ) is e)
{
e.DispelledType = DispelledType.CannotBeDispelled;
e.RemainDurationTurn = 3;
if (enemies.Contains(character))
{
Effect e2 = new (Skill, caster, character, this)
{
Durative = false,
DurationTurn = 3,
RemainDurationTurn = 3
};
character.Effects.Add(e2);
e2.OnEffectGained(character);
}
}
}
GamingQueue.LastRound.AddApplyEffects(caster, EffectType.Focusing);
}
}
}
}