删除异步,添加新技能

This commit is contained in:
milimoe 2026-01-08 01:34:13 +08:00
parent 6344c3c527
commit 1acabf28ee
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
98 changed files with 718 additions and 257 deletions

View File

@ -0,0 +1,29 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Characters
{
public class CHAOS : Character
{
public CHAOS() : base()
{
Id = 16;
Name = "CHAO";
FirstName = "SHI";
NickName = "超市";
PrimaryAttribute = PrimaryAttribute.STR;
InitialATK = 27;
InitialHP = 100;
InitialMP = 40;
InitialSTR = 14;
STRGrowth = 1.8;
InitialAGI = 12;
AGIGrowth = 1.1;
InitialINT = 4;
INTGrowth = 0.1;
InitialSPD = 300;
InitialHR = 4;
InitialMR = 2;
}
}
}

View File

@ -0,0 +1,29 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Characters
{
public class Neptune : Character
{
public Neptune() : base()
{
Id = 15;
Name = "Nep";
FirstName = "tune";
NickName = "海王星";
PrimaryAttribute = PrimaryAttribute.STR;
InitialATK = 26;
InitialHP = 95;
InitialMP = 55;
InitialSTR = 16;
STRGrowth = 1.4;
InitialAGI = 7;
AGIGrowth = 1;
InitialINT = 7;
INTGrowth = 0.6;
InitialSPD = 300;
InitialHR = 4;
InitialMR = 2;
}
}
}

View File

@ -0,0 +1,29 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Characters
{
public class Ryuko : Character
{
public Ryuko() : base()
{
Id = 17;
Name = "Ryu";
FirstName = "ko";
NickName = "流";
PrimaryAttribute = PrimaryAttribute.AGI;
InitialATK = 22;
InitialHP = 100;
InitialMP = 45;
InitialSTR = 11;
STRGrowth = 1.3;
InitialAGI = 15;
AGIGrowth = 1.4;
InitialINT = 4;
INTGrowth = 0.3;
InitialSPD = 300;
InitialHR = 4;
InitialMR = 2;
}
}
}

View File

@ -0,0 +1,29 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Characters
{
public class ShiYu : Character
{
public ShiYu() : base()
{
Id = 13;
Name = "Shi";
FirstName = "Yu";
NickName = "时雨";
PrimaryAttribute = PrimaryAttribute.AGI;
InitialATK = 20;
InitialHP = 105;
InitialMP = 65;
InitialSTR = 7;
STRGrowth = 0.7;
InitialAGI = 14;
AGIGrowth = 1.5;
InitialINT = 9;
INTGrowth = 0.8;
InitialSPD = 300;
InitialHR = 4;
InitialMR = 2;
}
}
}

View File

@ -0,0 +1,29 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Characters
{
public class TheGodK : Character
{
public TheGodK() : base()
{
Id = 18;
Name = "The God";
FirstName = "K";
NickName = "K神";
PrimaryAttribute = PrimaryAttribute.INT;
InitialATK = 23;
InitialHP = 80;
InitialMP = 70;
InitialSTR = 6;
STRGrowth = 0.6;
InitialAGI = 11;
AGIGrowth = 1.1;
InitialINT = 13;
INTGrowth = 1.3;
InitialSPD = 300;
InitialHR = 4;
InitialMR = 2;
}
}
}

View File

@ -0,0 +1,29 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Characters
{
public class XReouni : Character
{
public XReouni() : base()
{
Id = 14;
Name = "X";
FirstName = "Reouni";
NickName = "雷欧尼";
PrimaryAttribute = PrimaryAttribute.INT;
InitialATK = 19;
InitialHP = 90;
InitialMP = 75;
InitialSTR = 9;
STRGrowth = 0.9;
InitialAGI = 9;
AGIGrowth = 0.6;
InitialINT = 12;
INTGrowth = 1.5;
InitialSPD = 300;
InitialHR = 4;
InitialMR = 2;
}
}
}

View File

