完善魔法效能

This commit is contained in:
milimoe 2026-01-20 01:56:44 +08:00
parent 86b86a19e2
commit b76b263913
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
55 changed files with 105 additions and 66 deletions

View File

@ -45,7 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
return 0;
}
List<Character> teammates = GamingQueue.GetTeammates(character);
if ((character == Source || teammates.Contains(Source)) && enemy.Effects.Any(e => e is ))
if ((character == Source || teammates.Contains(Source)) && character.Effects.Any(e => e is ) && enemy.Effects.Any(e => e is ))
{
double bonus = damage * 0.25;
WriteLine($"[ {character} ] 受到了{nameof(时雨标记)}的影响,伤害提高了 {bonus:0.##} 点!");

View File

@ -84,7 +84,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
Source.Effects.Add(e);
WriteLine($"[ {Source} ] 复制了 [ {killer} ] 的技能:{LastSkill.Name}");
}
if (killer.Effects.FirstOrDefault(e => e is ) is e2)
if (killer.Effects.FirstOrDefault(e => e is && e.Source == Source) is e2)
{
e2.RemainDurationTurn = 3;
}

View File

@ -15,7 +15,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private DispelledType _dispelledType = DispelledType.Weak;
private readonly bool _durative;
private readonly double _duration;

View File

