public static void Postfix(PlayerControl __instance)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(__instance, DateTime.UtcNow, DeathReason.Exile, null);

            GameHistory.deadPlayers.Add(deadPlayer);

            // Lover suicide trigger on exile
            if ((Lovers.lover1 != null && __instance == Lovers.lover1) || (Lovers.lover2 != null && __instance == Lovers.lover2))
            {
                PlayerControl otherLover = __instance == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1;
                if (otherLover != null && !otherLover.IDOFAMCIJKE.FGNJJFABIHJ && Lovers.bothDie)
                {
                    otherLover.Exiled();
                }
            }

            // Sidekick promotion trigger on exile
            if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.IDOFAMCIJKE.FGNJJFABIHJ && __instance == Jackal.jackal && Jackal.jackal == PlayerControl.LocalPlayer)
            {
                MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickPromotes, Hazel.SendOption.Reliable, -1);
                AmongUsClient.Instance.FinishRpcImmediately(writer);
                RPCProcedure.sidekickPromotes();
            }
        }
예제 #2
0
        static void Postfix(VitalsMinigame __instance)
        {
            // Hacker show time since death
            bool showHackerInfo = Hacker.hacker != null && Hacker.hacker == PlayerControl.LocalPlayer && Hacker.hackerTimer > 0;

            for (int k = 0; k < __instance.MCCBOPIEOEC.Length; k++)
            {
                VitalsPanel          vitalsPanel = __instance.MCCBOPIEOEC[k];
                GameData.OFKOJOKOOAK OFKOJOKOOAK = GameData.Instance.AllPlayers[k];

                if (vitalsPanel.IsDead)
                {
                    DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == OFKOJOKOOAK?.GMBAIPNOKLP)?.FirstOrDefault();
                    if (deadPlayer != null && deadPlayer.timeOfDeath != null)
                    {
                        float timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);

                        if (showHackerInfo)
                        {
                            vitalsPanel.Text.Text = Math.Round(timeSinceDeath / 1000) + "s";
                        }
                        else
                        {
                            vitalsPanel.Text.Text = DestroyableSingleton <TranslationController> .CMJOLNCMAPD.GetString(Palette.OCCIKHJPJPK[(int)OFKOJOKOOAK.JFHFMIKFHGG], new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0));
                        }
                    }
                }
            }
        }
예제 #3
0
        static void Postfix(VitalsMinigame __instance)
        {
            // Spy show time since death
            bool showSpyInfo = Spy.spy != null && Spy.spy == PlayerControl.LocalPlayer && Spy.spyTimer > 0;

            for (int k = 0; k < __instance.vitals.Length; k++)
            {
                VitalsPanel         vitalsPanel = __instance.vitals[k];
                GameData.PlayerInfo playerInfo  = GameData.Instance.AllPlayers[k];

                if (vitalsPanel.IsDead)
                {
                    DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == playerInfo?.PlayerId)?.FirstOrDefault();
                    if (deadPlayer != null && deadPlayer.timeOfDeath != null)
                    {
                        float timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);

                        if (showSpyInfo)
                        {
                            vitalsPanel.Text.Text = Math.Round(timeSinceDeath / 1000) + "s";
                        }
                        else
                        {
                            vitalsPanel.Text.Text = DestroyableSingleton <TranslationController> .Instance.GetString(Palette.ShortColorNames[(int)playerInfo.ColorId], new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0));
                        }
                    }
                }
            }
        }
