Beispiel #1
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));
                        }
                    }
                }
            }
        }
Beispiel #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));
                        }
                    }
                }
            }
        }
Beispiel #3
0
            static bool Prefix(VitalsMinigame __instance)
            {
                vitalsTimer += Time.deltaTime;
                if (vitalsTimer > 0.1f)
                {
                    UseVitalsTime();
                }

                if (MapOptions.restrictDevices > 0 && MapOptions.restrictVitals)
                {
                    if (TimeRemaining == null)
                    {
                        TimeRemaining                         = UnityEngine.Object.Instantiate(HudManager.Instance.TaskText, __instance.transform);
                        TimeRemaining.alignment               = TMPro.TextAlignmentOptions.BottomRight;
                        TimeRemaining.transform.position      = Vector3.zero;
                        TimeRemaining.transform.localPosition = new Vector3(1.7f, 4.45f);
                        TimeRemaining.transform.localScale   *= 1.8f;
                        TimeRemaining.color                   = Palette.White;
                    }

                    if (MapOptions.restrictVitalsTime <= 0f)
                    {
                        __instance.Close();
                        return(false);
                    }

                    string timeString = TimeSpan.FromSeconds(MapOptions.restrictVitalsTime).ToString(@"mm\:ss\.ff");
                    TimeRemaining.text = String.Format(ModTranslation.getString("timeRemaining"), timeString);
                    TimeRemaining.gameObject.SetActive(true);
                }

                return(true);
            }
Beispiel #4
0
            static void Postfix(VitalsMinigame __instance)
            {
                // Hacker show time since death
                if (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];

                        // Hacker update
                        if (vitalsPanel.IsDead)
                        {
                            DeadPlayer deadPlayer = deadPlayers?.Where(x => x.player?.PlayerId == player?.PlayerId)?.FirstOrDefault();
                            if (deadPlayer != null && deadPlayer.timeOfDeath != null && k < hackerTexts.Count && hackerTexts[k] != null)
                            {
                                float timeSinceDeath = ((float)(DateTime.UtcNow - deadPlayer.timeOfDeath).TotalMilliseconds);
                                hackerTexts[k].gameObject.SetActive(true);
                                hackerTexts[k].text = Math.Round(timeSinceDeath / 1000) + "s";
                            }
                        }
                    }
                }
                else
                {
                    foreach (TMPro.TextMeshPro text in hackerTexts)
                    {
                        if (text != null && text.gameObject != null)
                        {
                            text.gameObject.SetActive(false);
                        }
                    }
                }
            }
 static void Postfix(VitalsMinigame __instance)
 {
     if (__instance.vitals.Length > 10)
     {
         for (int i = 0; i < __instance.vitals.Length; i++)
         {
             var vitalsPanel = __instance.vitals[i];
             var player      = GameData.Instance.AllPlayers[i];
             vitalsPanel.Text.text = player.PlayerName.Length >= 4 ? player.PlayerName.Substring(0, 4).ToUpper() : player.PlayerName.ToUpper();
         }
     }
 }
Beispiel #6
0
        public static bool Prefix(VitalsMinigame __instance)
        {
            if (CustomGameOptions.TimeLordVitals)
            {
                return(true);
            }
            if (PlayerControl.LocalPlayer.Is(RoleEnum.TimeLord))
            {
                Object.Destroy(__instance.gameObject);
                return(false);
            }

            return(true);
        }
Beispiel #7
0
            public static bool Prefix(VitalsMinigame __instance)
            {
                if (!__instance.SabText.isActiveAndEnabled &&
                    vitalsBool)
                {
                    __instance.SabText.gameObject.SetActive(true);
                    for (int j = 0; j < __instance.vitals.Length; j++)
                    {
                        __instance.vitals[j].gameObject.SetActive(false);
                    }
                }

                return(!vitalsBool);
            }
Beispiel #8
0
            static void Postfix(VitalsMinigame __instance)
            {
                vitalsTimer = 0f;

                if (Hacker.hacker != null && PlayerControl.LocalPlayer == Hacker.hacker)
                {
                    hackerTexts = new List <TMPro.TextMeshPro>();
                    foreach (VitalsPanel panel in __instance.vitals)
                    {
                        TMPro.TextMeshPro text = UnityEngine.Object.Instantiate(__instance.SabText, panel.transform);
                        hackerTexts.Add(text);
                        UnityEngine.Object.DestroyImmediate(text.GetComponent <AlphaBlink>());
                        text.gameObject.SetActive(false);
                        text.transform.localScale    = Vector3.one * 0.75f;
                        text.transform.localPosition = new Vector3(-0.75f, -0.23f, 0f);
                    }
                }
            }
Beispiel #9
0
 public static void Postfix(VitalsMinigame __instance)
 {
     //Fix the name of each player (better multi color handling)
     VitalsPanel[] vitalsPanels = __instance.vitals;
     foreach (string color in Palette.ShortColorNames)                //Palette.ShortColorNames
     {
         VitalsPanel[] colorFiltered = vitalsPanels.Where(panel => panel.Text.Text.Equals(color)).ToArray();
         if (colorFiltered.Length <= 1)
         {
             continue;
         }
         int i = 1;
         foreach (VitalsPanel panel in colorFiltered)
         {
             panel.Text.Text += i;
             i++;
         }
     }
 }
