This commit is contained in:
milimoe 2026-01-22 01:38:24 +08:00
parent b76b263913
commit 6a25cf9b3f
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
7 changed files with 72 additions and 11 deletions

View File

@ -26,7 +26,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Name => Skill.Name; public override string Name => Skill.Name;
public override string Description => $"{Skill.SkillOwner()}处于正常态和吟唱态时,每秒回复 {回复系数 * 100:0.##}% 最大生命值 [ {Skill.Character?.MaxHP * 回复系数:0.##} ] 并获得 {能量获取:0.##} 点能量。"; public override string Description => $"{Skill.SkillOwner()}处于正常态和吟唱态时,每秒回复 {回复系数 * 100:0.##}% 最大生命值 [ {Skill.Character?.MaxHP * 回复系数:0.##} ] 并获得 {能量获取:0.##} 点能量。";
public double { get; set; } = 0.02; public double { get; set; } = 0.01;
public double { get; set; } = 1; public double { get; set; } = 1;
public override void OnTimeElapsed(Character character, double elapsed) public override void OnTimeElapsed(Character character, double elapsed)

View File

@ -39,15 +39,15 @@ namespace Oshima.FunGame.OshimaModules.Skills
public string => $"{Skill.SkillOwner()}可以选择获得哪一种力量:\r\n{熵核描述}\r\n{守护描述}"; public string => $"{Skill.SkillOwner()}可以选择获得哪一种力量:\r\n{熵核描述}\r\n{守护描述}";
private string => $"【熵核】加速生命回复,每{GameplayEquilibriumConstant.InGameTime}额外回复 {熵核额外回复 * 100:0.##}% 当前生命值 [ {Skill.Character?.HP * 熵核额外回复:0.##} ],攻击力提升 {熵核攻击力提升 * 100:0.##}% [ {Skill.Character?.BaseATK * 熵核攻击力提升:0.##} ],但是受到的伤害提升 {熵核受到伤害提升 * 100:0.##}%。" + private string => $"【熵核】加速生命回复,每{GameplayEquilibriumConstant.InGameTime}额外回复 {熵核额外回复 * 100:0.##}% 当前生命值 [ {Skill.Character?.HP * 熵核额外回复:0.##} ],攻击力提升 {熵核攻击力提升 * 100:0.##}% [ {Skill.Character?.BaseATK * 熵核攻击力提升:0.##} ],但是受到的伤害提升 {熵核受到伤害提升 * 100:0.##}%。" +
$"对敌人造成伤害会使其在 {熵核影响敌人时间:0.##} {GameplayEquilibriumConstant.InGameTime}内无法获得自然的生命和魔法回复的禁止治疗效果,施加该状态时,只有目标的敏捷高于{Skill.SkillOwner()}的角色才能进行豁免检定。持续 {熵核持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。"; $"对敌人造成伤害会使其在 {熵核影响敌人时间:0.##} {GameplayEquilibriumConstant.InGameTime}内无法获得自然的生命和魔法回复的禁止治疗效果,施加该状态时,只有目标的敏捷高于{Skill.SkillOwner()}的角色才能进行豁免检定。持续 {熵核持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。";
private static double => 0.04; private static double => 0.02;
private double => 0.2 + 0.1 * (Skill.Level - 1); private double => 0.2 + 0.1 * (Skill.Level - 1);
private double => 0.15 + 0.05 * (Skill.Level - 1); private double => 0.15 + 0.05 * (Skill.Level - 1);
private static double => 10; private static double => 10;
private double => 15 + 2 * (Skill.Level - 1); private double => 15 + 2 * (Skill.Level - 1);
private string => $"【守护】极致地加速生命回复,每{GameplayEquilibriumConstant.InGameTime}额外回复 {守护额外回复 * 100:0.##}% 当前生命值 [ {Skill.Character?.HP * 守护额外回复:0.##} ],为全体友方角色提供每{GameplayEquilibriumConstant.InGameTime}额外 {守护友方回复 * 100:0.##}% 当前生命值的生命回复,并嘲讽全体敌方角色,被嘲讽的角色仅能将{Skill.SkillOwner()}作为攻击目标。" + private string => $"【守护】极致地加速生命回复,每{GameplayEquilibriumConstant.InGameTime}额外回复 {守护额外回复 * 100:0.##}% 当前生命值 [ {Skill.Character?.HP * 守护额外回复:0.##} ],为全体友方角色提供每{GameplayEquilibriumConstant.InGameTime}额外 {守护友方回复 * 100:0.##}% 当前生命值的生命回复,并嘲讽全体敌方角色,被嘲讽的角色仅能将{Skill.SkillOwner()}作为攻击目标。" +
$"施加嘲讽状态时,只有目标的敏捷高于{Skill.SkillOwner()}的角色才能进行豁免检定。持续 {守护持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。"; $"施加嘲讽状态时,只有目标的敏捷高于{Skill.SkillOwner()}的角色才能进行豁免检定。持续 {守护持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。";
private double => 0.06 + 0.005 * (Skill.Level - 1); private double => 0.01 + 0.003 * (Skill.Level - 1);
private double => 0.01 + 0.01 * (Skill.Level - 1); private double => 0.01 + 0.002 * (Skill.Level - 1);
private double => 15 + 1 * (Skill.Level - 1); private double => 15 + 1 * (Skill.Level - 1);
private bool { get; set; } = false; private bool { get; set; } = false;