예제 #4
0
        static void Postfix(PlayerControl __instance, GameData.PlayerInfo PAIBDFDMIGK)
        {
            // Medic report
            if (Medic.medic != null && Medic.medic == PlayerControl.LocalPlayer && __instance.PlayerId == Medic.medic.PlayerId)
            {
                DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == PAIBDFDMIGK?.PlayerId)?.FirstOrDefault();

                if (deadPlayer != null && deadPlayer.killerIfExisting != null)
                {
                    float  timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);
                    string msg            = "";

                    if (timeSinceDeath < Medic.reportNameDuration * 1000)
                    {
                        msg = $"Body Report: The killer appears to be {deadPlayer.killerIfExisting.name}! (Killed {Math.Round(timeSinceDeath / 1000)}s ago)";
                    }
                    else if (timeSinceDeath < Medic.reportColorDuration * 1000)
                    {
                        var colors = new Dictionary <byte, string>()
                        {
                            { 0, "darker" },
                            { 1, "darker" },
                            { 2, "darker" },
                            { 3, "lighter" },
                            { 4, "lighter" },
                            { 5, "lighter" },
                            { 6, "darker" },
                            { 7, "lighter" },
                            { 8, "darker" },
                            { 9, "darker" },
                            { 10, "lighter" },
                            { 11, "lighter" },
                        };
                        var typeOfColor = colors[deadPlayer.killerIfExisting.Data.ColorId] ?? "unknown";
                        msg = $"Body Report: The killer appears to be a {typeOfColor} color. (Killed {Math.Round(timeSinceDeath / 1000)}s ago)";
                    }
                    else
                    {
                        msg = $"Body Report: The corpse is too old to gain information from. (Killed {Math.Round(timeSinceDeath / 1000)}s ago)";
                    }

                    if (!string.IsNullOrWhiteSpace(msg))
                    {
                        if (AmongUsClient.Instance.AmClient && DestroyableSingleton <HudManager> .Instance)
                        {
                            DestroyableSingleton <HudManager> .Instance.Chat.AddChat(PlayerControl.LocalPlayer, msg);
                        }
                        if (msg.IndexOf("who", StringComparison.OrdinalIgnoreCase) >= 0)
                        {
                            DestroyableSingleton <Assets.CoreScripts.Telemetry> .Instance.SendWho();
                        }
                    }
                }
            }
        }
        static void Postfix(PlayerControl __instance, GameData.OFKOJOKOOAK IGLDJOKKFJE)
        {
            // Medic or Detective report
            bool isMedicReport     = Medic.medic != null && Medic.medic == PlayerControl.LocalPlayer && __instance.PlayerId == Medic.medic.PlayerId;
            bool isDetectiveReport = Detective.detective != null && Detective.detective == PlayerControl.LocalPlayer && __instance.PlayerId == Detective.detective.PlayerId;

            if (isMedicReport || isDetectiveReport)
            {
                DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == IGLDJOKKFJE?.GMBAIPNOKLP)?.FirstOrDefault();

                if (deadPlayer != null && deadPlayer.killerIfExisting != null)
                {
                    float  timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);
                    string msg            = "";

                    if (isMedicReport)
                    {
                        msg = $"Body Report: Killed {Math.Round(timeSinceDeath / 1000)}s ago!";
                    }
                    else if (isDetectiveReport)
                    {
                        if (timeSinceDeath < Detective.reportNameDuration * 1000)
                        {
                            msg = $"Body Report: The killer appears to be {deadPlayer.killerIfExisting.name}!";
                        }
                        else if (timeSinceDeath < Detective.reportColorDuration * 1000)
                        {
                            var typeOfColor = Helpers.isLighterColor(deadPlayer.killerIfExisting.IDOFAMCIJKE.JFHFMIKFHGG) ? "lighter" : "darker";
                            msg = $"Body Report: The killer appears to be a {typeOfColor} color!";
                        }
                        else
                        {
                            msg = $"Body Report: The corpse is too old to gain information from!";
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(msg))
                    {
                        if (AmongUsClient.Instance.HNMILJEOEKN && DestroyableSingleton <HudManager> .CMJOLNCMAPD)
                        {
                            DestroyableSingleton <HudManager> .CMJOLNCMAPD.Chat.AddChat(PlayerControl.LocalPlayer, msg);
                        }
                        if (msg.IndexOf("who", StringComparison.OrdinalIgnoreCase) >= 0)
                        {
                            DestroyableSingleton <Assets.CoreScripts.Telemetry> .CMJOLNCMAPD.SendWho();
                        }
                    }
                }
            }
        }
        static void Postfix(PlayerControl __instance, GameData.LGBOMGHJELL DGDGDKCCKHJ)
        {
            // Medic or Detective report
            bool isMedicReport     = Medic.medic != null && Medic.medic == PlayerControl.LocalPlayer && __instance.PlayerId == Medic.medic.PlayerId;
            bool isDetectiveReport = Detective.detective != null && Detective.detective == PlayerControl.LocalPlayer && __instance.PlayerId == Detective.detective.PlayerId;

            if (isMedicReport || isDetectiveReport)
            {
                DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == DGDGDKCCKHJ?.FNPNJHNKEBK)?.FirstOrDefault();

                if (deadPlayer != null && deadPlayer.killerIfExisting != null)
                {
                    float  timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);
                    string msg            = "";

                    if (isMedicReport)
                    {
                        msg = $"Body Report: Killed {Math.Round(timeSinceDeath / 1000)}s ago!";
                    }
                    else if (isDetectiveReport)
                    {
                        if (timeSinceDeath < Detective.reportNameDuration * 1000)
                        {
                            msg = $"Body Report: The killer appears to be {deadPlayer.killerIfExisting.name}!";
                        }
                        else if (timeSinceDeath < Detective.reportColorDuration * 1000)
                        {
                            var typeOfColor = Helpers.isLighterColor(deadPlayer.killerIfExisting.PPMOEEPBHJO.IMMNCAGJJJC) ? "lighter" : "darker";
                            msg = $"Body Report: The killer appears to be a {typeOfColor} color!";
                        }
                        else
                        {
                            msg = $"Body Report: The corpse is too old to gain information from!";
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(msg))
                    {
                        if (AmongUsClient.Instance.BPADAHAOBLM && DestroyableSingleton <HudManager> .CHNDKKBEIDG)
                        {
                            DestroyableSingleton <HudManager> .CHNDKKBEIDG.Chat.AddChat(PlayerControl.LocalPlayer, msg);
                        }
                        if (msg.IndexOf("who", StringComparison.OrdinalIgnoreCase) >= 0)
                        {
                            DestroyableSingleton <Assets.CoreScripts.Telemetry> .CHNDKKBEIDG.SendWho();
                        }
                    }
                }
            }
        }
