From b76b26391302360284f5520c1b867db6bbc78105 Mon Sep 17 00:00:00 2001 From: milimoe Date: Tue, 20 Jan 2026 01:56:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=AD=94=E6=B3=95=E6=95=88?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Effects/PassiveEffects/时雨标记.cs | 2 +- .../Effects/PassiveEffects/长期监视.cs | 2 +- .../Effects/SkillEffects/施加免疫.cs | 2 +- .../Effects/SkillEffects/施加持续性弱驱散.cs | 4 ++-- .../Effects/SkillEffects/施加持续性强驱散.cs | 4 ++-- .../Effects/SkillEffects/施加概率负面.cs | 5 ++--- OshimaModules/Skills/CHAOS/全军出击.cs | 4 ++-- OshimaModules/Skills/CHAOS/雇佣兵团.cs | 21 +++++++++++++------ OshimaModules/Skills/NanGanyu/三相灵枢.cs | 4 ++-- OshimaModules/Skills/NanGanyu/灵能反射.cs | 4 ++-- OshimaModules/Skills/Neptune/海王星的野望.cs | 4 ++-- OshimaModules/Skills/Neptune/深海之戟.cs | 2 +- OshimaModules/Skills/NiuNan/变幻之心.cs | 2 +- OshimaModules/Skills/ShiYu/开宫.cs | 11 +++++----- OshimaModules/Skills/ShiYu/放监.cs | 4 ++-- OshimaModules/Skills/战技/助威.cs | 2 +- OshimaModules/Skills/战技/挑拨.cs | 2 +- OshimaModules/Skills/战技/胧.cs | 2 +- OshimaModules/Skills/战技/魔眼.cs | 2 +- OshimaModules/Skills/魔法/反魔法领域.cs | 1 + OshimaModules/Skills/魔法/回复术.cs | 1 + OshimaModules/Skills/魔法/回复术复.cs | 1 + OshimaModules/Skills/魔法/回复术改.cs | 1 + OshimaModules/Skills/魔法/圣灵术.cs | 1 + OshimaModules/Skills/魔法/地狱之门.cs | 2 +- OshimaModules/Skills/魔法/复苏术.cs | 1 + OshimaModules/Skills/魔法/大地之墙.cs | 1 + OshimaModules/Skills/魔法/导力停止.cs | 2 +- OshimaModules/Skills/魔法/弧光消耗.cs | 1 + OshimaModules/Skills/魔法/强音之力.cs | 3 ++- OshimaModules/Skills/魔法/强音之力复.cs | 3 ++- OshimaModules/Skills/魔法/时间减速.cs | 1 + OshimaModules/Skills/魔法/时间减速复.cs | 3 ++- OshimaModules/Skills/魔法/时间减速改.cs | 3 ++- OshimaModules/Skills/魔法/时间加速.cs | 1 + OshimaModules/Skills/魔法/时间加速复.cs | 3 ++- OshimaModules/Skills/魔法/时间加速改.cs | 3 ++- OshimaModules/Skills/魔法/根源屏障.cs | 1 + OshimaModules/Skills/魔法/死亡咆哮.cs | 2 +- OshimaModules/Skills/魔法/沉默十字.cs | 1 + OshimaModules/Skills/魔法/治愈术.cs | 1 + OshimaModules/Skills/魔法/治愈术复.cs | 1 + OshimaModules/Skills/魔法/灾难冲击波.cs | 2 +- OshimaModules/Skills/魔法/盖亚之盾.cs | 1 + OshimaModules/Skills/魔法/神圣祝福.cs | 3 ++- OshimaModules/Skills/魔法/神圣祝福复.cs | 3 ++- OshimaModules/Skills/魔法/等离子之波.cs | 2 +- OshimaModules/Skills/魔法/结晶防护.cs | 3 ++- OshimaModules/Skills/魔法/结晶防护复.cs | 3 ++- OshimaModules/Skills/魔法/钻石星尘.cs | 4 ++-- OshimaModules/Skills/魔法/银色荆棘.cs | 6 +++--- OshimaModules/Skills/魔法/风之守护.cs | 3 ++- OshimaModules/Skills/魔法/风之守护复.cs | 3 ++- OshimaModules/Skills/魔法/鬼魅之痛.cs | 2 +- OshimaServers/Service/FunGameService.cs | 15 ++++++++----- 55 files changed, 105 insertions(+), 66 deletions(-) diff --git a/OshimaModules/Effects/PassiveEffects/时雨标记.cs b/OshimaModules/Effects/PassiveEffects/时雨标记.cs index d1f2c0c..2174b09 100644 --- a/OshimaModules/Effects/PassiveEffects/时雨标记.cs +++ b/OshimaModules/Effects/PassiveEffects/时雨标记.cs @@ -45,7 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects return 0; } List 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.##} 点!"); diff --git a/OshimaModules/Effects/PassiveEffects/长期监视.cs b/OshimaModules/Effects/PassiveEffects/长期监视.cs index 3fa8b5b..c8d8f36 100644 --- a/OshimaModules/Effects/PassiveEffects/长期监视.cs +++ b/OshimaModules/Effects/PassiveEffects/长期监视.cs @@ -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; } diff --git a/OshimaModules/Effects/SkillEffects/施加免疫.cs b/OshimaModules/Effects/SkillEffects/施加免疫.cs index e541983..1613325 100644 --- a/OshimaModules/Effects/SkillEffects/施加免疫.cs +++ b/OshimaModules/Effects/SkillEffects/施加免疫.cs @@ -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; diff --git a/OshimaModules/Effects/SkillEffects/施加持续性弱驱散.cs b/OshimaModules/Effects/SkillEffects/施加持续性弱驱散.cs index ceddf94..26604a6 100644 --- a/OshimaModules/Effects/SkillEffects/施加持续性弱驱散.cs +++ b/OshimaModules/Effects/SkillEffects/施加持续性弱驱散.cs @@ -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; diff --git a/OshimaModules/Effects/SkillEffects/施加持续性强驱散.cs b/OshimaModules/Effects/SkillEffects/施加持续性强驱散.cs index 43ff853..7e0d464 100644 --- a/OshimaModules/Effects/SkillEffects/施加持续性强驱散.cs +++ b/OshimaModules/Effects/SkillEffects/施加持续性强驱散.cs @@ -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; diff --git a/OshimaModules/Effects/SkillEffects/施加概率负面.cs b/OshimaModules/Effects/SkillEffects/施加概率负面.cs index 726550f3..179956d 100644 --- a/OshimaModules/Effects/SkillEffects/施加概率负面.cs +++ b/OshimaModules/Effects/SkillEffects/施加概率负面.cs @@ -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; diff --git a/OshimaModules/Skills/CHAOS/全军出击.cs b/OshimaModules/Skills/CHAOS/全军出击.cs index ab7f6e5..9008025 100644 --- a/OshimaModules/Skills/CHAOS/全军出击.cs +++ b/OshimaModules/Skills/CHAOS/全军出击.cs @@ -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; diff --git a/OshimaModules/Skills/CHAOS/雇佣兵团.cs b/OshimaModules/Skills/CHAOS/雇佣兵团.cs index cbf9095..3e1f222 100644 --- a/OshimaModules/Skills/CHAOS/雇佣兵团.cs +++ b/OshimaModules/Skills/CHAOS/雇佣兵团.cs @@ -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 continuousKilling, Dictionary earnedMoney, Character[] assists) { if (death is 雇佣兵 gyb) @@ -63,11 +76,6 @@ namespace Oshima.FunGame.OshimaModules.Skills } } - public override void OnTurnStart(Character character, List enemys, List teammates, List skills, List 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) { diff --git a/OshimaModules/Skills/NanGanyu/三相灵枢.cs b/OshimaModules/Skills/NanGanyu/三相灵枢.cs index 1c34e53..e8d98f3 100644 --- a/OshimaModules/Skills/NanGanyu/三相灵枢.cs +++ b/OshimaModules/Skills/NanGanyu/三相灵枢.cs @@ -50,7 +50,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override void OnEffectGained(Character character) { IEnumerable 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 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; diff --git a/OshimaModules/Skills/NanGanyu/灵能反射.cs b/OshimaModules/Skills/NanGanyu/灵能反射.cs index b8f34e2..d48cf7d 100644 --- a/OshimaModules/Skills/NanGanyu/灵能反射.cs +++ b/OshimaModules/Skills/NanGanyu/灵能反射.cs @@ -49,7 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Skills } WriteLine($"[ {character} ] 发动了灵能反射!额外获得了 {实际获得能量值:0.##} 能量,并消除了 2 {GameplayEquilibriumConstant.InGameTime}冷却时间!"); IEnumerable 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 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; diff --git a/OshimaModules/Skills/Neptune/海王星的野望.cs b/OshimaModules/Skills/Neptune/海王星的野望.cs index 41e6bc0..6e69d42 100644 --- a/OshimaModules/Skills/Neptune/海王星的野望.cs +++ b/OshimaModules/Skills/Neptune/海王星的野望.cs @@ -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; diff --git a/OshimaModules/Skills/Neptune/深海之戟.cs b/OshimaModules/Skills/Neptune/深海之戟.cs index ec5ca9a..0b9b9f2 100644 --- a/OshimaModules/Skills/Neptune/深海之戟.cs +++ b/OshimaModules/Skills/Neptune/深海之戟.cs @@ -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); } diff --git a/OshimaModules/Skills/NiuNan/变幻之心.cs b/OshimaModules/Skills/NiuNan/变幻之心.cs index 01572dd..3d0fad9 100644 --- a/OshimaModules/Skills/NiuNan/变幻之心.cs +++ b/OshimaModules/Skills/NiuNan/变幻之心.cs @@ -145,7 +145,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override void OnSkillCasted(Character caster, List targets, List grids, Dictionary others) { - IEnumerable effects = caster.Effects.Where(e => e is 双生流转特效); + IEnumerable effects = caster.Effects.Where(e => e is 双生流转特效 && e.Skill.Character == Skill.Character); if (effects.Any()) { if (caster.Effects.Contains(this)) diff --git a/OshimaModules/Skills/ShiYu/开宫.cs b/OshimaModules/Skills/ShiYu/开宫.cs index e803ed1..58c19ad 100644 --- a/OshimaModules/Skills/ShiYu/开宫.cs +++ b/OshimaModules/Skills/ShiYu/开宫.cs @@ -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 enemys, List teammates, List skills, List 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); diff --git a/OshimaModules/Skills/ShiYu/放监.cs b/OshimaModules/Skills/ShiYu/放监.cs index 957c225..0a3cde1 100644 --- a/OshimaModules/Skills/ShiYu/放监.cs +++ b/OshimaModules/Skills/ShiYu/放监.cs @@ -41,7 +41,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override bool BeforeSkillCasted(Character caster, Skill skill, List targets, List grids, Dictionary 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 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; diff --git a/OshimaModules/Skills/战技/助威.cs b/OshimaModules/Skills/战技/助威.cs index ddcae08..736bd2a 100644 --- a/OshimaModules/Skills/战技/助威.cs +++ b/OshimaModules/Skills/战技/助威.cs @@ -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; diff --git a/OshimaModules/Skills/战技/挑拨.cs b/OshimaModules/Skills/战技/挑拨.cs index 7ac132e..afbbb0c 100644 --- a/OshimaModules/Skills/战技/挑拨.cs +++ b/OshimaModules/Skills/战技/挑拨.cs @@ -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; diff --git a/OshimaModules/Skills/战技/胧.cs b/OshimaModules/Skills/战技/胧.cs index d4559a3..aa0c41b 100644 --- a/OshimaModules/Skills/战技/胧.cs +++ b/OshimaModules/Skills/战技/胧.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/战技/魔眼.cs b/OshimaModules/Skills/战技/魔眼.cs index 06f9952..eb93a62 100644 --- a/OshimaModules/Skills/战技/魔眼.cs +++ b/OshimaModules/Skills/战技/魔眼.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/魔法/反魔法领域.cs b/OshimaModules/Skills/魔法/反魔法领域.cs index cd74994..8d4d54d 100644 --- a/OshimaModules/Skills/魔法/反魔法领域.cs +++ b/OshimaModules/Skills/魔法/反魔法领域.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/回复术.cs b/OshimaModules/Skills/魔法/回复术.cs index b61a0b5..f6b27d0 100644 --- a/OshimaModules/Skills/魔法/回复术.cs +++ b/OshimaModules/Skills/魔法/回复术.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/回复术复.cs b/OshimaModules/Skills/魔法/回复术复.cs index d11bd89..eace40c 100644 --- a/OshimaModules/Skills/魔法/回复术复.cs +++ b/OshimaModules/Skills/魔法/回复术复.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/回复术改.cs b/OshimaModules/Skills/魔法/回复术改.cs index f51f65f..5819260 100644 --- a/OshimaModules/Skills/魔法/回复术改.cs +++ b/OshimaModules/Skills/魔法/回复术改.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/圣灵术.cs b/OshimaModules/Skills/魔法/圣灵术.cs index 70acfad..c79c909 100644 --- a/OshimaModules/Skills/魔法/圣灵术.cs +++ b/OshimaModules/Skills/魔法/圣灵术.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/地狱之门.cs b/OshimaModules/Skills/魔法/地狱之门.cs index aa6494f..344bb9c 100644 --- a/OshimaModules/Skills/魔法/地狱之门.cs +++ b/OshimaModules/Skills/魔法/地狱之门.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/魔法/复苏术.cs b/OshimaModules/Skills/魔法/复苏术.cs index 26c64b9..6427bf9 100644 --- a/OshimaModules/Skills/魔法/复苏术.cs +++ b/OshimaModules/Skills/魔法/复苏术.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/大地之墙.cs b/OshimaModules/Skills/魔法/大地之墙.cs index f7cd417..c9c5340 100644 --- a/OshimaModules/Skills/魔法/大地之墙.cs +++ b/OshimaModules/Skills/魔法/大地之墙.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/导力停止.cs b/OshimaModules/Skills/魔法/导力停止.cs index 0d8d6d6..7c0a0fe 100644 --- a/OshimaModules/Skills/魔法/导力停止.cs +++ b/OshimaModules/Skills/魔法/导力停止.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/魔法/弧光消耗.cs b/OshimaModules/Skills/魔法/弧光消耗.cs index b68f971..a069870 100644 --- a/OshimaModules/Skills/魔法/弧光消耗.cs +++ b/OshimaModules/Skills/魔法/弧光消耗.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/强音之力.cs b/OshimaModules/Skills/魔法/强音之力.cs index 434dea6..202f255 100644 --- a/OshimaModules/Skills/魔法/强音之力.cs +++ b/OshimaModules/Skills/魔法/强音之力.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/强音之力复.cs b/OshimaModules/Skills/魔法/强音之力复.cs index 4e904af..c3552ca 100644 --- a/OshimaModules/Skills/魔法/强音之力复.cs +++ b/OshimaModules/Skills/魔法/强音之力复.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/时间减速.cs b/OshimaModules/Skills/魔法/时间减速.cs index aa9fe22..057ac1e 100644 --- a/OshimaModules/Skills/魔法/时间减速.cs +++ b/OshimaModules/Skills/魔法/时间减速.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/时间减速复.cs b/OshimaModules/Skills/魔法/时间减速复.cs index 72e138e..a2302fe 100644 --- a/OshimaModules/Skills/魔法/时间减速复.cs +++ b/OshimaModules/Skills/魔法/时间减速复.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/时间减速改.cs b/OshimaModules/Skills/魔法/时间减速改.cs index eb20021..90c4c73 100644 --- a/OshimaModules/Skills/魔法/时间减速改.cs +++ b/OshimaModules/Skills/魔法/时间减速改.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/时间加速.cs b/OshimaModules/Skills/魔法/时间加速.cs index 7c0e0c8..cf46742 100644 --- a/OshimaModules/Skills/魔法/时间加速.cs +++ b/OshimaModules/Skills/魔法/时间加速.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/时间加速复.cs b/OshimaModules/Skills/魔法/时间加速复.cs index 3229f87..1f8dce2 100644 --- a/OshimaModules/Skills/魔法/时间加速复.cs +++ b/OshimaModules/Skills/魔法/时间加速复.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/时间加速改.cs b/OshimaModules/Skills/魔法/时间加速改.cs index 54c1537..ea00810 100644 --- a/OshimaModules/Skills/魔法/时间加速改.cs +++ b/OshimaModules/Skills/魔法/时间加速改.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/根源屏障.cs b/OshimaModules/Skills/魔法/根源屏障.cs index 6bf83df..6153f69 100644 --- a/OshimaModules/Skills/魔法/根源屏障.cs +++ b/OshimaModules/Skills/魔法/根源屏障.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/死亡咆哮.cs b/OshimaModules/Skills/魔法/死亡咆哮.cs index e3bf59d..d472d02 100644 --- a/OshimaModules/Skills/魔法/死亡咆哮.cs +++ b/OshimaModules/Skills/魔法/死亡咆哮.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/魔法/沉默十字.cs b/OshimaModules/Skills/魔法/沉默十字.cs index e9c530b..6e86aeb 100644 --- a/OshimaModules/Skills/魔法/沉默十字.cs +++ b/OshimaModules/Skills/魔法/沉默十字.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/治愈术.cs b/OshimaModules/Skills/魔法/治愈术.cs index 46286cf..8062c89 100644 --- a/OshimaModules/Skills/魔法/治愈术.cs +++ b/OshimaModules/Skills/魔法/治愈术.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/治愈术复.cs b/OshimaModules/Skills/魔法/治愈术复.cs index 814dbb6..1be576d 100644 --- a/OshimaModules/Skills/魔法/治愈术复.cs +++ b/OshimaModules/Skills/魔法/治愈术复.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/灾难冲击波.cs b/OshimaModules/Skills/魔法/灾难冲击波.cs index cf650f3..b3e95e1 100644 --- a/OshimaModules/Skills/魔法/灾难冲击波.cs +++ b/OshimaModules/Skills/魔法/灾难冲击波.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/盖亚之盾.cs b/OshimaModules/Skills/魔法/盖亚之盾.cs index 289c87f..eb3b3ca 100644 --- a/OshimaModules/Skills/魔法/盖亚之盾.cs +++ b/OshimaModules/Skills/魔法/盖亚之盾.cs @@ -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) { diff --git a/OshimaModules/Skills/魔法/神圣祝福.cs b/OshimaModules/Skills/魔法/神圣祝福.cs index 30ede90..d5a1d81 100644 --- a/OshimaModules/Skills/魔法/神圣祝福.cs +++ b/OshimaModules/Skills/魔法/神圣祝福.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/神圣祝福复.cs b/OshimaModules/Skills/魔法/神圣祝福复.cs index 779c1fd..a645d58 100644 --- a/OshimaModules/Skills/魔法/神圣祝福复.cs +++ b/OshimaModules/Skills/魔法/神圣祝福复.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/等离子之波.cs b/OshimaModules/Skills/魔法/等离子之波.cs index 3cb1c6b..8f22395 100644 --- a/OshimaModules/Skills/魔法/等离子之波.cs +++ b/OshimaModules/Skills/魔法/等离子之波.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/魔法/结晶防护.cs b/OshimaModules/Skills/魔法/结晶防护.cs index cde6701..f2adab8 100644 --- a/OshimaModules/Skills/魔法/结晶防护.cs +++ b/OshimaModules/Skills/魔法/结晶防护.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/结晶防护复.cs b/OshimaModules/Skills/魔法/结晶防护复.cs index 9e738ce..a82e991 100644 --- a/OshimaModules/Skills/魔法/结晶防护复.cs +++ b/OshimaModules/Skills/魔法/结晶防护复.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/钻石星尘.cs b/OshimaModules/Skills/魔法/钻石星尘.cs index e585305..59f17f4 100644 --- a/OshimaModules/Skills/魔法/钻石星尘.cs +++ b/OshimaModules/Skills/魔法/钻石星尘.cs @@ -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)); } } } diff --git a/OshimaModules/Skills/魔法/银色荆棘.cs b/OshimaModules/Skills/魔法/银色荆棘.cs index 0ff2c26..54255cf 100644 --- a/OshimaModules/Skills/魔法/银色荆棘.cs +++ b/OshimaModules/Skills/魔法/银色荆棘.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/风之守护.cs b/OshimaModules/Skills/魔法/风之守护.cs index 933af76..b2e2185 100644 --- a/OshimaModules/Skills/魔法/风之守护.cs +++ b/OshimaModules/Skills/魔法/风之守护.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/风之守护复.cs b/OshimaModules/Skills/魔法/风之守护复.cs index 3df0504..2f9423c 100644 --- a/OshimaModules/Skills/魔法/风之守护复.cs +++ b/OshimaModules/Skills/魔法/风之守护复.cs @@ -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; diff --git a/OshimaModules/Skills/魔法/鬼魅之痛.cs b/OshimaModules/Skills/魔法/鬼魅之痛.cs index 18cf3b3..ee0b5cb 100644 --- a/OshimaModules/Skills/魔法/鬼魅之痛.cs +++ b/OshimaModules/Skills/魔法/鬼魅之痛.cs @@ -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)); } } } diff --git a/OshimaServers/Service/FunGameService.cs b/OshimaServers/Service/FunGameService.cs index ba744e9..a4b1cce 100644 --- a/OshimaServers/Service/FunGameService.cs +++ b/OshimaServers/Service/FunGameService.cs @@ -591,13 +591,18 @@ namespace Oshima.FunGame.OshimaServers.Service realCharacter.EP += recoveryEP; } // 减少所有技能的冷却时间 - foreach (Skill skill in realCharacter.Skills) + List 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) { - skill.CurrentCD -= seconds; - if (skill.CurrentCD <= 0) + if (skill.CurrentCD > 0) { - skill.CurrentCD = 0; - skill.Enable = true; + skill.CurrentCD -= seconds; + if (skill.CurrentCD <= 0) + { + skill.CurrentCD = 0; + skill.Enable = true; + } } } // 移除到时间的特效