@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -38,9 +38,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
public override void OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
{
await base.OnSkillCasted(user, targets, others);
base.OnSkillCasted(user, targets, others);
foreach (Character target in targets)
{
target.EP += ;

View File

@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -38,9 +38,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
public override void OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
{
await base.OnSkillCasted(user, targets, others);
base.OnSkillCasted(user, targets, others);
foreach (Character target in targets)
{
target.EXP += ;

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -43,9 +43,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
public override void OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
{
await base.OnSkillCasted(user, targets, others);
base.OnSkillCasted(user, targets, others);
foreach (Character target in targets)
{
target.HP += ;

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -43,9 +43,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
public override void OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
{
await base.OnSkillCasted(user, targets, others);
base.OnSkillCasted(user, targets, others);
foreach (Character target in targets)
{
target.HP += * (target?.MaxHP ?? 0);

View File

@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -38,9 +38,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
public override void OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
{
await base.OnSkillCasted(user, targets, others);
base.OnSkillCasted(user, targets, others);
foreach (Character target in targets)
{
target.MP += ;

View File

@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -39,9 +39,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.ItemEffects
}
}
public override async Task OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
public override void OnSkillCasted(User user, List<Character> targets, Dictionary<string, object> others)
{
await base.OnSkillCasted(user, targets, others);
base.OnSkillCasted(user, targets, others);
foreach (Character target in targets)
{
target.MP += * (target?.MaxHP ?? 0);

View File

@ -27,7 +27,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
this. = Calculation.PercentageCheck();
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
double total = 0;
foreach (Character target in targets)

View File

@ -27,7 +27,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
this. = Calculation.PercentageCheck();
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
double total = 0;
foreach (Character target in targets)

View File

@ -27,7 +27,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
this. = Calculation.PercentageCheck();
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
double total = 0;
foreach (Character target in targets)

View File

@ -49,7 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
MagicType = magicType;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{

View File

@ -31,7 +31,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
MagicType = magicType;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{

View File

@ -26,7 +26,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
MagicType = magicType;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{

View File

@ -31,7 +31,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
MagicType = magicType;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{

View File

@ -22,7 +22,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
this. = ;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -22,7 +22,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
this. = ;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -30,7 +30,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_durationTurn = durationTurn;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -22,7 +22,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
this. = ;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -30,7 +30,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_durationTurn = durationTurn;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -17,7 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
Dictionary<Character, bool> isTeammateDictionary = GamingQueue?.GetIsTeammateDictionary(caster, targets) ?? [];
foreach (Character target in targets)

View File

@ -17,7 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
Dictionary<Character, bool> isTeammateDictionary = GamingQueue?.GetIsTeammateDictionary(caster, targets) ?? [];
foreach (Character target in targets)

View File

@ -1,5 +1,7 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Skills;
namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
@ -7,18 +9,22 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"打断施法:中断目标正在进行的吟唱。";
public override string Description => $"对{Skill.TargetDescription()}施加打断施法效果:中断其正在进行的吟唱。";
public override EffectType EffectType => EffectType.InterruptCasting;
public (Skill skill) : base(skill)
{
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
InterruptCasting(target, caster);
if (!CheckExemption(caster, target, this))
{
InterruptCasting(target, caster);
}
}
}
}

View File

@ -30,7 +30,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_durationTurn = durationTurn;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -38,7 +38,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
};
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -36,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
Dictionary<Character, bool> isTeammateDictionary = GamingQueue?.GetIsTeammateDictionary(caster, targets) ?? [];
foreach (Character target in targets)

View File

@ -36,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
Dictionary<Character, bool> isTeammateDictionary = GamingQueue?.GetIsTeammateDictionary(caster, targets) ?? [];
foreach (Character target in targets)

View File

@ -50,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
SetDescription();
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
@ -58,18 +58,19 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
Effect? e = null;
double duration = _duration + _levelGrowth * (Level - 1);
int durationTurn = Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1));
string tip = "";
switch (_effectType)
{
case EffectType.Silence:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了封技和施法解除!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了封技和施法解除!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Confusion:
WriteLine($"[ {target} ] 陷入了混乱!!持续时间:{持续时间}");
tip = $"[ {target} ] 陷入了混乱!!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Taunt:
WriteLine($"[ {target} ] 被 [ {caster} ] 嘲讽了!持续时间:{持续时间}");
tip = $"[ {target} ] 被 [ {caster} ] 嘲讽了!持续时间:{持续时间}";
e = new (Skill, caster, target, _durative, duration, durationTurn);
break;
case EffectType.Delay:
@ -78,19 +79,19 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
healingReductionPercent = healingReduce;
}
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了迟滞!普通攻击和技能的硬直时间、当前行动等待时间延长了 {healingReductionPercent * 100:0.##}%!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了迟滞!普通攻击和技能的硬直时间、当前行动等待时间延长了 {healingReductionPercent * 100:0.##}%!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn, healingReductionPercent);
break;
case EffectType.Stun:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了眩晕!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了眩晕!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Freeze:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了冻结!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了冻结!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Petrify:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了石化!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了石化!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn);
break;
case EffectType.Vulnerable:
@ -106,7 +107,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
}
if (exDamagePercent > 0)
{
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了易伤,额外受到 {exDamagePercent * 100:0.##}% {CharacterSet.GetDamageTypeName(damageType)}!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了易伤,额外受到 {exDamagePercent * 100:0.##}% {CharacterSet.GetDamageTypeName(damageType)}!持续时间:{持续时间}";
e = new (Skill, target, caster, _durative, duration, durationTurn, damageType, exDamagePercent);
}
break;
@ -136,19 +137,20 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
if (Level > 0) durationDamage += durationDamageLevelGrowth * (Level - 1);
if (Level > 0) durationDamagePercent += durationDamageLevelGrowth * (Level - 1);
string damageString = isPercentage ? $"流失 {durationDamagePercent * 100:0.##}% 当前生命值" : $"流失 {durationDamage:0.##} 点生命值";
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了气绝! [ {target} ] 进入行动受限状态且每{GameplayEquilibriumConstant.InGameTime}{damageString}!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了气绝! [ {target} ] 进入行动受限状态且每{GameplayEquilibriumConstant.InGameTime}{damageString}!持续时间:{持续时间}";
e = new (Skill, target, caster, _durative, duration, durationTurn, isPercentage, durationDamage, durationDamagePercent);
}
break;
case EffectType.Cripple:
WriteLine($"[ {caster} ] 对 [ {target} ] 造成了战斗不能,禁止普通攻击和使用技能(魔法、战技和爆发技)!持续时间:{持续时间}");
tip = $"[ {caster} ] 对 [ {target} ] 造成了战斗不能,禁止普通攻击和使用技能(魔法、战技和爆发技)!持续时间:{持续时间}";
e = new (Skill, caster, _durative, duration, durationTurn);
break;
default:
break;
}
if (e != null)
if (e != null && !CheckExemption(caster, target, e))
{
WriteLine(tip);
target.Effects.Add(e);
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);

View File

@ -23,7 +23,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
CanRespawn = canRespawn;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -25,7 +25,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
MagicType = magicType;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{

View File

@ -23,7 +23,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
CanRespawn = canRespawn;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -30,15 +30,18 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了封技和施法解除!持续时间:{封技时间}");
e = new(Skill, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)));
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
if (!CheckExemption(caster, enemy, e))
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了封技和施法解除!持续时间:{封技时间}");
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
}
}
}
}

View File

@ -39,15 +39,18 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_durationDamagePercent = durationDamagePercent;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了气绝!持续时间:{气绝时间}");
e = new(Skill, enemy, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)), _isPercentage, _durationDamage, _durationDamagePercent);
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
if (!CheckExemption(caster, enemy, e))
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了气绝!持续时间:{气绝时间}");
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
}
}
}
}

View File

@ -31,16 +31,19 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{
if (enemy.HP <= 0) continue;
WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间}");
e = new(Skill, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)));
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
if (!CheckExemption(caster, enemy, e))
{
WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间}");
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
}
}
}
}

View File