예제 #7
0
 public static void bendTimeUpdate()
 {
     if (TimeMaster.isRewinding)
     {
         if (localPlayerPositions.Count > 0)
         {
             // Set position
             var next = localPlayerPositions[0];
             if (!PlayerControl.LocalPlayer.inVent)
             {
                 PlayerControl.LocalPlayer.transform.position = next.Item1;
             }
             localPlayerPositions.RemoveAt(0);
             if (localPlayerPositions.Count > 0)
             {
                 localPlayerPositions.RemoveAt(0);                                 // Skip every second position to rewinde in half the time
             }
             // Try reviving LOCAL player
             if (TimeMaster.reviveDuringRewind && PlayerControl.LocalPlayer.Data.IsDead)
             {
                 DeadPlayer deadPlayer = deadPlayers.Where(x => x.player == PlayerControl.LocalPlayer).FirstOrDefault();
                 if (deadPlayer != null && next.Item2 < deadPlayer.timeOfDeath)
                 {
                     MessageWriter write = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.TimeMasterRevive, Hazel.SendOption.Reliable, -1);
                     write.Write(PlayerControl.LocalPlayer.PlayerId);
                     AmongUsClient.Instance.FinishRpcImmediately(write);
                     RPCProcedure.timeMasterRevive(PlayerControl.LocalPlayer.PlayerId);
                 }
             }
         }
         else
         {
             TimeMaster.isRewinding                 = false;
             PlayerControl.LocalPlayer.moveable     = true;
             HudManager.Instance.FullScreen.enabled = false;
         }
     }
     else
     {
         while (localPlayerPositions.Count >= Mathf.Round(TimeMaster.rewindTime / Time.fixedDeltaTime))
         {
             localPlayerPositions.RemoveAt(localPlayerPositions.Count - 1);
         }
         localPlayerPositions.Insert(0, new Tuple <Vector3, DateTime>(PlayerControl.LocalPlayer.transform.position, DateTime.UtcNow));
     }
 }
예제 #8
0
 public static void timeMasterRevive(byte playerId)
 {
     foreach (PlayerControl player in PlayerControl.AllPlayerControls)
     {
         if (player.PlayerId == playerId)
         {
             player.Revive();
             var        body            = UnityEngine.Object.FindObjectsOfType <DeadBody>().FirstOrDefault(b => b.ParentId == playerId);
             DeadPlayer deadPlayerEntry = deadPlayers.Where(x => x.player.PlayerId == playerId).FirstOrDefault();
             if (body != null)
             {
                 UnityEngine.Object.Destroy(body.gameObject);
             }
             if (deadPlayerEntry != null)
             {
                 deadPlayers.Remove(deadPlayerEntry);
             }
         }
     }
 }
