mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
1310 lines
80 KiB
C#
1310 lines
80 KiB
C#
using AmongUs.GameOptions;
|
|
using EHR.Roles.Crewmate;
|
|
using EHR.Roles.Impostor;
|
|
using EHR.Roles.Neutral;
|
|
using System;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace EHR;
|
|
|
|
/*
|
|
* Roles that use the same code as another role:
|
|
* Nuker = Bomber
|
|
* Undertaker = Assassin
|
|
* Chameleon = Swooper
|
|
* BloodKnight = Wildling
|
|
* HexMaster = Witch
|
|
* Imitator = Greedier
|
|
* Jinx = CursedWolf
|
|
* Juggernaut = Sans
|
|
* Medusa = Cleaner
|
|
* Poisoner = Vampire
|
|
* Reckless = Sans
|
|
* Ritualist = EvilDiviner
|
|
* Wraith = Swooper
|
|
*/
|
|
|
|
internal static class CustomRolesHelper
|
|
{
|
|
public static RoleBase GetRoleClass(this CustomRoles role)
|
|
{
|
|
var roleClass = role switch
|
|
{
|
|
// Roles that use the same code as another role need to be handled here
|
|
CustomRoles.Nuker => new Bomber(),
|
|
CustomRoles.Undertaker => new Assassin(),
|
|
CustomRoles.Chameleon => new Swooper(),
|
|
CustomRoles.BloodKnight => new Wildling(),
|
|
CustomRoles.HexMaster => new Witch(),
|
|
CustomRoles.Imitator => new Greedier(),
|
|
CustomRoles.Jinx => new CursedWolf(),
|
|
CustomRoles.Juggernaut => new Sans(),
|
|
CustomRoles.Medusa => new Cleaner(),
|
|
CustomRoles.Poisoner => new Vampire(),
|
|
CustomRoles.Reckless => new Sans(),
|
|
CustomRoles.Ritualist => new EvilDiviner(),
|
|
CustomRoles.Wraith => new Swooper(),
|
|
|
|
// Else, the role class is the role name - if the class doesn't exist, it defaults to VanillaRole
|
|
_ => Main.AllRoleClasses.FirstOrDefault(x => x.GetType().Name.Equals(role.ToString(), StringComparison.OrdinalIgnoreCase)) ?? new VanillaRole()
|
|
};
|
|
|
|
return Activator.CreateInstance(roleClass.GetType()) as RoleBase;
|
|
}
|
|
|
|
public static CustomRoles GetVNRole(this CustomRoles role)
|
|
{
|
|
if (role.IsGhostRole()) return CustomRoles.GuardianAngel;
|
|
if (role.IsVanilla()) return role;
|
|
bool UsePets = Options.UsePets.GetBool();
|
|
return role switch
|
|
{
|
|
CustomRoles.Sniper => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Jester => Options.JesterCanVent.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
|
CustomRoles.Mayor => Options.MayorHasPortableButton.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
|
CustomRoles.Monitor => Monitor.CanVent.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
|
CustomRoles.Vulture => Vulture.CanVent.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
|
CustomRoles.Opportunist => CustomRoles.Engineer,
|
|
CustomRoles.Vindicator => CustomRoles.Impostor,
|
|
CustomRoles.Snitch => CustomRoles.Crewmate,
|
|
CustomRoles.ParityCop => CustomRoles.Crewmate,
|
|
CustomRoles.Marshall => CustomRoles.Crewmate,
|
|
CustomRoles.SabotageMaster => CustomRoles.Engineer,
|
|
CustomRoles.Mafia => Options.LegacyMafia.GetBool() ? CustomRoles.Shapeshifter : CustomRoles.Impostor,
|
|
CustomRoles.Terrorist => CustomRoles.Engineer,
|
|
CustomRoles.Executioner => CustomRoles.Crewmate,
|
|
CustomRoles.Lawyer => CustomRoles.Crewmate,
|
|
CustomRoles.NiceSwapper => CustomRoles.Crewmate,
|
|
CustomRoles.Ignitor => CustomRoles.Crewmate,
|
|
CustomRoles.Jailor => CustomRoles.Impostor,
|
|
CustomRoles.Vampire => CustomRoles.Impostor,
|
|
CustomRoles.BountyHunter => CustomRoles.Impostor,
|
|
CustomRoles.Trickster => CustomRoles.Impostor,
|
|
CustomRoles.Witch => CustomRoles.Impostor,
|
|
CustomRoles.ShapeshifterTOHE => CustomRoles.Shapeshifter,
|
|
CustomRoles.Agitater => CustomRoles.Impostor,
|
|
CustomRoles.ImpostorTOHE => CustomRoles.Impostor,
|
|
CustomRoles.EvilDiviner => CustomRoles.Impostor,
|
|
CustomRoles.Wildling => Wildling.CanShapeshiftOpt.GetBool() ? CustomRoles.Shapeshifter : CustomRoles.Impostor,
|
|
CustomRoles.Morphling => CustomRoles.Shapeshifter,
|
|
CustomRoles.Warlock => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.SerialKiller => CustomRoles.Impostor,
|
|
CustomRoles.FireWorks => CustomRoles.Shapeshifter,
|
|
CustomRoles.SpeedBooster => CustomRoles.Crewmate,
|
|
CustomRoles.Dictator => CustomRoles.Crewmate,
|
|
CustomRoles.Inhibitor => CustomRoles.Impostor,
|
|
CustomRoles.Kidnapper => CustomRoles.Shapeshifter,
|
|
CustomRoles.Commander => CustomRoles.Shapeshifter,
|
|
CustomRoles.Freezer => CustomRoles.Shapeshifter,
|
|
CustomRoles.Changeling => CustomRoles.Shapeshifter,
|
|
CustomRoles.Swapster => CustomRoles.Shapeshifter,
|
|
CustomRoles.Kamikaze => CustomRoles.Impostor,
|
|
CustomRoles.Librarian => CustomRoles.Shapeshifter,
|
|
CustomRoles.Cantankerous => CustomRoles.Impostor,
|
|
CustomRoles.Swiftclaw => CustomRoles.Impostor,
|
|
CustomRoles.YinYanger => CustomRoles.Impostor,
|
|
CustomRoles.Duellist => CustomRoles.Shapeshifter,
|
|
CustomRoles.Consort => CustomRoles.Impostor,
|
|
CustomRoles.Mafioso => CustomRoles.Impostor,
|
|
CustomRoles.Chronomancer => CustomRoles.Impostor,
|
|
CustomRoles.Nullifier => CustomRoles.Impostor,
|
|
CustomRoles.Stealth => CustomRoles.Impostor,
|
|
CustomRoles.Penguin => CustomRoles.Impostor,
|
|
CustomRoles.Sapper => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Mastermind => CustomRoles.Impostor,
|
|
CustomRoles.RiftMaker => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Gambler => CustomRoles.Impostor,
|
|
CustomRoles.Hitman => CustomRoles.Shapeshifter,
|
|
CustomRoles.Saboteur => CustomRoles.Impostor,
|
|
CustomRoles.Doctor => CustomRoles.Scientist,
|
|
CustomRoles.ScientistTOHE => CustomRoles.Scientist,
|
|
CustomRoles.Tracefinder => CustomRoles.Scientist,
|
|
CustomRoles.Puppeteer => CustomRoles.Impostor,
|
|
CustomRoles.TimeThief => CustomRoles.Impostor,
|
|
CustomRoles.EvilTracker => CustomRoles.Shapeshifter,
|
|
CustomRoles.Paranoia => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.EngineerTOHE => CustomRoles.Engineer,
|
|
CustomRoles.TimeMaster => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.CrewmateTOHE => CustomRoles.Crewmate,
|
|
CustomRoles.Cleanser => CustomRoles.Crewmate,
|
|
CustomRoles.Miner => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Psychic => CustomRoles.Crewmate,
|
|
CustomRoles.Needy => CustomRoles.Crewmate,
|
|
CustomRoles.Twister => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.SuperStar => CustomRoles.Crewmate,
|
|
CustomRoles.Hacker => CustomRoles.Shapeshifter,
|
|
CustomRoles.Visionary => CustomRoles.Shapeshifter,
|
|
CustomRoles.Assassin => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Undertaker => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Luckey => CustomRoles.Crewmate,
|
|
CustomRoles.CyberStar => CustomRoles.Crewmate,
|
|
CustomRoles.Demolitionist => CustomRoles.Crewmate,
|
|
CustomRoles.Ventguard => CustomRoles.Engineer,
|
|
CustomRoles.Express => CustomRoles.Crewmate,
|
|
CustomRoles.NiceEraser => CustomRoles.Crewmate,
|
|
CustomRoles.TaskManager => CustomRoles.Crewmate,
|
|
CustomRoles.Randomizer => CustomRoles.Crewmate,
|
|
CustomRoles.Beacon => CustomRoles.Crewmate,
|
|
CustomRoles.Rabbit => CustomRoles.Crewmate,
|
|
CustomRoles.Shiftguard => CustomRoles.Crewmate,
|
|
CustomRoles.Mole => CustomRoles.Engineer,
|
|
CustomRoles.Markseeker => CustomRoles.Crewmate,
|
|
CustomRoles.Sentinel => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Electric => CustomRoles.Crewmate,
|
|
CustomRoles.Philantropist => CustomRoles.Crewmate,
|
|
CustomRoles.Tornado => CustomRoles.Crewmate,
|
|
CustomRoles.Druid => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Insight => CustomRoles.Crewmate,
|
|
CustomRoles.Tunneler => CustomRoles.Crewmate,
|
|
CustomRoles.Detour => CustomRoles.Crewmate,
|
|
CustomRoles.Drainer => CustomRoles.Engineer,
|
|
CustomRoles.Benefactor => CustomRoles.Crewmate,
|
|
CustomRoles.GuessManagerRole => CustomRoles.Crewmate,
|
|
CustomRoles.Altruist => CustomRoles.Crewmate,
|
|
CustomRoles.Transmitter => CustomRoles.Crewmate,
|
|
CustomRoles.Autocrat => CustomRoles.Crewmate,
|
|
CustomRoles.Perceiver => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Convener => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Mathematician => CustomRoles.Crewmate,
|
|
CustomRoles.Nightmare => CustomRoles.Crewmate,
|
|
CustomRoles.CameraMan => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Spy => CustomRoles.Crewmate,
|
|
CustomRoles.Ricochet => CustomRoles.Crewmate,
|
|
CustomRoles.Tether => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Doormaster => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Aid => UsePets && Aid.UsePet.GetBool() ? CustomRoles.Crewmate : CustomRoles.Impostor,
|
|
CustomRoles.Escort => UsePets && Escort.UsePet.GetBool() ? CustomRoles.Crewmate : CustomRoles.Impostor,
|
|
CustomRoles.DonutDelivery => UsePets && DonutDelivery.UsePet.GetBool() ? CustomRoles.Crewmate : CustomRoles.Impostor,
|
|
CustomRoles.Gaulois => UsePets && Gaulois.UsePet.GetBool() ? CustomRoles.Crewmate : CustomRoles.Impostor,
|
|
CustomRoles.Analyzer => UsePets && Analyzer.UsePet.GetBool() ? CustomRoles.Crewmate : CustomRoles.Impostor,
|
|
CustomRoles.Escapee => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.NiceGuesser => CustomRoles.Crewmate,
|
|
CustomRoles.EvilGuesser => CustomRoles.Impostor,
|
|
CustomRoles.Detective => CustomRoles.Crewmate,
|
|
CustomRoles.God => CustomRoles.Crewmate,
|
|
CustomRoles.GuardianAngelTOHE => CustomRoles.GuardianAngel,
|
|
CustomRoles.Zombie => CustomRoles.Impostor,
|
|
CustomRoles.Mario => CustomRoles.Engineer,
|
|
CustomRoles.AntiAdminer => AntiAdminer.EnableExtraAbility.GetBool() ? CustomRoles.Shapeshifter : CustomRoles.Impostor,
|
|
CustomRoles.Sans => CustomRoles.Impostor,
|
|
CustomRoles.Bomber => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Nuker => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.BoobyTrap => CustomRoles.Impostor,
|
|
CustomRoles.Scavenger => CustomRoles.Impostor,
|
|
CustomRoles.Transporter => CustomRoles.Crewmate,
|
|
CustomRoles.Veteran => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Capitalism => CustomRoles.Impostor,
|
|
CustomRoles.Bodyguard => CustomRoles.Crewmate,
|
|
CustomRoles.Grenadier => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Lighter => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.SecurityGuard => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Gangster => CustomRoles.Impostor,
|
|
CustomRoles.Cleaner => CustomRoles.Impostor,
|
|
CustomRoles.Konan => CustomRoles.Crewmate,
|
|
CustomRoles.Divinator => CustomRoles.Crewmate,
|
|
CustomRoles.Oracle => CustomRoles.Crewmate,
|
|
CustomRoles.BallLightning => CustomRoles.Impostor,
|
|
CustomRoles.Greedier => CustomRoles.Impostor,
|
|
CustomRoles.Workaholic => CustomRoles.Engineer,
|
|
CustomRoles.Speedrunner => CustomRoles.Crewmate,
|
|
CustomRoles.CursedWolf => CustomRoles.Impostor,
|
|
CustomRoles.Collector => CustomRoles.Crewmate,
|
|
CustomRoles.ImperiusCurse => CustomRoles.Shapeshifter,
|
|
CustomRoles.QuickShooter => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Eraser => CustomRoles.Impostor,
|
|
CustomRoles.OverKiller => CustomRoles.Impostor,
|
|
CustomRoles.Hangman => CustomRoles.Shapeshifter,
|
|
CustomRoles.Sunnyboy => CustomRoles.Scientist,
|
|
CustomRoles.Phantom => Options.PhantomCanVent.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
|
CustomRoles.Judge => CustomRoles.Crewmate,
|
|
CustomRoles.Councillor => CustomRoles.Impostor,
|
|
CustomRoles.Mortician => CustomRoles.Crewmate,
|
|
CustomRoles.Mediumshiper => CustomRoles.Crewmate,
|
|
CustomRoles.Bard => CustomRoles.Impostor,
|
|
CustomRoles.Swooper => CustomRoles.Impostor,
|
|
CustomRoles.Crewpostor => CustomRoles.Engineer,
|
|
CustomRoles.Observer => CustomRoles.Crewmate,
|
|
CustomRoles.DovesOfNeace => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
|
CustomRoles.Disperser => UsePets ? CustomRoles.Impostor : CustomRoles.Shapeshifter,
|
|
CustomRoles.Camouflager => CustomRoles.Shapeshifter,
|
|
CustomRoles.Dazzler => CustomRoles.Shapeshifter,
|
|
CustomRoles.Devourer => CustomRoles.Shapeshifter,
|
|
CustomRoles.Deathpact => CustomRoles.Shapeshifter,
|
|
CustomRoles.Bloodhound => CustomRoles.Crewmate,
|
|
CustomRoles.Tracker => CustomRoles.Crewmate,
|
|
CustomRoles.Deathknight => CustomRoles.Crewmate,
|
|
CustomRoles.Merchant => CustomRoles.Crewmate,
|
|
CustomRoles.Lookout => CustomRoles.Crewmate,
|
|
CustomRoles.Guardian => CustomRoles.Crewmate,
|
|
CustomRoles.Enigma => CustomRoles.Crewmate,
|
|
CustomRoles.Addict => CustomRoles.Engineer,
|
|
CustomRoles.Alchemist => CustomRoles.Engineer, // Needs to vent to use invisibility potion
|
|
CustomRoles.Chameleon => CustomRoles.Engineer,
|
|
CustomRoles.Lurker => CustomRoles.Impostor,
|
|
CustomRoles.Doomsayer => CustomRoles.Crewmate,
|
|
CustomRoles.Godfather => CustomRoles.Impostor,
|
|
CustomRoles.Blackmailer => CustomRoles.Shapeshifter,
|
|
|
|
_ => role.IsImpostor() ? CustomRoles.Impostor : CustomRoles.Crewmate,
|
|
};
|
|
}
|
|
|
|
public static CustomRoles GetErasedRole(this CustomRoles role)
|
|
{
|
|
if (role.IsVanilla()) return role;
|
|
var vnRole = role.GetVNRole();
|
|
if (role.GetDYRole() == RoleTypes.Impostor) vnRole = CustomRoles.Impostor;
|
|
return vnRole switch
|
|
{
|
|
CustomRoles.Crewmate => CustomRoles.CrewmateTOHE,
|
|
CustomRoles.Engineer => CustomRoles.EngineerTOHE,
|
|
CustomRoles.Scientist => CustomRoles.ScientistTOHE,
|
|
CustomRoles.Impostor when role.IsCrewmate() => CustomRoles.CrewmateTOHE,
|
|
CustomRoles.Impostor => CustomRoles.ImpostorTOHE,
|
|
CustomRoles.Shapeshifter => CustomRoles.ShapeshifterTOHE,
|
|
_ => role.IsImpostor() ? CustomRoles.ImpostorTOHE : CustomRoles.CrewmateTOHE
|
|
};
|
|
}
|
|
|
|
public static RoleTypes GetDYRole(this CustomRoles role, bool load = false)
|
|
{
|
|
bool UsePets = !load && Options.UsePets.GetBool();
|
|
return role switch
|
|
{
|
|
//SoloKombat
|
|
CustomRoles.KB_Normal => RoleTypes.Impostor,
|
|
//FFA
|
|
CustomRoles.Killer => RoleTypes.Impostor,
|
|
//Move And Stop
|
|
CustomRoles.Tasker => RoleTypes.Crewmate,
|
|
//Hot Potato
|
|
CustomRoles.Potato => RoleTypes.Crewmate,
|
|
//Hide And Seek
|
|
CustomRoles.Hider => RoleTypes.Crewmate,
|
|
CustomRoles.Seeker => RoleTypes.Impostor,
|
|
CustomRoles.Fox => RoleTypes.Crewmate,
|
|
CustomRoles.Troll => RoleTypes.Crewmate,
|
|
//Standard
|
|
CustomRoles.Sheriff => UsePets && Sheriff.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Crusader => UsePets && Crusader.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.CopyCat => UsePets && CopyCat.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Refugee => RoleTypes.Impostor,
|
|
CustomRoles.Amnesiac => RoleTypes.Impostor,
|
|
CustomRoles.Agitater => RoleTypes.Impostor,
|
|
CustomRoles.Monarch => UsePets && Monarch.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Deputy => UsePets && Deputy.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Arsonist => RoleTypes.Impostor,
|
|
CustomRoles.Jackal => RoleTypes.Impostor,
|
|
CustomRoles.Medusa => RoleTypes.Impostor,
|
|
CustomRoles.Sidekick => RoleTypes.Impostor,
|
|
CustomRoles.SwordsMan => UsePets && SwordsMan.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Innocent => RoleTypes.Impostor,
|
|
CustomRoles.Pelican => RoleTypes.Impostor,
|
|
CustomRoles.Aid => UsePets && Aid.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Escort => UsePets && Escort.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.DonutDelivery => UsePets && DonutDelivery.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Gaulois => UsePets && Gaulois.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Analyzer => UsePets && Analyzer.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Witness => UsePets && Options.WitnessUsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Pursuer => RoleTypes.Impostor,
|
|
CustomRoles.Revolutionist => RoleTypes.Impostor,
|
|
CustomRoles.FFF => RoleTypes.Impostor,
|
|
CustomRoles.Medic => UsePets && Medic.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Gamer => RoleTypes.Impostor,
|
|
CustomRoles.HexMaster => RoleTypes.Impostor,
|
|
CustomRoles.Wraith => RoleTypes.Impostor,
|
|
CustomRoles.Glitch => RoleTypes.Impostor,
|
|
CustomRoles.Jailor => UsePets && Jailor.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Juggernaut => RoleTypes.Impostor,
|
|
CustomRoles.Jinx => RoleTypes.Impostor,
|
|
CustomRoles.DarkHide => RoleTypes.Impostor,
|
|
CustomRoles.Provocateur => RoleTypes.Impostor,
|
|
CustomRoles.BloodKnight => RoleTypes.Impostor,
|
|
CustomRoles.Poisoner => RoleTypes.Impostor,
|
|
CustomRoles.NSerialKiller => RoleTypes.Impostor,
|
|
CustomRoles.Tiger => RoleTypes.Impostor,
|
|
CustomRoles.SoulHunter => RoleTypes.Impostor,
|
|
CustomRoles.Enderman => RoleTypes.Impostor,
|
|
CustomRoles.Mycologist => RoleTypes.Impostor,
|
|
CustomRoles.Bubble => RoleTypes.Impostor,
|
|
CustomRoles.Hookshot => RoleTypes.Impostor,
|
|
CustomRoles.Sprayer => RoleTypes.Impostor,
|
|
CustomRoles.PlagueDoctor => RoleTypes.Impostor,
|
|
CustomRoles.Postman => RoleTypes.Impostor,
|
|
CustomRoles.Impartial => RoleTypes.Impostor,
|
|
CustomRoles.Predator => RoleTypes.Impostor,
|
|
CustomRoles.Reckless => RoleTypes.Impostor,
|
|
CustomRoles.Magician => RoleTypes.Impostor,
|
|
CustomRoles.WeaponMaster => RoleTypes.Impostor,
|
|
CustomRoles.Pyromaniac => RoleTypes.Impostor,
|
|
CustomRoles.Eclipse => RoleTypes.Impostor,
|
|
CustomRoles.Vengeance => RoleTypes.Impostor,
|
|
CustomRoles.HeadHunter => RoleTypes.Impostor,
|
|
CustomRoles.Imitator => RoleTypes.Impostor,
|
|
CustomRoles.Werewolf => RoleTypes.Impostor,
|
|
CustomRoles.Bandit => RoleTypes.Impostor,
|
|
CustomRoles.Maverick => RoleTypes.Impostor,
|
|
CustomRoles.Parasite => RoleTypes.Impostor,
|
|
CustomRoles.Totocalcio => RoleTypes.Impostor,
|
|
CustomRoles.Romantic => RoleTypes.Impostor,
|
|
CustomRoles.VengefulRomantic => RoleTypes.Impostor,
|
|
CustomRoles.RuthlessRomantic => RoleTypes.Impostor,
|
|
CustomRoles.Succubus => RoleTypes.Impostor,
|
|
CustomRoles.Necromancer => RoleTypes.Impostor,
|
|
CustomRoles.Virus => RoleTypes.Impostor,
|
|
CustomRoles.Farseer => UsePets && Farseer.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor,
|
|
CustomRoles.Ritualist => RoleTypes.Impostor,
|
|
CustomRoles.Pickpocket => RoleTypes.Impostor,
|
|
CustomRoles.Traitor => RoleTypes.Impostor,
|
|
CustomRoles.PlagueBearer => RoleTypes.Impostor,
|
|
CustomRoles.Pestilence => RoleTypes.Impostor,
|
|
CustomRoles.Spiritcaller => RoleTypes.Impostor,
|
|
CustomRoles.Doppelganger => RoleTypes.Impostor,
|
|
_ => RoleTypes.GuardianAngel
|
|
};
|
|
}
|
|
|
|
public static bool IsAdditionRole(this CustomRoles role) => role > CustomRoles.NotAssigned;
|
|
|
|
public static bool IsNonNK(this CustomRoles role) => role is
|
|
CustomRoles.Jester or
|
|
CustomRoles.Postman or
|
|
CustomRoles.Impartial or
|
|
CustomRoles.Predator or
|
|
CustomRoles.SoulHunter or
|
|
CustomRoles.Terrorist or
|
|
CustomRoles.Opportunist or
|
|
CustomRoles.Executioner or
|
|
CustomRoles.Mario or
|
|
CustomRoles.Lawyer or
|
|
CustomRoles.God or
|
|
CustomRoles.Amnesiac or
|
|
CustomRoles.Innocent or
|
|
CustomRoles.Vulture or
|
|
CustomRoles.Pursuer or
|
|
CustomRoles.Revolutionist or
|
|
CustomRoles.Provocateur or
|
|
CustomRoles.FFF or
|
|
CustomRoles.Workaholic or
|
|
CustomRoles.Collector or
|
|
CustomRoles.Sunnyboy or
|
|
CustomRoles.Maverick or
|
|
CustomRoles.Phantom or
|
|
CustomRoles.Totocalcio or
|
|
CustomRoles.Romantic or
|
|
CustomRoles.VengefulRomantic or
|
|
CustomRoles.Doomsayer or
|
|
CustomRoles.Deathknight;
|
|
|
|
public static bool IsNK(this CustomRoles role) => role is
|
|
CustomRoles.Jackal or
|
|
CustomRoles.Glitch or
|
|
CustomRoles.Sidekick or
|
|
CustomRoles.HexMaster or
|
|
CustomRoles.Doppelganger or
|
|
CustomRoles.Succubus or
|
|
CustomRoles.Gamer or
|
|
CustomRoles.Crewpostor or
|
|
CustomRoles.Necromancer or
|
|
CustomRoles.Agitater or
|
|
CustomRoles.Wraith or
|
|
CustomRoles.Bandit or
|
|
CustomRoles.Medusa or
|
|
CustomRoles.Pelican or
|
|
CustomRoles.Convict or
|
|
CustomRoles.DarkHide or
|
|
CustomRoles.Juggernaut or
|
|
CustomRoles.Jinx or
|
|
CustomRoles.Poisoner or
|
|
CustomRoles.Refugee or
|
|
CustomRoles.Parasite or
|
|
CustomRoles.NSerialKiller or
|
|
CustomRoles.Tiger or
|
|
CustomRoles.Enderman or
|
|
CustomRoles.Mycologist or
|
|
CustomRoles.Bubble or
|
|
CustomRoles.Hookshot or
|
|
CustomRoles.Sprayer or
|
|
CustomRoles.Magician or
|
|
CustomRoles.WeaponMaster or
|
|
CustomRoles.Reckless or
|
|
CustomRoles.Eclipse or
|
|
CustomRoles.Pyromaniac or
|
|
CustomRoles.Vengeance or
|
|
CustomRoles.HeadHunter or
|
|
CustomRoles.Imitator or
|
|
CustomRoles.Werewolf or
|
|
CustomRoles.Ritualist or
|
|
CustomRoles.Arsonist or
|
|
CustomRoles.Pickpocket or
|
|
CustomRoles.PlagueDoctor or
|
|
CustomRoles.Traitor or
|
|
CustomRoles.Virus or
|
|
CustomRoles.BloodKnight or
|
|
CustomRoles.Spiritcaller or
|
|
CustomRoles.RuthlessRomantic or
|
|
CustomRoles.PlagueBearer or
|
|
CustomRoles.Pestilence;
|
|
|
|
public static bool IsSnitchTarget(this CustomRoles role) => role.IsNK() || role.Is(Team.Impostor);
|
|
|
|
public static bool IsGhostRole(this CustomRoles role) => role is
|
|
CustomRoles.Warden or
|
|
CustomRoles.Minion or
|
|
CustomRoles.Specter or
|
|
CustomRoles.Haunter or
|
|
CustomRoles.EvilSpirit;
|
|
|
|
public static bool IsNE(this CustomRoles role) => role is
|
|
CustomRoles.Jester or
|
|
CustomRoles.Gamer or
|
|
CustomRoles.Arsonist or
|
|
CustomRoles.Executioner or
|
|
CustomRoles.Doomsayer or
|
|
CustomRoles.Innocent;
|
|
|
|
public static bool IsNB(this CustomRoles role) => role is
|
|
CustomRoles.Opportunist or
|
|
CustomRoles.Lawyer or
|
|
CustomRoles.Amnesiac or
|
|
CustomRoles.God or
|
|
CustomRoles.Postman or
|
|
CustomRoles.Predator or
|
|
CustomRoles.Pursuer or
|
|
CustomRoles.FFF or
|
|
CustomRoles.Sunnyboy or
|
|
CustomRoles.Maverick or
|
|
CustomRoles.Romantic or
|
|
CustomRoles.VengefulRomantic or
|
|
CustomRoles.Totocalcio;
|
|
|
|
public static bool IsNC(this CustomRoles role) => role is
|
|
CustomRoles.Mario or
|
|
CustomRoles.Terrorist or
|
|
CustomRoles.Revolutionist or
|
|
CustomRoles.Impartial or
|
|
CustomRoles.Vulture or
|
|
CustomRoles.Phantom or
|
|
CustomRoles.Workaholic or
|
|
CustomRoles.Collector or
|
|
CustomRoles.Provocateur;
|
|
|
|
public static bool IsCK(this CustomRoles role) => role is
|
|
CustomRoles.SwordsMan or
|
|
CustomRoles.Veteran or
|
|
CustomRoles.CopyCat or
|
|
CustomRoles.Bodyguard or
|
|
CustomRoles.Crusader or
|
|
CustomRoles.NiceGuesser or
|
|
CustomRoles.Sheriff or
|
|
CustomRoles.Jailor;
|
|
|
|
public static bool IsImpostor(this CustomRoles role) => role is
|
|
CustomRoles.Impostor or
|
|
CustomRoles.Godfather or
|
|
CustomRoles.Shapeshifter or
|
|
CustomRoles.ShapeshifterTOHE or
|
|
CustomRoles.ImpostorTOHE or
|
|
CustomRoles.EvilDiviner or
|
|
CustomRoles.Wildling or
|
|
CustomRoles.Blackmailer or
|
|
CustomRoles.Morphling or
|
|
CustomRoles.BountyHunter or
|
|
CustomRoles.Vampire or
|
|
CustomRoles.Witch or
|
|
CustomRoles.Vindicator or
|
|
CustomRoles.Zombie or
|
|
CustomRoles.Warlock or
|
|
CustomRoles.Assassin or
|
|
CustomRoles.Undertaker or
|
|
CustomRoles.Hacker or
|
|
CustomRoles.Visionary or
|
|
CustomRoles.Miner or
|
|
CustomRoles.Escapee or
|
|
CustomRoles.SerialKiller or
|
|
CustomRoles.Underdog or
|
|
CustomRoles.Inhibitor or
|
|
CustomRoles.Kidnapper or
|
|
CustomRoles.Commander or
|
|
CustomRoles.Freezer or
|
|
CustomRoles.Changeling or
|
|
CustomRoles.Swapster or
|
|
CustomRoles.Kamikaze or
|
|
CustomRoles.Librarian or
|
|
CustomRoles.Cantankerous or
|
|
CustomRoles.Swiftclaw or
|
|
CustomRoles.Duellist or
|
|
CustomRoles.YinYanger or
|
|
CustomRoles.Consort or
|
|
CustomRoles.Mafioso or
|
|
CustomRoles.Nullifier or
|
|
CustomRoles.Chronomancer or
|
|
CustomRoles.Stealth or
|
|
CustomRoles.Penguin or
|
|
CustomRoles.Sapper or
|
|
CustomRoles.Hitman or
|
|
CustomRoles.RiftMaker or
|
|
CustomRoles.Mastermind or
|
|
CustomRoles.Gambler or
|
|
CustomRoles.Councillor or
|
|
CustomRoles.Saboteur or
|
|
CustomRoles.Puppeteer or
|
|
CustomRoles.TimeThief or
|
|
CustomRoles.Trickster or
|
|
CustomRoles.Mafia or
|
|
CustomRoles.Minimalism or
|
|
CustomRoles.FireWorks or
|
|
CustomRoles.Sniper or
|
|
CustomRoles.EvilTracker or
|
|
CustomRoles.EvilGuesser or
|
|
CustomRoles.AntiAdminer or
|
|
CustomRoles.Sans or
|
|
CustomRoles.Bomber or
|
|
CustomRoles.Nuker or
|
|
CustomRoles.Scavenger or
|
|
CustomRoles.BoobyTrap or
|
|
CustomRoles.Capitalism or
|
|
CustomRoles.Gangster or
|
|
CustomRoles.Cleaner or
|
|
CustomRoles.BallLightning or
|
|
CustomRoles.Greedier or
|
|
CustomRoles.CursedWolf or
|
|
CustomRoles.ImperiusCurse or
|
|
CustomRoles.QuickShooter or
|
|
CustomRoles.Eraser or
|
|
CustomRoles.OverKiller or
|
|
CustomRoles.Hangman or
|
|
CustomRoles.Bard or
|
|
CustomRoles.Swooper or
|
|
CustomRoles.Disperser or
|
|
CustomRoles.Dazzler or
|
|
CustomRoles.Deathpact or
|
|
CustomRoles.Devourer or
|
|
CustomRoles.Camouflager or
|
|
CustomRoles.Twister or
|
|
CustomRoles.Lurker;
|
|
|
|
public static bool IsNeutral(this CustomRoles role) => role.IsNK() || role.IsNonNK();
|
|
|
|
public static bool IsAbleToBeSidekicked(this CustomRoles role) => role.GetDYRole() == RoleTypes.Impostor && !role.IsImpostor() && !role.IsRecruitingRole() && role is not
|
|
CustomRoles.Deathknight and not
|
|
CustomRoles.Gangster;
|
|
|
|
public static bool IsEvilAddon(this CustomRoles role) => role is
|
|
CustomRoles.Madmate or
|
|
CustomRoles.Egoist or
|
|
CustomRoles.Charmed or
|
|
CustomRoles.Recruit or
|
|
CustomRoles.Contagious or
|
|
CustomRoles.Rogue or
|
|
CustomRoles.Rascal;
|
|
|
|
public static bool IsRecruitingRole(this CustomRoles role) => role is
|
|
CustomRoles.Jackal or
|
|
CustomRoles.Succubus or
|
|
CustomRoles.Necromancer or
|
|
CustomRoles.Virus or
|
|
CustomRoles.Rogue or
|
|
CustomRoles.Spiritcaller;
|
|
|
|
public static bool IsMadmate(this CustomRoles role) => role is
|
|
CustomRoles.Crewpostor or
|
|
CustomRoles.Convict or
|
|
CustomRoles.Refugee or
|
|
CustomRoles.Parasite;
|
|
|
|
public static bool IsTasklessCrewmate(this CustomRoles role) => !role.UsesPetInsteadOfKill() && role is
|
|
CustomRoles.Sheriff or
|
|
CustomRoles.Medic or
|
|
CustomRoles.CopyCat or
|
|
CustomRoles.Crusader or
|
|
CustomRoles.Aid or
|
|
CustomRoles.Escort or
|
|
CustomRoles.DonutDelivery or
|
|
CustomRoles.Gaulois or
|
|
CustomRoles.Analyzer or
|
|
CustomRoles.Witness or
|
|
CustomRoles.Monarch or
|
|
CustomRoles.Jailor or
|
|
CustomRoles.Farseer or
|
|
CustomRoles.SwordsMan or
|
|
CustomRoles.Deputy;
|
|
|
|
public static bool PetActivatedAbility(this CustomRoles role)
|
|
{
|
|
if (!Options.UsePets.GetBool()) return false;
|
|
if (role.UsesPetInsteadOfKill()) return true;
|
|
|
|
var type = role.GetRoleClass().GetType();
|
|
return type.GetMethod("OnPet")?.DeclaringType == type;
|
|
}
|
|
|
|
public static bool UsesPetInsteadOfKill(this CustomRoles role) => Options.UsePets.GetBool() && role switch
|
|
{
|
|
CustomRoles.Gaulois when Gaulois.UsePet.GetBool() => true,
|
|
CustomRoles.Aid when Aid.UsePet.GetBool() => true,
|
|
CustomRoles.Escort when Escort.UsePet.GetBool() => true,
|
|
CustomRoles.DonutDelivery when DonutDelivery.UsePet.GetBool() => true,
|
|
CustomRoles.Analyzer when Analyzer.UsePet.GetBool() => true,
|
|
CustomRoles.Jailor when Jailor.UsePet.GetBool() => true,
|
|
CustomRoles.Sheriff when Sheriff.UsePet.GetBool() => true,
|
|
CustomRoles.SwordsMan when SwordsMan.UsePet.GetBool() => true,
|
|
CustomRoles.Medic when Medic.UsePet.GetBool() => true,
|
|
CustomRoles.Monarch when Monarch.UsePet.GetBool() => true,
|
|
CustomRoles.CopyCat when CopyCat.UsePet.GetBool() => true,
|
|
CustomRoles.Farseer when Farseer.UsePet.GetBool() => true,
|
|
CustomRoles.Deputy when Deputy.UsePet.GetBool() => true,
|
|
CustomRoles.Crusader when Crusader.UsePet.GetBool() => true,
|
|
CustomRoles.Witness when Options.WitnessUsePet.GetBool() => true,
|
|
|
|
CustomRoles.Refugee => true,
|
|
CustomRoles.Necromancer => true,
|
|
CustomRoles.Deathknight => true,
|
|
|
|
_ => false,
|
|
};
|
|
|
|
public static readonly CustomRoles[] OnlySpawnsWithPetsRoleList =
|
|
[
|
|
CustomRoles.Tunneler,
|
|
CustomRoles.Tornado,
|
|
CustomRoles.Swiftclaw,
|
|
];
|
|
|
|
public static bool OnlySpawnsWithPets(this CustomRoles role) => OnlySpawnsWithPetsRoleList.Any(x => x.ToString() == role.ToString());
|
|
|
|
public static bool NeedUpdateOnLights(this CustomRoles role) => (!role.UsesPetInsteadOfKill()) && (role.GetDYRole() != RoleTypes.GuardianAngel || role is
|
|
CustomRoles.Convict or
|
|
CustomRoles.Parasite or
|
|
CustomRoles.Refugee or
|
|
CustomRoles.Lighter or
|
|
CustomRoles.SecurityGuard or
|
|
CustomRoles.Ignitor or
|
|
CustomRoles.Saboteur or
|
|
CustomRoles.Inhibitor or
|
|
CustomRoles.Gambler or
|
|
CustomRoles.Deputy);
|
|
|
|
public static bool IsBetrayalAddon(this CustomRoles role) => role is
|
|
CustomRoles.Charmed or
|
|
CustomRoles.Recruit or
|
|
CustomRoles.Contagious or
|
|
CustomRoles.Lovers or
|
|
CustomRoles.Madmate or
|
|
CustomRoles.Undead or
|
|
CustomRoles.Egoist;
|
|
|
|
public static bool IsImpOnlyAddon(this CustomRoles role) => role is
|
|
CustomRoles.Mare or
|
|
CustomRoles.LastImpostor or
|
|
CustomRoles.Mare or
|
|
CustomRoles.Mimic or
|
|
CustomRoles.Damocles or
|
|
CustomRoles.DeadlyQuota or
|
|
CustomRoles.Circumvent or
|
|
CustomRoles.TicketsStealer or
|
|
CustomRoles.Taskcounter or
|
|
CustomRoles.Swift;
|
|
|
|
public static bool IsTaskBasedCrewmate(this CustomRoles role) => role is
|
|
CustomRoles.Snitch or
|
|
CustomRoles.Divinator or
|
|
CustomRoles.Marshall or
|
|
CustomRoles.TimeManager or
|
|
CustomRoles.Ignitor or
|
|
CustomRoles.Guardian or
|
|
CustomRoles.Merchant or
|
|
CustomRoles.Mayor or
|
|
CustomRoles.Insight or
|
|
CustomRoles.Transporter;
|
|
|
|
public static bool IsNotKnightable(this CustomRoles role) => role is
|
|
CustomRoles.Mayor or
|
|
CustomRoles.Vindicator or
|
|
CustomRoles.Dictator or
|
|
CustomRoles.Knighted or
|
|
CustomRoles.Glitch or
|
|
CustomRoles.Pickpocket or
|
|
CustomRoles.TicketsStealer;
|
|
|
|
public static bool CheckAddonConflictV2(CustomRoles addon, CustomRoles mainRole) => addon.IsAdditionRole() && mainRole is not CustomRoles.GuardianAngelTOHE and not CustomRoles.God and not CustomRoles.GM && addon is not CustomRoles.Lovers && addon switch
|
|
{
|
|
CustomRoles.Autopsy when mainRole is CustomRoles.Doctor or CustomRoles.Tracefinder or CustomRoles.Scientist or CustomRoles.ScientistTOHE or CustomRoles.Sunnyboy => false,
|
|
CustomRoles.Necroview when mainRole is CustomRoles.Doctor => false,
|
|
CustomRoles.Lazy when mainRole is CustomRoles.Speedrunner => false,
|
|
CustomRoles.Mischievous when mainRole.Is(Team.Impostor) || mainRole.GetDYRole() != RoleTypes.Impostor || !mainRole.IsNK() => false,
|
|
CustomRoles.Loyal when mainRole.IsCrewmate() && !Options.CrewCanBeLoyal.GetBool() => false,
|
|
CustomRoles.DualPersonality when mainRole.IsCrewmate() && !Options.CrewCanBeDualPersonality.GetBool() => false,
|
|
CustomRoles.Lazy when mainRole is CustomRoles.Needy or CustomRoles.Snitch or CustomRoles.Marshall or CustomRoles.Transporter or CustomRoles.Guardian => false,
|
|
CustomRoles.Brakar when mainRole is CustomRoles.Dictator => false,
|
|
CustomRoles.Stressed when !mainRole.IsCrewmate() || mainRole.IsTasklessCrewmate() => false,
|
|
CustomRoles.Avanger when mainRole.IsImpostor() && !Options.ImpCanBeAvanger.GetBool() => false,
|
|
CustomRoles.Lazy when mainRole.IsNeutral() || mainRole.IsImpostor() || (mainRole.IsTasklessCrewmate() && !Options.TasklessCrewCanBeLazy.GetBool()) || (mainRole.IsTaskBasedCrewmate() && !Options.TaskBasedCrewCanBeLazy.GetBool()) => false,
|
|
CustomRoles.TicketsStealer or CustomRoles.Swift or CustomRoles.DeadlyQuota or CustomRoles.Damocles or CustomRoles.Mare when mainRole is CustomRoles.Bomber or CustomRoles.Nuker or CustomRoles.BoobyTrap or CustomRoles.Capitalism => false,
|
|
CustomRoles.TicketsStealer or CustomRoles.Mimic or CustomRoles.Swift or CustomRoles.DeadlyQuota or CustomRoles.Circumvent or CustomRoles.Damocles or CustomRoles.Mare when !mainRole.IsImpostor() => false,
|
|
CustomRoles.Torch when !mainRole.IsCrewmate() || mainRole is CustomRoles.Bewilder or CustomRoles.Sunglasses or CustomRoles.GuardianAngelTOHE => false,
|
|
CustomRoles.Bewilder when mainRole is CustomRoles.Torch or CustomRoles.GuardianAngelTOHE or CustomRoles.Sunglasses => false,
|
|
CustomRoles.Sunglasses when mainRole is CustomRoles.Torch or CustomRoles.GuardianAngelTOHE or CustomRoles.Bewilder => false,
|
|
CustomRoles.Guesser when (mainRole.IsCrewmate() && (!Options.CrewCanBeGuesser.GetBool() || mainRole is CustomRoles.NiceGuesser)) || (mainRole.IsNeutral() && !Options.NeutralCanBeGuesser.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeGuesser.GetBool()) || mainRole is CustomRoles.EvilGuesser or CustomRoles.GuardianAngelTOHE => false,
|
|
CustomRoles.Madmate when mainRole is CustomRoles.Egoist or CustomRoles.Rascal => false,
|
|
CustomRoles.Oblivious when mainRole is CustomRoles.Detective or CustomRoles.Cleaner or CustomRoles.Medusa or CustomRoles.Mortician or CustomRoles.Mediumshiper or CustomRoles.GuardianAngelTOHE => false,
|
|
CustomRoles.Youtuber when !mainRole.IsCrewmate() || mainRole is CustomRoles.Madmate or CustomRoles.Sheriff or CustomRoles.GuardianAngelTOHE => false,
|
|
CustomRoles.Egoist when !mainRole.IsImpostor() => false,
|
|
CustomRoles.Damocles when mainRole is CustomRoles.Bomber or CustomRoles.Nuker or CustomRoles.SerialKiller or CustomRoles.Cantankerous or CustomRoles.Sapper => false,
|
|
CustomRoles.Necroview when mainRole is CustomRoles.Visionary => false,
|
|
CustomRoles.Flashman when mainRole is CustomRoles.Swiftclaw => false,
|
|
CustomRoles.Mimic when mainRole is CustomRoles.Mafia => false,
|
|
CustomRoles.Rascal when !mainRole.IsCrewmate() => false,
|
|
CustomRoles.Needy when mainRole.IsAdditionRole() => false,
|
|
CustomRoles.Bloodlust when !mainRole.IsCrewmate() || mainRole.IsTaskBasedCrewmate() => false,
|
|
CustomRoles.TicketsStealer when mainRole is CustomRoles.Vindicator => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Underdog => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Inhibitor => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Saboteur => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Swift => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Mafia => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Sniper => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.FireWorks => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Swooper => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.Vampire => false,
|
|
CustomRoles.Torch when mainRole is CustomRoles.Lighter => false,
|
|
CustomRoles.Torch when mainRole is CustomRoles.Ignitor => false,
|
|
CustomRoles.Bewilder when mainRole is CustomRoles.Lighter => false,
|
|
CustomRoles.Bewilder when mainRole is CustomRoles.Ignitor => false,
|
|
CustomRoles.Sunglasses when mainRole is CustomRoles.Lighter => false,
|
|
CustomRoles.Sunglasses when mainRole is CustomRoles.Ignitor => false,
|
|
CustomRoles.Bait when mainRole is CustomRoles.Demolitionist => false,
|
|
CustomRoles.Trapper when mainRole is CustomRoles.Demolitionist => false,
|
|
CustomRoles.Lovers when mainRole is CustomRoles.Romantic => false,
|
|
CustomRoles.Mare when mainRole is CustomRoles.LastImpostor => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Mare => false,
|
|
CustomRoles.DualPersonality when (!mainRole.IsImpostor() && !mainRole.IsCrewmate()) || mainRole is CustomRoles.Madmate => false,
|
|
CustomRoles.DualPersonality when mainRole.IsImpostor() && !Options.ImpCanBeDualPersonality.GetBool() => false,
|
|
CustomRoles.Loyal when (!mainRole.IsImpostor() && !mainRole.IsCrewmate()) || mainRole is CustomRoles.Madmate => false,
|
|
CustomRoles.Loyal when mainRole.IsImpostor() && !Options.ImpCanBeLoyal.GetBool() => false,
|
|
CustomRoles.Seer when (mainRole.IsCrewmate() && (!Options.CrewCanBeSeer.GetBool() || mainRole is CustomRoles.Mortician)) || (mainRole.IsNeutral() && !Options.NeutralCanBeSeer.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeSeer.GetBool()) => false,
|
|
CustomRoles.Bait when (mainRole.IsCrewmate() && !Options.CrewCanBeBait.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeBait.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeBait.GetBool()) => false,
|
|
CustomRoles.Bewilder when (mainRole.IsCrewmate() && !Options.CrewCanBeBewilder.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeBewilder.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeBewilder.GetBool()) => false,
|
|
CustomRoles.Sunglasses when (mainRole.IsCrewmate() && !Options.CrewCanBeSunglasses.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeSunglasses.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeSunglasses.GetBool()) => false,
|
|
CustomRoles.Autopsy when (mainRole.IsCrewmate() && !Options.CrewCanBeAutopsy.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeAutopsy.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeAutopsy.GetBool()) => false,
|
|
CustomRoles.Glow when (mainRole.IsCrewmate() && !Options.CrewCanBeGlow.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeGlow.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeGlow.GetBool()) => false,
|
|
CustomRoles.Trapper when (mainRole.IsCrewmate() && !Options.CrewCanBeTrapper.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeTrapper.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeTrapper.GetBool()) => false,
|
|
CustomRoles.Sidekick when mainRole is CustomRoles.Madmate => false,
|
|
CustomRoles.Onbound when mainRole is CustomRoles.SuperStar => false,
|
|
CustomRoles.Rascal when mainRole is CustomRoles.SuperStar or CustomRoles.Madmate => false,
|
|
CustomRoles.Madmate when mainRole is CustomRoles.SuperStar => false,
|
|
CustomRoles.Gravestone when mainRole is CustomRoles.SuperStar => false,
|
|
CustomRoles.Sidekick when mainRole.IsNeutral() && !Options.NeutralCanBeSidekick.GetBool() => false,
|
|
CustomRoles.Sidekick when mainRole.IsCrewmate() && !Options.CrewmateCanBeSidekick.GetBool() => false,
|
|
CustomRoles.Sidekick when mainRole.IsImpostor() && !Options.ImpostorCanBeSidekick.GetBool() => false,
|
|
CustomRoles.Sidekick when mainRole is CustomRoles.Jackal => false,
|
|
CustomRoles.Lucky when mainRole is CustomRoles.Guardian => false,
|
|
CustomRoles.Bait when mainRole is CustomRoles.Trapper => false,
|
|
CustomRoles.Trapper when mainRole is CustomRoles.Bait => false,
|
|
CustomRoles.DualPersonality when mainRole is CustomRoles.Dictator => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Swooper => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Vampire => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Scavenger => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Puppeteer => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Warlock => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.EvilDiviner => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Witch => false,
|
|
CustomRoles.Swift when mainRole is CustomRoles.Mafia => false,
|
|
CustomRoles.Reach when mainRole is CustomRoles.Mafioso => false,
|
|
CustomRoles.Watcher when (mainRole.IsCrewmate() && !Options.CrewCanBeWatcher.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeWatcher.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeWatcher.GetBool()) => false,
|
|
CustomRoles.Diseased when (mainRole.IsCrewmate() && !Options.CrewCanBeDiseased.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeDiseased.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeDiseased.GetBool()) => false,
|
|
CustomRoles.Antidote when (mainRole.IsCrewmate() && !Options.CrewCanBeAntidote.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeAntidote.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeAntidote.GetBool()) => false,
|
|
CustomRoles.Diseased when mainRole is CustomRoles.Antidote => false,
|
|
CustomRoles.Antidote when mainRole is CustomRoles.Diseased => false,
|
|
CustomRoles.Necroview when (mainRole.IsCrewmate() && !Options.CrewCanBeNecroview.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeNecroview.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeNecroview.GetBool()) => false,
|
|
CustomRoles.Oblivious when (mainRole.IsCrewmate() && !Options.CrewCanBeOblivious.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeOblivious.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeOblivious.GetBool()) => false,
|
|
CustomRoles.Brakar when (mainRole.IsCrewmate() && !Options.CrewCanBeTiebreaker.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeTiebreaker.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeTiebreaker.GetBool()) => false,
|
|
CustomRoles.Guesser when (mainRole.IsCrewmate() && !Options.CrewCanBeGuesser.GetBool() && mainRole is CustomRoles.NiceGuesser) || (mainRole.IsNeutral() && !Options.NeutralCanBeGuesser.GetBool()) => false,
|
|
CustomRoles.Onbound when (mainRole.IsCrewmate() && !Options.CrewCanBeOnbound.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeOnbound.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeOnbound.GetBool()) => false,
|
|
CustomRoles.Unreportable when (mainRole.IsCrewmate() && !Options.CrewCanBeUnreportable.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeUnreportable.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeUnreportable.GetBool()) => false,
|
|
CustomRoles.Lucky when (mainRole.IsCrewmate() && !Options.CrewCanBeLucky.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeLucky.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeLucky.GetBool()) => false,
|
|
CustomRoles.Unlucky when (mainRole.IsCrewmate() && !Options.CrewCanBeUnlucky.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeUnlucky.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeUnlucky.GetBool()) => false,
|
|
CustomRoles.Rogue when (mainRole.IsCrewmate() && !Options.CrewCanBeRogue.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeRogue.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeRogue.GetBool()) => false,
|
|
CustomRoles.Gravestone when (mainRole.IsCrewmate() && !Options.CrewCanBeGravestone.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeGravestone.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeGravestone.GetBool()) => false,
|
|
CustomRoles.Flashman or CustomRoles.Giant when mainRole is CustomRoles.Swooper or CustomRoles.Wraith or CustomRoles.Chameleon or CustomRoles.Alchemist => false,
|
|
CustomRoles.Bait when mainRole is CustomRoles.Unreportable => false,
|
|
CustomRoles.Truant when mainRole is CustomRoles.SoulHunter => false,
|
|
CustomRoles.Nimble when !mainRole.IsCrewmate() => false,
|
|
CustomRoles.Physicist when !mainRole.IsCrewmate() => false,
|
|
CustomRoles.Unreportable when mainRole is CustomRoles.Bait => false,
|
|
CustomRoles.Oblivious when mainRole is CustomRoles.Bloodhound => false,
|
|
CustomRoles.Oblivious when mainRole is CustomRoles.Vulture => false,
|
|
CustomRoles.Vulture when mainRole is CustomRoles.Oblivious => false,
|
|
CustomRoles.Guesser when mainRole is CustomRoles.CopyCat or CustomRoles.Doomsayer => false,
|
|
CustomRoles.CopyCat when mainRole is CustomRoles.Guesser => false,
|
|
CustomRoles.DoubleShot when mainRole is CustomRoles.CopyCat => false,
|
|
CustomRoles.CopyCat when mainRole is CustomRoles.DoubleShot => false,
|
|
CustomRoles.Lucky when mainRole is CustomRoles.Luckey => false,
|
|
CustomRoles.Unlucky when mainRole is CustomRoles.Luckey => false,
|
|
CustomRoles.Unlucky when mainRole is CustomRoles.Lucky => false,
|
|
CustomRoles.Lucky when mainRole is CustomRoles.Unlucky => false,
|
|
CustomRoles.Fool when (mainRole.IsCrewmate() && !Options.CrewCanBeFool.GetBool()) || (mainRole.IsNeutral() && !Options.NeutralCanBeFool.GetBool()) || (mainRole.IsImpostor() && !Options.ImpCanBeFool.GetBool()) || mainRole is CustomRoles.SabotageMaster or CustomRoles.GuardianAngelTOHE => false,
|
|
CustomRoles.Bloodhound when mainRole is CustomRoles.Oblivious => false,
|
|
CustomRoles.DoubleShot when (mainRole.GetCustomRoleTypes() is CustomRoleTypes.Impostor && !Options.ImpCanBeDoubleShot.GetBool()) || (mainRole.GetCustomRoleTypes() is CustomRoleTypes.Crewmate && !Options.CrewCanBeDoubleShot.GetBool()) || (mainRole.GetCustomRoleTypes() is CustomRoleTypes.Neutral && !Options.NeutralCanBeDoubleShot.GetBool()) => false,
|
|
CustomRoles.DoubleShot when mainRole is not CustomRoles.EvilGuesser && mainRole is not CustomRoles.NiceGuesser && !Options.GuesserMode.GetBool() => false,
|
|
CustomRoles.DoubleShot when Options.ImpCanBeDoubleShot.GetBool() && mainRole is not CustomRoles.Guesser && mainRole is not CustomRoles.EvilGuesser && mainRole.GetCustomRoleTypes() is CustomRoleTypes.Impostor && !Options.ImpostorsCanGuess.GetBool() => false,
|
|
CustomRoles.DoubleShot when Options.CrewCanBeDoubleShot.GetBool() && mainRole is not CustomRoles.Guesser && mainRole is not CustomRoles.NiceGuesser && mainRole.GetCustomRoleTypes() is CustomRoleTypes.Crewmate && !Options.CrewmatesCanGuess.GetBool() => false,
|
|
CustomRoles.DoubleShot when Options.NeutralCanBeDoubleShot.GetBool() && mainRole is not CustomRoles.Guesser && ((mainRole.IsNonNK() && !Options.PassiveNeutralsCanGuess.GetBool()) || (mainRole.IsNK() && !Options.NeutralKillersCanGuess.GetBool())) => false,
|
|
_ => true
|
|
};
|
|
|
|
public static bool CheckAddonConflict(CustomRoles role, PlayerControl pc) => role.IsAdditionRole() && pc.GetCustomRole() is not CustomRoles.GuardianAngelTOHE and not CustomRoles.God && !pc.Is(CustomRoles.Madmate) && !pc.Is(CustomRoles.Egoist) && !pc.Is(CustomRoles.GM) && role is not CustomRoles.Lovers && !pc.Is(CustomRoles.Needy) && (!pc.HasSubRole() || pc.GetCustomSubRoles().Count < Options.NoLimitAddonsNumMax.GetInt()) && role switch
|
|
{
|
|
CustomRoles.Sidekick when pc.Is(CustomRoles.Madmate) => false,
|
|
CustomRoles.Madmate when pc.Is(CustomRoles.Sidekick) => false,
|
|
CustomRoles.Egoist when pc.Is(CustomRoles.Sidekick) => false,
|
|
CustomRoles.Autopsy when pc.Is(CustomRoles.Doctor) || pc.Is(CustomRoles.Tracefinder) || pc.Is(CustomRoles.Scientist) || pc.Is(CustomRoles.ScientistTOHE) || pc.Is(CustomRoles.Sunnyboy) => false,
|
|
CustomRoles.Necroview when pc.Is(CustomRoles.Doctor) => false,
|
|
CustomRoles.Lazy when pc.Is(CustomRoles.Speedrunner) => false,
|
|
CustomRoles.Mischievous when pc.Is(Team.Impostor) || pc.GetCustomRole().GetDYRole() != RoleTypes.Impostor || !pc.IsNeutralKiller() => false,
|
|
CustomRoles.Loyal when pc.IsCrewmate() && !Options.CrewCanBeLoyal.GetBool() => false,
|
|
CustomRoles.DualPersonality when pc.IsCrewmate() && !Options.CrewCanBeDualPersonality.GetBool() => false,
|
|
CustomRoles.Lazy when pc.Is(CustomRoles.Needy) || pc.Is(CustomRoles.Snitch) || pc.Is(CustomRoles.Marshall) || pc.Is(CustomRoles.Transporter) || pc.Is(CustomRoles.Guardian) => false,
|
|
CustomRoles.Brakar when pc.Is(CustomRoles.Dictator) => false,
|
|
CustomRoles.Stressed when !pc.IsCrewmate() || pc.GetCustomRole().IsTasklessCrewmate() => false,
|
|
CustomRoles.Avanger when pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeAvanger.GetBool() => false,
|
|
CustomRoles.Lazy when pc.GetCustomRole().IsNeutral() || pc.GetCustomRole().IsImpostor() || (pc.GetCustomRole().IsTasklessCrewmate() && !Options.TasklessCrewCanBeLazy.GetBool()) || (pc.GetCustomRole().IsTaskBasedCrewmate() && !Options.TaskBasedCrewCanBeLazy.GetBool()) => false,
|
|
CustomRoles.TicketsStealer or CustomRoles.Swift or CustomRoles.DeadlyQuota or CustomRoles.Damocles or CustomRoles.Mare when pc.Is(CustomRoles.Bomber) || pc.Is(CustomRoles.Nuker) || pc.Is(CustomRoles.BoobyTrap) || pc.Is(CustomRoles.Capitalism) => false,
|
|
CustomRoles.TicketsStealer or CustomRoles.Mimic or CustomRoles.Swift or CustomRoles.DeadlyQuota or CustomRoles.Circumvent or CustomRoles.Damocles or CustomRoles.Mare when !pc.GetCustomRole().IsImpostor() => false,
|
|
CustomRoles.Torch when !pc.IsCrewmate() || pc.Is(CustomRoles.Bewilder) || pc.Is(CustomRoles.Sunglasses) || pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Bewilder when pc.Is(CustomRoles.Torch) || pc.Is(CustomRoles.GuardianAngelTOHE) || pc.Is(CustomRoles.Sunglasses) => false,
|
|
CustomRoles.Sunglasses when pc.Is(CustomRoles.Torch) || pc.Is(CustomRoles.GuardianAngelTOHE) || pc.Is(CustomRoles.Bewilder) => false,
|
|
CustomRoles.Guesser when (pc.IsCrewmate() && (!Options.CrewCanBeGuesser.GetBool() || pc.Is(CustomRoles.NiceGuesser))) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeGuesser.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeGuesser.GetBool()) || pc.Is(CustomRoles.EvilGuesser) || pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Madmate when !pc.CanBeMadmate() || pc.Is(CustomRoles.Egoist) || pc.Is(CustomRoles.Rascal) => false,
|
|
CustomRoles.Oblivious when pc.Is(CustomRoles.Detective) || pc.Is(CustomRoles.Cleaner) || pc.Is(CustomRoles.Medusa) || pc.Is(CustomRoles.Mortician) || pc.Is(CustomRoles.Mediumshiper) || pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Youtuber when !pc.IsCrewmate() || pc.Is(CustomRoles.Madmate) || pc.Is(CustomRoles.Sheriff) || pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Egoist when !pc.GetCustomRole().IsImpostor() => false,
|
|
CustomRoles.Damocles when pc.GetCustomRole() is CustomRoles.Bomber or CustomRoles.Nuker or CustomRoles.SerialKiller or CustomRoles.Cantankerous => false,
|
|
CustomRoles.Damocles when !pc.CanUseKillButton() => false,
|
|
CustomRoles.Flashman when pc.Is(CustomRoles.Swiftclaw) => false,
|
|
CustomRoles.Necroview when pc.Is(CustomRoles.Visionary) => false,
|
|
CustomRoles.Mimic when pc.Is(CustomRoles.Mafia) => false,
|
|
CustomRoles.Rascal when !pc.IsCrewmate() => false,
|
|
CustomRoles.Needy when pc.GetCustomRole().IsAdditionRole() => false,
|
|
CustomRoles.TicketsStealer when pc.Is(CustomRoles.Vindicator) => false,
|
|
CustomRoles.Bloodlust when !pc.GetCustomRole().IsCrewmate() || pc.GetCustomRole().IsTaskBasedCrewmate() => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Underdog) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Inhibitor) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Saboteur) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Swift) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Mafia) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Sniper) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.FireWorks) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Swooper) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.Vampire) => false,
|
|
CustomRoles.Torch when pc.Is(CustomRoles.Lighter) => false,
|
|
CustomRoles.Torch when pc.Is(CustomRoles.Ignitor) => false,
|
|
CustomRoles.Bewilder when pc.Is(CustomRoles.Lighter) => false,
|
|
CustomRoles.Bewilder when pc.Is(CustomRoles.Ignitor) => false,
|
|
CustomRoles.Sunglasses when pc.Is(CustomRoles.Lighter) => false,
|
|
CustomRoles.Sunglasses when pc.Is(CustomRoles.Ignitor) => false,
|
|
CustomRoles.Bait when pc.Is(CustomRoles.Demolitionist) => false,
|
|
CustomRoles.Trapper when pc.Is(CustomRoles.Demolitionist) => false,
|
|
CustomRoles.Lovers when pc.Is(CustomRoles.Romantic) => false,
|
|
CustomRoles.Mare when pc.Is(CustomRoles.LastImpostor) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Mare) => false,
|
|
CustomRoles.DualPersonality when (!pc.GetCustomRole().IsImpostor() && !pc.IsCrewmate()) || pc.Is(CustomRoles.Madmate) => false,
|
|
CustomRoles.DualPersonality when pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeDualPersonality.GetBool() => false,
|
|
CustomRoles.Loyal when (!pc.GetCustomRole().IsImpostor() && !pc.IsCrewmate()) || pc.Is(CustomRoles.Madmate) => false,
|
|
CustomRoles.Loyal when pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeLoyal.GetBool() => false,
|
|
CustomRoles.Seer when (pc.IsCrewmate() && (!Options.CrewCanBeSeer.GetBool() || pc.Is(CustomRoles.Mortician))) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeSeer.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeSeer.GetBool()) || pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Bait when (pc.IsCrewmate() && !Options.CrewCanBeBait.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeBait.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeBait.GetBool()) => false,
|
|
CustomRoles.Bewilder when (pc.IsCrewmate() && !Options.CrewCanBeBewilder.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeBewilder.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeBewilder.GetBool()) => false,
|
|
CustomRoles.Sunglasses when (pc.IsCrewmate() && !Options.CrewCanBeSunglasses.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeSunglasses.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeSunglasses.GetBool()) => false,
|
|
CustomRoles.Autopsy when (pc.IsCrewmate() && !Options.CrewCanBeAutopsy.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeAutopsy.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeAutopsy.GetBool()) => false,
|
|
CustomRoles.Glow when (pc.IsCrewmate() && !Options.CrewCanBeGlow.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeGlow.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeGlow.GetBool()) => false,
|
|
CustomRoles.Trapper when (pc.IsCrewmate() && !Options.CrewCanBeTrapper.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeTrapper.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeTrapper.GetBool()) => false,
|
|
CustomRoles.Sidekick when pc.Is(CustomRoles.Madmate) => false,
|
|
CustomRoles.Onbound when pc.Is(CustomRoles.SuperStar) => false,
|
|
CustomRoles.Rascal when pc.Is(CustomRoles.SuperStar) || pc.Is(CustomRoles.Madmate) => false,
|
|
CustomRoles.Madmate when pc.Is(CustomRoles.SuperStar) => false,
|
|
CustomRoles.Gravestone when pc.Is(CustomRoles.SuperStar) => false,
|
|
CustomRoles.Sidekick when pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeSidekick.GetBool() => false,
|
|
CustomRoles.Sidekick when pc.IsCrewmate() && !Options.CrewmateCanBeSidekick.GetBool() => false,
|
|
CustomRoles.Sidekick when pc.GetCustomRole().IsImpostor() && !Options.ImpostorCanBeSidekick.GetBool() => false,
|
|
CustomRoles.Sidekick when pc.Is(CustomRoles.Jackal) => false,
|
|
CustomRoles.Lucky when pc.Is(CustomRoles.Guardian) => false,
|
|
CustomRoles.Bait when pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Bait when pc.Is(CustomRoles.Trapper) => false,
|
|
CustomRoles.Trapper when pc.Is(CustomRoles.Bait) => false,
|
|
CustomRoles.DualPersonality when pc.Is(CustomRoles.Dictator) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Swooper) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Vampire) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Scavenger) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Puppeteer) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Warlock) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.EvilDiviner) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Witch) => false,
|
|
CustomRoles.Swift when pc.Is(CustomRoles.Mafia) => false,
|
|
CustomRoles.Reach when pc.Is(CustomRoles.Mafioso) => false,
|
|
CustomRoles.Trapper when pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Reach when !pc.CanUseKillButton() => false,
|
|
CustomRoles.Magnet when !pc.CanUseKillButton() => false,
|
|
CustomRoles.Haste when !pc.CanUseKillButton() => false,
|
|
CustomRoles.Watcher when (pc.IsCrewmate() && !Options.CrewCanBeWatcher.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeWatcher.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeWatcher.GetBool()) => false,
|
|
CustomRoles.Diseased when (pc.IsCrewmate() && !Options.CrewCanBeDiseased.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeDiseased.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeDiseased.GetBool()) => false,
|
|
CustomRoles.Antidote when (pc.IsCrewmate() && !Options.CrewCanBeAntidote.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeAntidote.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeAntidote.GetBool()) => false,
|
|
CustomRoles.Diseased when pc.Is(CustomRoles.Antidote) => false,
|
|
CustomRoles.Antidote when pc.Is(CustomRoles.Diseased) => false,
|
|
CustomRoles.Necroview when (pc.IsCrewmate() && !Options.CrewCanBeNecroview.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeNecroview.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeNecroview.GetBool()) => false,
|
|
CustomRoles.Oblivious when (pc.IsCrewmate() && !Options.CrewCanBeOblivious.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeOblivious.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeOblivious.GetBool()) => false,
|
|
CustomRoles.Brakar when (pc.IsCrewmate() && !Options.CrewCanBeTiebreaker.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeTiebreaker.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeTiebreaker.GetBool()) => false,
|
|
CustomRoles.Guesser when (pc.IsCrewmate() && !Options.CrewCanBeGuesser.GetBool() && pc.Is(CustomRoles.NiceGuesser)) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeGuesser.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeGuesser.GetBool() && pc.Is(CustomRoles.EvilGuesser)) => false,
|
|
CustomRoles.Onbound when (pc.IsCrewmate() && !Options.CrewCanBeOnbound.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeOnbound.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeOnbound.GetBool()) => false,
|
|
CustomRoles.Unreportable when (pc.IsCrewmate() && !Options.CrewCanBeUnreportable.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeUnreportable.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeUnreportable.GetBool()) => false,
|
|
CustomRoles.Lucky when (pc.IsCrewmate() && !Options.CrewCanBeLucky.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeLucky.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeLucky.GetBool()) => false,
|
|
CustomRoles.Unlucky when (pc.IsCrewmate() && !Options.CrewCanBeUnlucky.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeUnlucky.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeUnlucky.GetBool()) => false,
|
|
CustomRoles.Rogue when (pc.IsCrewmate() && !Options.CrewCanBeRogue.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeRogue.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeRogue.GetBool()) => false,
|
|
CustomRoles.Gravestone when (pc.IsCrewmate() && !Options.CrewCanBeGravestone.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeGravestone.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeGravestone.GetBool()) => false,
|
|
CustomRoles.Flashman or CustomRoles.Giant when pc.GetCustomRole() is CustomRoles.Swooper or CustomRoles.Wraith or CustomRoles.Chameleon or CustomRoles.Alchemist => false,
|
|
CustomRoles.Bait when pc.Is(CustomRoles.Unreportable) => false,
|
|
CustomRoles.Busy when !pc.GetTaskState().hasTasks => false,
|
|
CustomRoles.Truant when pc.Is(CustomRoles.SoulHunter) => false,
|
|
CustomRoles.Nimble when !pc.IsCrewmate() => false,
|
|
CustomRoles.Physicist when !pc.IsCrewmate() => false,
|
|
CustomRoles.Unreportable when pc.Is(CustomRoles.Bait) => false,
|
|
CustomRoles.Oblivious when pc.Is(CustomRoles.Bloodhound) => false,
|
|
CustomRoles.Oblivious when pc.Is(CustomRoles.Vulture) => false,
|
|
CustomRoles.Vulture when pc.Is(CustomRoles.Oblivious) => false,
|
|
CustomRoles.Guesser when pc.Is(CustomRoles.CopyCat) || pc.Is(CustomRoles.Doomsayer) => false,
|
|
CustomRoles.CopyCat when pc.Is(CustomRoles.Guesser) => false,
|
|
CustomRoles.DoubleShot when pc.Is(CustomRoles.CopyCat) => false,
|
|
CustomRoles.CopyCat when pc.Is(CustomRoles.DoubleShot) => false,
|
|
CustomRoles.Brakar when pc.Is(CustomRoles.Dictator) => false,
|
|
CustomRoles.Lucky when pc.Is(CustomRoles.Luckey) => false,
|
|
CustomRoles.Unlucky when pc.Is(CustomRoles.Luckey) => false,
|
|
CustomRoles.Unlucky when pc.Is(CustomRoles.Lucky) => false,
|
|
CustomRoles.Lucky when pc.Is(CustomRoles.Unlucky) => false,
|
|
CustomRoles.Fool when (pc.IsCrewmate() && !Options.CrewCanBeFool.GetBool()) || (pc.GetCustomRole().IsNeutral() && !Options.NeutralCanBeFool.GetBool()) || (pc.GetCustomRole().IsImpostor() && !Options.ImpCanBeFool.GetBool()) || pc.Is(CustomRoles.SabotageMaster) || pc.Is(CustomRoles.GuardianAngelTOHE) => false,
|
|
CustomRoles.Bloodhound when pc.Is(CustomRoles.Oblivious) => false,
|
|
CustomRoles.DoubleShot when (pc.Is(CustomRoleTypes.Impostor) && !Options.ImpCanBeDoubleShot.GetBool()) || (pc.Is(CustomRoleTypes.Crewmate) && !Options.CrewCanBeDoubleShot.GetBool()) || (pc.Is(CustomRoleTypes.Neutral) && !Options.NeutralCanBeDoubleShot.GetBool()) => false,
|
|
CustomRoles.DoubleShot when !pc.Is(CustomRoles.EvilGuesser) && !pc.Is(CustomRoles.NiceGuesser) && !Options.GuesserMode.GetBool() => false,
|
|
CustomRoles.DoubleShot when Options.ImpCanBeDoubleShot.GetBool() && !pc.Is(CustomRoles.Guesser) && !pc.Is(CustomRoles.EvilGuesser) && pc.Is(CustomRoleTypes.Impostor) && !Options.ImpostorsCanGuess.GetBool() => false,
|
|
CustomRoles.DoubleShot when Options.CrewCanBeDoubleShot.GetBool() && !pc.Is(CustomRoles.Guesser) && !pc.Is(CustomRoles.NiceGuesser) && pc.Is(CustomRoleTypes.Crewmate) && !Options.CrewmatesCanGuess.GetBool() => false,
|
|
CustomRoles.DoubleShot when Options.NeutralCanBeDoubleShot.GetBool() && !pc.Is(CustomRoles.Guesser) && ((pc.GetCustomRole().IsNonNK() && !Options.PassiveNeutralsCanGuess.GetBool()) || (pc.IsNeutralKiller() && !Options.NeutralKillersCanGuess.GetBool())) => false,
|
|
_ => true
|
|
};
|
|
|
|
public static Team GetTeam(this CustomRoles role)
|
|
{
|
|
if (role.IsImpostorTeamV3()) return Team.Impostor;
|
|
if (role.IsNeutralTeamV2()) return Team.Neutral;
|
|
return role.IsCrewmateTeamV2() ? Team.Crewmate : Team.None;
|
|
}
|
|
|
|
public static bool Is(this CustomRoles role, Team team) => team switch
|
|
{
|
|
Team.Impostor => role.IsImpostorTeamV3(),
|
|
Team.Neutral => role.IsNeutralTeamV2(),
|
|
Team.Crewmate => role.IsCrewmateTeamV2(),
|
|
Team.None => role.GetCountTypes() is CountTypes.OutOfGame or CountTypes.None || role == CustomRoles.GM,
|
|
_ => false,
|
|
};
|
|
|
|
public static RoleTypes GetRoleTypes(this CustomRoles role)
|
|
{
|
|
if (role.GetDYRole() == RoleTypes.Impostor) return RoleTypes.Impostor;
|
|
return role.GetVNRole() switch
|
|
{
|
|
CustomRoles.Impostor => RoleTypes.Impostor,
|
|
CustomRoles.Scientist => RoleTypes.Scientist,
|
|
CustomRoles.Engineer => RoleTypes.Engineer,
|
|
CustomRoles.GuardianAngel => RoleTypes.GuardianAngel,
|
|
CustomRoles.Shapeshifter => RoleTypes.Shapeshifter,
|
|
CustomRoles.Crewmate => RoleTypes.Crewmate,
|
|
_ => role.IsImpostor() ? RoleTypes.Impostor : RoleTypes.Crewmate,
|
|
};
|
|
}
|
|
|
|
public static bool IsDesyncRole(this CustomRoles role) => role.GetDYRole() != RoleTypes.GuardianAngel;
|
|
public static bool IsImpostorTeam(this CustomRoles role) => role.IsImpostor() || role == CustomRoles.Madmate;
|
|
public static bool IsCrewmate(this CustomRoles role) => !role.IsImpostor() && !role.IsNeutral() && !role.IsMadmate();
|
|
|
|
public static bool IsImpostorTeamV2(this CustomRoles role) => (role.IsImpostorTeam() && role != CustomRoles.Trickster && !role.IsConverted()) || role == CustomRoles.Rascal;
|
|
public static bool IsNeutralTeamV2(this CustomRoles role) => role.IsConverted() || (role.IsNeutral() && role != CustomRoles.Madmate);
|
|
public static bool IsCrewmateTeamV2(this CustomRoles role) => (!role.IsImpostorTeamV2() && !role.IsNeutralTeamV2()) || (role == CustomRoles.Trickster && !role.IsConverted());
|
|
|
|
public static bool IsConverted(this CustomRoles role) => ((role is CustomRoles.Egoist) && (ParityCop.ParityCheckEgoistInt() == 1)) || role is
|
|
CustomRoles.Charmed or
|
|
CustomRoles.Recruit or
|
|
CustomRoles.Contagious or
|
|
CustomRoles.Sidekick or
|
|
CustomRoles.Undead or
|
|
CustomRoles.Lovers;
|
|
|
|
public static bool IsRevealingRole(this CustomRoles role, PlayerControl target) =>
|
|
((role is CustomRoles.Mayor) && Options.MayorRevealWhenDoneTasks.GetBool() && target.AllTasksCompleted()) ||
|
|
((role is CustomRoles.SuperStar) && Options.EveryOneKnowSuperStar.GetBool()) ||
|
|
((role is CustomRoles.Marshall) && target.AllTasksCompleted()) ||
|
|
((role is CustomRoles.Workaholic) && Options.WorkaholicVisibleToEveryone.GetBool()) ||
|
|
((role is CustomRoles.Doctor) && Options.DoctorVisibleToEveryone.GetBool()) ||
|
|
((role is CustomRoles.Bait) && Options.BaitNotification.GetBool() && ParityCop.ParityCheckBaitCountType.GetBool());
|
|
|
|
public static bool IsImpostorTeamV3(this CustomRoles role) => role.IsImpostor() || role.IsMadmate();
|
|
|
|
public static bool IsVanilla(this CustomRoles role) => role is
|
|
CustomRoles.Crewmate or
|
|
CustomRoles.Engineer or
|
|
CustomRoles.Scientist or
|
|
CustomRoles.GuardianAngel or
|
|
CustomRoles.Impostor or
|
|
CustomRoles.Shapeshifter;
|
|
|
|
public static CustomRoleTypes GetCustomRoleTypes(this CustomRoles role)
|
|
{
|
|
CustomRoleTypes type = CustomRoleTypes.Crewmate;
|
|
if (role.IsImpostor()) type = CustomRoleTypes.Impostor;
|
|
if (role.IsNeutral()) type = CustomRoleTypes.Neutral;
|
|
if (role.IsAdditionRole()) type = CustomRoleTypes.Addon;
|
|
return type;
|
|
}
|
|
|
|
public static bool RoleExist(this CustomRoles role, bool countDead = false) => Main.AllPlayerControls.Any(x => x.Is(role) && (countDead || x.IsAlive()));
|
|
|
|
public static int GetCount(this CustomRoles role)
|
|
{
|
|
if (role.IsVanilla())
|
|
{
|
|
if (Options.DisableVanillaRoles.GetBool()) return 0;
|
|
var roleOpt = Main.NormalOptions.RoleOptions;
|
|
return role switch
|
|
{
|
|
CustomRoles.Engineer => roleOpt.GetNumPerGame(RoleTypes.Engineer),
|
|
CustomRoles.Scientist => roleOpt.GetNumPerGame(RoleTypes.Scientist),
|
|
CustomRoles.Shapeshifter => roleOpt.GetNumPerGame(RoleTypes.Shapeshifter),
|
|
CustomRoles.GuardianAngel => roleOpt.GetNumPerGame(RoleTypes.GuardianAngel),
|
|
CustomRoles.Crewmate => roleOpt.GetNumPerGame(RoleTypes.Crewmate),
|
|
_ => 0
|
|
};
|
|
}
|
|
|
|
return Options.GetRoleCount(role);
|
|
}
|
|
|
|
public static int GetMode(this CustomRoles role) => Options.GetRoleSpawnMode(role);
|
|
|
|
public static float GetChance(this CustomRoles role)
|
|
{
|
|
if (role.IsVanilla())
|
|
{
|
|
var roleOpt = Main.NormalOptions.RoleOptions;
|
|
return role switch
|
|
{
|
|
CustomRoles.Engineer => roleOpt.GetChancePerGame(RoleTypes.Engineer),
|
|
CustomRoles.Scientist => roleOpt.GetChancePerGame(RoleTypes.Scientist),
|
|
CustomRoles.Shapeshifter => roleOpt.GetChancePerGame(RoleTypes.Shapeshifter),
|
|
CustomRoles.GuardianAngel => roleOpt.GetChancePerGame(RoleTypes.GuardianAngel),
|
|
CustomRoles.Crewmate => roleOpt.GetChancePerGame(RoleTypes.Crewmate),
|
|
_ => 0
|
|
} / 100f;
|
|
}
|
|
|
|
return Options.GetRoleChance(role);
|
|
}
|
|
|
|
public static bool IsEnable(this CustomRoles role) => role.GetCount() > 0;
|
|
|
|
public static CountTypes GetCountTypes(this CustomRoles role)
|
|
=> role switch
|
|
{
|
|
CustomRoles.GM => CountTypes.OutOfGame,
|
|
CustomRoles.Bloodlust => CountTypes.Bloodlust,
|
|
CustomRoles.Jackal => CountTypes.Jackal,
|
|
CustomRoles.Sidekick => CountTypes.Jackal,
|
|
CustomRoles.Poisoner => CountTypes.Poisoner,
|
|
CustomRoles.Doppelganger => CountTypes.Doppelganger,
|
|
CustomRoles.Pelican => CountTypes.Pelican,
|
|
CustomRoles.Gamer => CountTypes.Gamer,
|
|
CustomRoles.BloodKnight => CountTypes.BloodKnight,
|
|
CustomRoles.Bandit => CountTypes.Bandit,
|
|
CustomRoles.Succubus => CountTypes.Succubus,
|
|
CustomRoles.Necromancer => CountTypes.Necromancer,
|
|
CustomRoles.Deathknight => CountTypes.Necromancer,
|
|
CustomRoles.HexMaster => CountTypes.HexMaster,
|
|
CustomRoles.Wraith => CountTypes.Wraith,
|
|
CustomRoles.Pestilence => CountTypes.Pestilence,
|
|
CustomRoles.PlagueBearer => CountTypes.PlagueBearer,
|
|
CustomRoles.Parasite => CountTypes.Impostor,
|
|
CustomRoles.NSerialKiller => CountTypes.NSerialKiller,
|
|
CustomRoles.Tiger => CountTypes.Tiger,
|
|
CustomRoles.Enderman => CountTypes.Enderman,
|
|
CustomRoles.Mycologist => CountTypes.Mycologist,
|
|
CustomRoles.Bubble => CountTypes.Bubble,
|
|
CustomRoles.Hookshot => CountTypes.Hookshot,
|
|
CustomRoles.Sprayer => CountTypes.Sprayer,
|
|
CustomRoles.PlagueDoctor => CountTypes.PlagueDoctor,
|
|
CustomRoles.Magician => CountTypes.Magician,
|
|
CustomRoles.WeaponMaster => CountTypes.WeaponMaster,
|
|
CustomRoles.Reckless => CountTypes.Reckless,
|
|
CustomRoles.Eclipse => CountTypes.Eclipse,
|
|
CustomRoles.Pyromaniac => CountTypes.Pyromaniac,
|
|
CustomRoles.Vengeance => CountTypes.Vengeance,
|
|
CustomRoles.HeadHunter => CountTypes.HeadHunter,
|
|
CustomRoles.Imitator => CountTypes.Imitator,
|
|
CustomRoles.Werewolf => CountTypes.Werewolf,
|
|
CustomRoles.Juggernaut => CountTypes.Juggernaut,
|
|
CustomRoles.Jinx => CountTypes.Jinx,
|
|
CustomRoles.Agitater => CountTypes.Agitater,
|
|
CustomRoles.Crewpostor => CountTypes.Impostor,
|
|
CustomRoles.Virus => CountTypes.Virus,
|
|
CustomRoles.Ritualist => CountTypes.Ritualist,
|
|
CustomRoles.Pickpocket => CountTypes.Pickpocket,
|
|
CustomRoles.Traitor => CountTypes.Traitor,
|
|
CustomRoles.RuthlessRomantic => CountTypes.RuthlessRomantic,
|
|
CustomRoles.Medusa => CountTypes.Medusa,
|
|
CustomRoles.Refugee => CountTypes.Impostor,
|
|
CustomRoles.Glitch => CountTypes.Glitch,
|
|
CustomRoles.Spiritcaller => CountTypes.Spiritcaller,
|
|
CustomRoles.DarkHide => DarkHide.SnatchesWin.GetBool() ? CountTypes.Crew : CountTypes.DarkHide,
|
|
CustomRoles.Arsonist => !Options.ArsonistCanIgniteAnytime.GetBool() ? CountTypes.Crew : CountTypes.Arsonist,
|
|
|
|
_ => role.Is(Team.Impostor) ? CountTypes.Impostor : CountTypes.Crew
|
|
};
|
|
|
|
public static RoleOptionType GetRoleOptionType(this CustomRoles role)
|
|
{
|
|
if (role.IsImpostor()) return RoleOptionType.Impostor;
|
|
if (role.IsCrewmate()) return role.GetDYRole(load: true) == RoleTypes.Impostor ? RoleOptionType.Crewmate_ImpostorBased : RoleOptionType.Crewmate_Normal;
|
|
if (role.IsNeutral()) return role.IsNK() ? RoleOptionType.Neutral_Killing : RoleOptionType.Neutral_NonKilling;
|
|
return RoleOptionType.Crewmate_Normal;
|
|
}
|
|
|
|
public static Color GetRoleOptionTypeColor(this RoleOptionType type) => type switch
|
|
{
|
|
RoleOptionType.Impostor => Palette.ImpostorRed,
|
|
RoleOptionType.Crewmate_Normal => Palette.CrewmateBlue,
|
|
RoleOptionType.Crewmate_ImpostorBased => Utils.GetRoleColor(CustomRoles.Sheriff),
|
|
RoleOptionType.Neutral_NonKilling => Utils.GetRoleColor(CustomRoles.Sprayer),
|
|
RoleOptionType.Neutral_Killing => Utils.GetRoleColor(CustomRoles.Traitor),
|
|
_ => Utils.GetRoleColor(CustomRoles.SwordsMan)
|
|
};
|
|
|
|
public static TabGroup GetTabFromOptionType(this RoleOptionType type) => type switch
|
|
{
|
|
RoleOptionType.Impostor => TabGroup.ImpostorRoles,
|
|
RoleOptionType.Crewmate_Normal => TabGroup.CrewmateRoles,
|
|
RoleOptionType.Crewmate_ImpostorBased => TabGroup.CrewmateRoles,
|
|
RoleOptionType.Neutral_NonKilling => TabGroup.NeutralRoles,
|
|
RoleOptionType.Neutral_Killing => TabGroup.NeutralRoles,
|
|
_ => TabGroup.OtherRoles
|
|
};
|
|
|
|
public static SimpleRoleOptionType GetSimpleRoleOptionType(this RoleOptionType type) => type switch
|
|
{
|
|
RoleOptionType.Impostor => SimpleRoleOptionType.Impostor,
|
|
RoleOptionType.Crewmate_Normal => SimpleRoleOptionType.Crewmate,
|
|
RoleOptionType.Crewmate_ImpostorBased => SimpleRoleOptionType.Crewmate,
|
|
RoleOptionType.Neutral_NonKilling => SimpleRoleOptionType.NNK,
|
|
RoleOptionType.Neutral_Killing => SimpleRoleOptionType.NK,
|
|
_ => SimpleRoleOptionType.Crewmate
|
|
};
|
|
|
|
public static SimpleRoleOptionType GetSimpleRoleOptionType(this CustomRoles role)
|
|
{
|
|
if (role.IsImpostor()) return SimpleRoleOptionType.Impostor;
|
|
if (role.IsCrewmate()) return SimpleRoleOptionType.Crewmate;
|
|
if (role.IsNeutral()) return role.IsNK() ? SimpleRoleOptionType.NK : SimpleRoleOptionType.NNK;
|
|
return SimpleRoleOptionType.Crewmate;
|
|
}
|
|
|
|
public static Color GetAddonTypeColor(this AddonTypes type) => type switch
|
|
{
|
|
AddonTypes.ImpOnly => Palette.ImpostorRed,
|
|
AddonTypes.Helpful => Palette.CrewmateBlue,
|
|
AddonTypes.Harmful => Utils.GetRoleColor(CustomRoles.Sprayer),
|
|
AddonTypes.Mixed => Utils.GetRoleColor(CustomRoles.TaskManager),
|
|
_ => Palette.CrewmateBlue
|
|
};
|
|
}
|
|
|
|
public enum RoleOptionType
|
|
{
|
|
Impostor,
|
|
Crewmate_Normal,
|
|
Crewmate_ImpostorBased,
|
|
Neutral_NonKilling,
|
|
Neutral_Killing
|
|
}
|
|
|
|
public enum SimpleRoleOptionType
|
|
{
|
|
Crewmate,
|
|
Impostor,
|
|
NK,
|
|
NNK
|
|
}
|
|
|
|
public enum AddonTypes
|
|
{
|
|
ImpOnly,
|
|
Helpful,
|
|
Harmful,
|
|
Mixed
|
|
}
|
|
|
|
public enum CustomRoleTypes
|
|
{
|
|
Crewmate,
|
|
Impostor,
|
|
Neutral,
|
|
Addon
|
|
}
|
|
|
|
public enum CountTypes
|
|
{
|
|
OutOfGame,
|
|
None,
|
|
Crew,
|
|
Impostor,
|
|
Bloodlust,
|
|
Jackal,
|
|
Doppelganger,
|
|
Pelican,
|
|
Gamer,
|
|
BloodKnight,
|
|
Poisoner,
|
|
Succubus,
|
|
Necromancer,
|
|
HexMaster,
|
|
Wraith,
|
|
NSerialKiller,
|
|
Tiger,
|
|
Enderman,
|
|
Mycologist,
|
|
Bubble,
|
|
Hookshot,
|
|
Sprayer,
|
|
PlagueDoctor,
|
|
Magician,
|
|
WeaponMaster,
|
|
Reckless,
|
|
Pyromaniac,
|
|
Eclipse,
|
|
Vengeance,
|
|
HeadHunter,
|
|
Imitator,
|
|
Werewolf,
|
|
Juggernaut,
|
|
Agitater,
|
|
Virus,
|
|
Rogue,
|
|
DarkHide,
|
|
Jinx,
|
|
Ritualist,
|
|
Pickpocket,
|
|
Traitor,
|
|
Medusa,
|
|
Bandit,
|
|
Spiritcaller,
|
|
RuthlessRomantic,
|
|
Pestilence,
|
|
PlagueBearer,
|
|
Glitch,
|
|
Arsonist
|
|
} |