修改豁免持续时间的位置

This commit is contained in:
milimoe 2026-01-28 00:55:40 +08:00
parent 6340a3236c
commit 899356d698
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0

View File

@ -867,12 +867,6 @@ namespace Milimoe.FunGame.Core.Model
effect.OnTimeElapsed(character, timeToReduce); effect.OnTimeElapsed(character, timeToReduce);
} }
// 进行持续时间豁免
if (effect.Exemptable && effect.ExemptDuration && (effect.RemainDuration > 0 || effect.RemainDurationTurn > 0))
{
CheckExemption(character, effect.Source, effect, false);
}
if (effect.IsBeingTemporaryDispelled) if (effect.IsBeingTemporaryDispelled)
{ {
effect.IsBeingTemporaryDispelled = false; effect.IsBeingTemporaryDispelled = false;
@ -992,6 +986,16 @@ namespace Milimoe.FunGame.Core.Model
return _isGameEnd; return _isGameEnd;
} }
// 进行持续时间豁免
Effect[] effects = [.. character.Effects.OrderByDescending(e => e.Priority)];
foreach (Effect effect in effects)
{
if (effect.Exemptable && effect.ExemptDuration && (effect.RemainDuration > 0 || effect.RemainDurationTurn > 0))
{
CheckExemption(character, effect.Source, effect, false);
}
}
// 决策点补充 // 决策点补充
DecisionPoints dp = DecisionPointsRecovery(character); DecisionPoints dp = DecisionPointsRecovery(character);
@ -1026,7 +1030,7 @@ namespace Milimoe.FunGame.Core.Model
skillTurnStart.OnTurnStart(character, selectableEnemys, selectableTeammates, skills, items); skillTurnStart.OnTurnStart(character, selectableEnemys, selectableTeammates, skills, items);
} }
List<Effect> effects = [.. character.Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority)]; effects = [.. character.Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority)];
foreach (Effect effect in effects) foreach (Effect effect in effects)
{ {
effect.OnTurnStart(character, selectableEnemys, selectableTeammates, skills, items); effect.OnTurnStart(character, selectableEnemys, selectableTeammates, skills, items);
@ -1850,7 +1854,7 @@ namespace Milimoe.FunGame.Core.Model
if (!decided && (isAI || cancelTimes == 0)) if (!decided && (isAI || cancelTimes == 0))
{ {
endTurn = true; endTurn = true;
baseTime += 4; baseTime += 3;
type = CharacterActionType.EndTurn; type = CharacterActionType.EndTurn;
} }
@ -3745,7 +3749,7 @@ namespace Milimoe.FunGame.Core.Model
character.CharacterState == CharacterState.BattleRestricted) character.CharacterState == CharacterState.BattleRestricted)
{ {
baseTime += 2; baseTime += 2;
WriteLine($"[ {character} ] {CharacterSet.GetCharacterState(character.CharacterState)},放弃行动将额外获得 3 {GameplayEquilibriumConstant.InGameTime}硬直时间!"); WriteLine($"[ {character} ] {CharacterSet.GetCharacterState(character.CharacterState)},放弃行动将额外获得 2 {GameplayEquilibriumConstant.InGameTime}硬直时间!");
} }
} }
@ -4378,13 +4382,18 @@ namespace Milimoe.FunGame.Core.Model
else else
{ {
string description = ""; string description = "";
bool remove = false;
if (effect.Durative && effect.RemainDuration > 0) if (effect.Durative && effect.RemainDuration > 0)
{ {
// 随机减小 20% 至 50% // 随机减小 5% 至 20%
double reduce = Random.Shared.Next(2, 6) * 10; double reduce = Random.Shared.Next(5, 20);
reduce = effect.RemainDuration * (reduce / 100); reduce = (effect.Duration > 0 ? effect.Duration : effect.RemainDuration) * (reduce / 100);
effect.RemainDuration -= reduce; effect.RemainDuration -= reduce;
description = $"[ {effect.Name} ] 的持续时间减少了 {reduce:0.##} {GameplayEquilibriumConstant.InGameTime}"; description = $"[ {effect.Name} ] 的持续时间减少了 {reduce:0.##} {GameplayEquilibriumConstant.InGameTime}";
if (effect.RemainDuration <= 0)
{
effect.RemainDuration = 0;
}
} }
else if (effect.RemainDurationTurn > 0) else if (effect.RemainDurationTurn > 0)
{ {
@ -4393,11 +4402,14 @@ namespace Milimoe.FunGame.Core.Model
if (effect.RemainDurationTurn <= 0) if (effect.RemainDurationTurn <= 0)
{ {
effect.RemainDurationTurn = 0; effect.RemainDurationTurn = 0;
}
}
if (remove)
{
character.Effects.Remove(effect); character.Effects.Remove(effect);
effect.OnEffectLost(character); effect.OnEffectLost(character);
description += $"\r\n[ {character} ] 失去了 [ {effect.Name} ] 效果。"; description += $"\r\n[ {character} ] 失去了 [ {effect.Name} ] 效果。";
} }
}
WriteLine($"[ {character} ] 的{CharacterSet.GetPrimaryAttributeName(effect.ExemptionType)}豁免检定通过!{description}"); WriteLine($"[ {character} ] 的{CharacterSet.GetPrimaryAttributeName(effect.ExemptionType)}豁免检定通过!{description}");
} }
OnCharacterExemptionEvent(character, source, effect.Skill, effect.Skill.Item, isEvade); OnCharacterExemptionEvent(character, source, effect.Skill, effect.Skill.Item, isEvade);