@ -54,17 +54,20 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_healingReductionPercentLevelGrowth = healingReductionPercentLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character enemy in targets)
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了虚弱!伤害降低 {ActualDamageReductionPercent * 100:0.##}%" +
$"物理护甲降低 {ActualDEFReductionPercent * 100:0.##}%,魔法抗性降低 {ActualMDFReductionPercent * 100:0.##}%" +
$"治疗效果降低 {ActualHealingReductionPercent * 100:0.##}%!持续时间:{虚弱时间}");
e = new(Skill, enemy, caster, _durative, _duration + _levelGrowth * (Level - 1), Convert.ToInt32(_durationTurn + _levelGrowth * (Level - 1)), ActualDamageReductionPercent, ActualDEFReductionPercent, ActualMDFReductionPercent, ActualHealingReductionPercent);
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
if (!CheckExemption(caster, enemy, e))
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了虚弱!伤害降低 {ActualDamageReductionPercent * 100:0.##}%" +
$"物理护甲降低 {ActualDEFReductionPercent * 100:0.##}%,魔法抗性降低 {ActualMDFReductionPercent * 100:0.##}%" +
$"治疗效果降低 {ActualHealingReductionPercent * 100:0.##}%!持续时间:{虚弱时间}");
enemy.Effects.Add(e);
e.OnEffectGained(enemy);
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
}
}
}
}

View File

@ -32,11 +32,10 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
_durationTurn = durationTurn;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
WriteLine($"[ {target} ] 的行动速度降低了 {-SPD:0.##} 点,行动等待时间(当前硬直时间)被延长了 30%!持续时间:{持续时间}");
ExSPD e = new(Skill, new Dictionary<string, object>()
{
{ "exspd", SPD }
@ -46,12 +45,16 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
Duration = _duration,
DurationTurn = _durationTurn
};
target.Effects.Add(e);
e.OnEffectGained(target);
e.EffectType = EffectType.Slow;
e.IsDebuff = true;
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
GamingQueue?.ChangeCharacterHardnessTime(target, 0.3, true, false);
if (!CheckExemption(caster, target, e))
{
target.Effects.Add(e);
e.OnEffectGained(target);
e.EffectType = EffectType.Slow;
e.IsDebuff = true;
WriteLine($"[ {target} ] 的行动速度降低了 {-SPD:0.##} 点,行动等待时间(当前硬直时间)被延长了 30%!持续时间:{持续时间}");
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
GamingQueue?.ChangeCharacterHardnessTime(target, 0.3, true, false);
}
}
}
}

View File

@ -32,5 +32,12 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Skills\ShiYu\" />
<Folder Include="Skills\TheGodK\" />
<Folder Include="Skills\Ryuko\" />
<Folder Include="Skills\CHAOS\" />
</ItemGroup>
</Project>

View File

@ -52,7 +52,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -74,7 +74,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
= caster.EP;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -56,7 +56,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
character.PhysicalPenetration -= 穿;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -68,7 +68,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
= ;
if (!caster.Effects.Contains(this))

View File

@ -0,0 +1,79 @@
using System;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
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 override string ExemptionDescription => Effects.Count > 0 ? Effects.First().ExemptionDescription : "";
public override int CanSelectTargetRange => 3;
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
{
get
{
string str = $"分裂伤害:{分裂百分比 * 100:0.##}%。无视免疫。";
if (GamingQueue?.Map != null)
{
return $"普通攻击暴击时会自动产生分裂伤害至其附近半径为 {Skill.CanSelectTargetRange} 格的菱形区域内的敌人,但最多只会对两个敌人造成分裂伤害。{str}";
}
else
{
return $"普通攻击暴击时会自动产生分裂伤害至其他两个随机的敌人。{str}";
}
}
}
public override ImmuneType IgnoreImmune => ImmuneType.All;
public double => 0.3 + (Skill.Character?.Level ?? 0) / 100;
public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult)
{
if (character == Skill.Character && isNormalAttack && damageResult == DamageResult.Critical && GamingQueue != null)
{
List<Character> allEnemys = [.. GamingQueue.AllCharacters.Where(c => c != character && c != enemy && c.HP > 0 && !GamingQueue.IsTeammate(character, c))];
List<Character> targets = [];
if (GamingQueue?.Map is GameMap map)
{
List<Grid> grids = [];
Grid? enemyGrid = map.GetCharacterCurrentGrid(enemy);
if (enemyGrid != null)
{
grids.AddRange(map.GetGridsByRange(enemyGrid, Skill.CanSelectTargetRange, true));
grids = [.. grids.Where(g => g.Characters.Count > 0).OrderBy(g => GameMap.CalculateManhattanDistance(enemyGrid, g)).Take(2)];
}
targets = Skill.SelectTargetsByRange(character, allEnemys, [], [], grids, false);
}
else
{
targets.AddRange(allEnemys.OrderBy(o => Random.Shared.Next()).Take(2));
}
double = actualDamage * ;
foreach (Character target in targets)
{
DamageToEnemy(character, target, damageType, magicType, , false, true);
}
}
}
}
}

View File

@ -143,7 +143,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
IEnumerable<Effect> effects = caster.Effects.Where(e => e is );
if (effects.Any())

View File

@ -71,7 +71,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
if (actor == Skill.Character)
{
throwingBonus += 100;
throwingBonus += 200;
}
return true;
}

View File

