mirror of
https://github.com/oshima-studios/OshimaGameModule.git
synced 2026-04-20 05:25:01 +00:00
添加新技能
This commit is contained in:
parent
8ae5cb116e
commit
48be31d985
@ -53,7 +53,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
|
||||
}
|
||||
}
|
||||
|
||||
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates)
|
||||
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
|
||||
{
|
||||
if (skill is NormalAttack)
|
||||
{
|
||||
|
||||
@ -230,7 +230,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
|
||||
break;
|
||||
case EffectType.Confusion:
|
||||
_dispelledType = DispelledType.Strong;
|
||||
_description = "混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。";
|
||||
_description = "混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标。";
|
||||
break;
|
||||
case EffectType.Taunt:
|
||||
_dispelledType = DispelledType.Strong;
|
||||
|
||||
@ -16,7 +16,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
|
||||
public override EffectType EffectType => EffectType.Weaken;
|
||||
public override bool ExemptDuration => true;
|
||||
|
||||
private string 虚弱时间 => _durative && _duration > 0 ? 实际虚弱时间 + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? 实际虚弱时间 + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
|
||||
private string 虚弱时间 => _durative && _duration > 0 ? $"{实际虚弱时间:0.##} {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? 实际虚弱时间 + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
|
||||
private double 实际虚弱时间 => _durative && _duration > 0 ? _duration + _levelGrowth * (Level - 1) : (!_durative && _durationTurn > 0 ? _durationTurn + _levelGrowth * (Level - 1) : 0);
|
||||
private readonly bool _durative;
|
||||
private readonly double _duration;
|
||||
|
||||
@ -186,17 +186,5 @@ namespace Oshima.FunGame.OshimaModules.Items
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public override List<Character> GetSelectableTargets(Character caster, List<Character> enemys, List<Character> teammates)
|
||||
{
|
||||
List<Character> targets = base.GetSelectableTargets(caster, enemys, teammates);
|
||||
if (GamingQueue != null)
|
||||
{
|
||||
// 从死亡队列中获取队友,加入目标列表。
|
||||
Dictionary<Character, bool> deaths = GamingQueue.GetIsTeammateDictionary(caster, GamingQueue.Eliminated);
|
||||
targets = [.. targets.Union(deaths.Where(kv => kv.Value).Select(kv => kv.Key)).Distinct()];
|
||||
}
|
||||
return targets;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ namespace Oshima.FunGame.OshimaModules.Models
|
||||
|
||||
CommonPassiveSkills.AddRange([new 征服者(), new 致命节奏(), new 强攻(), new 电刑(), new 黑暗收割(), new 迅捷步法(), new 贪欲猎手()]);
|
||||
|
||||
CommonSuperSkills.AddRange([new 樱花无双击(), new 漆黑之牙()]);
|
||||
CommonSuperSkills.AddRange([new 樱花无双击(), new 漆黑之牙(), new 女王之怒(), new 裁决塔罗(), new 光明之环(), new 圣星光旋()]);
|
||||
|
||||
Magics.AddRange([new 冰霜攻击(), new 火之矢(), new 水之矢(), new 风之轮(), new 石之锤(), new 心灵之霞(), new 次元上升(), new 暗物质(),
|
||||
new 回复术(), new 治愈术(), new 复苏术(), new 圣灵术(), new 时间加速(), new 时间减速(), new 反魔法领域(), new 沉默十字(), new 虚弱领域(), new 混沌烙印(), new 凝胶稠絮(),
|
||||
|
||||
@ -143,6 +143,10 @@ namespace Oshima.FunGame.OshimaModules
|
||||
(long)SuperSkillID.神之因果 => new 神之因果(),
|
||||
(long)SuperSkillID.樱花无双击 => new 樱花无双击(),
|
||||
(long)SuperSkillID.漆黑之牙 => new 漆黑之牙(),
|
||||
(long)SuperSkillID.女王之怒 => new 女王之怒(),
|
||||
(long)SuperSkillID.裁决塔罗 => new 裁决塔罗(),
|
||||
(long)SuperSkillID.光明之环 => new 光明之环(),
|
||||
(long)SuperSkillID.圣星光旋 => new 圣星光旋(),
|
||||
(long)PassiveID.META马 => new META马(),
|
||||
(long)PassiveID.心灵之弦 => new 心灵之弦(),
|
||||
(long)PassiveID.蚀魂震击 => new 蚀魂震击(),
|
||||
|
||||
@ -39,7 +39,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates)
|
||||
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
|
||||
{
|
||||
猎手标记.Clear();
|
||||
AddHalfOfMe([.. enemys.Where(e => e.HP > 0).OrderBy(e => e.HP / e.MaxHP)]);
|
||||
|
||||
@ -28,7 +28,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"{Skill.SkillOwner()}在游戏开始时进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" +
|
||||
$"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 15% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 25%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" +
|
||||
$"混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。时雨标记持续 3 回合。";
|
||||
$"混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标。时雨标记持续 3 回合。";
|
||||
|
||||
private bool 激活 = false;
|
||||
|
||||
|
||||
@ -78,7 +78,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
||||
}
|
||||
}
|
||||
|
||||
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates)
|
||||
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
|
||||
{
|
||||
if (skill is NormalAttack && !本回合可附赠动作)
|
||||
{
|
||||
|
||||
80
OshimaModules/Skills/爆发技/光明之环.cs
Normal file
80
OshimaModules/Skills/爆发技/光明之环.cs
Normal file
@ -0,0 +1,80 @@
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Model.PrefabricatedEntity;
|
||||
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
|
||||
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
|
||||
|
||||
namespace Oshima.FunGame.OshimaModules.Skills
|
||||
{
|
||||
public class 光明之环 : SoulboundSkill
|
||||
{
|
||||
public override long Id => (long)SuperSkillID.光明之环;
|
||||
public override string Name => "光明之环";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||
public override double CD => 100;
|
||||
public override double HardnessTime { get; set; } = 0;
|
||||
public override bool CanSelectEnemy => false;
|
||||
public override bool CanSelectTeammate => true;
|
||||
public override bool CanSelectSelf => true;
|
||||
public override bool SelectAllTeammates => true;
|
||||
public override bool AllowSelectDead => true;
|
||||
|
||||
public 光明之环(Character? character = null) : base(character)
|
||||
{
|
||||
Effects.Add(new 光明之环特效(this));
|
||||
}
|
||||
}
|
||||
|
||||
public class 光明之环特效(SoulboundSkill skill) : SoulboundEffect(skill)
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"对{Skill.TargetDescription()}施加强驱散,并基于{(Skill.Character != null ? CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) : "核心属性")}的 {PACoefficient * 100:0.##}% 治疗或复苏{Skill.TargetDescription()},回复 {Heal:0.##} 点生命值。" +
|
||||
(Improvement > 0 ? $"灵魂绑定额外效果:增加目标 {Improvement / 2 * 100:0.##}% 物理伤害减免和魔法抗性,持续 2 回合。" : "") + $"复苏:如果目标已死亡,则复活目标。复苏只能至多回复至其最大生命值的 20%。";
|
||||
|
||||
public double PACoefficient => 1.35 + 0.35 * (Skill.Level - 1);
|
||||
public double Heal => (Skill.Character?.PrimaryAttributeValue ?? 0) * PACoefficient;
|
||||
|
||||
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
|
||||
{
|
||||
List<Character> deads = [.. targets.Where(c => c.HP == 0)];
|
||||
List<Character> alives = [.. targets.Where(c => c.HP > 0)];
|
||||
Effect e = new 强驱散特效(Skill);
|
||||
e.OnSkillCasted(caster, alives, grids, others);
|
||||
foreach (Character target in alives)
|
||||
{
|
||||
HealToTarget(caster, target, Heal);
|
||||
}
|
||||
foreach (Character target in deads)
|
||||
{
|
||||
HealToTarget(caster, target, Math.Min(Heal, target.MaxHP * 0.2), true, false);
|
||||
}
|
||||
if (Improvement > 0)
|
||||
{
|
||||
double dr = Improvement / 2;
|
||||
foreach (Character target in targets)
|
||||
{
|
||||
e = new DynamicsEffect(Skill, new()
|
||||
{
|
||||
["expdr"] = dr,
|
||||
["mdftype"] = 0,
|
||||
["mdfvalue"] = dr
|
||||
}, caster)
|
||||
{
|
||||
Durative = false,
|
||||
Duration = 0,
|
||||
DurationTurn = 2,
|
||||
RemainDurationTurn = 2,
|
||||
IsDebuff = false
|
||||
};
|
||||
e.OnEffectGained(target);
|
||||
RecordCharacterApplyEffects(target, EffectType.DefenseBoost);
|
||||
WriteLine($"[ {target} ] 提升了 {dr * 100:0.##}% 物理伤害减免和魔法抗性!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
60
OshimaModules/Skills/爆发技/圣星光旋.cs
Normal file
60
OshimaModules/Skills/爆发技/圣星光旋.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Model;
|
||||
using Milimoe.FunGame.Core.Model.PrefabricatedEntity;
|
||||
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
|
||||
|
||||
namespace Oshima.FunGame.OshimaModules.Skills
|
||||
{
|
||||
public class 圣星光旋 : SoulboundSkill
|
||||
{
|
||||
public override long Id => (long)SuperSkillID.圣星光旋;
|
||||
public override string Name => "圣星光旋";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||
public override double CD => 100;
|
||||
public override double HardnessTime { get; set; } = 16;
|
||||
public override bool SelectAllEnemies => true;
|
||||
|
||||
public 圣星光旋(Character? character = null) : base(character)
|
||||
{
|
||||
Effects.Add(new 圣星光旋特效(this));
|
||||
}
|
||||
}
|
||||
|
||||
public class 圣星光旋特效(SoulboundSkill skill) : SoulboundEffect(skill)
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"对{Skill.TargetDescription()}造成 {PACoefficient * 100:0.##}% " +
|
||||
$"{(Skill.Character != null ? CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) : "核心属性")} [ {PADamage:0.##} ] + {GeneralDamage:0.##} 点{CharacterSet.GetDamageTypeName(DamageType.True)}。" +
|
||||
(Improvement > 0 ? $"灵魂绑定伤害加成: {Improvement * 100:0.##}% [ {ImprovementDamage:0.##} ] 点," : "") + $"总伤害 {Damage + ImprovementDamage:0.##} 点。" +
|
||||
$"随后,有 25% 概率对受到伤害的目标造成眩晕 1 回合。眩晕:进入完全行动不能状态。";
|
||||
|
||||
public double PACoefficient => 0.35 + 0.05 * (Skill.Level - 1);
|
||||
public double PADamage => (Skill.Character?.PrimaryAttributeValue ?? 0) * PACoefficient;
|
||||
public double GeneralDamage => 70 * Skill.Level;
|
||||
public double Damage => GeneralDamage + PADamage;
|
||||
public double ImprovementDamage => Improvement > 0 ? Damage * Improvement : 0;
|
||||
|
||||
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
|
||||
{
|
||||
List<Character> valid = [];
|
||||
foreach (Character target in targets)
|
||||
{
|
||||
DamageCalculationOptions options = new(caster);
|
||||
if (DamageToEnemy(caster, target, DamageType.True, MagicType.None, Damage + ImprovementDamage, options).ActualDamage > 0)
|
||||
{
|
||||
if (Random.Shared.NextDouble() < 0.25)
|
||||
{
|
||||
valid.Add(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
Effect e = new 造成眩晕(Skill);
|
||||
e.OnSkillCasted(caster, valid, grids, others);
|
||||
}
|
||||
}
|
||||
}
|
||||
143
OshimaModules/Skills/爆发技/女王之怒.cs
Normal file
143
OshimaModules/Skills/爆发技/女王之怒.cs
Normal file
@ -0,0 +1,143 @@
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Model;
|
||||
using Milimoe.FunGame.Core.Model.PrefabricatedEntity;
|
||||
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
|
||||
|
||||
namespace Oshima.FunGame.OshimaModules.Skills
|
||||
{
|
||||
public class 女王之怒 : SoulboundSkill
|
||||
{
|
||||
public override long Id => (long)SuperSkillID.女王之怒;
|
||||
public override string Name => "女王之怒";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||
public override double CD => 70;
|
||||
public override double HardnessTime { get; set; } = 11;
|
||||
|
||||
public 女王之怒(Character? character = null) : base(character)
|
||||
{
|
||||
Effects.Add(new 女王之怒特效(this));
|
||||
}
|
||||
}
|
||||
|
||||
public class 女王之怒特效(SoulboundSkill skill) : SoulboundEffect(skill)
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"基于{Skill.SkillOwner()}的 {ATKCoefficient * 100:0.##}% 攻击力 [ {Damage:0.##} ] 对{Skill.TargetDescription()}造成{CharacterSet.GetDamageTypeName(DamageType.Physical)}" +
|
||||
(Improvement > 0 ? $",灵魂绑定伤害加成: {Improvement * 100:0.##}% [ {ImprovementDamage:0.##} ] 点,总伤害 {Damage + ImprovementDamage:0.##} 点;" : ";") +
|
||||
$"造成伤害后,对目标施加 {虚弱时间}虚弱。虚弱:伤害降低 {DamageReductionPercent * 100:0.##}%,物理护甲降低 {DEFReductionPercent * 100:0.##}%," +
|
||||
$"魔法抗性降低 {MDFReductionPercent * 100:0.##}%,治疗效果降低 {HealingReductionPercent * 100:0.##}%";
|
||||
|
||||
public double ATKCoefficient => 0.4 + 0.22 * (Skill.Level - 1);
|
||||
public double Damage => (Skill.Character?.ATK ?? 0) * ATKCoefficient;
|
||||
public double ImprovementDamage => Improvement > 0 ? Damage * Improvement : 0;
|
||||
public override bool Durative => false;
|
||||
public override int DurationTurn
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
4 or 5 or 6 => 3,
|
||||
_ => 2
|
||||
};
|
||||
}
|
||||
}
|
||||
public double DurationLevelGrowth
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
public double DamageReductionPercent
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
1 => 0.10,
|
||||
2 => 0.14,
|
||||
3 => 0.18,
|
||||
4 => 0.22,
|
||||
5 => 0.26,
|
||||
6 => 0.3,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
public double DEFReductionPercent
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
1 => 0.3,
|
||||
2 => 0.35,
|
||||
3 => 0.4,
|
||||
4 => 0.45,
|
||||
5 => 0.50,
|
||||
6 => 0.55,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
public double MDFReductionPercent
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
1 => 0.08,
|
||||
2 => 0.11,
|
||||
3 => 0.14,
|
||||
4 => 0.17,
|
||||
5 => 0.20,
|
||||
6 => 0.23,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
public double HealingReductionPercent
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
1 => 0.12,
|
||||
2 => 0.16,
|
||||
3 => 0.20,
|
||||
4 => 0.24,
|
||||
5 => 0.28,
|
||||
6 => 0.32,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private string 虚弱时间 => Durative && Duration > 0 ? $"{实际虚弱时间:0.##} {GameplayEquilibriumConstant.InGameTime}" : (!Durative && DurationTurn > 0 ? 实际虚弱时间 + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
|
||||
private double 实际虚弱时间 => Durative && Duration > 0 ? Duration + DurationLevelGrowth * (Level - 1) : (!Durative && DurationTurn > 0 ? DurationTurn + DurationLevelGrowth * (Level - 1) : 0);
|
||||
|
||||
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
|
||||
{
|
||||
List<Character> valid = [];
|
||||
foreach (Character target in targets)
|
||||
{
|
||||
DamageCalculationOptions options = new(caster);
|
||||
if (DamageToEnemy(caster, target, DamageType.Physical, MagicType.None, Damage + ImprovementDamage, options).ActualDamage > 0)
|
||||
{
|
||||
valid.Add(target);
|
||||
}
|
||||
}
|
||||
造成虚弱 e = new(Skill, Durative, Duration, DurationTurn, DurationLevelGrowth, DamageReductionPercent, DEFReductionPercent, MDFReductionPercent, HealingReductionPercent);
|
||||
e.OnSkillCasted(caster, valid, grids, others);
|
||||
}
|
||||
}
|
||||
}
|
||||
92
OshimaModules/Skills/爆发技/裁决塔罗.cs
Normal file
92
OshimaModules/Skills/爆发技/裁决塔罗.cs
Normal file
@ -0,0 +1,92 @@
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Model;
|
||||
using Milimoe.FunGame.Core.Model.PrefabricatedEntity;
|
||||
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
|
||||
|
||||
namespace Oshima.FunGame.OshimaModules.Skills
|
||||
{
|
||||
public class 裁决塔罗 : SoulboundSkill
|
||||
{
|
||||
public override long Id => (long)SuperSkillID.裁决塔罗;
|
||||
public override string Name => "裁决塔罗";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||
public override double CD => 75;
|
||||
public override double HardnessTime { get; set; } = 9;
|
||||
public override int CanSelectTargetCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return Level switch
|
||||
{
|
||||
1 or 2 => 1,
|
||||
3 or 4 => 2,
|
||||
_ => 3
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public 裁决塔罗(Character? character = null) : base(character)
|
||||
{
|
||||
Effects.Add(new 裁决塔罗特效(this));
|
||||
}
|
||||
}
|
||||
|
||||
public class 裁决塔罗特效(SoulboundSkill skill) : SoulboundEffect(skill)
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"基于{Skill.SkillOwner()}的 {ATKCoefficient * 100:0.##}% 攻击力 [ {Damage:0.##} ] 对{Skill.TargetDescription()}造成{CharacterSet.GetDamageTypeName(DamageType.Magical)}" +
|
||||
(Improvement > 0 ? $",灵魂绑定伤害加成: {Improvement * 100:0.##}% [ {ImprovementDamage:0.##} ] 点,总伤害 {Damage + ImprovementDamage:0.##} 点;" : ";") +
|
||||
$"造成伤害后,对目标随机施加以下几种状态:\r\n1、冻结:造成 {DurationTurn} 回合完全行动不能和 30% 魔法伤害易伤;\r\n" +
|
||||
$"2、混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标,持续 {DurationTurn} 回合;\r\n" +
|
||||
$"3、战斗不能:在 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内无法普通攻击和使用技能(魔法、战技和爆发技)。";
|
||||
|
||||
public double ATKCoefficient => 0.38 + 0.12 * (Skill.Level - 1);
|
||||
public double Damage => (Skill.Character?.ATK ?? 0) * ATKCoefficient;
|
||||
public double ImprovementDamage => Improvement > 0 ? Damage * Improvement : 0;
|
||||
public override double Duration
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
4 or 5 or 6 => 14,
|
||||
_ => 7
|
||||
};
|
||||
}
|
||||
}
|
||||
public override int DurationTurn
|
||||
{
|
||||
get
|
||||
{
|
||||
return Skill.Level switch
|
||||
{
|
||||
4 or 5 or 6 => 3,
|
||||
_ => 2
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
|
||||
{
|
||||
foreach (Character target in targets)
|
||||
{
|
||||
DamageCalculationOptions options = new(caster);
|
||||
if (DamageToEnemy(caster, target, DamageType.Magical, MagicType.None, Damage + ImprovementDamage, options).ActualDamage > 0)
|
||||
{
|
||||
Effect e = Random.Shared.Next(3) switch
|
||||
{
|
||||
0 => new 施加概率负面(Skill, EffectType.Freeze, false, 0, DurationTurn, 0, 1, 0),
|
||||
1 => new 施加概率负面(Skill, EffectType.Confusion, false, 0, DurationTurn, 0, 1, 0),
|
||||
_ => new 施加概率负面(Skill, EffectType.Cripple, true, Duration, 0, 0, 1, 0),
|
||||
};
|
||||
e.OnSkillCasted(caster, [target], grids, others);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -27,17 +27,5 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
||||
Effects.Add(new 强驱散特效(this));
|
||||
Effects.Add(new 纯数值回复生命(this, 380, 270, true));
|
||||
}
|
||||
|
||||
public override List<Character> GetSelectableTargets(Character caster, List<Character> enemys, List<Character> teammates)
|
||||
{
|
||||
List<Character> targets = base.GetSelectableTargets(caster, enemys, teammates);
|
||||
if (GamingQueue != null)
|
||||
{
|
||||
// 从死亡队列中获取队友,加入目标列表。
|
||||
Dictionary<Character, bool> deaths = GamingQueue.GetIsTeammateDictionary(caster, GamingQueue.Eliminated);
|
||||
targets = [.. targets.Union(deaths.Where(kv => kv.Value).Select(kv => kv.Key)).Distinct()];
|
||||
}
|
||||
return targets;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,17 +27,5 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
||||
Effects.Add(new 强驱散特效(this));
|
||||
Effects.Add(new 百分比回复生命值(this, 0.21, 0.02, true));
|
||||
}
|
||||
|
||||
public override List<Character> GetSelectableTargets(Character caster, List<Character> enemys, List<Character> teammates)
|
||||
{
|
||||
List<Character> targets = base.GetSelectableTargets(caster, enemys, teammates);
|
||||
if (GamingQueue != null)
|
||||
{
|
||||
// 从死亡队列中获取队友,加入目标列表。
|
||||
Dictionary<Character, bool> deaths = GamingQueue.GetIsTeammateDictionary(caster, GamingQueue.Eliminated);
|
||||
targets = [.. targets.Union(deaths.Where(kv => kv.Value).Select(kv => kv.Key)).Distinct()];
|
||||
}
|
||||
return targets;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"对{Skill.TargetDescription()}造成 {Damage:0.##} 点{CharacterSet.GetDamageTypeName(DamageType.Magical, MagicType)}。" +
|
||||
$"随后 {ActualConfusionProbability * 100:0.##}% 概率对目标施加混乱状态,持续 {持续时间}。混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。";
|
||||
$"随后 {ActualConfusionProbability * 100:0.##}% 概率对目标施加混乱状态,持续 {持续时间}。混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标。";
|
||||
public override DispelledType DispelledType => DispelledType.Strong;
|
||||
public override EffectType EffectType => EffectType.Confusion;
|
||||
public override bool ExemptDuration => true;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user