@ -14,7 +14,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
public override DispelType DispelType => DispelType.DurativeWeak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durativeWithoutDuration;
private readonly string _durationString;
private readonly bool _durative;
@ -51,7 +51,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
isDebuff = false;
}
if (target.Effects.FirstOrDefault(e => e is ) is e && e.DurativeWithoutDuration == _durativeWithoutDuration && e.Durative == _durative && e.IsDebuff == isDebuff)
if (target.Effects.FirstOrDefault(e => e is && e.Source == Source) is e && e.DurativeWithoutDuration == _durativeWithoutDuration && e.Durative == _durative && e.IsDebuff == isDebuff)
{
if (_duration > e.Duration) e.Duration = _duration;
if (_durationTurn > e.DurationTurn) e.DurationTurn = _durationTurn;

View File

@ -14,7 +14,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
public override DispelType DispelType => DispelType.DurativeStrong;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durativeWithoutDuration;
private readonly string _durationString;
private readonly bool _durative;
@ -51,7 +51,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
isDebuff = false;
}
if (target.Effects.FirstOrDefault(e => e is ) is e && e.DurativeWithoutDuration == _durativeWithoutDuration && e.Durative == _durative && e.IsDebuff == isDebuff)
if (target.Effects.FirstOrDefault(e => e is && e.Source == Source) is e && e.DurativeWithoutDuration == _durativeWithoutDuration && e.Durative == _durative && e.IsDebuff == isDebuff)
{
if (_duration > e.Duration) e.Duration = _duration;
if (_durationTurn > e.DurationTurn) e.DurationTurn = _durationTurn;

View File

@ -1,5 +1,4 @@
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 Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
@ -23,9 +22,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
public override DispelledType DispelledType => _dispelledType;
public override bool ExemptDuration => true;
private double ActualProbability => Level > 0 ? _probability + _probabilityLevelGrowth * (Level - 1) : _probability;
private double ActualProbability => Level > 0 ? (_probability + _probabilityLevelGrowth * (Level - 1) * MagicEfficacy) : _probability;
private string => _durative && _duration > 0 ? $"{实际持续时间:0.##}" + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
private double => _durative && _duration > 0 ? _duration + _levelGrowth * (Level - 1) : (!_durative && _durationTurn > 0 ? _durationTurn + _levelGrowth * (Level - 1) : 0);
private double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly EffectType _effectType;
private readonly bool _durative;
private readonly double _duration;

View File

@ -68,7 +68,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
caster.Effects.Add(this);
OnEffectGained(caster);
}
if (caster.Effects.FirstOrDefault(e => e is ) is e)
if (caster.Effects.FirstOrDefault(e => e is && e.Skill == Skill) is e)
{
e.Skill.CurrentCD = 0;
e.Skill.Enable = true;
@ -116,7 +116,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
return;
}
if (character.Effects.FirstOrDefault(e => e is ) is e)
if (character.Effects.FirstOrDefault(e => e is && e.Skill == Skill) is e)
{
int count = e..Count;
= * count;

View File

@ -1,5 +1,4 @@
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 Oshima.FunGame.OshimaModules.Models;
@ -39,6 +38,20 @@ namespace Oshima.FunGame.OshimaModules.Skills
public const double = 0.6;
public const double = 0.09;
private bool = false;
public override void OnGameStart()
{
if (!)
{
= true;
if (Skill.Character != null)
{
(Skill.Character);
}
}
}
public override void AfterDeathCalculation(Character death, bool hasMaster, Character? killer, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney, Character[] assists)
{
if (death is gyb)
@ -63,11 +76,6 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override void OnTurnStart(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items)
{
(character);
}
public override void OnTimeElapsed(Character character, double elapsed)
{
if (character == Skill.Character)
@ -104,6 +112,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public void (Character character)
{
if (!) return;
int count = .Count;
if (count < && Skill.Enable)
{

View File

@ -50,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override void OnEffectGained(Character character)
{
IEnumerable<Effect> effects = character.Effects.Where(e => e is );
if (effects.Any() && effects.First() is e)
if (effects.Any() && effects.First() is e && e.Skill == Skill)
{
e. = true;
e. = 3;
@ -61,7 +61,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override void OnEffectLost(Character character)
{
IEnumerable<Effect> effects = character.Effects.Where(e => e is );
if (effects.Any() && effects.First() is e)
if (effects.Any() && effects.First() is e && e.Skill == Skill)
{
e. = false;
e. = 2;

View File

@ -49,7 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
WriteLine($"[ {character} ] 发动了灵能反射!额外获得了 {实际获得能量值:0.##} 能量,并消除了 2 {GameplayEquilibriumConstant.InGameTime}冷却时间!");
IEnumerable<Effect> effects = character.Effects.Where(e => e is );
if (effects.Any() && effects.First() is e)
if (effects.Any() && effects.First() is e && e.Skill == Skill)
{
double = * 3;
character.MP += ;
@ -92,7 +92,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
= 0;
IEnumerable<Effect> effects = character.Effects.Where(e => e is );
if (effects.Any() && effects.First() is e)
if (effects.Any() && effects.First() is e && e.Skill == Skill)
{
baseHardnessTime = 0;
isCheckProtected = false;

View File

@ -77,7 +77,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
if (character == Skill.Character && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && enemy.Effects.FirstOrDefault(e => e is ) is e)
if (character == Skill.Character && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && enemy.Effects.FirstOrDefault(e => e is && e.Skill == Skill) is e)
{
(character, enemy, actualDamage, damageType, magicType);
}
@ -124,7 +124,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
if (GamingQueue != null)
{
allEnemys = [.. GamingQueue.GetEnemies(character).Where(c => c != character && c != enemy && !targets.Contains(c) && c.HP > 0)];
targets.AddRange(allEnemys.Where(c => c.Effects.Any(e => e is )).Take(count));
targets.AddRange(allEnemys.Where(c => c.Effects.Any(e => e is && e.Source == character)).Take(count));
if (targets.Count < 3)
{
count = 3 - targets.Count;

View File

@ -54,7 +54,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult)
{
if (character == Skill.Character && != null && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && enemy.Effects.FirstOrDefault(e => e is ) is e)
if (character == Skill.Character && != null && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && enemy.Effects.FirstOrDefault(e => e is && e.Skill == Skill) is e)
{
.(character, enemy, actualDamage, damageType, magicType);
}

View File

@ -145,7 +145,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
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 );
IEnumerable<Effect> effects = caster.Effects.Where(e => e is && e.Skill.Character == Skill.Character);
if (effects.Any())
{
if (caster.Effects.Contains(this))

View File

@ -1,6 +1,5 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
namespace Oshima.FunGame.OshimaModules.Skills
@ -26,13 +25,13 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{Skill.SkillOwner()}在其首个可行动回合的开始阶段进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" +
public override string Description => $"{Skill.SkillOwner()}在游戏开始时进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" +
$"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 15% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 25%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" +
$"混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。时雨标记持续 3 回合。";
private bool = false;
public override void OnTurnStart(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items)
public override void OnGameStart()
{
if (!)
{
@ -55,11 +54,11 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
return;
}
Character[] characters = [.. GamingQueue.GetTeammates(character).Where(c => c.Effects.Any(e => e is ))];
Character[] characters = [.. GamingQueue.GetTeammates(character).Where(c => c.Effects.Any(e => e is && e.Source == character))];
if (characters.Length > 0)
{
WriteLine($"[ {character} ] 发动了开宫!");
double heal = actualDamage * 0.5;
double heal = actualDamage * 0.15;
foreach (Character target in characters)
{
HealToTarget(character, target, heal);
@ -79,7 +78,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
continue;
}
if (!character.Effects.Any(e => e is ))
if (!character.Effects.Any(e => e is && e.Source == Skill.Character))
{
Effect e = new (Skill, Skill.Character, character);
character.Effects.Add(e);

View File

@ -41,7 +41,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool BeforeSkillCasted(Character caster, Skill skill, List<Character> targets, List<Grid> grids, Dictionary<string, object> others)
{
if (Skill.Character != null && caster.Effects.FirstOrDefault(e => e is ) is effect)
if (Skill.Character != null && caster.Effects.FirstOrDefault(e => e is && e.Source == Source) is effect)
{
WriteLine($"[ {Skill.Character} ] 高声呼喊:“宫监手,放监!”");
e = new(Skill, Skill.Character, skill)
@ -100,7 +100,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
List<Character> enemies = GamingQueue.GetEnemies(caster);
foreach (Character character in GamingQueue.Queue)
{
if (character.Effects.FirstOrDefault(e => e is ) is e)
if (character.Effects.FirstOrDefault(e => e is && e.Source == caster) is e)
{
e.DispelledType = DispelledType.CannotBeDispelled;
e.RemainDurationTurn = 3;

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative = false;
private readonly double _duration = 0;

View File

@ -36,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool ExemptDuration => true;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative = false;
private readonly double _duration = 0;

View File

@ -19,7 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
CastRange = 4;
Effects.Add(new _带基础伤害(this, 60, 45, 0.065, 0.035, DamageType.Physical));
Effects.Add(new (this, EffectType.Cripple, false, 0, 1, 0, 0.45, 0.05));
Effects.Add(new (this, EffectType.Cripple, false, 0, 1, 0, 0.2, 0.03));
}
}
}

View File

@ -19,7 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
ExemptionDescription = $"迟滞{SkillSet.GetExemptionDescription(EffectType.Delay)}\r\n混乱{SkillSet.GetExemptionDescription(EffectType.Confusion)}";
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));
Effects.Add(new (this, EffectType.Confusion, false, 0, 2, 0, 0.2, 0.03));
}
}
}

View File

@ -51,6 +51,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public override double MagicBottleneck => 13 + 14 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -17,6 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 11 + 12 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -32,6 +32,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 13 + 14 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -17,6 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 14 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -19,6 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectTeammate => true;
public override bool SelectAllTeammates => true;
public override bool AllowSelectDead => true;
public override double MagicBottleneck => 15 + 16 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -38,7 +38,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 75, 15, DamageType.Magical));
Effects.Add(new (this, EffectType.Bleed, true, 3, 0, 0.5, 0.45, 0.05, false, 85.0));
Effects.Add(new (this, EffectType.Bleed, true, 3, 0, 0.5, 0.2, 0.03, false, 85.0));
}
}
}

View File

@ -19,6 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override bool AllowSelectDead => true;
public override double MagicBottleneck => 14 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -71,6 +71,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -21,7 +21,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 45, 20, DamageType.Magical));
Effects.Add(new (this, EffectType.Silence, true, 8, 0, 1.2, 0.45, 0.05));
Effects.Add(new (this, EffectType.Silence, true, 8, 0, 1.2, 0.2, 0.03));
}
}
}

View File

@ -17,6 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -18,6 +18,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -34,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -33,6 +33,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 14 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -49,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -14,6 +14,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double CD => Level > 0 ? 28 - (1 * (Level - 1)) : 28;
public override double CastTime => Level > 0 ? 2 + (2 * (Level - 1)) : 2;
public override double HardnessTime { get; set; } = 5;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -31,6 +31,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 14 + 14 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -50,7 +51,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsDebuff => true;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -15,6 +15,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override double CD => Level > 0 ? 38 - (1 * (Level - 1)) : 38;
public override double CastTime => Level > 0 ? 4 + (0.5 * (Level - 1)) : 4;
public override double HardnessTime { get; set; } = 4;
public override double MagicBottleneck => 15 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -34,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsDebuff => true;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -17,6 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -33,6 +33,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 14 + 14 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -51,7 +52,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsDebuff => false;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -17,6 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectSelf => true;
public override bool CanSelectTeammate => true;
public override bool CanSelectEnemy => false;
public override double MagicBottleneck => 15 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -35,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsDebuff => false;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -19,6 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 11 + 12 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 70, 30, DamageType.Magical));
Effects.Add(new (this, EffectType.Cripple, true, 3, 0, 1, 0.45, 0.05));
Effects.Add(new (this, EffectType.Cripple, true, 3, 0, 1, 0.2, 0.03));
}
}
}

