fix: 重复队列和负数时间流逝 (#131)

This commit is contained in:
yeziuku 2025-04-27 13:24:13 +08:00 committed by GitHub
parent b9a9153924
commit 3a3c15bca3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,4 +1,4 @@
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Base; using Milimoe.FunGame.Core.Interface.Base;
using Milimoe.FunGame.Core.Interface.Entity; using Milimoe.FunGame.Core.Interface.Entity;
@ -456,6 +456,9 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="isCheckProtected"></param> /// <param name="isCheckProtected"></param>
public void AddCharacter(Character character, double hardnessTime, bool isCheckProtected = true) public void AddCharacter(Character character, double hardnessTime, bool isCheckProtected = true)
{ {
// 确保角色不在队列中
_queue.RemoveAll(c => c == character);
// 插队机制:按硬直时间排序 // 插队机制:按硬直时间排序
int insertIndex = _queue.FindIndex(c => _hardnessTimes[c] > hardnessTime); int insertIndex = _queue.FindIndex(c => _hardnessTimes[c] > hardnessTime);
@ -536,7 +539,6 @@ namespace Milimoe.FunGame.Core.Model
if (_queue.Count == 0) return null; if (_queue.Count == 0) return null;
// 硬直时间为 0 的角色或预释放爆发技的角色先行动,取第一个 // 硬直时间为 0 的角色或预释放爆发技的角色先行动,取第一个
int couynt = _queue.Count(c => c.CharacterState == CharacterState.PreCastSuperSkill);
Character? character = _queue.FirstOrDefault(c => c.CharacterState == CharacterState.PreCastSuperSkill); Character? character = _queue.FirstOrDefault(c => c.CharacterState == CharacterState.PreCastSuperSkill);
if (character is null) if (character is null)
{ {
@ -1191,8 +1193,6 @@ namespace Milimoe.FunGame.Core.Model
foreach (Character character in _queue) foreach (Character character in _queue)
{ {
// 减少所有角色的硬直时间 // 减少所有角色的硬直时间
double h = _hardnessTimes[character];
double d = _hardnessTimes[character] - timeToReduce;
_hardnessTimes[character] = Calculation.Round2Digits(_hardnessTimes[character] - timeToReduce); _hardnessTimes[character] = Calculation.Round2Digits(_hardnessTimes[character] - timeToReduce);
// 统计 // 统计
@ -2069,7 +2069,7 @@ namespace Milimoe.FunGame.Core.Model
WriteLine($"[ {caster} ] 终止了 [ {st.Skill.Name} ] 的施法" + (_hardnessTimes[caster] > 3 ? $",并获得了 3 {GameplayEquilibriumConstant.InGameTime}的硬直时间的补偿。" : "。")); WriteLine($"[ {caster} ] 终止了 [ {st.Skill.Name} ] 的施法" + (_hardnessTimes[caster] > 3 ? $",并获得了 3 {GameplayEquilibriumConstant.InGameTime}的硬直时间的补偿。" : "。"));
if (_hardnessTimes[caster] > 3) if (_hardnessTimes[caster] > 3)
{ {
_hardnessTimes[caster] = 3; AddCharacter(caster, 3, false);
} }
} }
} }
@ -2772,7 +2772,6 @@ namespace Milimoe.FunGame.Core.Model
} }
hardnessTime += addValue; hardnessTime += addValue;
if (hardnessTime <= 0) hardnessTime = 0; if (hardnessTime <= 0) hardnessTime = 0;
_queue.Remove(character);
AddCharacter(character, hardnessTime, isCheckProtected); AddCharacter(character, hardnessTime, isCheckProtected);
} }