public static void Postfix(AmongUsClient __instance, GameOverReason FCBGPMEMOJB, bool GKFHPFPIHGA) { AdditionalTempData.clear(); // Remove Jester from winners (on Jester win he will be added again, see below) if (Jester.jester != null) { WinningPlayerData jesterWinner = null; foreach (WinningPlayerData winner in TempData.BDGOKPKHCNB) { if (winner.GEDNCGBDPKC == Jester.jester.IDOFAMCIJKE.HGGCLJHCDBM) { jesterWinner = winner; } } if (jesterWinner != null) { TempData.BDGOKPKHCNB.Remove(jesterWinner); } } // Remove Jackal and Sidekick from winners (on Jackal win he will be added again, see below) if (Jackal.jackal != null || Sidekick.sidekick != null) { List <WinningPlayerData> winnersToRemove = new List <WinningPlayerData>(); foreach (WinningPlayerData winner in TempData.BDGOKPKHCNB) { if (winner.GEDNCGBDPKC == Jackal.jackal?.IDOFAMCIJKE?.HGGCLJHCDBM) { winnersToRemove.Add(winner); } if (winner.GEDNCGBDPKC == Sidekick.sidekick?.IDOFAMCIJKE?.HGGCLJHCDBM) { winnersToRemove.Add(winner); } foreach (var player in Jackal.formerJackals) { if (winner.GEDNCGBDPKC == player.IDOFAMCIJKE.HGGCLJHCDBM) { winnersToRemove.Add(winner); } } } foreach (var winner in winnersToRemove) { TempData.BDGOKPKHCNB.Remove(winner); } } bool childLose = Child.child != null && gameOverReason == (GameOverReason)CustomGameOverReason.ChildLose; bool jesterWin = Jester.jester != null && gameOverReason == (GameOverReason)CustomGameOverReason.JesterWin; // Child lose if (childLose) { TempData.BDGOKPKHCNB = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); WinningPlayerData wpd = new WinningPlayerData(Child.child.IDOFAMCIJKE); wpd.KCEFGIGGLHM = false; // If "no one is the Child", it will display the Child, but also show defeat to everyone TempData.BDGOKPKHCNB.Add(wpd); AdditionalTempData.winCondition = WinCondition.ChildLose; } // Jester win else if (jesterWin) { TempData.BDGOKPKHCNB = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); WinningPlayerData wpd = new WinningPlayerData(Jester.jester.IDOFAMCIJKE); TempData.BDGOKPKHCNB.Add(wpd); AdditionalTempData.winCondition = WinCondition.JesterWin; } // Lovers win conditions else if (Lovers.existingAndAlive() && gameOverReason == (GameOverReason)CustomGameOverReason.LoversWin) { AdditionalTempData.localIsLover = (PlayerControl.LocalPlayer == Lovers.lover1 || PlayerControl.LocalPlayer == Lovers.lover2); // Double win for lovers, crewmates also win if (!Lovers.existingWithImpLover()) { AdditionalTempData.winCondition = WinCondition.LoversTeamWin; TempData.BDGOKPKHCNB = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); foreach (PlayerControl p in PlayerControl.AllPlayerControls) { if (p == null) { continue; } if (p == Lovers.lover1 || p == Lovers.lover2) { TempData.BDGOKPKHCNB.Add(new WinningPlayerData(p.IDOFAMCIJKE)); } else if (p != Jester.jester && p != Jackal.jackal && p != Sidekick.sidekick && !p.IDOFAMCIJKE.CIDDOFDJHJH) { TempData.BDGOKPKHCNB.Add(new WinningPlayerData(p.IDOFAMCIJKE)); } } } // Lovers solo win else { AdditionalTempData.winCondition = WinCondition.LoversSoloWin; TempData.BDGOKPKHCNB = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); TempData.BDGOKPKHCNB.Add(new WinningPlayerData(Lovers.lover1.IDOFAMCIJKE)); TempData.BDGOKPKHCNB.Add(new WinningPlayerData(Lovers.lover2.IDOFAMCIJKE)); } } // Jackal win condition (should be implemented using a proper GameOverReason in the future) else if (gameOverReason == (GameOverReason)CustomGameOverReason.TeamJackalWin && (Jackal.jackal != null && !Jackal.jackal.IDOFAMCIJKE.FGNJJFABIHJ || Sidekick.sidekick != null && !Sidekick.sidekick.IDOFAMCIJKE.FGNJJFABIHJ)) { // Jackal wins if nobody except jackal is alive AdditionalTempData.winCondition = WinCondition.JackalWin; TempData.BDGOKPKHCNB = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); WinningPlayerData wpd = new WinningPlayerData(Jackal.jackal.IDOFAMCIJKE); wpd.CIDDOFDJHJH = false; TempData.BDGOKPKHCNB.Add(wpd); // If there is a sidekick. The sidekick also wins if (Sidekick.sidekick != null) { WinningPlayerData wpdSidekick = new WinningPlayerData(Sidekick.sidekick.IDOFAMCIJKE); wpdSidekick.CIDDOFDJHJH = false; TempData.BDGOKPKHCNB.Add(wpdSidekick); } foreach (var player in Jackal.formerJackals) { WinningPlayerData wpdFormerJackal = new WinningPlayerData(player.IDOFAMCIJKE); wpdFormerJackal.CIDDOFDJHJH = false; TempData.BDGOKPKHCNB.Add(wpdFormerJackal); } } // Reset Settings RPCProcedure.resetVariables(); }
public static void Postfix(AmongUsClient __instance, GameOverReason OFLKLGMHBEL, bool JFFPAKGPNJA) { AdditionalTempData.clear(); // Remove shifter from winners if (Shifter.shifter != null) { WinningPlayerData shifterWinner = null; foreach (WinningPlayerData winner in TempData.winners) { if (winner.Name == Shifter.shifter.Data.PlayerName) { shifterWinner = winner; } } if (shifterWinner != null) { TempData.winners.Remove(shifterWinner); } } // Remove Jester from winners (on Jester win he will be added again, see below) if (Jester.jester != null) { WinningPlayerData jesterWinner = null; foreach (WinningPlayerData winner in TempData.winners) { if (winner.Name == Jester.jester.Data.PlayerName) { jesterWinner = winner; } } if (jesterWinner != null) { TempData.winners.Remove(jesterWinner); } } // Remove Jackal and Sidekick from winners (on Jackal win he will be added again, see below) if (Jackal.jackal != null || Sidekick.sidekick != null) { List <WinningPlayerData> winnersToRemove = new List <WinningPlayerData>(); foreach (WinningPlayerData winner in TempData.winners) { if (winner.Name == Jackal.jackal?.Data?.PlayerName) { winnersToRemove.Add(winner); } if (winner.Name == Sidekick.sidekick?.Data?.PlayerName) { winnersToRemove.Add(winner); } foreach (var player in Jackal.formerJackals) { if (winner.Name == player.Data.PlayerName) { winnersToRemove.Add(winner); } } } foreach (var winner in winnersToRemove) { TempData.winners.Remove(winner); } } // Jester and Bounty Hunter win condition (should be implemented using a proper GameOverReason in the future) bool jesterWin = Jester.jester != null && Jester.jester.Data.IsImpostor; bool bountyHunterWin = BountyHunter.bountyHunter != null && BountyHunter.bountyHunter.Data.IsImpostor; if (jesterWin || bountyHunterWin) { TempData.winners = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); if (jesterWin) { WinningPlayerData wpd = new WinningPlayerData(Jester.jester.Data); wpd.IsImpostor = false; TempData.winners.Add(wpd); AdditionalTempData.winCondition = WinCondition.JesterWin; } if (bountyHunterWin) { WinningPlayerData wpd = new WinningPlayerData(BountyHunter.bountyHunter.Data); wpd.IsImpostor = false; TempData.winners.Add(wpd); if (AdditionalTempData.winCondition == WinCondition.JesterWin) { AdditionalTempData.winCondition = WinCondition.JesterAndBountyHunterWin; } else { AdditionalTempData.winCondition = WinCondition.BountyHunterWin; } } } // Lovers win conditions (should be implemented using a proper GameOverReason in the future) else if (Lovers.existingAndAlive() && gameOverReason == (GameOverReason)CustomGameOverReason.LoversWin) { AdditionalTempData.localIsLover = (PlayerControl.LocalPlayer == Lovers.lover1 || PlayerControl.LocalPlayer == Lovers.lover2); // Double win for lovers, crewmates also win if (!Lovers.existingWithImpLover()) { AdditionalTempData.winCondition = WinCondition.LoversTeamWin; TempData.winners = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); foreach (PlayerControl p in PlayerControl.AllPlayerControls) { if (p == null) { continue; } if (p == Lovers.lover1 || p == Lovers.lover2) { TempData.winners.Add(new WinningPlayerData(p.Data)); } else if (p != Shifter.shifter && p != Jester.jester && p != Jackal.jackal && p != Sidekick.sidekick && !p.Data.IsImpostor) { TempData.winners.Add(new WinningPlayerData(p.Data)); } } } // Lovers solo win else { AdditionalTempData.winCondition = WinCondition.LoversSoloWin; TempData.winners = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); TempData.winners.Add(new WinningPlayerData(Lovers.lover1.Data)); TempData.winners.Add(new WinningPlayerData(Lovers.lover2.Data)); } } // Jackal win condition (should be implemented using a proper GameOverReason in the future) else if (gameOverReason == (GameOverReason)CustomGameOverReason.TeamJackalWin && (Jackal.jackal != null && !Jackal.jackal.Data.IsDead || Sidekick.sidekick != null && !Sidekick.sidekick.Data.IsDead)) { // Jackal wins if nobody except jackal is alive AdditionalTempData.winCondition = WinCondition.JackalWin; TempData.winners = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>(); WinningPlayerData wpd = new WinningPlayerData(Jackal.jackal.Data); wpd.IsImpostor = false; TempData.winners.Add(wpd); // If there is a sidekick. The sidekick also wins if (Sidekick.sidekick != null) { WinningPlayerData wpdSidekick = new WinningPlayerData(Sidekick.sidekick.Data); wpdSidekick.IsImpostor = false; TempData.winners.Add(wpdSidekick); } foreach (var player in Jackal.formerJackals) { WinningPlayerData wpdFormerJackal = new WinningPlayerData(player.Data); wpdFormerJackal.IsImpostor = false; TempData.winners.Add(wpdFormerJackal); } } // Reset Role Settings clearAndReloadRoles(); clearGameHistory(); }