예제 #9
0
        static void Postfix(VitalsMinigame __instance)
        {
            // Hacker show time since death
            bool showHackerInfo = Hacker.hacker != null && Hacker.hacker == PlayerControl.LocalPlayer && Hacker.hackerTimer > 0;

            for (int k = 0; k < __instance.vitals.Length; k++)
            {
                VitalsPanel         vitalsPanel = __instance.vitals[k];
                GameData.PlayerInfo player      = GameData.Instance.AllPlayers[k];

                // Crowded scaling
                float scale = 10f / Mathf.Max(10, __instance.vitals.Length);
                vitalsPanel.transform.localPosition = new Vector3((float)k * 0.6f * scale + -2.7f, 0.2f, -1f);
                vitalsPanel.transform.localScale    = new Vector3(scale, scale, vitalsPanel.transform.localScale.z);

                // Hacker update
                if (vitalsPanel.IsDead)
                {
                    DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == player?.PlayerId)?.FirstOrDefault();
                    if (deadPlayer != null && deadPlayer.timeOfDeath != null)
                    {
                        float timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);

                        if (showHackerInfo)
                        {
                            vitalsPanel.Text.text = Math.Round(timeSinceDeath / 1000) + "s";
                        }
                        else if (__instance.vitals.Length > 10)
                        {
                            vitalsPanel.Text.text = player.PlayerName.Length >= 4 ? player.PlayerName.Substring(0, 4).ToUpper() : player.PlayerName.ToUpper();
                        }
                        else
                        {
                            vitalsPanel.Text.text = DestroyableSingleton <TranslationController> .Instance.GetString(Palette.ShortColorNames[(int)player.ColorId], new UnhollowerBaseLib.Il2CppReferenceArray <Il2CppSystem.Object>(0));
                        }
                    }
                }
            }
        }
예제 #10
0
        public static void Postfix(PlayerControl __instance, PlayerControl PAIBDFDMIGK)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(PAIBDFDMIGK, DateTime.UtcNow, DeathReason.Kill, __instance);

            GameHistory.deadPlayers.Add(deadPlayer);

            // Reset killer to crewmate if resetToCrewmate
            if (resetToCrewmate)
            {
                __instance.Data.IsImpostor = false;
            }
            if (resetToDead)
            {
                __instance.Data.IsDead = true;
            }

            // Lover suicide trigger on murder
            if ((Lovers.lover1 != null && PAIBDFDMIGK == Lovers.lover1) || (Lovers.lover2 != null && PAIBDFDMIGK == Lovers.lover2))
            {
                PlayerControl otherLover = PAIBDFDMIGK == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1;
                if (PlayerControl.LocalPlayer == PAIBDFDMIGK && otherLover != null && !otherLover.Data.IsDead && Lovers.bothDie)   // Only the dead lover sends the rpc
                {
                    MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.LoverSuicide, Hazel.SendOption.Reliable, -1);
                    writer.Write(otherLover.PlayerId);
                    AmongUsClient.Instance.FinishRpcImmediately(writer);
                    RPCProcedure.loverSuicide(otherLover.PlayerId);
                }
            }

            // Sidekick promotion trigger on murder
            if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.Data.IsDead && PAIBDFDMIGK == Jackal.jackal)
            {
                MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickPromotes, Hazel.SendOption.Reliable, -1);
                AmongUsClient.Instance.FinishRpcImmediately(writer);
                RPCProcedure.sidekickPromotes();
            }
        }
        public static void Postfix(PlayerControl __instance, PlayerControl IGLDJOKKFJE)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(IGLDJOKKFJE, DateTime.UtcNow, DeathReason.Kill, __instance);

            GameHistory.deadPlayers.Add(deadPlayer);

            // Reset killer to crewmate if resetToCrewmate
            if (resetToCrewmate)
            {
                __instance.IDOFAMCIJKE.CIDDOFDJHJH = false;
            }
            if (resetToDead)
            {
                __instance.IDOFAMCIJKE.FGNJJFABIHJ = true;
            }

            // Lover suicide trigger on murder
            if ((Lovers.lover1 != null && IGLDJOKKFJE == Lovers.lover1) || (Lovers.lover2 != null && IGLDJOKKFJE == Lovers.lover2))
            {
                PlayerControl otherLover = IGLDJOKKFJE == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1;
                if (PlayerControl.LocalPlayer == IGLDJOKKFJE && otherLover != null && !otherLover.IDOFAMCIJKE.FGNJJFABIHJ && Lovers.bothDie)   // Only the dead lover sends the rpc
                {
                    MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.LoverSuicide, Hazel.SendOption.Reliable, -1);
                    writer.Write(otherLover.PlayerId);
                    AmongUsClient.Instance.FinishRpcImmediately(writer);
                    RPCProcedure.loverSuicide(otherLover.PlayerId);
                }
            }

            // Sidekick promotion trigger on murder
            if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.IDOFAMCIJKE.FGNJJFABIHJ && IGLDJOKKFJE == Jackal.jackal && Jackal.jackal == PlayerControl.LocalPlayer)
            {
                MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickPromotes, Hazel.SendOption.Reliable, -1);
                AmongUsClient.Instance.FinishRpcImmediately(writer);
                RPCProcedure.sidekickPromotes();
            }

            // Seer show flash and add dead player position
            if (Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && !Seer.seer.IDOFAMCIJKE.FGNJJFABIHJ && Seer.seer != IGLDJOKKFJE && Seer.mode <= 1)
            {
                HudManager.CMJOLNCMAPD.FullScreen.enabled = true;
                HudManager.CMJOLNCMAPD.StartCoroutine(Effects.LDACHPMFOIF(1f, new Action <float>((p) => {
                    var renderer = HudManager.CMJOLNCMAPD.FullScreen;
                    if (p < 0.5)
                    {
                        if (renderer != null)
                        {
                            renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01(p * 2 * 0.75f));
                        }
                    }
                    else
                    {
                        if (renderer != null)
                        {
                            renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01((1 - p) * 2 * 0.75f));
                        }
                    }
                    if (p == 1f && renderer != null)
                    {
                        renderer.enabled = false;
                    }
                })));
            }
            if (Seer.deadBodyPositions != null)
            {
                Seer.deadBodyPositions.Add(IGLDJOKKFJE.transform.position);
            }

            // Child set adapted kill cooldown
            if (Child.child != null && PlayerControl.LocalPlayer == Child.child && Child.child.IDOFAMCIJKE.CIDDOFDJHJH)
            {
                var multiplier = Child.isGrownUp() ? 0.66f : 2f;
                Child.child.SetKillTimer(PlayerControl.GameOptions.ELBDIKIOHHH * multiplier);
            }
        }