Beispiel #10
0
 public static void Postfix(VitalsMinigame __instance)
 {
     if (!PlayerControl.LocalPlayer.Is(RoleEnum.Spy))
     {
         return;
     }
     for (int i = 0; i < __instance.vitals.Count; i++)
     {
         ;
         var panel = __instance.vitals[i];
         var info  = GameData.Instance.AllPlayers[i];
         if (!panel.IsDead)
         {
             continue;
         }
         var deadBody = MedicMod.Murder.KilledPlayers.First(x => x.PlayerId == info.PlayerId);
         var num      = (float)(DateTime.UtcNow - deadBody.KillTime).TotalMilliseconds;
         panel.Text.Text = Math.Round(num / 1000f) + "s";
     }
 }
Beispiel #11
0
 public static void Postfix(VitalsMinigame __instance)
 {
     //Fix the name of each player (better multi color handling)
     VitalsPanel[] vitalsPanels = __instance.vitals;
     foreach (var color in Palette.ShortColorNames)
     {
         string        colorString   = TranslationController.Instance.GetString(color, Array.Empty <Il2CppSystem.Object>());
         VitalsPanel[] colorFiltered = vitalsPanels.Where(panel => panel.Text.Text.Equals(colorString)).ToArray();
         if (colorFiltered.Length <= 1)
         {
             continue;
         }
         int i = 1;
         foreach (VitalsPanel panel in colorFiltered)
         {
             panel.Text.Text += i;
             i++;
         }
     }
 }
Beispiel #12
0
            public static void Postfix(VitalsMinigame __instance)
            {
                if (PlayerTask.PlayerHasTaskOfType <HudOverrideTask>(PlayerControl.LocalPlayer))
                {
                    return;
                }
                //Allow to switch pages
                if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.mouseScrollDelta.y > 0f)
                {
                    currentPage = Mathf.Clamp(currentPage - 1, 0, maxPages - 1);
                }
                else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.mouseScrollDelta.y < 0f)
                {
                    currentPage = Mathf.Clamp(currentPage + 1, 0, maxPages - 1);
                }

                //Place dead players at the beginning, disconnected at the end
                VitalsPanel[] vitalsPanels = __instance.vitals.OrderBy(x => (x.IsDead ? 0 : 1) + (x.IsDiscon ? 2 : 0)).ToArray();//VitalsPanel[] //Sorted by: Dead -> Alive -> dead&disc -> alive&disc
                int           i            = 0;

                //Show/hide/move each panel
                foreach (VitalsPanel panel in vitalsPanels)
                {
                    if (i >= currentPage * maxPerPage && i < (currentPage + 1) * maxPerPage)
                    {
                        panel.gameObject.SetActive(true);
                        int relativeIndex = i % maxPerPage;
                        // /!\ -2.7f hardcoded, can we get it the same way as MeetingHud.VoteOrigin ?
                        var transform     = panel.transform;
                        var localPosition = transform.localPosition;
                        localPosition           = new Vector3(-2.7f + 0.6f * relativeIndex, localPosition.y, localPosition.z);
                        transform.localPosition = localPosition;
                    }
                    else
                    {
                        panel.gameObject.SetActive(false);
                    }
                    i++;
                }
            }
        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));
                        }
                    }
                }
            }
        }
Beispiel #14
0
            public static void Postfix(VitalsMinigame __instance)
            {
                if (PlayerTask.PlayerHasTaskOfType <HudOverrideTask>(PlayerControl.LocalPlayer))
                {
                    return;
                }
                //Allow to switch pages
                if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.mouseScrollDelta.y > 0f)
                {
                    currentPage = Mathf.Clamp(currentPage - 1, 0, maxPages - 1);
                }
                else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.mouseScrollDelta.y < 0f)
                {
                    currentPage = Mathf.Clamp(currentPage + 1, 0, maxPages - 1);
                }

                var i = 0;

                //Show/hide/move each panel
                foreach (var panel in __instance.vitals)
                {
                    if (i >= currentPage * maxPerPage && i < (currentPage + 1) * maxPerPage)
                    {
                        panel.gameObject.SetActive(true);
                        var relativeIndex = i % maxPerPage;
                        panel.transform.localPosition = new Vector3(
                            __instance.XStart + __instance.XOffset * (relativeIndex % 3),
                            __instance.YStart + __instance.YOffset * (relativeIndex / 3),
                            -1f
                            );
                    }
                    else
                    {
                        panel.gameObject.SetActive(false);
                    }
                    i++;
                }
            }
        static void Postfix(VitalsMinigame __instance)
        {
            // Spy show time since death
            if (Spy.spy == null || Spy.spy != PlayerControl.LocalPlayer)
            {
                return;
            }
            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);
                        vitalsPanel.Text.Text = Math.Round(timeSinceDeath / 1000) + "s";
                    }
                }
            }
        }