@ -58,7 +58,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -72,7 +72,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
baseHardnessTime *= 0.3;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -43,7 +43,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
private double => * Skill.Character?.INT ?? 0;
private double => 1 * Level;
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character c in targets)
{

View File

@ -42,7 +42,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -62,22 +62,22 @@ namespace Oshima.FunGame.OshimaModules.Skills
switch (skill.SkillRangeType)
{
case SkillRangeType.Diamond:
str = "目标菱形区域";
str = $"目标半径为 {skill.CanSelectTargetRange} 格的菱形区域";
break;
case SkillRangeType.Circle:
str = "目标圆形区域";
str = $"目标半径为 {skill.CanSelectTargetRange} 格的圆形区域";
break;
case SkillRangeType.Square:
str = "目标正方形区域";
str = $"目标边长为 {skill.CanSelectTargetRange * 2 + 1} 格的正方形区域";
break;
case SkillRangeType.Line:
str = "自身与目标地点之间的直线区域";
str = $"自身与目标地点之间的、宽度为 {skill.CanSelectTargetRange} 格的直线区域";
break;
case SkillRangeType.LinePass:
str = "自身与目标地点之间的直线区域以及贯穿该目标地点直至地图边缘的直线区域";
str = $"自身与目标地点之间的、宽度为 {skill.CanSelectTargetRange} 格的直线区域以及贯穿该目标地点直至地图边缘的等宽直线区域";
break;
case SkillRangeType.Sector:
str = "目标扇形区域";
str = $"目标最大半径为 {skill.CanSelectTargetRange} 格的扇形区域";
break;
default:
break;

View File

@ -0,0 +1,70 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
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 => $"每次造成伤害或受到伤害时,投掷 1d10结果为偶数时造成的伤害提升 {伤害提升 * 100:0.##}%,受到伤害减少 {伤害减少 * 100:0.##}%;反之不产生任何效果。";
public bool { get; set; } = false;
public double { get; set; } = 1;
public double { get; set; } = 0.5;
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
{
double bouns = 0;
if (damage > 0 && ( || (! && Random.Shared.Next(10) % 2 == 0)))
{
Character c = character;
if (character == Skill.Character)
{
bouns = damage * ;
WriteLine($"[ {character} ] 发动了八卦阵!伤害提升了 {bouns:0.##} 点!");
}
else if (enemy == Skill.Character)
{
c = enemy;
bouns = -(damage * );
WriteLine($"[ {character} ] 发动了八卦阵!伤害减少了 {bouns:0.##} 点!");
}
if ()
{
WriteLine($"[ {character} ] 发动了归元环!冷却时间减少了 {归元环特效.冷却时间减少:0.##} {GameplayEquilibriumConstant.InGameTime}");
foreach (Skill s in c.Skills)
{
if (s.CurrentCD >= .)
{
s.CurrentCD -= .;
if (s.CurrentCD < 0)
{
s.CurrentCD = 0;
s.Enable = true;
}
}
}
}
}
return bouns;
}
}
}

View File

@ -0,0 +1,74 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
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().Description : "";
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
public override double EPCost => 100;
public override double CD => 60;
public override double HardnessTime { get; set; } = 10;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
public (Character? character = null) : base(SkillType.SuperSkill, character)
{
Effects.Add(new (this));
}
}
public class (Skill skill) : Effect(skill)
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内,造成伤害必定暴击;使 [ 八卦阵 ] 不需要检定,直接产生偶数效果;并减少所有当前冷却时间高于 {冷却时间阈值:0.##} {GameplayEquilibriumConstant.InGameTime}的主动技能 {冷却时间减少:0.##} {GameplayEquilibriumConstant.InGameTime}冷却时间。";
public override bool Durative => true;
public override double Duration => 30;
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
public const double = 6;
public const double = 3;
public override void OnEffectGained(Character character)
{
if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{
e. = true;
}
}
public override void OnEffectLost(Character character)
{
if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{
e. = false;
}
}
public override bool BeforeCriticalCheck(Character actor, Character enemy, ref double throwingBonus)
{
if (actor == Skill.Character)
{
throwingBonus += 200;
}
return true;
}
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))
{
caster.Effects.Add(this);
OnEffectGained(caster);
}
RecordCharacterApplyEffects(caster, EffectType.CritBoost, EffectType.DamageBoost, EffectType.DefenseBoost);
}
}
}

View File

@ -84,7 +84,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
baseHardnessTime *= 0.8;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -66,7 +66,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
return 0;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -66,7 +66,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
character.Recovery(pastHP, pastMP, pastMaxHP, pastMaxMP);
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
RemainDuration = Duration;
if (!caster.Effects.Contains(this))

View File

@ -10,8 +10,8 @@ namespace Oshima.FunGame.OshimaModules.Skills
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 EPCost => 55;
public override double CD => 45;
public override double EPCost => 40;
public override double CD => 35;
public override double HardnessTime { get; set; } = 10;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;

View File

@ -11,7 +11,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
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 EPCost => 75;
public override double EPCost => 60;
public override double CD => 35;
public override double HardnessTime { get; set; } = 7;
public override bool CanSelectSelf => true;
@ -49,7 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -36,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
if (GamingQueue != null)
{

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
public override double EPCost => 65;
public override double CD => 55;
public override double CD => 40;
public override double HardnessTime { get; set; } = 10;
public override bool CanSelectSelf => false;
public override bool CanSelectTeammate => false;
@ -48,27 +48,30 @@ namespace Oshima.FunGame.OshimaModules.Skills
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
WriteLine($"[ {caster} ] 嘲讽了 [ {target} ] [ {target} ] 愤怒了!!持续时间:{持续时间}");
e = new(Skill, caster, caster);
if (_durative && _duration > 0)
if (!CheckExemption(caster, target, e))
{
e.Durative = true;
e.Duration = ;
e.RemainDuration = ;
WriteLine($"[ {caster} ] 嘲讽了 [ {target} ] [ {target} ] 愤怒了!!持续时间:{持续时间}");
if (_durative && _duration > 0)
{
e.Durative = true;
e.Duration = ;
e.RemainDuration = ;
}
else if (!_durative && _durationTurn > 0)
{
e.Durative = false;
e.DurationTurn = (int);
e.RemainDurationTurn = (int);
}
target.Effects.Add(e);
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
}
else if (!_durative && _durationTurn > 0)
{
e.Durative = false;
e.DurationTurn = (int);
e.RemainDurationTurn = (int);
}
target.Effects.Add(e);
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
}
}
}

View File

@ -62,7 +62,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
character.ExMOV -= ;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
= 0;
if (!caster.Effects.Contains(this))

View File

