Beispiel #1
0
        public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] ref GameOverReason reason, [HarmonyArgument(1)] bool showAd)
        {
            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.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);
                }
            }

            bool jesterWin     = Jester.jester != null && gameOverReason == (GameOverReason)CustomGameOverReason.JesterWin;
            bool childLose     = Child.child != null && gameOverReason == (GameOverReason)CustomGameOverReason.ChildLose;
            bool loversWin     = Lovers.existingAndAlive() && (gameOverReason == (GameOverReason)CustomGameOverReason.LoversWin || (TempData.DidHumansWin(gameOverReason) && Lovers.existingAndCrewLovers())); // Either they win if they are among the last 3 players, or they win if they are both Crewmates and both alive and the Crew wins (Team Imp/Jackal Lovers can only win solo wins)
            bool teamJackalWin = gameOverReason == (GameOverReason)CustomGameOverReason.TeamJackalWin && ((Jackal.jackal != null && !Jackal.jackal.Data.IsDead) || (Sidekick.sidekick != null && !Sidekick.sidekick.Data.IsDead));

            // Child lose
            if (childLose)
            {
                TempData.winners = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                WinningPlayerData wpd = new WinningPlayerData(Child.child.Data);
                wpd.IsYou = false; // If "no one is the Child", it will display the Child, but also show defeat to everyone
                TempData.winners.Add(wpd);
                AdditionalTempData.winCondition = WinCondition.ChildLose;
            }

            // Jester win
            else if (jesterWin)
            {
                TempData.winners = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                WinningPlayerData wpd = new WinningPlayerData(Jester.jester.Data);
                TempData.winners.Add(wpd);
                AdditionalTempData.winCondition = WinCondition.JesterWin;
            }

            // Lovers win conditions
            else if (loversWin)
            {
                AdditionalTempData.localIsLover = (PlayerControl.LocalPlayer == Lovers.lover1 || PlayerControl.LocalPlayer == Lovers.lover2);
                // Double win for lovers, crewmates also win
                if (Lovers.existingAndCrewLovers())
                {
                    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 != 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 (teamJackalWin)
            {
                // 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 Settings
            RPCProcedure.resetVariables();
        }
Beispiel #2
0
        public static void Postfix(AmongUsClient __instance, GameOverReason NEPMFBMGGLF, bool FBEKDLNKNLL)
        {
            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.BPDANAHEJDD)
                {
                    if (winner.NNMPJKHJLMB == Jester.jester.PPMOEEPBHJO.PCLLABJCIPC)
                    {
                        jesterWinner = winner;
                    }
                }

                if (jesterWinner != null)
                {
                    TempData.BPDANAHEJDD.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.BPDANAHEJDD)
                {
                    if (winner.NNMPJKHJLMB == Jackal.jackal?.PPMOEEPBHJO?.PCLLABJCIPC)
                    {
                        winnersToRemove.Add(winner);
                    }
                    if (winner.NNMPJKHJLMB == Sidekick.sidekick?.PPMOEEPBHJO?.PCLLABJCIPC)
                    {
                        winnersToRemove.Add(winner);
                    }
                    foreach (var player in Jackal.formerJackals)
                    {
                        if (winner.NNMPJKHJLMB == player.PPMOEEPBHJO.PCLLABJCIPC)
                        {
                            winnersToRemove.Add(winner);
                        }
                    }
                }

                foreach (var winner in winnersToRemove)
                {
                    TempData.BPDANAHEJDD.Remove(winner);
                }
            }

            bool jesterWin     = Jester.jester != null && gameOverReason == (GameOverReason)CustomGameOverReason.JesterWin;
            bool childLose     = Child.child != null && gameOverReason == (GameOverReason)CustomGameOverReason.ChildLose;
            bool loversWin     = Lovers.existingAndAlive() && (gameOverReason == (GameOverReason)CustomGameOverReason.LoversWin || (TempData.OMHNAMNPJCP(gameOverReason) && Lovers.existingAndCrewLovers())); // Either they win if they are among the last 3 players, or they win if they are both Crewmates and both alive and the Crew wins (Team Imp/Jackal Lovers can only win solo wins)
            bool teamJackalWin = gameOverReason == (GameOverReason)CustomGameOverReason.TeamJackalWin && ((Jackal.jackal != null && !Jackal.jackal.PPMOEEPBHJO.IAGJEKLJCCI) || (Sidekick.sidekick != null && !Sidekick.sidekick.PPMOEEPBHJO.IAGJEKLJCCI));

            // Child lose
            if (childLose)
            {
                TempData.BPDANAHEJDD = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                WinningPlayerData wpd = new WinningPlayerData(Child.child.PPMOEEPBHJO);
                wpd.APIPIPIKLCE = false; // If "no one is the Child", it will display the Child, but also show defeat to everyone
                TempData.BPDANAHEJDD.Add(wpd);
                AdditionalTempData.winCondition = WinCondition.ChildLose;
            }

            // Jester win
            else if (jesterWin)
            {
                TempData.BPDANAHEJDD = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                WinningPlayerData wpd = new WinningPlayerData(Jester.jester.PPMOEEPBHJO);
                TempData.BPDANAHEJDD.Add(wpd);
                AdditionalTempData.winCondition = WinCondition.JesterWin;
            }

            // Lovers win conditions
            else if (loversWin)
            {
                AdditionalTempData.localIsLover = (PlayerControl.LocalPlayer == Lovers.lover1 || PlayerControl.LocalPlayer == Lovers.lover2);
                // Double win for lovers, crewmates also win
                if (Lovers.existingAndCrewLovers())
                {
                    AdditionalTempData.winCondition = WinCondition.LoversTeamWin;
                    TempData.BPDANAHEJDD            = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                    foreach (PlayerControl p in PlayerControl.AllPlayerControls)
                    {
                        if (p == null)
                        {
                            continue;
                        }
                        if (p == Lovers.lover1 || p == Lovers.lover2)
                        {
                            TempData.BPDANAHEJDD.Add(new WinningPlayerData(p.PPMOEEPBHJO));
                        }
                        else if (p != Jester.jester && p != Jackal.jackal && p != Sidekick.sidekick && !p.PPMOEEPBHJO.FDNMBJOAPFL)
                        {
                            TempData.BPDANAHEJDD.Add(new WinningPlayerData(p.PPMOEEPBHJO));
                        }
                    }
                }
                // Lovers solo win
                else
                {
                    AdditionalTempData.winCondition = WinCondition.LoversSoloWin;
                    TempData.BPDANAHEJDD            = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                    TempData.BPDANAHEJDD.Add(new WinningPlayerData(Lovers.lover1.PPMOEEPBHJO));
                    TempData.BPDANAHEJDD.Add(new WinningPlayerData(Lovers.lover2.PPMOEEPBHJO));
                }
            }

            // Jackal win condition (should be implemented using a proper GameOverReason in the future)
            else if (teamJackalWin)
            {
                // Jackal wins if nobody except jackal is alive
                AdditionalTempData.winCondition = WinCondition.JackalWin;
                TempData.BPDANAHEJDD            = new Il2CppSystem.Collections.Generic.List <WinningPlayerData>();
                WinningPlayerData wpd = new WinningPlayerData(Jackal.jackal.PPMOEEPBHJO);
                wpd.FDNMBJOAPFL = false;
                TempData.BPDANAHEJDD.Add(wpd);
                // If there is a sidekick. The sidekick also wins
                if (Sidekick.sidekick != null)
                {
                    WinningPlayerData wpdSidekick = new WinningPlayerData(Sidekick.sidekick.PPMOEEPBHJO);
                    wpdSidekick.FDNMBJOAPFL = false;
                    TempData.BPDANAHEJDD.Add(wpdSidekick);
                }
                foreach (var player in Jackal.formerJackals)
                {
                    WinningPlayerData wpdFormerJackal = new WinningPlayerData(player.PPMOEEPBHJO);
                    wpdFormerJackal.FDNMBJOAPFL = false;
                    TempData.BPDANAHEJDD.Add(wpdFormerJackal);
                }
            }

            // Reset Settings
            RPCProcedure.resetVariables();
        }