diff --git a/OshimaModules/Effects/OpenEffects/IgnoreEvade.cs b/OshimaModules/Effects/OpenEffects/IgnoreEvade.cs index cd38ed0..af5bcc2 100644 --- a/OshimaModules/Effects/OpenEffects/IgnoreEvade.cs +++ b/OshimaModules/Effects/OpenEffects/IgnoreEvade.cs @@ -17,7 +17,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects { if (actor == Skill.Character) { - WriteLine($"[ {actor} ] 的普通攻击无视了 [ {enemy} ] 的闪避!"); + if (GamingQueue != null) WriteLine($"[ {actor} ] 的普通攻击无视了 [ {enemy} ] 的闪避!"); return false; } return true; diff --git a/OshimaModules/Effects/SkillEffects/造成封技.cs b/OshimaModules/Effects/SkillEffects/造成封技.cs index 17c71e4..f091e86 100644 --- a/OshimaModules/Effects/SkillEffects/造成封技.cs +++ b/OshimaModules/Effects/SkillEffects/造成封技.cs @@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { foreach (Character enemy in targets) { - WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了封技和施法解除!持续时间:{封技时间} {GameplayEquilibriumConstant.InGameTime}!"); + WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了封技和施法解除!持续时间:{封技时间}!"); 封技 e = new(Skill, caster, false, 0, 1); enemy.Effects.Add(e); e.OnEffectGained(enemy); diff --git a/OshimaModules/Effects/SkillEffects/造成眩晕.cs b/OshimaModules/Effects/SkillEffects/造成眩晕.cs index 3767735..15ec72f 100644 --- a/OshimaModules/Effects/SkillEffects/造成眩晕.cs +++ b/OshimaModules/Effects/SkillEffects/造成眩晕.cs @@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { foreach (Character enemy in targets) { - WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间} {GameplayEquilibriumConstant.InGameTime}!"); + WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间}!"); 眩晕 e = new(Skill, caster, false, 0, 1); enemy.Effects.Add(e); e.OnEffectGained(enemy); diff --git a/OshimaModules/Effects/SkillEffects/降低敌方行动速度.cs b/OshimaModules/Effects/SkillEffects/降低敌方行动速度.cs index 0973b0d..d6504f1 100644 --- a/OshimaModules/Effects/SkillEffects/降低敌方行动速度.cs +++ b/OshimaModules/Effects/SkillEffects/降低敌方行动速度.cs @@ -31,7 +31,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { foreach (Character target in targets) { - WriteLine($"[ {target} ] 的行动速度降低了 {SPD:0.##} !持续时间:{持续时间} {GameplayEquilibriumConstant.InGameTime}!"); + WriteLine($"[ {target} ] 的行动速度降低了 {-SPD:0.##} !持续时间:{持续时间} {GameplayEquilibriumConstant.InGameTime}!"); ExSPD e = new(Skill, new Dictionary() { { "exspd", SPD } diff --git a/OshimaModules/Skills/ColdBlue/嗜血本能.cs b/OshimaModules/Skills/ColdBlue/嗜血本能.cs index 663ebba..6dccb4c 100644 --- a/OshimaModules/Skills/ColdBlue/嗜血本能.cs +++ b/OshimaModules/Skills/ColdBlue/嗜血本能.cs @@ -29,8 +29,8 @@ namespace Oshima.FunGame.OshimaModules.Skills public override bool Durative => true; public override double Duration => 25; - private static double 吸血 => 0.3; - private double 最大生命值伤害 => 0.02 * Level; + private static double 吸血 => 0.2; + private double 最大生命值伤害 => 0.015 * Level; public override void OnEffectGained(Character character) { diff --git a/OshimaModules/Skills/ColdBlue/累积之压.cs b/OshimaModules/Skills/ColdBlue/累积之压.cs index 3023576..7ca3f62 100644 --- a/OshimaModules/Skills/ColdBlue/累积之压.cs +++ b/OshimaModules/Skills/ColdBlue/累积之压.cs @@ -27,7 +27,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Name => Skill.Name; public override string Description => $"造成伤害时会标记目标,攻击具有标记的敌人将对其造成眩晕 1 回合,并回收标记,额外对该角色造成 {系数 * 100:0.##}% 最大生命值的物理伤害。"; - public double 系数 { get; set; } = 0.16; + public double 系数 { get; set; } = 0.12; private bool 是否是嵌套伤害 = false; public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult) diff --git a/OshimaModules/Skills/MagicalGirl/毁灭之势.cs b/OshimaModules/Skills/MagicalGirl/毁灭之势.cs index e00cad3..89b5c7f 100644 --- a/OshimaModules/Skills/MagicalGirl/毁灭之势.cs +++ b/OshimaModules/Skills/MagicalGirl/毁灭之势.cs @@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"每经过 {时间流逝} {GameplayEquilibriumConstant.InGameTime},提升 {伤害提升 * 100:0.##}% 所有伤害,无上限,但是受到伤害时清零。(下一次提升在:{下一次提升:0.##} {GameplayEquilibriumConstant.InGameTime}后{(累计伤害 > 0 ? $",当前总提升:{累计伤害 * 100:0.##}%" : "")})"; + public override string Description => $"每经过 {时间流逝} {GameplayEquilibriumConstant.InGameTime},提升 {伤害提升 * 100:0.##}% 所有伤害,无上限。受到伤害时清零;造成伤害后,累计提升减少总量的 30%。(下一次提升在:{下一次提升:0.##} {GameplayEquilibriumConstant.InGameTime}后{(累计伤害 > 0 ? $",当前总提升:{累计伤害 * 100:0.##}%" : "")})"; private readonly double 时间流逝 = 7; private readonly double 伤害提升 = 0.21; @@ -43,7 +43,8 @@ namespace Oshima.FunGame.OshimaModules.Skills if (character == Skill.Character) { double 实际伤害提升 = damage * 累计伤害; - if (实际伤害提升 > 0) WriteLine($"[ {character} ] 的伤害提升了 {实际伤害提升:0.##} 点!"); + if (实际伤害提升 > 0) WriteLine($"[ {character} ] 的伤害提升了 {累计伤害 * 100:0.##}% [ {实际伤害提升:0.##} ] 点!"); + 累计伤害 *= 0.7; return 实际伤害提升; } } diff --git a/OshimaModules/Skills/MagicalGirl/绝对领域.cs b/OshimaModules/Skills/MagicalGirl/绝对领域.cs index 0eb95d1..d4634ca 100644 --- a/OshimaModules/Skills/MagicalGirl/绝对领域.cs +++ b/OshimaModules/Skills/MagicalGirl/绝对领域.cs @@ -10,7 +10,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override double EPCost => Math.Max(100, Character?.EP ?? 100); public override double CD => 60; - public override double HardnessTime { get; set; } = 12; + public override double HardnessTime { get; set; } = 5; public override bool CanSelectSelf => true; public override bool CanSelectEnemy => false; @@ -26,7 +26,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Name => Skill.Name; public override string Description => $"{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内无法受到任何伤害,且敏捷提升 {系数 * 100:0.##}% [ {敏捷提升:0.##} ]。此技能会消耗至少 100 点能量。"; public override bool Durative => true; - public override double Duration => 16 + 释放时的能量值 * 0.03; + public override double Duration => 13 + 释放时的能量值 * 0.03; private double 系数 => 0.2 + 0.015 * (Level - 1); private double 敏捷提升 => 系数 * Skill.Character?.BaseAGI ?? 0; diff --git a/OshimaModules/Skills/NanGanyu/三重叠加.cs b/OshimaModules/Skills/NanGanyu/三重叠加.cs index 6202929..d48c538 100644 --- a/OshimaModules/Skills/NanGanyu/三重叠加.cs +++ b/OshimaModules/Skills/NanGanyu/三重叠加.cs @@ -10,7 +10,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override double EPCost => 100; public override double CD => 35 - 2 * (Level - 1); - public override double HardnessTime { get; set; } = 10; + public override double HardnessTime { get; set; } = 0; public override bool CanSelectSelf => true; public override bool CanSelectEnemy => false; diff --git a/OshimaModules/Skills/NanGanyu/灵能反射.cs b/OshimaModules/Skills/NanGanyu/灵能反射.cs index f1be976..bd47c10 100644 --- a/OshimaModules/Skills/NanGanyu/灵能反射.cs +++ b/OshimaModules/Skills/NanGanyu/灵能反射.cs @@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"每释放 {触发硬直次数:0.##} 次魔法才会触发硬直时间,且魔法命中时基于 25% 智力 [ {获得额外能量值:0.##} ] 获得额外能量值。"; + public override string Description => $"每释放 {触发硬直次数:0.##} 次魔法才会触发硬直时间,且魔法伤害命中时基于 25% 智力 [ {获得额外能量值:0.##} ] 获得额外能量值,并减少所有技能 2 {GameplayEquilibriumConstant.InGameTime} 冷却时间。"; public bool 是否支持普攻 { get; set; } = false; public int 触发硬直次数 { get; set; } = 2; @@ -37,7 +37,16 @@ namespace Oshima.FunGame.OshimaModules.Skills { double 实际获得能量值 = 获得额外能量值; character.EP += 实际获得能量值; - WriteLine($"[ {character} ] 发动了灵能反射!额外获得了 {实际获得能量值:0.##} 能量!"); + foreach (Skill scd in character.Skills) + { + scd.CurrentCD -= 2; + if (scd.CurrentCD < 0) + { + scd.CurrentCD = 0; + scd.Enable = true; + } + } + WriteLine($"[ {character} ] 发动了灵能反射!额外获得了 {实际获得能量值:0.##} 能量,并消除了 2 {GameplayEquilibriumConstant.InGameTime} 冷却时间!"); IEnumerable effects = character.Effects.Where(e => e is 三重叠加特效); if (effects.Any() && effects.First() is 三重叠加特效 e) { diff --git a/OshimaModules/Skills/NiuNan/变幻之心.cs b/OshimaModules/Skills/NiuNan/变幻之心.cs index a91c37b..fd19710 100644 --- a/OshimaModules/Skills/NiuNan/变幻之心.cs +++ b/OshimaModules/Skills/NiuNan/变幻之心.cs @@ -9,8 +9,8 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Name => "变幻之心"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override double EPCost => 100; - public override double CD => 30; - public override double HardnessTime { get; set; } = 10; + public override double CD => 20; + public override double HardnessTime { get; set; } = 3; public override bool CanSelectSelf => true; public override bool CanSelectEnemy => false; @@ -27,7 +27,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Description => $"检查 [ 智慧与力量 ] 的模式。在力量模式下,立即回复 {生命值回复 * 100:0.##}% 生命值;智力模式下,下一次魔法伤害提升 {伤害提升 * 100:0.##}%。"; private double 生命值回复 => 0.25 + 0.03 * (Level - 1); - private double 伤害提升 => 0.55 + 0.25 * (Level - 1); + private double 伤害提升 => 0.6 + 0.4 * (Level - 1); public override void OnEffectGained(Character character) { diff --git a/OshimaModules/Skills/NiuNan/智慧与力量.cs b/OshimaModules/Skills/NiuNan/智慧与力量.cs index 8d5e571..d5ca85a 100644 --- a/OshimaModules/Skills/NiuNan/智慧与力量.cs +++ b/OshimaModules/Skills/NiuNan/智慧与力量.cs @@ -24,10 +24,11 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"当生命值低于 30% 时,进入力量模式,核心属性转为力量,将所有基础智力转化为额外力量;当生命值高于或等于 30% 时,进入智力模式,核心属性转为智力,还原所有基础智力。力量模式下,造成伤害必定暴击;智力模式下,获得 15% 闪避率和 15% 魔法抗性。" + + public override string Description => $"当生命值低于 30% 时,进入力量模式,核心属性转为力量,将所有基础智力转化为额外力量;当生命值高于或等于 30% 时,进入智力模式,核心属性转为智力,还原所有基础智力。力量模式下,造成伤害必定暴击;智力模式下,获得 15% 暴击率、15% 闪避率和 15% 魔法抗性。" + (Skill.Character != null ? "(当前模式:" + CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) + ")" : ""); private double 交换的基础智力 = 0; + private double 实际增加暴击率 = 0.15; private double 实际增加闪避率 = 0.15; private double 实际增加魔法抗性 = 0.15; private bool 已经加过 = false; @@ -51,12 +52,14 @@ namespace Oshima.FunGame.OshimaModules.Skills { 已经加过 = true; character.ExEvadeRate += 实际增加闪避率; + character.ExCritRate += 实际增加暴击率; character.MDF.AddAllValue(实际增加魔法抗性); } else { 已经加过 = false; character.ExEvadeRate -= 实际增加闪避率; + character.ExCritRate -= 实际增加暴击率; character.MDF.AddAllValue(-实际增加魔法抗性); } } diff --git a/OshimaModules/Skills/QingXiang/能量毁灭.cs b/OshimaModules/Skills/QingXiang/能量毁灭.cs index 02df5b4..9e2c509 100644 --- a/OshimaModules/Skills/QingXiang/能量毁灭.cs +++ b/OshimaModules/Skills/QingXiang/能量毁灭.cs @@ -9,7 +9,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Name => "能量毁灭"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override double EPCost => 100; - public override double CD => 55 - 3 * (Level - 1); + public override double CD => 60 - 1 * (Level - 1); public override double HardnessTime { get; set; } = 25; public override string Slogan => "从深渊引爆力量,世界将为之颤抖!!!!"; public override bool CanSelectSelf => false; @@ -20,16 +20,12 @@ namespace Oshima.FunGame.OshimaModules.Skills Effects.Add(new 能量毁灭特效(this)); } - public override List SelectTargets(Character caster, List enemys, List teammates) - { - return [.. enemys]; - } - public override void OnTurnStart(Character character, List enemys, List teammates, List skills, List items) { if (Character == character) { CanSelectTargetCount = enemys.Count; + if (CanSelectTargetCount > 6) CanSelectTargetCount = 6; } } } @@ -38,10 +34,10 @@ 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 => $"对至多 6 个角色造成 " + $"{能量系数 * 100:0.##}% 其现有能量值 + {智力系数 * 100:0.##}% 智力 [ {智力伤害:0.##} ] 的魔法伤害。"; - private double 智力系数 => 0.25 * Level; + private double 智力系数 => 0.2 * Level; private double 智力伤害 => 智力系数 * Skill.Character?.INT ?? 0; private double 能量系数 => 1.05 * Level; diff --git a/OshimaModules/Skills/XinYin/天赐之力.cs b/OshimaModules/Skills/XinYin/天赐之力.cs index 1fb076d..b435919 100644 --- a/OshimaModules/Skills/XinYin/天赐之力.cs +++ b/OshimaModules/Skills/XinYin/天赐之力.cs @@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"{Duration:0.##} 时间内,增加 40% 攻击力 [ {攻击力提升:0.##} ]、30% 物理穿透和 25% 闪避率(不可叠加),普通攻击硬直时间额外减少 20%,基于 {系数 * 100:0.##}% 敏捷 [ {伤害加成:0.##} ] 强化普通攻击的伤害。在持续时间内,【心灵之火】的冷却时间降低至 3 时间。"; + public override string Description => $"{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内,增加 40% 攻击力 [ {攻击力提升:0.##} ]、30% 物理穿透和 25% 闪避率(不可叠加),普通攻击硬直时间额外减少 20%,基于 {系数 * 100:0.##}% 敏捷 [ {伤害加成:0.##} ] 强化普通攻击的伤害。在持续时间内,【心灵之火】的冷却时间降低至 3 {GameplayEquilibriumConstant.InGameTime}。"; public override bool Durative => true; public override double Duration => 40; diff --git a/OshimaModules/Skills/Yang/魔法震荡.cs b/OshimaModules/Skills/Yang/魔法震荡.cs index f7a9604..2070499 100644 --- a/OshimaModules/Skills/Yang/魔法震荡.cs +++ b/OshimaModules/Skills/Yang/魔法震荡.cs @@ -25,16 +25,21 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"对处于完全行动不能状态的敌人额外造成 {系数 * 100:0.##}% 力量 [ {伤害加成:0.##} ] 点伤害;造成魔法伤害时使敌人眩晕 1 回合,冷却 {基础冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" + + public override string Description => $"对处于完全行动不能、行动受限、战斗不能、技能受限、攻击受限状态的敌人额外造成 {系数 * 100:0.##}% 力量 [ {伤害加成:0.##} ] 点伤害;造成魔法伤害时使敌人眩晕 1 回合,冷却 {基础冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" + (冷却时间 > 0 ? $"(正在冷却:剩余 {冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime})" : ""); public double 冷却时间 { get; set; } = 0; public double 基础冷却时间 { get; set; } = 10; - private double 系数 => 1.2 * (1 + 0.4 * (Skill.Level - 1)); + private static double 系数 => 4; private double 伤害加成 => 系数 * Skill.Character?.STR ?? 0; public override double AlterExpectedDamageBeforeCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, Dictionary totalDamageBonus) { - if (character == Skill.Character && enemy.CharacterState == CharacterState.NotActionable) + if (character == Skill.Character && ( + enemy.CharacterState == CharacterState.NotActionable || + enemy.CharacterState == CharacterState.ActionRestricted || + enemy.CharacterState == CharacterState.BattleRestricted || + enemy.CharacterState == CharacterState.SkillRestricted || + enemy.CharacterState == CharacterState.AttackRestricted)) { return 伤害加成; } @@ -43,7 +48,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult) { - if (character == Skill.Character && isMagicDamage && 冷却时间 == 0 && damageResult != DamageResult.Evaded && new Random().NextDouble() < 0.35) + if (character == Skill.Character && isMagicDamage && 冷却时间 == 0 && damageResult != DamageResult.Evaded) { IEnumerable effects = enemy.Effects.Where(e => e is 眩晕 && e.Skill == Skill); if (effects.Any()) diff --git a/OshimaModules/Skills/战技/疾风步.cs b/OshimaModules/Skills/战技/疾风步.cs index 25740d5..d4cbb22 100644 --- a/OshimaModules/Skills/战技/疾风步.cs +++ b/OshimaModules/Skills/战技/疾风步.cs @@ -40,6 +40,7 @@ namespace Oshima.FunGame.OshimaModules.Skills character.UpdateCharacterState(); character.ExSPD += 100; character.ExCritRate += 0.08; + GamingQueue?.InterruptCastingAsync(character); } public override void OnEffectLost(Character character) diff --git a/OshimaServers/Service/FunGameActionQueue.cs b/OshimaServers/Service/FunGameActionQueue.cs index 297c0f4..19a2771 100644 --- a/OshimaServers/Service/FunGameActionQueue.cs +++ b/OshimaServers/Service/FunGameActionQueue.cs @@ -32,6 +32,7 @@ namespace Oshima.FunGame.OshimaServers.Service // 创建顺序表并排序 ActionQueue actionQueue = new(characters, false, WriteLine); actionQueue.SetCharactersToAIControl(false, characters); + ActionQueue = actionQueue; if (PrintOut) Console.WriteLine(); // 总游戏时长 @@ -239,6 +240,7 @@ namespace Oshima.FunGame.OshimaServers.Service MaxScoreToWin = maxScoreToWin }; actionQueue.SetCharactersToAIControl(false, characters); + ActionQueue = actionQueue; if (PrintOut) Console.WriteLine(); // 总游戏时长