@ -44,7 +44,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
AddEffectTypeToCharacter(character, [EffectType]);
character.ExSPD += 100;
character.ExCritRate += 0.08;
GamingQueue?.InterruptCastingAsync(character);
GamingQueue?.InterruptCasting(character);
}
public override void OnEffectLost(Character character)
@ -75,7 +75,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
return 0;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
if (!caster.Effects.Contains(this))
{

View File

@ -14,7 +14,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double EPCost => 60;
public override double CD => 18;
public override double HardnessTime { get; set; } = 7;
public override int CanSelectTargetRange => 4;
public override int CanSelectTargetRange => 1;
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.LinePass;

View File

@ -10,6 +10,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Name => "金刚击";
public override string Description => string.Join("", Effects.Select(e => e.Description));
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
public override string ExemptionDescription => Effects.Count > 0 ? Effects.First(e => e is ).ExemptionDescription : "";
public override double EPCost => 60;
public override double CD => 20;
public override double HardnessTime { get; set; } = 8;

View File

@ -1,6 +1,8 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
namespace Oshima.FunGame.OshimaModules.Skills
{
@ -19,10 +21,11 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectTeammate => false;
public override int CanSelectTargetRange => 0;
public override bool SelectIncludeCharacterGrid => false;
public override bool AllowSelectNoCharacterGrid => true;
public (Character? character = null) : base(SkillType.Skill, character)
{
CastRange = 7;
CastRange = 9;
Effects.Add(new (this));
}
}
@ -31,15 +34,19 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"立即将角色传送到范围内的任意一个没有被角色占据的指定地点。";
public override string Description => $"立即将角色传送到范围内的任意一个没有被角色占据的指定地点,并附赠一次战技的决策点配额。";
public override string DispelDescription => "";
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
if (GamingQueue?.Map is GameMap map && grids.Count > 0)
{
map.CharacterMove(caster, map.GetCharacterCurrentGrid(caster), grids[0]);
}
if (GamingQueue != null && GamingQueue.CharacterDecisionPoints.TryGetValue(caster, out DecisionPoints? dp) && dp != null)
{
dp.AddTempActionQuota(CharacterActionType.CastSkill);
}
}
}
}

View File

@ -17,7 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Skill, character)
{
ExemptionDescription = $"迟滞{SkillSet.GetExemptionDescription(EffectType.Delay)}\r\n混乱{SkillSet.GetExemptionDescription(EffectType.Confusion)}";
CastRange = 2;
CastRange = 4;
Effects.Add(new (this, EffectType.Delay, false, 0, 3, 0, 1, 0, 0.5));
Effects.Add(new (this, EffectType.Confusion, false, 0, 2, 0, 0.45, 0.05));
}

View File

@ -48,6 +48,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
private double { get; set; } = 85;
private double { get; set; } = 80;
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string DispelDescription => Effects.FirstOrDefault(e => e is )?.DispelDescription ?? "";
public override double MPCost => Level > 0 ? 110 + (95 * (Level - 1)) : 110;
public override double CD => Level > 0 ? 65 - (2 * (Level - 1)) : 65;
public override double CastTime => 5;
public override double CastTime => 3;
public override double HardnessTime { get; set; } = 7;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;

View File

@ -30,6 +30,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Sector;
public override int CanSelectTargetRange => 4;
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -68,6 +68,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -112,7 +115,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
_targets = targets;
foreach (Character target in targets)

View File

@ -14,6 +14,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double CastTime => 9;
public override double HardnessTime { get; set; } = 5;
public override int CanSelectTargetCount => 3;
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.LinePass;
public override int CanSelectTargetRange => 2;
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -14,11 +14,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double CastTime => 4;
public override double HardnessTime { get; set; } = 5;
public override int CanSelectTargetCount => 3;
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 25, 20, false, 0.7));
Effects.Add(new (this, 4, 2, false, 0.3));
Effects.Add(new (this, 35, 30, false, 0.7));
Effects.Add(new (this, 4, 3, false, 0.3));
}
}
}

View File

@ -52,7 +52,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 85 + (85 * (Level - 1)) : 85;
public override double CD => Level > 0 ? 45 - (0.5 * (Level - 1)) : 45;
public override double CastTime => Level > 0 ? 6 + (0.5 * (Level - 1)) : 6;
public override double CastTime => Level > 0 ? 3 + (0.5 * (Level - 1)) : 3;
public override double HardnessTime { get; set; } = 6;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -67,7 +67,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -12,12 +12,12 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string ExemptionDescription => Effects.Count > 0 ? Effects.First().ExemptionDescription : "";
public override double MPCost => Level > 0 ? 65 + (75 * (Level - 1)) : 65;
public override double CD => Level > 0 ? 28 - (1 * (Level - 1)) : 28;
public override double CastTime => Level > 0 ? 3 + (1.5 * (Level - 1)) : 3;
public override double CastTime => Level > 0 ? 2 + (2 * (Level - 1)) : 2;
public override double HardnessTime { get; set; } = 5;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 60, 30));
Effects.Add(new (this, 65, 35));
}
}
}

View File