예제 #12
0
        public static void Postfix(PlayerControl __instance, PlayerControl DGDGDKCCKHJ)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(DGDGDKCCKHJ, DateTime.UtcNow, DeathReason.Kill, __instance);

            GameHistory.deadPlayers.Add(deadPlayer);

            // Reset killer to crewmate if resetToCrewmate
            if (resetToCrewmate)
            {
                __instance.PPMOEEPBHJO.FDNMBJOAPFL = false;
            }
            if (resetToDead)
            {
                __instance.PPMOEEPBHJO.IAGJEKLJCCI = true;
            }

            // Lover suicide trigger on murder
            if ((Lovers.lover1 != null && DGDGDKCCKHJ == Lovers.lover1) || (Lovers.lover2 != null && DGDGDKCCKHJ == Lovers.lover2))
            {
                PlayerControl otherLover = DGDGDKCCKHJ == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1;
                if (PlayerControl.LocalPlayer == DGDGDKCCKHJ && otherLover != null && !otherLover.PPMOEEPBHJO.IAGJEKLJCCI && Lovers.bothDie)   // Only the dead lover sends the rpc
                {
                    MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.LoverSuicide, Hazel.SendOption.Reliable, -1);
                    writer.Write(otherLover.PlayerId);
                    AmongUsClient.Instance.FinishRpcImmediately(writer);
                    RPCProcedure.loverSuicide(otherLover.PlayerId);
                }
            }

            // Sidekick promotion trigger on murder
            if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.PPMOEEPBHJO.IAGJEKLJCCI && DGDGDKCCKHJ == Jackal.jackal && Jackal.jackal == PlayerControl.LocalPlayer)
            {
                MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickPromotes, Hazel.SendOption.Reliable, -1);
                AmongUsClient.Instance.FinishRpcImmediately(writer);
                RPCProcedure.sidekickPromotes();
            }

            // Seer show flash and add dead player position
            if (Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && !Seer.seer.PPMOEEPBHJO.IAGJEKLJCCI && Seer.seer != DGDGDKCCKHJ && Seer.mode <= 1)
            {
                HudManager.CHNDKKBEIDG.FullScreen.enabled = true;
                HudManager.CHNDKKBEIDG.StartCoroutine(Effects.DCHLMIDMBHG(1f, new Action <float>((p) => {
                    var renderer = HudManager.CHNDKKBEIDG.FullScreen;
                    if (p < 0.5)
                    {
                        if (renderer != null)
                        {
                            renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01(p * 2 * 0.75f));
                        }
                    }
                    else
                    {
                        if (renderer != null)
                        {
                            renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01((1 - p) * 2 * 0.75f));
                        }
                    }
                    if (p == 1f && renderer != null)
                    {
                        renderer.enabled = false;
                    }
                })));
            }
            if (Seer.deadBodyPositions != null)
            {
                Seer.deadBodyPositions.Add(DGDGDKCCKHJ.transform.position);
            }

            // Child set adapted kill cooldown
            if (Child.child != null && PlayerControl.LocalPlayer == Child.child && Child.child.PPMOEEPBHJO.FDNMBJOAPFL && Child.child == __instance)
            {
                var multiplier = Child.isGrownUp() ? 0.66f : 2f;
                Child.child.SetKillTimer(PlayerControl.GameOptions.DGOPNLEEAAJ * multiplier);
            }
        }
