static void Postfix(EmergencyMinigame __instance) { var roleCanCallEmergency = true; var statusText = ""; // Deactivate emergency button for GM if (PlayerControl.LocalPlayer.isGM()) { roleCanCallEmergency = false; statusText = ModTranslation.getString("gmMeetingButton"); } // Deactivate emergency button for FortuneTeller if (PlayerControl.LocalPlayer.isRole(RoleType.FortuneTeller) && FortuneTeller.isCompletedNumTasks(PlayerControl.LocalPlayer)) { roleCanCallEmergency = false; statusText = ModTranslation.getString("fortuneTellerMeetingButton"); } // Deactivate emergency button for Swapper if (Swapper.swapper != null && Swapper.swapper == PlayerControl.LocalPlayer && !Swapper.canCallEmergency) { roleCanCallEmergency = false; statusText = ModTranslation.getString("swapperMeetingButton"); } // Potentially deactivate emergency button for Jester if (Jester.jester != null && Jester.jester == PlayerControl.LocalPlayer && !Jester.canCallEmergency) { roleCanCallEmergency = false; statusText = ModTranslation.getString("jesterMeetingButton"); } // Potentially deactivate emergency button for Lawyer if (Lawyer.lawyer != null && Lawyer.lawyer == PlayerControl.LocalPlayer && Lawyer.winsAfterMeetings) { roleCanCallEmergency = false; statusText = String.Format(ModTranslation.getString("lawyerMeetingButton"), Lawyer.neededMeetings - Lawyer.meetings); } if (!roleCanCallEmergency) { __instance.StatusText.text = statusText; __instance.NumberText.text = string.Empty; __instance.ClosedLid.gameObject.SetActive(true); __instance.OpenLid.gameObject.SetActive(false); __instance.ButtonActive = false; return; } // Handle max number of meetings if (__instance.state == 1) { int localRemaining = PlayerControl.LocalPlayer.RemainingEmergencies; int teamRemaining = Mathf.Max(0, maxNumberOfMeetings - meetingsCount); int remaining = Mathf.Min(localRemaining, (Mayor.mayor != null && Mayor.mayor == PlayerControl.LocalPlayer) ? 1 : teamRemaining); __instance.StatusText.text = "<size=100%>" + String.Format(ModTranslation.getString("meetingStatus"), PlayerControl.LocalPlayer.name) + "</size>"; __instance.NumberText.text = String.Format(ModTranslation.getString("meetingCount"), localRemaining.ToString(), teamRemaining.ToString()); __instance.ButtonActive = remaining > 0; __instance.ClosedLid.gameObject.SetActive(!__instance.ButtonActive); __instance.OpenLid.gameObject.SetActive(__instance.ButtonActive); return; } }
static void setNameColors() { if (PlayerControl.LocalPlayer.isRole(RoleType.Jester)) { setPlayerNameColor(PlayerControl.LocalPlayer, Jester.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Mayor)) { setPlayerNameColor(PlayerControl.LocalPlayer, Mayor.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Engineer)) { setPlayerNameColor(PlayerControl.LocalPlayer, Engineer.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Sheriff)) { setPlayerNameColor(PlayerControl.LocalPlayer, Sheriff.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Lighter)) { setPlayerNameColor(PlayerControl.LocalPlayer, Lighter.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Detective)) { setPlayerNameColor(PlayerControl.LocalPlayer, Detective.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.TimeMaster)) { setPlayerNameColor(PlayerControl.LocalPlayer, TimeMaster.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Medic)) { setPlayerNameColor(PlayerControl.LocalPlayer, Medic.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Shifter)) { setPlayerNameColor(PlayerControl.LocalPlayer, Shifter.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Swapper)) { setPlayerNameColor(PlayerControl.LocalPlayer, Swapper.swapper.Data.Role.IsImpostor ? Palette.ImpostorRed : Swapper.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Seer)) { setPlayerNameColor(PlayerControl.LocalPlayer, Seer.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Hacker)) { setPlayerNameColor(PlayerControl.LocalPlayer, Hacker.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Tracker)) { setPlayerNameColor(PlayerControl.LocalPlayer, Tracker.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Snitch)) { setPlayerNameColor(PlayerControl.LocalPlayer, Snitch.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Jackal)) { // Jackal can see his sidekick setPlayerNameColor(PlayerControl.LocalPlayer, Jackal.color); if (Sidekick.sidekick != null) { setPlayerNameColor(Sidekick.sidekick, Jackal.color); } if (Jackal.fakeSidekick != null) { setPlayerNameColor(Jackal.fakeSidekick, Jackal.color); } } else if (PlayerControl.LocalPlayer.isRole(RoleType.Spy)) { setPlayerNameColor(PlayerControl.LocalPlayer, Spy.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.SecurityGuard)) { setPlayerNameColor(PlayerControl.LocalPlayer, SecurityGuard.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Arsonist)) { setPlayerNameColor(PlayerControl.LocalPlayer, Arsonist.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.NiceGuesser)) { setPlayerNameColor(PlayerControl.LocalPlayer, Guesser.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.EvilGuesser)) { setPlayerNameColor(PlayerControl.LocalPlayer, Palette.ImpostorRed); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Bait)) { setPlayerNameColor(PlayerControl.LocalPlayer, Bait.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Opportunist)) { setPlayerNameColor(PlayerControl.LocalPlayer, Opportunist.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Vulture)) { setPlayerNameColor(PlayerControl.LocalPlayer, Vulture.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Medium)) { setPlayerNameColor(PlayerControl.LocalPlayer, Medium.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Lawyer)) { setPlayerNameColor(PlayerControl.LocalPlayer, Lawyer.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Pursuer)) { setPlayerNameColor(PlayerControl.LocalPlayer, Pursuer.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.PlagueDoctor)) { setPlayerNameColor(PlayerControl.LocalPlayer, PlagueDoctor.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Fox)) { setPlayerNameColor(PlayerControl.LocalPlayer, Fox.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.Immoralist)) { setPlayerNameColor(PlayerControl.LocalPlayer, Immoralist.color); } else if (PlayerControl.LocalPlayer.isRole(RoleType.FortuneTeller) && (FortuneTeller.isCompletedNumTasks(PlayerControl.LocalPlayer) || PlayerControl.LocalPlayer.Data.IsDead)) { setPlayerNameColor(PlayerControl.LocalPlayer, FortuneTeller.color); } if (PlayerControl.LocalPlayer.hasModifier(ModifierType.Madmate)) { setPlayerNameColor(PlayerControl.LocalPlayer, Madmate.color); if (Madmate.knowsImpostors(PlayerControl.LocalPlayer)) { foreach (var p in PlayerControl.AllPlayerControls) { if (p.isImpostor() || p.isRole(RoleType.Spy) || (p.isRole(RoleType.Jackal) && Jackal.wasTeamRed) || (p.isRole(RoleType.Sidekick) && Sidekick.wasTeamRed)) { setPlayerNameColor(p, Palette.ImpostorRed); } } } } else if (PlayerControl.LocalPlayer.hasModifier(ModifierType.CreatedMadmate)) { setPlayerNameColor(PlayerControl.LocalPlayer, Madmate.color); if (CreatedMadmate.knowsImpostors(PlayerControl.LocalPlayer)) { foreach (var p in PlayerControl.AllPlayerControls) { if (p.isImpostor() || p.isRole(RoleType.Spy) || (p.isRole(RoleType.Jackal) && Jackal.wasTeamRed) || (p.isRole(RoleType.Sidekick) && Sidekick.wasTeamRed)) { setPlayerNameColor(p, Palette.ImpostorRed); } } } } else if (PlayerControl.LocalPlayer.hasModifier(ModifierType.LastImpostor)) { setPlayerNameColor(PlayerControl.LocalPlayer, LastImpostor.color); } else if (PlayerControl.LocalPlayer.hasModifier(ModifierType.Munou) && PlayerControl.LocalPlayer.Data.IsDead) { setPlayerNameColor(PlayerControl.LocalPlayer, Munou.color); } else if (PlayerControl.LocalPlayer.hasModifier(ModifierType.AntiTeleport) && PlayerControl.LocalPlayer.Data.IsDead) { setPlayerNameColor(PlayerControl.LocalPlayer, AntiTeleport.color); } if (GM.gm != null) { setPlayerNameColor(GM.gm, GM.color); } // No else if here, as a Lover of team Jackal needs the colors if (PlayerControl.LocalPlayer.isRole(RoleType.Sidekick)) { // Sidekick can see the jackal setPlayerNameColor(Sidekick.sidekick, Sidekick.color); if (Jackal.jackal != null) { setPlayerNameColor(Jackal.jackal, Jackal.color); } } // No else if here, as the Impostors need the Spy name to be colored if (Spy.spy != null && PlayerControl.LocalPlayer.Data.Role.IsImpostor) { setPlayerNameColor(Spy.spy, Spy.color); } if (Sidekick.sidekick != null && Sidekick.wasTeamRed && PlayerControl.LocalPlayer.Data.Role.IsImpostor) { setPlayerNameColor(Sidekick.sidekick, Spy.color); } if (Jackal.jackal != null && Jackal.wasTeamRed && PlayerControl.LocalPlayer.Data.Role.IsImpostor) { setPlayerNameColor(Jackal.jackal, Spy.color); } if (Immoralist.exists && PlayerControl.LocalPlayer.isRole(RoleType.Fox)) { foreach (var immoralist in Immoralist.allPlayers) { setPlayerNameColor(immoralist, Immoralist.color); } } if (PlayerControl.LocalPlayer.isRole(RoleType.Immoralist)) { foreach (var fox in Fox.allPlayers) { setPlayerNameColor(fox, Fox.color); } } PlayerControl player = PlayerControl.LocalPlayer; bool impostorFlag = player.isRole(RoleType.SchrodingersCat) || player.isImpostor(); bool jackalFlag = player.isRole(RoleType.SchrodingersCat) || player.isRole(RoleType.Jackal) || player.isRole(RoleType.Sidekick); if (SchrodingersCat.crewFlag) { foreach (var p in SchrodingersCat.allPlayers) { setPlayerNameColor(p, Color.white); } } else if (SchrodingersCat.impostorFlag && impostorFlag) { foreach (var p in SchrodingersCat.allPlayers) { setPlayerNameColor(p, Palette.ImpostorRed); } if (player.isRole(RoleType.SchrodingersCat)) { foreach (var p in PlayerControl.AllPlayerControls) { if (p.isImpostor()) { setPlayerNameColor(p, Palette.ImpostorRed); } } } } else if (SchrodingersCat.jackalFlag && jackalFlag) { foreach (var p in SchrodingersCat.allPlayers) { setPlayerNameColor(p, Jackal.color); } if (player.isRole(RoleType.SchrodingersCat)) { setPlayerNameColor(Jackal.jackal, Jackal.color); if (Sidekick.sidekick != null) { setPlayerNameColor(Sidekick.sidekick, Sidekick.color); } } } else if (player.isRole(RoleType.SchrodingersCat)) { setPlayerNameColor(player, SchrodingersCat.color); } // Crewmate roles with no changes: Mini // Impostor roles with no changes: Morphling, Camouflager, Vampire, Godfather, Eraser, Janitor, Cleaner, Warlock, BountyHunter, Witch and Mafioso }