@ -13,7 +13,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string ExemptionDescription => Effects.Count > 0 ? Effects.First().ExemptionDescription : "";
public override double MPCost => Level > 0 ? 85 + (95 * (Level - 1)) : 85;
public override double CD => Level > 0 ? 32 - (1 * (Level - 1)) : 32;
public override double CastTime => Level > 0 ? 6 + (1.5 * (Level - 1)) : 6;
public override double CastTime => Level > 0 ? 4 + (1 * (Level - 1)) : 4;
public override double HardnessTime { get; set; } = 6;
public override int CanSelectTargetCount
{
@ -34,7 +34,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, false, 0, 3, 0, 40, 20, 0.08, 0.01));
Effects.Add(new (this, false, 0, 3, 0, 40, 30, 0.08, 0.01));
}
}
@ -77,12 +77,10 @@ namespace Oshima.FunGame.OshimaModules.Skills
_accLevelGrowth = accLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
WriteLine($"[ {target} ] 的行动速度降低了 {ExSPD:0.##} 点,行动等待时间(当前硬直时间)被延长了 30%!持续时间:{持续时间}");
WriteLine($"[ {target} ] 的加速系数降低了 {ExACC * 100:0.##}%!持续时间:{持续时间}");
Effect e1 = new ExSPD(Skill, new Dictionary<string, object>()
{
{ "exspd", -ExSPD }
@ -92,10 +90,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
Duration = ,
DurationTurn = (int)
};
target.Effects.Add(e1);
e1.OnEffectGained(target);
e1.IsDebuff = true;
GamingQueue?.ChangeCharacterHardnessTime(target, 0.3, true, false);
if (!CheckExemption(caster, target, e1))
{
WriteLine($"[ {target} ] 的行动速度降低了 {ExSPD:0.##} 点,行动等待时间(当前硬直时间)被延长了 30%!持续时间:{持续时间}");
target.Effects.Add(e1);
e1.OnEffectGained(target);
e1.IsDebuff = true;
GamingQueue?.ChangeCharacterHardnessTime(target, 0.3, true, false);
}
Effect e2 = new AccelerationCoefficient(Skill, new()
{
{ "exacc", -ExACC }
@ -105,10 +107,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
Duration = ,
DurationTurn = (int)
};
target.Effects.Add(e2);
e2.OnEffectGained(target);
e2.IsDebuff = true;
GamingQueue?.LastRound.AddApplyEffects(target, EffectType.Slow);
if (!CheckExemption(caster, target, e2))
{
WriteLine($"[ {target} ] 的加速系数降低了 {ExACC * 100:0.##}%!持续时间:{持续时间}");
target.Effects.Add(e2);
e2.OnEffectGained(target);
e2.IsDebuff = true;
GamingQueue?.LastRound.AddApplyEffects(target, EffectType.Slow);
}
}
}
}

View File

@ -13,12 +13,12 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string ExemptionDescription => Effects.Count > 0 ? Effects.First().ExemptionDescription : "";
public override double MPCost => Level > 0 ? 75 + (85 * (Level - 1)) : 75;
public override double CD => Level > 0 ? 38 - (1 * (Level - 1)) : 38;
public override double CastTime => Level > 0 ? 7 + (1 * (Level - 1)) : 7;
public override double CastTime => Level > 0 ? 4 + (0.5 * (Level - 1)) : 4;
public override double HardnessTime { get; set; } = 4;
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, false, 0, 4, 0, 40, 25, 0.1, 0.02));
Effects.Add(new (this, false, 0, 4, 0, 50, 40, 0.1, 0.02));
}
}
@ -61,12 +61,10 @@ namespace Oshima.FunGame.OshimaModules.Skills
_accLevelGrowth = accLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
WriteLine($"[ {target} ] 的行动速度降低了 {ExSPD:0.##} 点,行动等待时间(当前硬直时间)被延长了 30%!持续时间:{持续时间}");
WriteLine($"[ {target} ] 的加速系数降低了 {ExACC * 100:0.##}%!持续时间:{持续时间}");
Effect e1 = new ExSPD(Skill, new Dictionary<string, object>()
{
{ "exspd", -ExSPD }
@ -76,10 +74,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
Duration = ,
DurationTurn = (int)
};
target.Effects.Add(e1);
e1.OnEffectGained(target);
e1.IsDebuff = true;
GamingQueue?.ChangeCharacterHardnessTime(target, 0.3, true, false);
if (!CheckExemption(caster, target, e1))
{
WriteLine($"[ {target} ] 的行动速度降低了 {ExSPD:0.##} 点,行动等待时间(当前硬直时间)被延长了 30%!持续时间:{持续时间}");
target.Effects.Add(e1);
e1.OnEffectGained(target);
e1.IsDebuff = true;
GamingQueue?.ChangeCharacterHardnessTime(target, 0.3, true, false);
}
Effect e2 = new AccelerationCoefficient(Skill, new()
{
{ "exacc", -ExACC }
@ -89,10 +91,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
Duration = ,
DurationTurn = (int)
};
target.Effects.Add(e2);
e2.OnEffectGained(target);
e2.IsDebuff = true;
GamingQueue?.LastRound.AddApplyEffects(target, EffectType.Slow);
if (!CheckExemption(caster, target, e2))
{
WriteLine($"[ {target} ] 的加速系数降低了 {ExACC * 100:0.##}%!持续时间:{持续时间}");
target.Effects.Add(e2);
e2.OnEffectGained(target);
e2.IsDebuff = true;
GamingQueue?.LastRound.AddApplyEffects(target, EffectType.Slow);
}
}
}
}

View File

@ -11,7 +11,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 70 + (80 * (Level - 1)) : 70;
public override double CD => Level > 0 ? 25 - (1 * (Level - 1)) : 25;
public override double CastTime => Level > 0 ? 2 + (1.5 * (Level - 1)) : 2;
public override double CastTime => Level > 0 ? 2 + (1 * (Level - 1)) : 2;
public override double HardnessTime { get; set; } = 4;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 90 + (95 * (Level - 1)) : 90;
public override double CD => Level > 0 ? 55 - (0.8 * (Level - 1)) : 55;
public override double CastTime => Level > 0 ? 6 + (1.5 * (Level - 1)) : 6;
public override double CastTime => Level > 0 ? 4 + (1 * (Level - 1)) : 4;
public override double HardnessTime { get; set; } = 7;
public override bool CanSelectSelf => true;
public override bool CanSelectTeammate => true;
@ -78,7 +78,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_accLevelGrowth = accLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -62,7 +62,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_accLevelGrowth = accLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -53,14 +53,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
GamingQueue = skill.GamingQueue;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
Effect effect = new (Skill, ImmuneType.Magical, false, 0, );
await effect.OnSkillCasted(caster, targets, grids, others);
effect.OnSkillCasted(caster, targets, grids, others);
if (Level > 4)
{
effect = new (Skill, ImmuneType.Skilled, false, 0, 1);
await effect.OnSkillCasted(caster, targets, grids, others);
effect.OnSkillCasted(caster, targets, grids, others);
}
}
}

View File

