添加新技能

This commit is contained in:
milimoe 2025-07-04 01:40:49 +08:00
parent e9ac754f6c
commit 45cae64205
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
20 changed files with 692 additions and 5 deletions

View File

@ -0,0 +1,53 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
{
public class : Effect
{
public override long Id => (long)PassiveEffectID.;
public override string Name => "战斗不能";
public override string Description => $"此角色处于战斗不能状态,无法普通攻击和使用技能(魔法、战技和爆发技)。来自:[ {Source} ] 的 [ {Skill.Name} ]";
public override EffectType EffectType => EffectType.Cripple;
public override DispelledType DispelledType => DispelledType.Strong;
public override bool IsDebuff => true;
public override Character Source => _sourceCharacter;
public override bool Durative => _durative;
public override double Duration => _duration;
public override int DurationTurn => _durationTurn;
private readonly Character _sourceCharacter;
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;
public (Skill skill, Character sourceCharacter, bool durative = false, double duration = 0, int durationTurn = 1) : base(skill)
{
GamingQueue = skill.GamingQueue;
_sourceCharacter = sourceCharacter;
_durative = durative;
_duration = duration;
_durationTurn = durationTurn;
}
public override void OnEffectGained(Character character)
{
if (_durative && RemainDuration == 0)
{
RemainDuration = Duration;
}
else if (RemainDurationTurn == 0)
{
RemainDurationTurn = DurationTurn;
}
AddEffectStatesToCharacter(character, [CharacterState.BattleRestricted]);
InterruptCasting(character, Source);
}
public override void OnEffectLost(Character character)
{
RemoveEffectStatesFromCharacter(character);
}
}
}

View File

@ -11,7 +11,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
public override string Name => "技能免疫";
public override string Description => $"此角色处于技能免疫状态,无法选中其作为技能目标(自释放技能除外),并免疫来自技能的伤害。来自:[ {Source} ] 的 [ {Skill.Name} ]";
public override EffectType EffectType => EffectType.SkilledImmune;
public override DispelledType DispelledType => DispelledType.Strong;
public override DispelledType DispelledType => DispelledType.Weak;
public override bool IsDebuff => false;
public override Character Source => _sourceCharacter;
public override bool Durative => _durative;

View File

@ -10,11 +10,12 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"对{Skill.TargetDescription()}施加{CharacterSet.GetImmuneTypeName(ImmuneType)},持续 {持续时间}。";
public override DispelledType DispelledType => DispelledType.Strong;
public override DispelledType DispelledType => _dispelledType;
private ImmuneType ImmuneType { get; set; } = ImmuneType.None;
private string => _durative && _duration > 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 DispelledType _dispelledType = DispelledType.Weak;
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;
@ -28,6 +29,12 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_duration = duration;
_durationTurn = durationTurn;
_levelGrowth = levelGrowth;
_dispelledType = type switch
{
ImmuneType.All => DispelledType.Strong,
ImmuneType.Special => DispelledType.Special,
_ => DispelledType.Weak
};
}
public override void OnSkillCasted(Character caster, List<Character> targets, Dictionary<string, object> others)
@ -42,6 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
EffectType = EffectType.PhysicalImmune;
e = new(Skill, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)));
_dispelledType = DispelledType.Weak;
target.Effects.Add(e);
e.OnEffectGained(target);
break;
@ -50,6 +58,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
EffectType = EffectType.MagicalImmune;
e = new(Skill, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)));
_dispelledType = DispelledType.Weak;
target.Effects.Add(e);
e.OnEffectGained(target);
break;
@ -58,6 +67,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
EffectType = EffectType.SkilledImmune;
e = new(Skill, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)));
_dispelledType = DispelledType.Weak;
target.Effects.Add(e);
e.OnEffectGained(target);
break;
@ -66,6 +76,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
EffectType = EffectType.AllImmune;
e = new(Skill, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)));
_dispelledType = DispelledType.Strong;
target.Effects.Add(e);
e.OnEffectGained(target);
break;

View File

