From f2dad7f1b7d44daec9dd9dedaba003ecd0265be7 Mon Sep 17 00:00:00 2001 From: milimoe Date: Wed, 31 Dec 2025 20:45:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E8=83=BD=E6=94=B9=E5=8A=A8=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OshimaModules/Skills/ColdBlue/累积之压.cs | 20 ++++++++------------ OshimaModules/Skills/QWQAQW/破釜沉舟.cs | 19 ++++++++++++++++++- OshimaModules/Skills/战技/双连击.cs | 10 +++++----- OshimaModules/Skills/战技/疾走.cs | 14 +++++++++++--- OshimaServers/Service/FunGameService.cs | 1 - 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/OshimaModules/Skills/ColdBlue/累积之压.cs b/OshimaModules/Skills/ColdBlue/累积之压.cs index a3e8825..28c119d 100644 --- a/OshimaModules/Skills/ColdBlue/累积之压.cs +++ b/OshimaModules/Skills/ColdBlue/累积之压.cs @@ -26,8 +26,8 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"造成伤害时会标记目标,攻击具有标记的敌人将对其造成眩晕 1 回合,并回收标记,额外对该角色造成 {系数 * 100:0.##}% 最大生命值的物理伤害。"; - public override string DispelDescription => "被驱散性:眩晕需强驱散,标记可弱驱散"; + public override string Description => $"造成伤害时会标记目标,攻击具有标记的敌人将对其造成战斗不能 1 回合,并回收标记,额外对该角色造成 {系数 * 100:0.##}% 最大生命值的物理伤害。"; + public override string DispelDescription => "被驱散性:战斗不能需强驱散,标记可弱驱散"; public double 系数 { get; set; } = 0.12; private bool 是否是嵌套伤害 = false; @@ -45,23 +45,19 @@ namespace Oshima.FunGame.OshimaModules.Skills IEnumerable effects = enemy.Effects.Where(e => e is 累积之压标记 && e.Source == character); if (effects.FirstOrDefault() is 累积之压标记 e) { - IEnumerable effects2 = character.Effects.Where(e => e is 嗜血本能特效); - if (effects2.FirstOrDefault() is 嗜血本能特效 e2) - { - // 移除标记 - enemy.Effects.Remove(e); - } + // 移除标记 + enemy.Effects.Remove(e); double 额外伤害 = enemy.MaxHP * 系数; - WriteLine($"[ {character} ] 发动了累积之压!将对 [ {enemy} ] 造成眩晕和额外伤害!"); - // 眩晕 - IEnumerable effects3 = enemy.Effects.Where(e => e is 眩晕 && e.Skill == Skill); + WriteLine($"[ {character} ] 发动了累积之压!将对 [ {enemy} ] 造成战斗不能和额外伤害!"); + // 战斗不能 + IEnumerable effects3 = enemy.Effects.Where(e => e is 战斗不能 && e.Skill == Skill); if (effects3.Any()) { effects3.First().RemainDurationTurn++; } else { - 眩晕 e3 = new(Skill, character, false, 0, 1); + 战斗不能 e3 = new(Skill, character, false, 0, 1); enemy.Effects.Add(e3); e3.OnEffectGained(enemy); } diff --git a/OshimaModules/Skills/QWQAQW/破釜沉舟.cs b/OshimaModules/Skills/QWQAQW/破釜沉舟.cs index e4562d2..5bb910f 100644 --- a/OshimaModules/Skills/QWQAQW/破釜沉舟.cs +++ b/OshimaModules/Skills/QWQAQW/破釜沉舟.cs @@ -34,8 +34,9 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => Skill.Id; public override string Name => Skill.Name; public override string Description => $"最大生命值减少 20%。破釜沉舟:生命值高于 40% 时,受到额外的 [ {高于40额外伤害下限}~{高于40额外伤害上限}% ] 伤害,获得 [ 累计所受伤害的 {高于40的加成下限}~{高于40的加成上限}% ] 伤害加成;生命值低于等于 40% 时,不会受到额外的伤害,并且获得 [ 累计受到的伤害 {低于40的加成下限}~{低于40的加成上限}% ] 的伤害加成。" + - $"在没有受到任何伤害的时候,将获得 {常规伤害加成 * 100:0.##}% 伤害加成。" + (累计受到的伤害 > 0 ? $"(当前累计受到伤害:{累计受到的伤害:0.##})" : ""); + $"在没有受到任何伤害的时候,将获得 {常规伤害加成 * 100:0.##}% 伤害加成。通过累计受到伤害发动破釜沉舟时,目标的闪避检定获得 40% 的减值。" + (累计受到的伤害 > 0 ? $"(当前累计受到伤害:{累计受到的伤害:0.##})" : ""); + private bool 已通过累计受到伤害发动破釜沉舟 = false; private double 累计受到的伤害 = 0; private double 这次的伤害加成 = 0; private double 受到伤害之前的HP = 0; @@ -71,6 +72,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { if (character == Skill.Character) { + 已通过累计受到伤害发动破釜沉舟 = 累计受到的伤害 != 0; 这次的伤害加成 = 伤害加成(damage); WriteLine($"[ {character} ] 发动了破釜沉舟,获得了 {这次的伤害加成:0.##} 点伤害加成!"); 累计受到的伤害 = 0; @@ -106,5 +108,20 @@ namespace Oshima.FunGame.OshimaModules.Skills } } } + + public override bool BeforeEvadeCheck(Character actor, Character enemy, ref double throwingBonus) + { + if (已通过累计受到伤害发动破釜沉舟 && actor == Skill.Character) + { + 已通过累计受到伤害发动破釜沉舟 = false; + throwingBonus -= 0.4; + } + return true; + } + + public override void OnTurnEnd(Character character) + { + 已通过累计受到伤害发动破釜沉舟 = false; + } } } diff --git a/OshimaModules/Skills/战技/双连击.cs b/OshimaModules/Skills/战技/双连击.cs index 1fcffab..a0d31a1 100644 --- a/OshimaModules/Skills/战技/双连击.cs +++ b/OshimaModules/Skills/战技/双连击.cs @@ -28,7 +28,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"基于普通攻击的目标选择器对目标发起 2 次普通攻击。若该回合已使用过普通攻击,则只会发起 1 次普通攻击;使用该技能后,该回合不再允许普通攻击。伤害特效可叠加;不受 [ 攻击受限 ] 状态的限制。"; + public override string Description => $"基于普通攻击的目标选择器对目标发起 2 次普通攻击。双连击会占用 1 次普通攻击的决策点配额,当配额不足时,仅能发起 1 次普通攻击。伤害特效可叠加;不受 [ 攻击受限 ] 状态的限制。"; public 双连击特效(Skill skill) : base(skill) { @@ -39,14 +39,14 @@ namespace Oshima.FunGame.OshimaModules.Skills { if (GamingQueue != null) { - bool hasAttacked = false; + bool checkQuota = true; if (GamingQueue.CharacterDecisionPoints.TryGetValue(caster, out DecisionPoints? dp) && dp != null) { - hasAttacked = dp.ActionTypes.Contains(CharacterActionType.NormalAttack); - dp.ActionTypes.Add(CharacterActionType.NormalAttack); + checkQuota = dp.CheckActionTypeQuota(CharacterActionType.NormalAttack); + dp.AddActionType(CharacterActionType.NormalAttack, false); } caster.NormalAttack.Attack(GamingQueue, caster, targets); - if (!hasAttacked) + if (checkQuota) { caster.NormalAttack.Attack(GamingQueue, caster, targets); } diff --git a/OshimaModules/Skills/战技/疾走.cs b/OshimaModules/Skills/战技/疾走.cs index 7256dba..4a5eb51 100644 --- a/OshimaModules/Skills/战技/疾走.cs +++ b/OshimaModules/Skills/战技/疾走.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Model; namespace Oshima.FunGame.OshimaModules.Skills { @@ -25,7 +26,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"本回合内大幅提升移动距离。"; + public override string Description => $"本回合内大幅提升移动距离,并附赠一次战技的决策点配额。移动距离提升:{移动距离提升} 格。"; public override string DispelDescription => ""; public override EffectType EffectType => EffectType.Haste; public override bool Durative => false; @@ -45,21 +46,24 @@ namespace Oshima.FunGame.OshimaModules.Skills }; } } + private int 本次提升 = 0; public override void OnEffectGained(Character character) { Skill.IsInEffect = true; - character.ExMOV += 移动距离提升; + 本次提升 = 移动距离提升; + character.ExMOV += 本次提升; } public override void OnEffectLost(Character character) { Skill.IsInEffect = false; - character.ExMOV -= 移动距离提升; + character.ExMOV -= 本次提升; } public override void OnSkillCasted(Character caster, List targets, Dictionary others) { + 本次提升 = 0; if (!caster.Effects.Contains(this)) { GamingQueue?.LastRound.AddApplyEffects(caster, EffectType); @@ -67,6 +71,10 @@ namespace Oshima.FunGame.OshimaModules.Skills caster.Effects.Add(this); OnEffectGained(caster); } + if (GamingQueue != null && GamingQueue.CharacterDecisionPoints.TryGetValue(caster, out DecisionPoints? dp) && dp != null) + { + dp.AddTempActionQuota(CharacterActionType.CastSkill); + } } } } diff --git a/OshimaServers/Service/FunGameService.cs b/OshimaServers/Service/FunGameService.cs index 75dfcf4..1f89789 100644 --- a/OshimaServers/Service/FunGameService.cs +++ b/OshimaServers/Service/FunGameService.cs @@ -1378,7 +1378,6 @@ namespace Oshima.FunGame.OshimaServers.Service Item newItem = new 魔法卡礼包(type, box.Gifts[name]); AddItemToUserInventory(user, newItem, false, true); } - break; } } }