@ -14,6 +14,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double CastTime => 8;
public override double HardnessTime { get; set; } = 4;
public override int CanSelectTargetCount => 3;
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -32,6 +32,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -14,6 +14,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double CastTime => 8;
public override double HardnessTime { get; set; } = 4;
public override int CanSelectTargetCount => 3;
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -37,7 +37,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new _带基础伤害(this, 50, 15, 0.1, 0.04));
Effects.Add(new (this, false, 0, 2, 0, 0.03, 0.02));
Effects.Add(new (this, false, 0, 4, 0, 0.1, 0.025));
}
}
@ -71,32 +71,35 @@ namespace Oshima.FunGame.OshimaModules.Skills
_MDFReductionPercentLevelGrowth = MDFReductionPercentLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
WriteLine($"[ {target} ] 的魔法抗性降低了 {ActualMDFReductionPercent * 100:0.##}%!持续时间:{持续时间}");
ExMDF e = new(Skill, new(){
{ "mdftype", 0 },
{ "mdfvalue", -ActualMDFReductionPercent }
}, caster);
target.Effects.Add(e);
if (_durative && _duration > 0)
if (!CheckExemption(caster, target, e))
{
e.Durative = true;
e.Duration = ;
e.RemainDuration = ;
WriteLine($"[ {target} ] 的魔法抗性降低了 {ActualMDFReductionPercent * 100:0.##}%!持续时间:{持续时间}");
target.Effects.Add(e);
if (_durative && _duration > 0)
{
e.Durative = true;
e.Duration = ;
e.RemainDuration = ;
}
else if (!_durative && _durationTurn > 0)
{
e.Durative = false;
e.DurationTurn = (int);
e.RemainDurationTurn = (int);
}
e.EffectType = EffectType.MagicResistBreak;
e.Source = caster;
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
}
else if (!_durative && _durationTurn > 0)
{
e.Durative = false;
e.DurationTurn = (int);
e.RemainDurationTurn = (int);
}
e.EffectType = EffectType.MagicResistBreak;
e.Source = caster;
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
}
}
}

View File

@ -54,7 +54,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 110 + (110 * (Level - 1)) : 110;
public override double CD => Level > 0 ? 50 - (1.5 * (Level - 1)) : 50;
public override double CastTime => Level > 0 ? 6 + (1 * (Level - 1)) : 5;
public override double CastTime => Level > 0 ? 3 + (1 * (Level - 1)) : 3;
public override double HardnessTime { get; set; } = 7;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -69,7 +69,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -53,7 +53,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 90 + (95 * (Level - 1)) : 90;
public override double CD => Level > 0 ? 35 - (0.5 * (Level - 1)) : 35;
public override double CastTime => Level > 0 ? 4 + (1.5 * (Level - 1)) : 4;
public override double CastTime => Level > 0 ? 4 + (1 * (Level - 1)) : 4;
public override double HardnessTime { get; set; } = 5;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -68,7 +68,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -19,7 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, true, 7, 0, 2, 0.1, 1, 0.1, 0.25));
Effects.Add(new (this, true, 7, 0, 2, 0.1, 1, 0.1, 0.25, 0.001));
}
}
}

View File

@ -72,30 +72,33 @@ namespace Oshima.FunGame.OshimaModules.Skills
_confusionProbabilityLevelGrowth = confusionProbabilityLevelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{
DamageToEnemy(caster, target, DamageType.Magical, MagicType, Damage);
if (target.HP > 0 && Random.Shared.NextDouble() < ActualConfusionProbability)
{
WriteLine($"[ {target} ] 陷入了混乱!!持续时间:{持续时间}");
e = new(Skill, caster);
if (_durative && _duration > 0)
if (!CheckExemption(caster, target, e))
{
e.Durative = true;
e.Duration = ;
e.RemainDuration = ;
WriteLine($"[ {target} ] 陷入了混乱!!持续时间:{持续时间}");
if (_durative && _duration > 0)
{
e.Durative = true;
e.Duration = ;
e.RemainDuration = ;
}
else if (!_durative && _durationTurn > 0)
{
e.Durative = false;
e.DurationTurn = (int);
e.RemainDurationTurn = (int);
}
target.Effects.Add(e);
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
}
else if (!_durative && _durationTurn > 0)
{
e.Durative = false;
e.DurationTurn = (int);
e.RemainDurationTurn = (int);
}
target.Effects.Add(e);
e.OnEffectGained(target);
GamingQueue?.LastRound.AddApplyEffects(target, e.EffectType);
}
}
}

View File

