From e77831bdc3626ab150e4320d0f6d205ba7350cc6 Mon Sep 17 00:00:00 2001 From: wuwenbo Date: Mon, 11 May 2026 17:21:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=83=9C=E5=88=A9=E6=9D=A1=E4=BB=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=98=9F=E5=8F=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Unity/Assets/Scripts/TH1_Data/MapData.cs | 4 +-- .../MatchConfig/MatchSettlementInfo.cs | 27 ++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Unity/Assets/Scripts/TH1_Data/MapData.cs b/Unity/Assets/Scripts/TH1_Data/MapData.cs index db2b780b0..b2edc4675 100644 --- a/Unity/Assets/Scripts/TH1_Data/MapData.cs +++ b/Unity/Assets/Scripts/TH1_Data/MapData.cs @@ -1926,7 +1926,7 @@ namespace RuntimeData { foreach (var player in PlayerMap.PlayerDataList) { - if (MatchSettlement.IsWin(player.Id)) return player; + if (MatchSettlement.IsWin(this, player.Id)) return player; } return null; @@ -1935,7 +1935,7 @@ namespace RuntimeData // 游戏是否结束 public bool CheckIfGameEnd(out bool isWin) { - isWin = MatchSettlement.IsWin(PlayerMap.SelfPlayerId); + isWin = MatchSettlement.IsWin(this, PlayerMap.SelfPlayerId); return MatchSettlement.IsFinished; } diff --git a/Unity/Assets/Scripts/TH1_Logic/MatchConfig/MatchSettlementInfo.cs b/Unity/Assets/Scripts/TH1_Logic/MatchConfig/MatchSettlementInfo.cs index 5cc1229b2..7dd4baab1 100644 --- a/Unity/Assets/Scripts/TH1_Logic/MatchConfig/MatchSettlementInfo.cs +++ b/Unity/Assets/Scripts/TH1_Logic/MatchConfig/MatchSettlementInfo.cs @@ -11,6 +11,7 @@ using Logic.CrashSight; using MemoryPack; using RuntimeData; using TH1_Logic.Collect; +using TH1_Logic.Core; namespace TH1_Logic.MatchConfig @@ -54,11 +55,31 @@ namespace TH1_Logic.MatchConfig } public bool IsWin(uint id) + { + return IsWin(Main.MapData, id); + } + + public bool IsWin(MapData map, uint id) { if (!IsFinished) return false; var settlementGroup = PlayerSettlements.GetValueOrDefault(id); - if (settlementGroup == null) return false; - return settlementGroup.IsWin; + if (settlementGroup != null && settlementGroup.IsWin) return true; + + if (map == null) return false; + if (!map.PlayerMap.GetPlayerDataByPlayerID(id, out var selfPlayer)) return false; + + foreach (var kv in PlayerSettlements) + { + if (kv.Key == id) continue; + if (kv.Value == null || !kv.Value.IsWin) continue; + if (!map.PlayerMap.GetPlayerDataByPlayerID(kv.Key, out var teammatePlayer)) continue; + if (!selfPlayer.GetCountryDiplomacyInfo(teammatePlayer.Id, out var selfToTeammateDip)) continue; + if (!teammatePlayer.GetCountryDiplomacyInfo(selfPlayer.Id, out var teammateToSelfDip)) continue; + if (!selfToTeammateDip.IsTeammate && !teammateToSelfDip.IsTeammate) continue; + return true; + } + + return false; } public MatchSettlementInfo(MatchSettlementInfo copyData) @@ -278,4 +299,4 @@ namespace TH1_Logic.MatchConfig info.IsFinished = true; } } -} \ No newline at end of file +}