View File

@ -44,6 +44,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 12 + 13 * (Level - 1);
private double { get; set; } = 65;
private double { get; set; } = 65;

View File

@ -17,6 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -35,6 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool IsNonDirectional => true;
public override SkillRangeType SkillRangeType => SkillRangeType.Circle;
public override int CanSelectTargetRange => 3;
public override double MagicBottleneck => 14 + 14 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -52,7 +52,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool ExemptDuration => true;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;

View File

@ -19,6 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override bool SelectAllTeammates => true;
public override double MagicBottleneck => 14 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{

View File

@ -18,6 +18,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -34,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -33,6 +33,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 14 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -49,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 60, 20, DamageType.Magical));
Effects.Add(new (this, EffectType.Silence, false, 0, 2, 0, 0.45, 0.05));
Effects.Add(new (this, EffectType.Silence, false, 0, 2, 0, 0.2, 0.03));
}
}
}

View File

@ -18,6 +18,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 12 + 13 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -34,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -33,6 +33,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 14 + 15 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -49,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -35,8 +35,8 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
ExemptionDescription = $"冻结{SkillSet.GetExemptionDescription(EffectType.Freeze)}\r\n易伤{SkillSet.GetExemptionDescription(EffectType.Vulnerable)}";
Effects.Add(new (this, 60, 30, DamageType.Magical));
Effects.Add(new (this, EffectType.Freeze, false, 0, 1, 0, 0.45, 0.05));
Effects.Add(new (this, EffectType.Vulnerable, false, 0, 3, 0, 0.45, 0.05, DamageType.Magical, 0.3));
Effects.Add(new (this, EffectType.Freeze, false, 0, 1, 0, 0.2, 0.03));
Effects.Add(new (this, EffectType.Vulnerable, false, 0, 3, 0, 0.2, 0.03, DamageType.Magical, 0.3));
}
}
}

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, false, 0, 2, 0, 0.45, 0.05));
Effects.Add(new (this, false, 0, 2, 0, 0.2, 0.03));
}
}
@ -50,11 +50,11 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool ExemptDuration => true;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private double Damage => Skill.Level > 0 ? + * (Skill.Level - 1) : ;
private double { get; set; } = 50;
private double { get; set; } = 40;
private double ActualConfusionProbability => Level > 0 ? _confusionProbability + _confusionProbabilityLevelGrowth * (Level - 1) : _confusionProbability;
private double ActualConfusionProbability => Level > 0 ? (_confusionProbability + _confusionProbabilityLevelGrowth * (Level - 1) * MagicEfficacy) : _confusionProbability;
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;

