From bc399f6afea8f82c0184d0562678b72a815c9284 Mon Sep 17 00:00:00 2001 From: Kei-Luna Date: Sun, 24 May 2026 07:47:52 +0900 Subject: [PATCH] fix Chapter_DealLevelSettlement --- .../Chapter/Chapter_DealLevelSettlement.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/GameServer/Server/CallGS/Handlers/Chapter/Chapter_DealLevelSettlement.cs b/GameServer/Server/CallGS/Handlers/Chapter/Chapter_DealLevelSettlement.cs index 45b1a8a..ab53260 100644 --- a/GameServer/Server/CallGS/Handlers/Chapter/Chapter_DealLevelSettlement.cs +++ b/GameServer/Server/CallGS/Handlers/Chapter/Chapter_DealLevelSettlement.cs @@ -45,7 +45,8 @@ public class Chapter_DealLevelSettlement : ICallGSHandler if (string.Equals(sCmd, "BossPvpLogic_LevelSettlement", StringComparison.Ordinal)) { - var (response, sync) = BossPvpService.HandleSettlement(connection.Player!, tbParam); + var normalized = NormalizeBossPvpSettlement(tbParam); + var (response, sync) = BossPvpService.HandleSettlement(connection.Player!, normalized); extraSync = sync; return response; } @@ -66,6 +67,22 @@ public class Chapter_DealLevelSettlement : ICallGSHandler return tbParam?.DeepClone() ?? new JsonObject(); } + + private static JsonNode? NormalizeBossPvpSettlement(JsonNode? tbParam) + { + if (tbParam is not JsonObject obj) + return tbParam; + + var clone = obj.DeepClone() as JsonObject ?? obj; + if (clone.TryGetPropertyValue("ResidueTime", out var residueNode) && + residueNode is JsonValue residueValue && + residueValue.TryGetValue(out var residueTime)) + { + clone["ResidueTime"] = (int)Math.Max(0, Math.Round(residueTime, MidpointRounding.AwayFromZero)); + } + + return clone; + } } internal sealed class DealLevelSettlementParam