public static void eraseAllRoles(this PlayerControl player) { foreach (var t in RoleData.allRoleTypes) { t.Value.GetMethod("eraseRole", BindingFlags.Public | BindingFlags.Static)?.Invoke(null, new object[] { player }); } // Crewmate roles if (player.isRole(RoleType.Mayor)) { Mayor.clearAndReload(); } if (player.isRole(RoleType.Engineer)) { Engineer.clearAndReload(); } if (player.isRole(RoleType.Detective)) { Detective.clearAndReload(); } if (player.isRole(RoleType.TimeMaster)) { TimeMaster.clearAndReload(); } if (player.isRole(RoleType.Medic)) { Medic.clearAndReload(); } if (player.isRole(RoleType.Shifter)) { Shifter.clearAndReload(); } if (player.isRole(RoleType.Seer)) { Seer.clearAndReload(); } if (player.isRole(RoleType.Hacker)) { Hacker.clearAndReload(); } if (player.isRole(RoleType.Tracker)) { Tracker.clearAndReload(); } if (player.isRole(RoleType.Snitch)) { Snitch.clearAndReload(); } if (player.isRole(RoleType.Swapper)) { Swapper.clearAndReload(); } if (player.isRole(RoleType.Spy)) { Spy.clearAndReload(); } if (player.isRole(RoleType.SecurityGuard)) { SecurityGuard.clearAndReload(); } if (player.isRole(RoleType.Bait)) { Bait.clearAndReload(); } if (player.isRole(RoleType.Medium)) { Medium.clearAndReload(); } // Impostor roles if (player.isRole(RoleType.Morphling)) { Morphling.clearAndReload(); } if (player.isRole(RoleType.Camouflager)) { Camouflager.clearAndReload(); } if (player.isRole(RoleType.Godfather)) { Godfather.clearAndReload(); } if (player.isRole(RoleType.Mafioso)) { Mafioso.clearAndReload(); } if (player.isRole(RoleType.Janitor)) { Janitor.clearAndReload(); } if (player.isRole(RoleType.Vampire)) { Vampire.clearAndReload(); } if (player.isRole(RoleType.Eraser)) { Eraser.clearAndReload(); } if (player.isRole(RoleType.Trickster)) { Trickster.clearAndReload(); } if (player.isRole(RoleType.Cleaner)) { Cleaner.clearAndReload(); } if (player.isRole(RoleType.Warlock)) { Warlock.clearAndReload(); } if (player.isRole(RoleType.Witch)) { Witch.clearAndReload(); } if (player.isRole(RoleType.Assassin)) { Assassin.clearAndReload(); } if (player.isRole(RoleType.EvilHacker)) { EvilHacker.clearAndReload(); } // Other roles if (player.isRole(RoleType.Jester)) { Jester.clearAndReload(); } if (player.isRole(RoleType.Arsonist)) { Arsonist.clearAndReload(); } if (player.isRole(RoleType.Sidekick)) { Sidekick.clearAndReload(); } if (player.isRole(RoleType.BountyHunter)) { BountyHunter.clearAndReload(); } if (player.isRole(RoleType.Vulture)) { Vulture.clearAndReload(); } if (player.isRole(RoleType.Lawyer)) { Lawyer.clearAndReload(); } if (player.isRole(RoleType.Pursuer)) { Pursuer.clearAndReload(); } if (Guesser.isGuesser(player.PlayerId)) { Guesser.clear(player.PlayerId); } if (player.isRole(RoleType.Jackal)) { // Promote Sidekick and hence override the the Jackal or erase Jackal if (Sidekick.promotesToJackal && Sidekick.sidekick != null && Sidekick.sidekick.isAlive()) { RPCProcedure.sidekickPromotes(); } else { Jackal.clearAndReload(); } } }