예제 #13
0
        public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target)
        {
            // Collect dead player info
            DeadPlayer deadPlayer = new DeadPlayer(target, DateTime.UtcNow, DeathReason.Kill, __instance);

            GameHistory.deadPlayers.Add(deadPlayer);

            // Reset killer to crewmate if resetToCrewmate
            if (resetToCrewmate)
            {
                __instance.Data.IsImpostor = false;
            }
            if (resetToDead)
            {
                __instance.Data.IsDead = true;
            }

            // Remove fake tasks when player dies
            if (target.hasFakeTasks())
            {
                target.clearAllTasks();
            }

            // Lover suicide trigger on murder
            if ((Lovers.lover1 != null && target == Lovers.lover1) || (Lovers.lover2 != null && target == Lovers.lover2))
            {
                PlayerControl otherLover = target == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1;
                if (PlayerControl.LocalPlayer == target && otherLover != null && !otherLover.Data.IsDead && Lovers.bothDie)   // Only the dead lover sends the rpc
                {
                    MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.LoverSuicide, Hazel.SendOption.Reliable, -1);
                    writer.Write(otherLover.PlayerId);
                    AmongUsClient.Instance.FinishRpcImmediately(writer);
                    RPCProcedure.loverSuicide(otherLover.PlayerId);
                }
            }

            // Sidekick promotion trigger on murder
            if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.Data.IsDead && target == Jackal.jackal && Jackal.jackal == PlayerControl.LocalPlayer)
            {
                MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SidekickPromotes, Hazel.SendOption.Reliable, -1);
                AmongUsClient.Instance.FinishRpcImmediately(writer);
                RPCProcedure.sidekickPromotes();
            }

            // Cleaner Button Sync
            if (Cleaner.cleaner != null && PlayerControl.LocalPlayer == Cleaner.cleaner && __instance == Cleaner.cleaner && HudManagerStartPatch.cleanerCleanButton != null)
            {
                HudManagerStartPatch.cleanerCleanButton.Timer = Cleaner.cleaner.killTimer;
            }

            // Warlock Button Sync
            if (Warlock.warlock != null && PlayerControl.LocalPlayer == Warlock.warlock && __instance == Warlock.warlock && HudManagerStartPatch.warlockCurseButton != null)
            {
                if (Warlock.warlock.killTimer > HudManagerStartPatch.warlockCurseButton.Timer)
                {
                    HudManagerStartPatch.warlockCurseButton.Timer = Warlock.warlock.killTimer;
                }
            }

            // Seer show flash and add dead player position
            if (Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && !Seer.seer.Data.IsDead && Seer.seer != target && Seer.mode <= 1)
            {
                HudManager.Instance.FullScreen.enabled = true;
                HudManager.Instance.StartCoroutine(Effects.Lerp(1f, new Action <float>((p) => {
                    var renderer = HudManager.Instance.FullScreen;
                    if (p < 0.5)
                    {
                        if (renderer != null)
                        {
                            renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01(p * 2 * 0.75f));
                        }
                    }
                    else
                    {
                        if (renderer != null)
                        {
                            renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01((1 - p) * 2 * 0.75f));
                        }
                    }
                    if (p == 1f && renderer != null)
                    {
                        renderer.enabled = false;
                    }
                })));
            }
            if (Seer.deadBodyPositions != null)
            {
                Seer.deadBodyPositions.Add(target.transform.position);
            }

            // Child set adapted kill cooldown
            if (Child.child != null && PlayerControl.LocalPlayer == Child.child && Child.child.Data.IsImpostor && Child.child == __instance)
            {
                var multiplier = Child.isGrownUp() ? 0.66f : 2f;
                Child.child.SetKillTimer(PlayerControl.GameOptions.KillCooldown * multiplier);
            }
        }