From f1846375ca11209a7cb469d85fa230600d091d28 Mon Sep 17 00:00:00 2001 From: ang-xd Date: Sat, 5 Apr 2025 13:06:35 -0400 Subject: [PATCH] Fix end game stuff --- .../Patches/Modifiers/EndGameDidWinPatch.cs | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/MiraAPI/Patches/Modifiers/EndGameDidWinPatch.cs b/MiraAPI/Patches/Modifiers/EndGameDidWinPatch.cs index a86383d..1a7046c 100644 --- a/MiraAPI/Patches/Modifiers/EndGameDidWinPatch.cs +++ b/MiraAPI/Patches/Modifiers/EndGameDidWinPatch.cs @@ -2,13 +2,15 @@ using HarmonyLib; using MiraAPI.Modifiers; using MiraAPI.Modifiers.Types; +using MiraAPI.Utilities; +using Reactor.Utilities; namespace MiraAPI.Patches.Modifiers; -[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.CoEndGame))] +[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.OnGameEnd))] public static class EndGameDidWinPatch { - public static void Prefix() + public static void Postfix() { var gameOverReason = EndGameResult.CachedGameOverReason; EndGameResult.CachedWinners.Clear(); @@ -17,18 +19,26 @@ public static class EndGameDidWinPatch for (var i = 0; i < GameData.Instance.PlayerCount; i++) { var networkedPlayerInfo = players[i]; - if (networkedPlayerInfo == null) + if (!networkedPlayerInfo) { continue; } var didWin = networkedPlayerInfo.Role.DidWin(gameOverReason); - var modifierWin = networkedPlayerInfo.Object?.GetModifierComponent().GetModifiers() - .FirstOrDefault(x => x.DidWin(gameOverReason) != null)?.DidWin(gameOverReason); - if (modifierWin != null) + bool? modifierDidWin = null; + foreach (var modifier in networkedPlayerInfo.Object.GetModifiers().OrderByDescending(x => x.Priority())) { - didWin = modifierWin.Value; + var result = modifier.DidWin(gameOverReason); + if (!result.HasValue) continue; + + modifierDidWin = result.Value; + break; + } + + if (modifierDidWin.HasValue) + { + didWin = modifierDidWin.Value; } if (didWin)