@ -0,0 +1,226 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
using Oshima.FunGame.OshimaModules.Skills;
namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{ActualProbability * 100:0.##}% 概率对{Skill.TargetDescription()}造成{GetEffectTypeName(_effectType)} {持续时间}。{(_description != "" ? _description : "")}";
public override EffectType EffectType => _effectType;
public override DispelledType DispelledType => _dispelledType;
private double ActualProbability => Level > 0 ? _probability + _probabilityLevelGrowth * (Level - 1) : _probability;
private string => _durative && _duration > 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 EffectType _effectType;
private readonly DispelledType _dispelledType = DispelledType.Weak;
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;
private readonly double _levelGrowth;
private readonly double _probability;
private readonly double _probabilityLevelGrowth;
private readonly object[] _args;
private readonly string _description = "";
public (Skill skill, EffectType effectType, bool durative = false, double duration = 0, int durationTurn = 1, double levelGrowth = 0, double probability = 0, double probabilityLevelGrowth = 0, params object[] args) : base(skill)
{
GamingQueue = skill.GamingQueue;
_effectType = effectType;
_durative = durative;
_duration = duration;
_durationTurn = durationTurn;
_levelGrowth = levelGrowth;
_probability = probability;
_probabilityLevelGrowth = probabilityLevelGrowth;
_args = args;
switch (_effectType)
{
case EffectType.Silence:
_dispelledType = DispelledType.Weak;
_description = "封技:不能使用技能(魔法、战技和爆发技),并解除当前施法。";
break;
case EffectType.Confusion:
_dispelledType = DispelledType.Strong;
_description = "混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。";
break;
case EffectType.Taunt:
_dispelledType = DispelledType.Strong;
_description = "愤怒:进入行动受限状态,失控并随机行动,行动回合内仅能对嘲讽者发起普通攻击。";
break;
case EffectType.Delay:
_dispelledType = DispelledType.Weak;
_description = "迟滞:延长普通攻击和技能的硬直时间、当前行动等待时间。";
break;
case EffectType.Stun:
_dispelledType = DispelledType.Strong;
_description = "眩晕:进入完全行动不能状态。";
break;
case EffectType.Freeze:
_dispelledType = DispelledType.Strong;
_description = "冻结:进入完全行动不能状态。";
break;
case EffectType.Petrify:
_dispelledType = DispelledType.Strong;
_description = "石化:进入完全行动不能状态。";
break;
case EffectType.Vulnerable:
DamageType damageType = DamageType.Magical;
if (_args.Length > 0 && _args[0] is DamageType dt)
{
damageType = dt;
}
double exDamagePercent = 0;
if (_args.Length > 1 && _args[1] is double percent)
{
exDamagePercent = percent;
}
if (exDamagePercent > 0)
{
_dispelledType = DispelledType.Weak;
_description = $"易伤:额外受到 {exDamagePercent * 100:0.##}% {CharacterSet.GetDamageTypeName(damageType)}。";
}
break;
case EffectType.Bleed:
_dispelledType = DispelledType.Strong;
bool isPercentage = false;
double durationDamage = 0;
double durationDamagePercent = 0;
if (_args.Length > 0 && _args[0] is bool isPerc)
{
isPercentage = isPerc;
}
if (_args.Length > 1 && _args[1] is double durDamage)
{
durationDamage = durDamage;
}
if (_args.Length > 2 && _args[2] is double durDamagePercent)
{
durationDamagePercent = durDamagePercent;
}
if (isPercentage && durationDamagePercent > 0 || !isPercentage && durationDamage > 0)
{
string damageString = isPercentage ? $"流失 {durationDamagePercent * 100:0.##}% 当前生命值" : $"流失 {durationDamage:0.##} 点生命值";
_description = $"气绝:进入行动受限状态并每{GameplayEquilibriumConstant.InGameTime}{damageString},此效果不会导致角色死亡。";
}
break;
case EffectType.Cripple:
_dispelledType = DispelledType.Strong;
_description = "战斗不能:无法普通攻击和使用技能(魔法、战技和爆发技)。";
break;
default:
break;
}
}
public override void OnSkillCasted(Character caster, List<Character> targets, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
if (target.HP <= 0 || Random.Shared.NextDouble() > ActualProbability) continue;
Effect? e = null;
double duration = _duration + _levelGrowth * (Level - 1);
int durationTurn = Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1));
switch (_effectType)
{
case EffectType.Silence:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了封技和施法解除!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Confusion:
WriteLine($"[ {target} ] 陷入了混乱!!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Taunt:
WriteLine($"[ {target} ] 被 [ {caster} ] 嘲讽了!持续时间:{持续时间}");
e = new (Skill, caster, target, _durative, duration, durationTurn);
break;
case EffectType.Delay:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了迟滞!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Stun:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了眩晕!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Freeze:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了冻结!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Petrify:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了石化!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Vulnerable:
DamageType damageType = DamageType.Magical;
if (_args.Length > 0 && _args[0] is DamageType dt)
{
damageType = dt;
}
double exDamagePercent = 0;
if (_args.Length > 1 && _args[1] is double percent)
{
exDamagePercent = percent;
}
if (exDamagePercent > 0)
{
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了易伤,额外受到 {exDamagePercent * 100:0.##}% {CharacterSet.GetDamageTypeName(damageType)}!持续时间:{持续时间}");
e = new (Skill, target, caster, _durative, duration, durationTurn, damageType, exDamagePercent);
}
break;
case EffectType.Bleed:
bool isPercentage = false;
double durationDamage = 0;
double durationDamagePercent = 0;
if (_args.Length > 0 && _args[0] is bool isPerc)
{
isPercentage = isPerc;
}
if (_args.Length > 1 && _args[1] is double durDamage)
{
durationDamage = durDamage;
}
if (_args.Length > 2 && _args[2] is double durDamagePercent)
{
durationDamagePercent = durDamagePercent;
}
if (isPercentage && durationDamagePercent > 0 || !isPercentage && durationDamage > 0)
{
string damageString = isPercentage ? $"流失 {durationDamagePercent * 100:0.##}% 当前生命值" : $"流失 {durationDamage:0.##} 点生命值";
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了气绝! [ {target} ] 进入行动受限状态且每{GameplayEquilibriumConstant.InGameTime}{damageString}!持续时间:{持续时间}");
e = new (Skill, target, caster, _durative, duration, durationTurn, isPercentage, durationDamage, durationDamagePercent);
}
break;
case EffectType.Cripple:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了战斗不能,禁止普通攻击和使用技能(魔法、战技和爆发技)!持续时间:{持续时间}");
e = new (Skill, caster, _durative, duration, durationTurn);
break;
default:
break;
}
if (e != null)
{
target.Effects.Add(e);
e.OnEffectGained(target);
GamingQueue?.LastRound.ApplyEffects.TryAdd(target, [e.EffectType]);
}
}
}
private static string GetEffectTypeName(EffectType type)
{
return type switch
{
EffectType.Taunt => "愤怒",
EffectType.Silence => "封技",
EffectType.Bleed => "气绝",
EffectType.Cripple => "战斗不能",
_ => SkillSet.GetEffectTypeName(type)
};
}
}
}

