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)); } } } } }
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)); } } } } }
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); }
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(); } } }
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); }
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); }
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); } } }
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++; } } }
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"; } }
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++; } } }
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)); } } } } }
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"; } } } }