@ -53,7 +53,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double MPCost => Level > 0 ? 85 + (90 * (Level - 1)) : 85;
public override double CD => Level > 0 ? 35 - (0.5 * (Level - 1)) : 35;
public override double CastTime => Level > 0 ? 4 + (1.5 * (Level - 1)) : 4;
public override double CastTime => Level > 0 ? 4 + (0.5 * (Level - 1)) : 4;
public override double HardnessTime { get; set; } = 6;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -68,7 +68,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
_levelGrowth = levelGrowth;
}
public override async Task OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
public override void OnSkillCasted(Character caster, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
foreach (Character target in targets)
{

View File

@ -200,14 +200,14 @@ namespace Oshima.FunGame.OshimaServers
foreach (Character c in inGameCharacters.Where(c => c != winner && c.HP > 0))
{
SendAllGamingMessage(obj, data, "[ " + winner + " ] 对 [ " + c + " ] 造成了 99999999999 点真实伤害。");
await actionQueue.DeathCalculationAsync(winner, c);
actionQueue.DeathCalculation(winner, c);
}
await actionQueue.EndGameInfo(winner);
actionQueue.EndGameInfo(winner);
break;
}
// 检查是否有角色可以行动
Character? characterToAct = await actionQueue.NextCharacterAsync();
Character? characterToAct = actionQueue.NextCharacter();
// 处理回合
if (characterToAct != null)
@ -220,7 +220,7 @@ namespace Oshima.FunGame.OshimaServers
break;
}
bool isGameEnd = await actionQueue.ProcessTurnAsync(characterToAct);
bool isGameEnd = actionQueue.ProcessTurn(characterToAct);
if (isGameEnd)
{
break;
@ -230,7 +230,7 @@ namespace Oshima.FunGame.OshimaServers
}
// 模拟时间流逝
totalTime += await actionQueue.TimeLapse();
totalTime += actionQueue.TimeLapse();
if (actionQueue.Eliminated.Count > deaths)
{

View File

@ -94,15 +94,15 @@ namespace Oshima.FunGame.OshimaServers.Service
foreach (Character c in characters.Where(c => c != winner && c.HP > 0))
{
WriteLine("[ " + winner + " ] 对 [ " + c + " ] 造成了 99999999999 点真实伤害。");
await actionQueue.DeathCalculationAsync(winner, c);
actionQueue.DeathCalculation(winner, c);
}
await actionQueue.EndGameInfo(winner);
actionQueue.EndGameInfo(winner);
Result.Add(_msg);
break;
}
// 检查是否有角色可以行动
Character? characterToAct = await actionQueue.NextCharacterAsync();
Character? characterToAct = actionQueue.NextCharacter();
// 处理回合
if (characterToAct != null)
@ -110,7 +110,7 @@ namespace Oshima.FunGame.OshimaServers.Service
WriteLine($"=== Round {i++} ===");
WriteLine($"现在是 [ {characterToAct} ] 的回合!");
bool isGameEnd = await actionQueue.ProcessTurnAsync(characterToAct);
bool isGameEnd = actionQueue.ProcessTurn(characterToAct);
if (isGameEnd)
{
@ -141,7 +141,7 @@ namespace Oshima.FunGame.OshimaServers.Service
}
// 模拟时间流逝
double timeLapse = await actionQueue.TimeLapse();
double timeLapse = actionQueue.TimeLapse();
totalTime += timeLapse;
if (roundMsg != "")
@ -311,7 +311,7 @@ namespace Oshima.FunGame.OshimaServers.Service
}
// 检查是否有角色可以行动
Character? characterToAct = await actionQueue.NextCharacterAsync();
Character? characterToAct = actionQueue.NextCharacter();
// 处理回合
if (characterToAct != null)
@ -319,7 +319,7 @@ namespace Oshima.FunGame.OshimaServers.Service
WriteLine($"=== Round {i++} ===");
WriteLine("现在是 [ " + characterToAct + "" + (actionQueue.GetTeam(characterToAct)?.Name ?? "") + "" + " ] 的回合!");
bool isGameEnd = await actionQueue.ProcessTurnAsync(characterToAct);
bool isGameEnd = actionQueue.ProcessTurn(characterToAct);
if (isGameEnd)
{
@ -353,7 +353,7 @@ namespace Oshima.FunGame.OshimaServers.Service
}
// 模拟时间流逝
double timeLapse = await actionQueue.TimeLapse();
double timeLapse = actionQueue.TimeLapse();
totalTime += timeLapse;
if (roundMsg != "")

View File

@ -273,7 +273,7 @@ namespace Oshima.FunGame.OshimaServers.Service
actionQueue.DisplayQueue();
if (PrintOut) Console.WriteLine();
actionQueue.CharacterDeath += ActionQueue_CharacterDeath;
actionQueue.CharacterDeathEvent += ActionQueue_CharacterDeath;
// 地图放置角色
if (actionQueue.Map != null)
@ -365,7 +365,7 @@ namespace Oshima.FunGame.OshimaServers.Service
foreach (Character c in characters.Where(c => c != winner && c.HP > 0))
{
WriteLine("[ " + winner + " ] 对 [ " + c + " ] 造成了 99999999999 点真实伤害。");
await actionQueue.DeathCalculationAsync(winner, c);
actionQueue.DeathCalculation(winner, c);
}
result.Add(Msg);
mgq?.EndGameInfo(winner);
@ -374,7 +374,7 @@ namespace Oshima.FunGame.OshimaServers.Service
}
// 检查是否有角色可以行动
Character? characterToAct = await actionQueue.NextCharacterAsync();
Character? characterToAct = actionQueue.NextCharacter();
// 处理回合
if (characterToAct != null)
@ -382,7 +382,7 @@ namespace Oshima.FunGame.OshimaServers.Service
WriteLine($"=== Round {i++} [ Time: {totalTime} ] ===");
WriteLine("现在是 [ " + characterToAct + (tgq != null ? "" + (tgq.GetTeam(characterToAct)?.Name ?? "") + "" : "") + " ] 的回合!");
bool isGameEnd = await actionQueue.ProcessTurnAsync(characterToAct);
bool isGameEnd = actionQueue.ProcessTurn(characterToAct);
if (isGameEnd)
{
@ -407,9 +407,10 @@ namespace Oshima.FunGame.OshimaServers.Service
}
// 模拟时间流逝
double timeLapse = await actionQueue.TimeLapse();
double timeLapse = actionQueue.TimeLapse();
totalTime = actionQueue.TotalTime;
nextDropTime -= timeLapse;
Thread.Sleep(1);
if (roundMsg != "")
{
@ -703,30 +704,10 @@ namespace Oshima.FunGame.OshimaServers.Service
}
}
private static async Task<bool> TeamQueue_GameEndTeam(TeamGamingQueue queue, Team winner)
{
foreach (Character character in winner.Members)
{
Item? i1 = character.UnEquip(EquipSlotType.MagicCardPack);
Item? i2 = character.UnEquip(EquipSlotType.Weapon);
Item? i3 = character.UnEquip(EquipSlotType.Armor);
Item? i4 = character.UnEquip(EquipSlotType.Shoes);
Item? i5 = character.UnEquip(EquipSlotType.Accessory1);
Item? i6 = character.UnEquip(EquipSlotType.Accessory2);
queue.WriteLine(character.GetInfo());
}
return await Task.FromResult(true);
}
private static async Task<bool> ActionQueue_GameEnd(GamingQueue queue, Character winner)
{
return await Task.FromResult(true);
}
private static async Task<bool> ActionQueue_CharacterDeath(GamingQueue queue, Character current, Character death)
private static bool ActionQueue_CharacterDeath(GamingQueue queue, Character current, Character death)
{
death.Items.Clear();
return await Task.FromResult(true);
return true;
}
/// <summary>