View File

@ -73,6 +73,19 @@ namespace Oshima.FunGame.OshimaModules
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)MagicID. => new (),
(long)SkillID. => new (),
(long)SuperSkillID. => new (),

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "冰狱冥嚎";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 55 + (55 * (Level - 1)) : 55;
public override double CD => 35;
public override double CastTime => 10;
public override double HardnessTime { get; set; } = 5;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, PrimaryAttribute.INT, 40, 45, 0.2, 0.2));
}
}
}

View File

@ -0,0 +1,39 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "地狱之门";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => Effects.Count > 0 ? Effects.First(e => e is ).DispelDescription : "";
public override double MPCost => Level > 0 ? 75 + (60 * (Level - 1)) : 75;
public override double CD => Level > 0 ? 65 + (0.8 * (Level - 1)) : 65;
public override double CastTime => 3;
public override double HardnessTime { get; set; } = 8;
public override int CanSelectTargetCount
{
get
{
return Level switch
{
4 => 2,
5 => 2,
6 => 3,
7 => 3,
8 => 4,
_ => 1
};
}
}
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 75, 60, DamageType.Magical));
Effects.Add(new (this, EffectType.Bleed, true, 3, 0, 0.5, 0.24, 0.08, false, 85));
}
}
}

View File

@ -0,0 +1,25 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "导力停止";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => Effects.Count > 0 ? Effects.First(e => e is ).DispelDescription : "";
public override double MPCost => Level > 0 ? 120 + (80 * (Level - 1)) : 120;
public override double CD => Level > 0 ? 100 - (1.5 * (Level - 1)) : 100;
public override double CastTime => Level > 0 ? 3 + (0.5 * (Level - 1)) : 3;
public override double HardnessTime { get; set; } = 8;
public override bool SelectAllEnemies => true;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 35, 50, DamageType.Magical));
Effects.Add(new (this, EffectType.Silence, true, 8, 0, 1.2, 0.24, 0.08));
}
}
}

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "岩石之息";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 40 + (35 * (Level - 1)) : 40;
public override double CD => 32;
public override double CastTime => 9;
public override double HardnessTime { get; set; } = 5;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, PrimaryAttribute.STR, 40, 20, 0.35, 0.2));
}
}
}

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "弧形日珥";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 55 + (55 * (Level - 1)) : 55;
public override double CD => 35;
public override double CastTime => 8;
public override double HardnessTime { get; set; } = 6;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, PrimaryAttribute.AGI, 55, 35, 0.2, 0.15));
}
}
}

View File