View File

@ -18,6 +18,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override bool CanSelectEnemy => false;
public override bool CanSelectTeammate => true;
public override int CanSelectTargetCount => 1;
public override double MagicBottleneck => 13 + 14 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -34,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -33,6 +33,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
};
}
}
public override double MagicBottleneck => 15 + 16 * (Level - 1);
public (Character? character = null) : base(SkillType.Magic, character)
{
@ -49,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override DispelledType DispelledType => DispelledType.Weak;
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 double => _durative && _duration > 0 ? (_duration + _levelGrowth * (Level - 1) * MagicEfficacy) : (!_durative && _durationTurn > 0 ? ((int)Math.Round(_durationTurn + _levelGrowth * (Level - 1) * MagicEfficacy, 0, MidpointRounding.ToPositiveInfinity)) : 0);
private readonly bool _durative;
private readonly double _duration;

View File

@ -35,7 +35,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public (Character? character = null) : base(SkillType.Magic, character)
{
Effects.Add(new (this, 65, 35, DamageType.Magical));
Effects.Add(new (this, EffectType.Stun, true, 6, 0, 0.7, 0.45, 0.05));
Effects.Add(new (this, EffectType.Stun, true, 6, 0, 0.7, 0.2, 0.03));
}
}
}

View File

@ -591,7 +591,11 @@ namespace Oshima.FunGame.OshimaServers.Service
realCharacter.EP += recoveryEP;
}
// 减少所有技能的冷却时间
foreach (Skill skill in realCharacter.Skills)
List<Skill> skills = [.. realCharacter.Skills.Union(realCharacter.Items.Where(i => i.Skills.Active != null).Select(i => i.Skills.Active!))];
Milimoe.FunGame.Core.Model.GamingQueue.AddCharacterEquipSlotSkills(realCharacter, skills);
foreach (Skill skill in skills)
{
if (skill.CurrentCD > 0)
{
skill.CurrentCD -= seconds;
if (skill.CurrentCD <= 0)
@ -600,6 +604,7 @@ namespace Oshima.FunGame.OshimaServers.Service
skill.Enable = true;
}
}
}
// 移除到时间的特效
List<Effect> effects = [.. realCharacter.Effects];
foreach (Effect effect in effects)