View File

@ -1,6 +1,8 @@
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
namespace Oshima.FunGame.OshimaModules.Skills namespace Oshima.FunGame.OshimaModules.Skills
{ {
@ -26,17 +28,19 @@ namespace Oshima.FunGame.OshimaModules.Skills
{ {
public override long Id => Skill.Id; public override long Id => Skill.Id;
public override string Name => "咒怨洪流"; public override string Name => "咒怨洪流";
public override string Description => $"{Skill.SkillOwner()}将「熵核」的污染之力附着在武器之上。{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内,增加自身所有伤害的 {减伤比例 * 100:0.##}% 伤害减免;[ 蚀魂震击 ] 的冷却时间降低至 5 {GameplayEquilibriumConstant.InGameTime},并将普通攻击转为魔法伤害,允许普通攻击时选择至多 3 个目标。"; public override string Description => $"{Skill.SkillOwner()}将「熵核」的污染之力附着在武器之上。{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内,增加自身所有伤害的 {减伤比例 * 100:0.##}% 伤害减免;[ 蚀魂震击 ] 的冷却时间降低至 5 {GameplayEquilibriumConstant.InGameTime},并将普通攻击转为魔法伤害;在一个回合里首次使用普通攻击后,附赠 {额外攻击次数} 次普通攻击决策点配额,但后续普通攻击必须选取不重复的目标。";
public override bool Durative => true; public override bool Durative => true;
public override double Duration => 30; public override double Duration => 30;
public override DispelledType DispelledType => DispelledType.CannotBeDispelled; public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
private double => 0.15 + 0.02 * (Level - 1); private double => 0.15 + 0.02 * (Level - 1);
private double = 0; private double = 0;
private readonly List<Character> = [];
private bool = true;
private readonly int = 2;
public override void OnEffectGained(Character character) public override void OnEffectGained(Character character)
{ {
character.NormalAttack.CanSelectTargetCount += 2;
= ; = ;
character.NormalAttack.SetMagicType(new(this, true, MagicType.None, 999), GamingQueue); character.NormalAttack.SetMagicType(new(this, true, MagicType.None, 999), GamingQueue);
if (character.Effects.Where(e => e is ).FirstOrDefault() is e) if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
@ -49,7 +53,6 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override void OnEffectLost(Character character) public override void OnEffectLost(Character character)
{ {
= 0; = 0;
character.NormalAttack.CanSelectTargetCount -= 2;
character.NormalAttack.UnsetMagicType(this, GamingQueue); character.NormalAttack.UnsetMagicType(this, GamingQueue);
if (character.Effects.Where(e => e is ).FirstOrDefault() is e) if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{ {
@ -57,6 +60,31 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
} }
public override void OnTurnStart(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items)
{
.Clear();
= true;
}
public override void AfterCharacterNormalAttack(Character character, NormalAttack normalAttack, List<Character> targets)
{
.AddRange(targets);
if ( && GamingQueue != null && GamingQueue.CharacterDecisionPoints.TryGetValue(character, out DecisionPoints? dp) && dp != null)
{
= false;
dp.AddTempActionQuota(CharacterActionType.NormalAttack, );
WriteLine($"[ {character} ] 发动了{nameof(咒怨洪流)}!本回合可额外发动 {额外攻击次数} 次普通攻击!");
}
}
public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates)
{
if (skill is NormalAttack && !)
{
enemys.RemoveAll(.Contains);
}
}
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus) public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
{ {
if (enemy == Skill.Character) if (enemy == Skill.Character)

View File

@ -34,12 +34,15 @@ 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) public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult)
{ {
if (character == Skill.Character && isNormalAttack && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && ! && enemy.HP > 0) if (Skill.CurrentCD == 0 && character == Skill.Character && isNormalAttack && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && ! && enemy.HP > 0)
{ {
Skill.CurrentCD = Skill.CD; Skill.CurrentCD = Skill.CD;
WriteLine($"[ {character} ] 发动了银隼之赐!将造成额外伤害!"); WriteLine($"[ {character} ] 发动了银隼之赐!将造成额外伤害!");
= true; = true;
DamageToEnemy(character, enemy, DamageType.Magical, magicType, ); DamageToEnemy(character, enemy, DamageType.Magical, magicType, , new(character)
{
TriggerEffects = false
});
} }
if (character == Skill.Character && ) if (character == Skill.Character && )

View File

@ -63,7 +63,7 @@ namespace Oshima.FunGame.OshimaServers.Service
} }
} }
public static async Task<List<string>> StartSimulationGame(bool printout, bool isWeb = false, bool isTeam = false, bool deathMatchRoundDetail = false, int maxRespawnTimesMix = 1, bool useStore = false, bool hasMap = false) public static async Task<List<string>> StartSimulationGame(bool printout, bool isWeb = false, bool isTeam = false, bool deathMatchRoundDetail = false, int maxRespawnTimesMix = 1, bool useStore = false, bool hasMap = false, bool isDebug = false)
{ {
PrintOut = printout; PrintOut = printout;
IsWeb = isWeb; IsWeb = isWeb;
@ -205,7 +205,7 @@ namespace Oshima.FunGame.OshimaServers.Service
if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo())); if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo()));
// 初始化队列,准备开始游戏 // 初始化队列,准备开始游戏
actionQueue.IsDebug = IsDebug; actionQueue.IsDebug = IsDebug || isDebug;
actionQueue.InitActionQueue(); actionQueue.InitActionQueue();
actionQueue.SetCharactersToAIControl(false, characters); actionQueue.SetCharactersToAIControl(false, characters);
if (PrintOut) Console.WriteLine(); if (PrintOut) Console.WriteLine();

View File

@ -38,6 +38,13 @@ namespace Oshima.FunGame.WebAPI.Controllers
return await FunGameSimulation.StartSimulationGame(false, isweb ?? true, isteam ?? false, showall ?? false, maxRespawnTimesMix ?? 1, false, hasMap ?? false); return await FunGameSimulation.StartSimulationGame(false, isweb ?? true, isteam ?? false, showall ?? false, maxRespawnTimesMix ?? 1, false, hasMap ?? false);
} }
[AllowAnonymous]
[HttpGet("testdebug")]
public async Task<List<string>> GetTestDebug([FromQuery] bool? isweb = null, [FromQuery] bool? isteam = null, [FromQuery] bool? showall = null, [FromQuery] int? maxRespawnTimesMix = null, [FromQuery] bool? hasMap = null)
{
return await FunGameSimulation.StartSimulationGame(false, isweb ?? true, isteam ?? false, showall ?? false, maxRespawnTimesMix ?? 1, false, hasMap ?? false, true);
}
[AllowAnonymous] [AllowAnonymous]
[HttpGet("last")] [HttpGet("last")]
public List<string> GetLast([FromQuery] bool full = false) public List<string> GetLast([FromQuery] bool full = false)

View File

@ -502,6 +502,29 @@ namespace Oshima.FunGame.WebAPI.Services
return result; return result;
} }
if (e.Detail.StartsWith("团队调试模拟", StringComparison.CurrentCultureIgnoreCase))
{
e.UseNotice = false;
if (!FunGameSimulation)
{
FunGameSimulation = true;
List<string> msgs = await Controller.GetTestDebug(false, true, hasMap: true);
List<string> real = MergeMessages(msgs);
int count = 1;
foreach (string msg in real)
{
await SendAsync(e, "筽祀牻", msg.Trim(), msgSeq: count++);
if (count != real.Count) await Task.Delay(5500);
}
FunGameSimulation = false;
}
else
{
await SendAsync(e, "筽祀牻", "游戏正在模拟中,请勿重复请求!");
}
return result;
}
if (e.Detail.StartsWith("查数据", StringComparison.CurrentCultureIgnoreCase)) if (e.Detail.StartsWith("查数据", StringComparison.CurrentCultureIgnoreCase))
{ {
e.UseNotice = false; e.UseNotice = false;