@ -0,0 +1,39 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "死亡咆哮";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => Effects.Count > 0 ? Effects.First(e => e is ).DispelDescription : "";
public override double MPCost => Level > 0 ? 70 + (75 * (Level - 1)) : 70;
public override double CD => Level > 0 ? 55 + (1 * (Level - 1)) : 55;
public override double CastTime => 3;
public override double HardnessTime { get; set; } = 8;
public override int CanSelectTargetCount
{
get
{
return Level switch
{
4 => 2,
5 => 2,
6 => 3,
7 => 3,
8 => 4,
_ => 1
};
}
}
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 65, 75, DamageType.Magical));
Effects.Add(new (this, EffectType.Cripple, true, 3, 0, 1, 0.24, 0.08));
}
}
}

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "水蓝轰炸";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 45 + (50 * (Level - 1)) : 45;
public override double CD => 30;
public override double CastTime => 8;
public override double HardnessTime { get; set; } = 4;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 30, 25, 0.15, 0.2));
}
}
}

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "火山咆哮";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 45 + (50 * (Level - 1)) : 45;
public override double CD => 30;
public override double CastTime => 8;
public override double HardnessTime { get; set; } = 4;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 25, 30, 0.2, 0.15));
}
}
}

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "破碎虚空";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 80 + (80 * (Level - 1)) : 80;
public override double CD => 60;
public override double CastTime => 10;
public override double HardnessTime { get; set; } = 6;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new _无基础伤害(this, 0.65, 0.12));
}
}
}

View File

@ -0,0 +1,39 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "等离子之波";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => Effects.Count > 0 ? Effects.First(e => e is ).DispelDescription : "";
public override double MPCost => Level > 0 ? 70 + (75 * (Level - 1)) : 70;
public override double CD => Level > 0 ? 60 + (1.5 * (Level - 1)) : 60;
public override double CastTime => 6;
public override double HardnessTime { get; set; } = 6;
public override int CanSelectTargetCount
{
get
{
return Level switch
{
4 => 2,
5 => 2,
6 => 3,
7 => 3,
8 => 4,
_ => 1
};
}
}
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 65, 55, DamageType.Magical));
Effects.Add(new (this, EffectType.Silence, false, 0, 2, 0, 0.24, 0.08));
}
}
}

View File

@ -0,0 +1,23 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "苍白地狱";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 45 + (55 * (Level - 1)) : 45;
public override double CD => 40;
public override double CastTime => 9;
public override double HardnessTime { get; set; } = 3;
public override int CanSelectTargetCount => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, PrimaryAttribute.INT, 40, 25, 0.25, 0.25));
}
}
}

View File

@ -0,0 +1,40 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "钻石星尘";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => "被驱散性:冻结需强驱散,易伤可弱驱散";
public override double MPCost => Level > 0 ? 80 + (75 * (Level - 1)) : 80;
public override double CD => Level > 0 ? 70 + (2 * (Level - 1)) : 70;
public override double CastTime => 9;
public override double HardnessTime { get; set; } = 6;
public override int CanSelectTargetCount
{
get
{
return Level switch
{
4 => 2,
5 => 2,
6 => 3,
7 => 3,
8 => 4,
_ => 1
};
}
}
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 45, 55, DamageType.Magical));
Effects.Add(new (this, EffectType.Freeze, false, 0, 2, 0, 0.24, 0.08));
Effects.Add(new (this, EffectType.Vulnerable, false, 0, 3, 0, 0.24, 0.08, DamageType.Magical, 0.3));
}
}
}

View File

@ -32,7 +32,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, false, 0, 2, 0, 0.6, 0.04));
Effects.Add(new (this, false, 0, 2, 0, 0.24, 0.08));
}
}
@ -41,7 +41,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;

View File

@ -0,0 +1,39 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)MagicID.;
public override string Name => "鬼魅之痛";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => Effects.Count > 0 ? Effects.First(e => e is ).DispelDescription : "";
public override double MPCost => Level > 0 ? 70 + (75 * (Level - 1)) : 70;
public override double CD => Level > 0 ? 55 + (1 * (Level - 1)) : 55;
public override double CastTime => 9;
public override double HardnessTime { get; set; } = 7;
public override int CanSelectTargetCount
{
get
{
return Level switch
{
4 => 2,
5 => 2,
6 => 3,
7 => 3,
8 => 4,
_ => 1
};
}
}
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 55, 70, DamageType.Magical));
Effects.Add(new (this, EffectType.Stun, true, 6, 0, 0.7, 0.24, 0.08));
}
}
}

View File

@ -51,7 +51,9 @@ namespace Oshima.FunGame.OshimaServers.Service
FunGameConstant.Magics.AddRange([new (), new (), new (), new (), new (), new (), new (), new (),
new (), new (), new (), new (), new (), new (), new (), new (), new (), new (), new (),
new (), new (), new (), new (), new (), new (), new (), new (), new (), new ()]);
new (), new (), new (), new (), new (), new (), new (), new (), new (), new (),
new (), new (), new (), new (), new (), new (), new (), new (), new (), new (), new (), new (),
new ()]);
Dictionary<string, Item> exItems = Factory.GetGameModuleInstances<Item>(OshimaGameModuleConstant.General, OshimaGameModuleConstant.Item);
FunGameConstant.Equipment.AddRange(exItems.Values.Where(i => (int)i.ItemType >= 0 && (int)i.ItemType < 5));