Files
EndlessHostRoles/Modules/OptionHolder.cs
T

3803 lines
215 KiB
C#

using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TOHE.Modules;
using TOHE.Roles.AddOns.Crewmate;
using TOHE.Roles.AddOns.Impostor;
using TOHE.Roles.Crewmate;
using TOHE.Roles.Impostor;
using TOHE.Roles.Neutral;
using UnityEngine;
namespace TOHE;
[Flags]
public enum CustomGameMode
{
Standard = 0x01,
SoloKombat = 0x02,
FFA = 0x03,
MoveAndStop = 0x04,
All = int.MaxValue
}
[HarmonyPatch]
public static class Options
{
static Task taskOptionsLoad;
[HarmonyPatch(typeof(TranslationController), nameof(TranslationController.Initialize)), HarmonyPostfix]
public static void OptionsLoadStart()
{
Logger.Info("Options.Load Start", "Options");
taskOptionsLoad = Task.Run(Load);
taskOptionsLoad.ContinueWith(t => { Logger.Info("Options.Load End", "Load Options"); });
}
[HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start)), HarmonyPostfix]
public static void WaitOptionsLoad()
{
return;
//taskOptionsLoad.Wait();
//Logger.Info("Options.Load End", "Options");
}
// プリセット
private static readonly string[] presets =
[
Main.Preset1.Value,
Main.Preset2.Value,
Main.Preset3.Value,
Main.Preset4.Value,
Main.Preset5.Value
];
// ゲームモード
public static OptionItem GameMode;
public static CustomGameMode CurrentGameMode
=> GameMode.GetInt() switch
{
1 => CustomGameMode.SoloKombat,
2 => CustomGameMode.FFA,
3 => CustomGameMode.MoveAndStop,
_ => CustomGameMode.Standard
};
public static readonly string[] gameModes =
[
"Standard",
"SoloKombat",
"FFA",
"MoveAndStop"
];
// 役職数・確率
public static Dictionary<CustomRoles, int> roleCounts;
public static Dictionary<CustomRoles, float> roleSpawnChances;
public static Dictionary<CustomRoles, OptionItem> CustomRoleCounts;
public static Dictionary<CustomRoles, StringOptionItem> CustomRoleSpawnChances;
public static Dictionary<CustomRoles, IntegerOptionItem> CustomAdtRoleSpawnRate;
public static readonly string[] rates =
[
"Rate0",
"Rate5",
"Rate10",
"Rate15",
"Rate20",
"Rate25",
"Rate30",
"Rate35",
"Rate40",
"Rate45",
"Rate50",
"Rate55",
"Rate60",
"Rate65",
"Rate70",
"Rate75",
"Rate80",
"Rate85",
"Rate90",
"Rate95",
"Rate100",
];
public static readonly string[] ratesZeroOne =
[
"RoleOff", /*"Rate10", "Rate20", "Rate30", "Rate40", "Rate50",
"Rate60", "Rate70", "Rate80", "Rate90", */
"RoleRate",
];
public static readonly string[] ratesToggle =
[
"RoleOff",
"RoleRate",
"RoleOn"
];
public static readonly string[] CheatResponsesName =
[
"Ban",
"Kick",
"NoticeMe",
"NoticeEveryone",
"OnlyCancel"
];
public static readonly string[] ConfirmEjectionsMode =
[
"ConfirmEjections.None",
"ConfirmEjections.Team",
"ConfirmEjections.Role"
];
public static readonly string[] CamouflageMode =
[
"CamouflageMode.Default",
"CamouflageMode.Host",
"CamouflageMode.Karpe",
"CamouflageMode.Lauryn",
"CamouflageMode.Moe",
"CamouflageMode.Pyro",
"CamouflageMode.ryuk",
"CamouflageMode.Gurge44",
"CamouflageMode.TommyXL"
];
public static readonly string[] PetToAssign =
[
"pet_Bedcrab",
"pet_BredPet",
"pet_YuleGoatPet",
"pet_Bush",
"pet_Charles",
"pet_ChewiePet",
"pet_clank",
"pet_coaltonpet",
"pet_Cube",
"pet_Doggy",
"pet_Ellie",
"pet_frankendog",
"pet_D2GhostPet",
"pet_test",
"pet_GuiltySpark",
"pet_Stickmin",
"pet_HamPet",
"pet_Hamster",
"pet_Alien",
"pet_poro",
"pet_HamPet",
"pet_Lava",
"pet_Crewmate",
"pet_D2PoukaPet",
"pet_Pusheen",
"pet_Robot",
"pet_Snow",
"pet_Squig",
"pet_nuggetPet",
"pet_Charles_Red",
"pet_UFO",
"pet_D2WormPet",
"pet_RANDOM_FOR_EVERYONE"
];
// 各役職の詳細設定
public static OptionItem EnableGM;
public static float DefaultKillCooldown = Main.NormalOptions?.KillCooldown ?? 25;
public static OptionItem DisableMeeting;
public static OptionItem DisableCloseDoor;
public static OptionItem DisableSabotage;
public static OptionItem DisableTaskWin;
public static OptionItem KillFlashDuration;
public static OptionItem EnableKillerLeftCommand;
public static OptionItem SeeEjectedRolesInMeeting;
//public static OptionItem ShareLobby;
//public static OptionItem ShareLobbyMinPlayer;
public static OptionItem DisableShieldAnimations;
public static OptionItem DisableCrackedGlass;
public static OptionItem DisableShapeshiftAnimations;
public static OptionItem DisableKillAnimationOnGuess;
public static OptionItem DisableVanillaRoles;
public static OptionItem DisableHiddenRoles;
public static OptionItem DisableSunnyboy;
public static OptionItem SabotageCooldownControl;
public static OptionItem SabotageCooldown;
public static OptionItem SunnyboyChance;
public static OptionItem DisableBard;
public static OptionItem BardChance;
public static OptionItem DisableSaboteur;
public static OptionItem CEMode;
public static OptionItem ConfirmEjectionsNK;
public static OptionItem ConfirmEjectionsNonNK;
public static OptionItem ConfirmEjectionsNeutralAsImp;
public static OptionItem ShowImpRemainOnEject;
public static OptionItem ShowNKRemainOnEject;
public static OptionItem ShowTeamNextToRoleNameOnEject;
public static OptionItem CheatResponses;
public static OptionItem LowLoadMode;
public static OptionItem DeepLowLoad;
// Dummy Settings
public static OptionItem SpawnSidekickAlone;
// Detailed Ejections //
public static OptionItem ExtendedEjections;
public static OptionItem ConfirmEgoistOnEject;
public static OptionItem ConfirmSidekickOnEject;
public static OptionItem ConfirmLoversOnEject;
public static OptionItem NonNeutralKillingRolesMinPlayer;
public static OptionItem NonNeutralKillingRolesMaxPlayer;
public static OptionItem NeutralKillingRolesMinPlayer;
public static OptionItem NeutralKillingRolesMaxPlayer;
public static OptionItem NeutralRoleWinTogether;
public static OptionItem NeutralWinTogether;
public static OptionItem DefaultShapeshiftCooldown;
public static OptionItem DeadImpCantSabotage;
public static OptionItem ImpKnowAlliesRole;
public static OptionItem ImpKnowWhosMadmate;
public static OptionItem MadmateKnowWhosImp;
public static OptionItem MadmateKnowWhosMadmate;
public static OptionItem MadmateHasImpostorVision;
//public static OptionItem MadmateCanFixSabotage;
public static OptionItem ImpCanKillMadmate;
public static OptionItem MadmateCanKillImp;
public static OptionItem JackalCanKillSidekick;
public static OptionItem SidekickCanKillJackal;
public static OptionItem SidekickKnowOtherSidekick;
public static OptionItem SidekickKnowOtherSidekickRole;
public static OptionItem SidekickCanKillSidekick;
public static OptionItem ShapeMasterShapeshiftDuration;
public static OptionItem EGCanGuessImp;
public static OptionItem EGCanGuessAdt;
public static OptionItem EGCanGuessTaskDoneSnitch;
public static OptionItem EGCanGuessTime;
public static OptionItem EGTryHideMsg;
public static OptionItem WarlockCanKillAllies;
public static OptionItem WarlockCanKillSelf;
public static OptionItem WarlockShiftDuration;
public static OptionItem ScavengerKillCooldown;
public static OptionItem ScavengerKillDuration;
public static OptionItem ZombieKillCooldown;
public static OptionItem ZombieSpeedReduce;
public static OptionItem EvilWatcherChance;
public static OptionItem GGCanGuessCrew;
public static OptionItem GGCanGuessAdt;
public static OptionItem GGCanGuessTime;
public static OptionItem GGTryHideMsg;
public static OptionItem LuckeyProbability;
public static OptionItem LuckyProbability;
public static OptionItem PuppeteerKCD;
public static OptionItem PuppeteerCD;
public static OptionItem PuppeteerCanKillNormally;
public static OptionItem PuppeteerManipulationBypassesLazy;
public static OptionItem PuppeteerManipulationBypassesLazyGuy;
public static OptionItem PuppeteerPuppetCanKillPuppeteer;
public static OptionItem PuppeteerPuppetCanKillImpostors;
public static OptionItem PuppeteerMaxPuppets;
public static OptionItem PuppeteerDiesAfterMaxPuppets;
public static OptionItem PuppeteerMinDelay;
public static OptionItem PuppeteerMaxDelay;
public static OptionItem PuppeteerManipulationEndsAfterFixedTime;
public static OptionItem PuppeteerManipulationEndsAfterTime;
public static OptionItem VindicatorAdditionalVote;
public static OptionItem VindicatorHideVote;
public static OptionItem MayorAdditionalVote;
public static OptionItem MayorHasPortableButton;
public static OptionItem MayorNumOfUseButton;
public static OptionItem MayorHideVote;
public static OptionItem MayorRevealWhenDoneTasks;
public static OptionItem OppoImmuneToAttacksWhenTasksDone;
public static OptionItem DoctorTaskCompletedBatteryCharge;
public static OptionItem SpeedBoosterUpSpeed;
public static OptionItem SpeedBoosterTimes;
public static OptionItem GlitchCanVote;
public static OptionItem TrapperBlockMoveTime;
public static OptionItem DetectiveCanknowKiller;
public static OptionItem TransporterTeleportMax;
public static OptionItem CanTerroristSuicideWin;
public static OptionItem InnocentCanWinByImp;
public static OptionItem WorkaholicVentCooldown;
public static OptionItem WorkaholicCannotWinAtDeath;
public static OptionItem WorkaholicVisibleToEveryone;
public static OptionItem WorkaholicGiveAdviceAlive;
public static OptionItem BaitNotification;
public static OptionItem DoctorVisibleToEveryone;
public static OptionItem JackalWinWithSidekick;
public static OptionItem ArsonistDouseTime;
public static OptionItem ArsonistCooldown;
public static OptionItem ArsonistKeepsGameGoing;
public static OptionItem ArsonistCanIgniteAnytime;
public static OptionItem ArsonistMinPlayersToIgnite;
public static OptionItem ArsonistMaxPlayersToIgnite;
public static OptionItem JesterCanUseButton;
public static OptionItem JesterCanVent;
public static OptionItem LegacyMafia;
public static OptionItem NotifyGodAlive;
public static OptionItem MarioVentNumWin;
public static OptionItem MarioVentCD;
public static OptionItem VeteranSkillCooldown;
public static OptionItem VeteranSkillDuration;
public static OptionItem TimeMasterSkillCooldown;
public static OptionItem TimeMasterSkillDuration;
public static OptionItem TimeMasterMaxUses;
public static OptionItem TimeMasterAbilityUseGainWithEachTaskCompleted;
public static OptionItem VeteranSkillMaxOfUseage;
public static OptionItem VeteranAbilityUseGainWithEachTaskCompleted;
public static OptionItem VentguardAbilityUseGainWithEachTaskCompleted;
public static OptionItem VentguardMaxGuards;
public static OptionItem VentguardBlockDoesNotAffectCrew;
public static OptionItem BodyguardProtectRadius;
public static OptionItem BodyguardKillsKiller;
public static OptionItem WitnessCD;
public static OptionItem WitnessTime;
public static OptionItem WitnessUsePet;
public static OptionItem DQNumOfKillsNeeded;
public static OptionItem ParanoiaNumOfUseButton;
public static OptionItem ParanoiaVentCooldown;
public static OptionItem ImpKnowCyberStarDead;
public static OptionItem NeutralKnowCyberStarDead;
public static OptionItem DemolitionistVentTime;
public static OptionItem DemolitionistKillerDiesOnMeetingCall;
public static OptionItem ExpressSpeed;
public static OptionItem ExpressSpeedDur;
public static OptionItem EveryOneKnowSuperStar;
public static OptionItem MNKillCooldown;
public static OptionItem MafiaCanKillNum;
public static OptionItem RetributionistCanKillNum;
public static OptionItem MinimumPlayersAliveToRetri;
public static OptionItem CanOnlyRetributeWithTasksDone;
public static OptionItem BomberRadius;
public static OptionItem BomberCanKill;
public static OptionItem BomberKillCD;
public static OptionItem BombCooldown;
public static OptionItem ImpostorsSurviveBombs;
public static OptionItem BomberDiesInExplosion;
public static OptionItem NukerChance;
public static OptionItem NukeRadius;
public static OptionItem NukeCooldown;
public static OptionItem SpeedrunnerNotifyKillers;
public static OptionItem SpeedrunnerNotifyAtXTasksLeft;
public static OptionItem SkeldChance;
public static OptionItem MiraChance;
public static OptionItem PolusChance;
public static OptionItem AirshipChance;
public static OptionItem FungleChance;
// UNDERDOG
public static OptionItem UnderdogKillCooldown;
public static OptionItem UnderdogMaximumPlayersNeededToKill;
public static OptionItem UnderdogCanKillWithMorePlayersAlive;
public static OptionItem UnderdogKillCooldownWithMorePlayersAlive;
public static OptionItem GodfatherCancelVote;
public static OptionItem NimbleCD;
public static OptionItem NimbleInVentTime;
public static OptionItem PhysicistCD;
public static OptionItem PhysicistViewDuration;
public static OptionItem CleanerKillCooldown;
public static OptionItem KillCooldownAfterCleaning;
public static OptionItem GuardSpellTimes;
public static OptionItem FlashWhenTrapBoobyTrap;
public static OptionItem CapitalismSkillCooldown;
public static OptionItem CapitalismKillCooldown;
public static OptionItem GrenadierSkillCooldown;
public static OptionItem GrenadierSkillDuration;
public static OptionItem GrenadierCauseVision;
public static OptionItem GrenadierCanAffectNeutral;
public static OptionItem GrenadierSkillMaxOfUseage;
public static OptionItem GrenadierAbilityUseGainWithEachTaskCompleted;
public static OptionItem LighterVisionNormal;
public static OptionItem LighterVisionOnLightsOut;
public static OptionItem LighterSkillCooldown;
public static OptionItem LighterSkillDuration;
public static OptionItem LighterSkillMaxOfUseage;
public static OptionItem LighterAbilityUseGainWithEachTaskCompleted;
public static OptionItem SecurityGuardSkillCooldown;
public static OptionItem SecurityGuardSkillDuration;
public static OptionItem SecurityGuardSkillMaxOfUseage;
public static OptionItem SecurityGuardAbilityUseGainWithEachTaskCompleted;
public static OptionItem EscapeeSSDuration;
public static OptionItem EscapeeSSCD;
public static OptionItem MinerSSDuration;
public static OptionItem MinerSSCD;
public static OptionItem RevolutionistDrawTime;
public static OptionItem RevolutionistCooldown;
public static OptionItem RevolutionistDrawCount;
public static OptionItem RevolutionistKillProbability;
public static OptionItem RevolutionistVentCountDown;
public static OptionItem ShapeImperiusCurseShapeshiftDuration;
public static OptionItem ImperiusCurseShapeshiftCooldown;
public static OptionItem CrewpostorCanKillAllies;
public static OptionItem CrewpostorKnowsAllies;
public static OptionItem AlliesKnowCrewpostor;
public static OptionItem CrewpostorKillAfterTask;
public static OptionItem CrewpostorLungeKill;
public static OptionItem ImpCanBeSeer;
public static OptionItem CrewCanBeSeer;
public static OptionItem NeutralCanBeSeer;
public static OptionItem ImpCanBeAutopsy;
public static OptionItem CrewCanBeAutopsy;
public static OptionItem NeutralCanBeAutopsy;
public static OptionItem ImpCanBeBewilder;
public static OptionItem CrewCanBeBewilder;
public static OptionItem NeutralCanBeBewilder;
public static OptionItem ImpCanBeSunglasses;
public static OptionItem CrewCanBeSunglasses;
public static OptionItem NeutralCanBeSunglasses;
public static OptionItem ImpCanBeGlow;
public static OptionItem CrewCanBeGlow;
public static OptionItem NeutralCanBeGlow;
public static OptionItem ImpCanBeGuesser;
public static OptionItem CrewCanBeGuesser;
public static OptionItem NeutralCanBeGuesser;
public static OptionItem ImpCanBeWatcher;
public static OptionItem CrewCanBeWatcher;
public static OptionItem NeutralCanBeWatcher;
public static OptionItem ImpCanBeNecroview;
public static OptionItem CrewCanBeNecroview;
public static OptionItem NeutralCanBeNecroview;
public static OptionItem ImpCanBeOblivious;
public static OptionItem CrewCanBeOblivious;
public static OptionItem NeutralCanBeOblivious;
public static OptionItem ObliviousBaitImmune;
public static OptionItem ImpCanBeTiebreaker;
public static OptionItem CrewCanBeTiebreaker;
public static OptionItem NeutralCanBeTiebreaker;
public static OptionItem CrewmateCanBeSidekick;
public static OptionItem NeutralCanBeSidekick;
public static OptionItem ImpostorCanBeSidekick;
public static OptionItem ImpCanBeOnbound;
public static OptionItem CrewCanBeOnbound;
public static OptionItem NeutralCanBeOnbound;
public static OptionItem ImpCanBeInLove;
public static OptionItem CrewCanBeInLove;
public static OptionItem NeutralCanBeInLove;
public static OptionItem ImpCanBeReflective;
public static OptionItem CrewCanBeReflective;
public static OptionItem NeutralCanBeReflective;
public static OptionItem ImpCanBeUnreportable;
public static OptionItem CrewCanBeUnreportable;
public static OptionItem NeutralCanBeUnreportable;
public static OptionItem ImpCanBeLucky;
public static OptionItem CrewCanBeLucky;
public static OptionItem NeutralCanBeLucky;
public static OptionItem ImpCanBeUnlucky;
public static OptionItem CrewCanBeUnlucky;
public static OptionItem NeutralCanBeUnlucky;
public static OptionItem UnluckyTaskSuicideChance;
public static OptionItem UnluckyKillSuicideChance;
public static OptionItem UnluckyVentSuicideChance;
public static OptionItem UnluckyReportSuicideChance;
public static OptionItem UnluckySabotageSuicideChance;
// RASCAL //
public static OptionItem RascalAppearAsMadmate;
// ROGUE
public static OptionItem ImpCanBeRogue;
public static OptionItem CrewCanBeRogue;
public static OptionItem NeutralCanBeRogue;
public static OptionItem RogueKnowEachOther;
public static OptionItem RogueKnowEachOtherRoles;
// Gravestone
public static OptionItem ImpCanBeGravestone;
public static OptionItem CrewCanBeGravestone;
public static OptionItem NeutralCanBeGravestone;
// Mare Add-on
public static OptionItem MareKillCD;
public static OptionItem MareKillCDNormally;
public static OptionItem MareHasIncreasedSpeed;
public static OptionItem MareSpeedDuringLightsOut;
public static OptionItem AutoPlayAgain;
public static OptionItem AutoPlayAgainCountdown;
public static OptionItem AutoStartTimer;
public static OptionItem ControlCooldown;
public static OptionItem InhibitorCD;
public static OptionItem InhibitorCDAfterMeetings;
public static OptionItem SaboteurCD;
public static OptionItem SaboteurCDAfterMeetings;
public static OptionItem JesterVision;
public static OptionItem PhantomCanVent;
public static OptionItem PhantomSnatchesWin;
// public static OptionItem LawyerVision;
public static OptionItem ImpCanBeDiseased;
public static OptionItem CrewCanBeDiseased;
public static OptionItem NeutralCanBeDiseased;
public static OptionItem DiseasedCDOpt;
public static OptionItem DiseasedCDReset;
public static OptionItem ImpCanBeAntidote;
public static OptionItem CrewCanBeAntidote;
public static OptionItem NeutralCanBeAntidote;
public static OptionItem AntidoteCDOpt;
public static OptionItem AntidoteCDReset;
public static OptionItem ImpCanBeBait;
public static OptionItem CrewCanBeBait;
public static OptionItem NeutralCanBeBait;
public static OptionItem BaitDelayMin;
public static OptionItem BaitDelayMax;
public static OptionItem BaitDelayNotify;
public static OptionItem ImpCanBeTrapper;
public static OptionItem CrewCanBeTrapper;
public static OptionItem NeutralCanBeTrapper;
public static OptionItem ImpCanBeFool;
public static OptionItem CrewCanBeFool;
public static OptionItem NeutralCanBeFool;
public static OptionItem TorchVision;
public static OptionItem TorchAffectedByLights;
public static OptionItem TasklessCrewCanBeLazy;
public static OptionItem TaskBasedCrewCanBeLazy;
public static OptionItem DovesOfNeaceCooldown;
public static OptionItem DovesOfNeaceMaxOfUseage;
public static OptionItem DovesOfNeaceAbilityUseGainWithEachTaskCompleted;
public static OptionItem BTKillCooldown;
public static OptionItem TrapOnlyWorksOnTheBodyBoobyTrap;
public static OptionItem ImpCanBeDoubleShot;
public static OptionItem CrewCanBeDoubleShot;
public static OptionItem killAttacker;
public static OptionItem NeutralCanBeDoubleShot;
public static OptionItem MimicCanSeeDeadRoles;
public static OptionItem ResetDoorsEveryTurns;
public static OptionItem DoorsResetMode;
public static OptionItem ChangeDecontaminationTime;
public static OptionItem DecontaminationTimeOnMiraHQ;
public static OptionItem DecontaminationTimeOnPolus;
public static OptionItem ParasiteCD;
public static OptionItem ShapeshiftCD;
public static OptionItem ShapeshiftDur;
public static OptionItem MafiaShapeshiftCD;
public static OptionItem MafiaShapeshiftDur;
public static OverrideTasksData InsightTasks;
public static OptionItem ScientistDur;
public static OptionItem ScientistCD;
public static OptionItem GCanGuessImp;
public static OptionItem GCanGuessCrew;
public static OptionItem GCanGuessAdt;
public static OptionItem GCanGuessTaskDoneSnitch;
public static OptionItem GTryHideMsg;
// Masochist
//public static OptionItem MasochistKillMax;
//Task Management
public static OptionItem DisableShortTasks;
public static OptionItem DisableCleanVent;
public static OptionItem DisableCalibrateDistributor;
public static OptionItem DisableChartCourse;
public static OptionItem DisableStabilizeSteering;
public static OptionItem DisableCleanO2Filter;
public static OptionItem DisableUnlockManifolds;
public static OptionItem DisablePrimeShields;
public static OptionItem DisableMeasureWeather;
public static OptionItem DisableBuyBeverage;
public static OptionItem DisableAssembleArtifact;
public static OptionItem DisableSortSamples;
public static OptionItem DisableProcessData;
public static OptionItem DisableRunDiagnostics;
public static OptionItem DisableRepairDrill;
public static OptionItem DisableAlignTelescope;
public static OptionItem DisableRecordTemperature;
public static OptionItem DisableFillCanisters;
public static OptionItem DisableMonitorTree;
public static OptionItem DisableStoreArtifacts;
public static OptionItem DisablePutAwayPistols;
public static OptionItem DisablePutAwayRifles;
public static OptionItem DisableMakeBurger;
public static OptionItem DisableCleanToilet;
public static OptionItem DisableDecontaminate;
public static OptionItem DisableSortRecords;
public static OptionItem DisableFixShower;
public static OptionItem DisablePickUpTowels;
public static OptionItem DisablePolishRuby;
public static OptionItem DisableDressMannequin;
public static OptionItem DisableCommonTasks;
public static OptionItem DisableSwipeCard;
public static OptionItem DisableFixWiring;
public static OptionItem DisableEnterIdCode;
public static OptionItem DisableInsertKeys;
public static OptionItem DisableScanBoardingPass;
public static OptionItem DisableLongTasks;
public static OptionItem DisableSubmitScan;
public static OptionItem DisableUnlockSafe;
public static OptionItem DisableStartReactor;
public static OptionItem DisableResetBreaker;
public static OptionItem DisableAlignEngineOutput;
public static OptionItem DisableInspectSample;
public static OptionItem DisableEmptyChute;
public static OptionItem DisableClearAsteroids;
public static OptionItem DisableWaterPlants;
public static OptionItem DisableOpenWaterways;
public static OptionItem DisableReplaceWaterJug;
public static OptionItem DisableRebootWifi;
public static OptionItem DisableDevelopPhotos;
public static OptionItem DisableRewindTapes;
public static OptionItem DisableStartFans;
public static OptionItem DisableOtherTasks;
public static OptionItem DisableUploadData;
public static OptionItem DisableEmptyGarbage;
public static OptionItem DisableFuelEngines;
public static OptionItem DisableDivertPower;
public static OptionItem DisableActivateWeatherNodes;
public static OptionItem DisableRoastMarshmallow;
public static OptionItem DisableCollectSamples;
public static OptionItem DisableReplaceParts;
public static OptionItem DisableCollectVegetables;
public static OptionItem DisableMineOres;
public static OptionItem DisableExtractFuel;
public static OptionItem DisableCatchFish;
public static OptionItem DisablePolishGem;
public static OptionItem DisableHelpCritter;
public static OptionItem DisableHoistSupplies;
public static OptionItem DisableFixAntenna;
public static OptionItem DisableBuildSandcastle;
public static OptionItem DisableCrankGenerator;
public static OptionItem DisableMonitorMushroom;
public static OptionItem DisablePlayVideoGame;
public static OptionItem DisableFindSignal;
public static OptionItem DisableThrowFisbee;
public static OptionItem DisableLiftWeights;
public static OptionItem DisableCollectShells;
// Merchant Filters //
public static OptionItem BaitCanBeSold;
public static OptionItem WatcherCanBeSold;
public static OptionItem SeerCanBeSold;
public static OptionItem TrapperCanBeSold;
public static OptionItem TiebreakerCanBeSold;
public static OptionItem KnightedCanBeSold;
public static OptionItem NecroviewCanBeSold;
public static OptionItem SoullessCanBeSold;
public static OptionItem SchizoCanBeSold;
public static OptionItem OnboundCanBeSold;
public static OptionItem GuesserCanBeSold;
public static OptionItem UnreportableCanBeSold;
public static OptionItem LuckyCanBeSold;
public static OptionItem ObliviousCanBeSold;
public static OptionItem BewilderCanBeSold;
//デバイスブロック
public static OptionItem DisableDevices;
public static OptionItem DisableSkeldDevices;
public static OptionItem DisableSkeldAdmin;
public static OptionItem DisableSkeldCamera;
public static OptionItem DisableMiraHQDevices;
public static OptionItem DisableMiraHQAdmin;
public static OptionItem DisableMiraHQDoorLog;
public static OptionItem DisablePolusDevices;
public static OptionItem DisablePolusAdmin;
public static OptionItem DisablePolusCamera;
public static OptionItem DisablePolusVital;
public static OptionItem DisableAirshipDevices;
public static OptionItem DisableAirshipCockpitAdmin;
public static OptionItem DisableAirshipRecordsAdmin;
public static OptionItem DisableAirshipCamera;
public static OptionItem DisableAirshipVital;
public static OptionItem DisableFungleDevices;
public static OptionItem DisableFungleCamera;
public static OptionItem DisableFungleVital;
public static OptionItem DisableDevicesIgnoreConditions;
public static OptionItem DisableDevicesIgnoreImpostors;
public static OptionItem DisableDevicesIgnoreNeutrals;
public static OptionItem DisableDevicesIgnoreCrewmates;
public static OptionItem DisableDevicesIgnoreAfterAnyoneDied;
// Maps
public static OptionItem RandomMapsMode;
public static OptionItem AddedTheSkeld;
public static OptionItem AddedMiraHQ;
public static OptionItem AddedPolus;
public static OptionItem AddedTheAirship;
public static OptionItem AddedDleks;
public static OptionItem RandomSpawn;
public static OptionItem AirshipAdditionalSpawn;
public static OptionItem AirshipVariableElectrical;
public static OptionItem DisableAirshipMovingPlatform;
public static OptionItem DisableSporeTriggerOnFungle;
public static OptionItem DisableZiplineOnFungle;
public static OptionItem DisableZiplineFromTop;
public static OptionItem DisableZiplineFromUnder;
public static OptionItem DisableZiplineForImps;
public static OptionItem DisableZiplineForNeutrals;
public static OptionItem DisableZiplineForCrew;
public static OptionItem ZiplineTravelTimeFromBottom;
public static OptionItem ZiplineTravelTimeFromTop;
// Sabotage
public static OptionItem CommsCamouflage;
public static OptionItem CommsCamouflageDisableOnFungle;
public static OptionItem DisableReportWhenCC;
public static OptionItem SabotageTimeControl;
public static OptionItem SkeldReactorTimeLimit;
public static OptionItem SkeldO2TimeLimit;
public static OptionItem MiraReactorTimeLimit;
public static OptionItem MiraO2TimeLimit;
public static OptionItem PolusReactorTimeLimit;
public static OptionItem AirshipReactorTimeLimit;
public static OptionItem FungleReactorTimeLimit;
public static OptionItem FungleMushroomMixupDuration;
public static OptionItem LightsOutSpecialSettings;
public static OptionItem DisableAirshipViewingDeckLightsPanel;
public static OptionItem DisableAirshipGapRoomLightsPanel;
public static OptionItem DisableAirshipCargoLightsPanel;
//Guesser Mode//
public static OptionItem GuesserMode;
public static OptionItem CrewmatesCanGuess;
public static OptionItem ImpostorsCanGuess;
public static OptionItem NeutralKillersCanGuess;
public static OptionItem PassiveNeutralsCanGuess;
public static OptionItem HideGuesserCommands;
public static OptionItem CanGuessAddons;
public static OptionItem ImpCanGuessImp;
public static OptionItem CrewCanGuessCrew;
// Guesser Mode - Addon Config //
public static OptionItem AddonSettingsCrew;
public static OptionItem ClaimAddonSettingsCrew;
public static OptionItem BetrayalAddonSettingsCrew;
public static OptionItem ImpOnlyAddonSettingsCrew;
public static OptionItem CrewOnlyAddonSettingsCrew;
public static OptionItem NeutralAddonSettingsCrew;
public static OptionItem BasicAddonSettingsCrew;
public static OptionItem AddonSettingsImp;
public static OptionItem ClaimAddonSettingsImp;
public static OptionItem BetrayalAddonSettingsImp;
public static OptionItem ImpOnlyAddonSettingsImp;
public static OptionItem CrewOnlyAddonSettingsImp;
public static OptionItem NeutralAddonSettingsImp;
public static OptionItem BasicAddonSettingsImp;
public static OptionItem AddonSettingsNeut;
public static OptionItem ClaimAddonSettingsNeut;
public static OptionItem BetrayalAddonSettingsNeut;
public static OptionItem ImpOnlyAddonSettingsNeut;
public static OptionItem CrewOnlyAddonSettingsNeut;
public static OptionItem NeutralAddonSettingsNeut;
public static OptionItem BasicAddonSettingsNeut;
// 投票モード
public static OptionItem VoteMode;
public static OptionItem WhenSkipVote;
public static OptionItem WhenSkipVoteIgnoreFirstMeeting;
public static OptionItem WhenSkipVoteIgnoreNoDeadBody;
public static OptionItem WhenSkipVoteIgnoreEmergency;
public static OptionItem WhenNonVote;
public static OptionItem WhenTie;
public static readonly string[] voteModes =
[
"Default",
"Suicide",
"SelfVote",
"Skip"
];
public static readonly string[] tieModes =
[
"TieMode.Default",
"TieMode.All",
"TieMode.Random"
];
/* public static readonly string[] addonGuessModeCrew =
{
"GuesserMode.All", "GuesserMode.Harmful", "GuesserMode.Random"
}; */
public static readonly string[] madmateSpawnMode =
[
"MadmateSpawnMode.Assign",
"MadmateSpawnMode.FirstKill",
"MadmateSpawnMode.SelfVote",
];
public static readonly string[] madmateCountMode =
[
"MadmateCountMode.None",
"MadmateCountMode.Imp",
"MadmateCountMode.Crew",
];
public static readonly string[] sidekickCountMode =
[
"SidekickCountMode.Jackal",
"SidekickCountMode.None",
"SidekickCountMode.Original",
];
public static VoteMode GetWhenSkipVote() => (VoteMode)WhenSkipVote.GetValue();
public static VoteMode GetWhenNonVote() => (VoteMode)WhenNonVote.GetValue();
// ボタン回数
public static OptionItem SyncButtonMode;
public static OptionItem SyncedButtonCount;
public static int UsedButtonCount;
// 全員生存時の会議時間
public static OptionItem AllAliveMeeting;
public static OptionItem AllAliveMeetingTime;
// 追加の緊急ボタンクールダウン
public static OptionItem AdditionalEmergencyCooldown;
public static OptionItem AdditionalEmergencyCooldownThreshold;
public static OptionItem AdditionalEmergencyCooldownTime;
//転落死
public static OptionItem LadderDeath;
public static OptionItem LadderDeathChance;
// タスク上書き
public static OverrideTasksData TerroristTasks;
public static OverrideTasksData TransporterTasks;
public static OverrideTasksData WorkaholicTasks;
public static OverrideTasksData SpeedrunnerTasks;
public static OverrideTasksData CrewpostorTasks;
public static OverrideTasksData PhantomTasks;
public static OverrideTasksData GuardianTasks;
public static OverrideTasksData OpportunistTasks;
public static OverrideTasksData MayorTasks;
public static OverrideTasksData RetributionistTasks;
public static OverrideTasksData TimeManagerTasks;
// その他
public static OptionItem FixFirstKillCooldown;
public static OptionItem StartingKillCooldown;
public static OptionItem ShieldPersonDiedFirst;
public static OptionItem GhostCanSeeOtherRoles;
public static OptionItem GhostCanSeeOtherVotes;
public static OptionItem GhostCanSeeDeathReason;
//public static OptionItem GhostIgnoreTasks;
public static OptionItem KPDCamouflageMode;
// Guess Restrictions //
public static OptionItem TerroristCanGuess;
public static OptionItem WorkaholicCanGuess;
public static OptionItem PhantomCanGuess;
public static OptionItem GodCanGuess;
// プリセット対象外
public static OptionItem AllowConsole;
public static OptionItem NoGameEnd;
public static OptionItem DontUpdateDeadPlayers;
public static OptionItem AutoDisplayLastRoles;
public static OptionItem AutoDisplayKillLog;
public static OptionItem AutoDisplayLastResult;
public static OptionItem SuffixMode;
public static OptionItem HideGameSettings;
public static OptionItem FormatNameMode;
public static OptionItem ColorNameMode;
public static OptionItem DisableEmojiName;
public static OptionItem ChangeNameToRoleInfo;
public static OptionItem SendRoleDescriptionFirstMeeting;
public static OptionItem RoleAssigningAlgorithm;
public static OptionItem EndWhenPlayerBug;
public static OptionItem RemovePetsAtDeadPlayers;
public static OptionItem UsePets;
public static OptionItem PetToAssignToEveryone;
public static OptionItem UseVoteCancelling;
public static OptionItem EnableUpMode;
public static OptionItem AutoKickStart;
public static OptionItem AutoKickStartAsBan;
public static OptionItem AutoKickStartTimes;
public static OptionItem AutoKickStopWords;
public static OptionItem AutoKickStopWordsAsBan;
public static OptionItem AutoKickStopWordsTimes;
public static OptionItem KickAndroidPlayer;
public static OptionItem KickXboxPlayer;
public static OptionItem KickPlayStationPlayer;
public static OptionItem KickNintendoPlayer;
public static OptionItem ApplyDenyNameList;
public static OptionItem KickPlayerFriendCodeNotExist;
public static OptionItem KickLowLevelPlayer;
public static OptionItem ApplyBanList;
public static OptionItem ApplyModeratorList;
public static OptionItem ApplyAllowList;
public static OptionItem AutoWarnStopWords;
public static OptionItem AllowSayCommand;
public static OptionItem ApplyReminderMsg;
public static OptionItem TimeForReminder;
public static OptionItem DIYGameSettings;
public static OptionItem PlayerCanSetColor;
//Add-Ons
public static OptionItem NameDisplayAddons;
public static OptionItem AddBracketsToAddons;
public static OptionItem NoLimitAddonsNumMax;
public static OptionItem BewilderVision;
public static OptionItem JesterHasImpostorVision;
public static OptionItem SunglassesVision;
public static OptionItem ImpCanBeAvanger;
public static OptionItem MadmateSpawnMode;
public static OptionItem MadmateCountMode;
public static OptionItem SheriffCanBeMadmate;
public static OptionItem MayorCanBeMadmate;
public static OptionItem NGuesserCanBeMadmate;
public static OptionItem SnitchCanBeMadmate;
public static OptionItem JudgeCanBeMadmate;
public static OptionItem MarshallCanBeMadmate;
public static OptionItem RetributionistCanBeMadmate;
public static OptionItem FarseerCanBeMadmate;
public static OptionItem MadSnitchTasks;
public static OptionItem FlashmanSpeed;
public static OptionItem GiantSpeed;
public static OptionItem ButtonBarryButtons;
public static OptionItem LoverSpawnChances;
public static OptionItem LoverKnowRoles;
public static OptionItem LoverSuicide;
public static OptionItem ImpCanBeEgoist;
public static OptionItem ImpEgoistVisibalToAllies;
public static OptionItem CrewCanBeEgoist;
public static OptionItem TicketsPerKill;
public static OptionItem ImpCanBeDualPersonality;
public static OptionItem CrewCanBeDualPersonality;
public static OptionItem DualVotes;
public static OptionItem HideDualVotes;
public static OptionItem ImpCanBeLoyal;
public static OptionItem CrewCanBeLoyal;
public static OptionItem MinWaitAutoStart;
public static OptionItem MaxWaitAutoStart;
public static OptionItem PlayerAutoStart;
//public static OptionItem SidekickCountMode;
public static readonly string[] suffixModes =
[
"SuffixMode.None",
"SuffixMode.Version",
"SuffixMode.Streaming",
"SuffixMode.Recording",
"SuffixMode.RoomHost",
"SuffixMode.OriginalName",
"SuffixMode.DoNotKillMe",
"SuffixMode.NoAndroidPlz",
"SuffixMode.AutoHost"];
public static readonly string[] roleAssigningAlgorithms =
[
"RoleAssigningAlgorithm.Default",
"RoleAssigningAlgorithm.NetRandom",
"RoleAssigningAlgorithm.HashRandom",
"RoleAssigningAlgorithm.Xorshift",
"RoleAssigningAlgorithm.MersenneTwister",
];
public static readonly string[] formatNameModes =
[
"FormatNameModes.None",
"FormatNameModes.Color",
"FormatNameModes.Snacks",
];
public static SuffixModes GetSuffixMode() => (SuffixModes)SuffixMode.GetValue();
public static int SnitchExposeTaskLeft = 1;
public static bool IsLoaded;
public static int LoadingPercentage;
public static string MainLoadingText = string.Empty;
public static string RoleLoadingText = string.Empty;
static Options()
{
ResetRoleCounts();
}
public static void ResetRoleCounts()
{
roleCounts = [];
roleSpawnChances = [];
foreach (var role in Enum.GetValues(typeof(CustomRoles)).Cast<CustomRoles>())
{
roleCounts.Add(role, 0);
roleSpawnChances.Add(role, 0);
}
}
public static void SetRoleCount(CustomRoles role, int count)
{
roleCounts[role] = count;
if (CustomRoleCounts.TryGetValue(role, out var option))
{
option.SetValue(count - 1);
}
}
public static int GetRoleSpawnMode(CustomRoles role) => CustomRoleSpawnChances.TryGetValue(role, out var sc) ? sc.GetChance() : 0;
public static int GetRoleCount(CustomRoles role)
{
var mode = GetRoleSpawnMode(role);
return mode is 0 ? 0 : CustomRoleCounts.TryGetValue(role, out var option) ? option.GetInt() : roleCounts[role];
}
public static float GetRoleChance(CustomRoles role)
{
return CustomRoleSpawnChances.TryGetValue(role, out var option) ? option.GetValue()/* / 10f */ : roleSpawnChances[role];
}
public static void Load()
{
LoadingPercentage = 0;
MainLoadingText = "Building system settings";
if (IsLoaded) return;
OptionSaver.Initialize();
// 预设
int defaultPresetNumber = OptionSaver.GetDefaultPresetNumber();
_ = PresetOptionItem.Create(defaultPresetNumber, TabGroup.SystemSettings)
.SetColor(new Color32(255, 235, 4, byte.MaxValue))
.SetHeader(true);
// 游戏模式
GameMode = StringOptionItem.Create(1, "GameMode", gameModes, 0, TabGroup.GameSettings, false)
.SetHeader(true);
#region 职业详细设置
CustomRoleCounts = [];
CustomRoleSpawnChances = [];
CustomAdtRoleSpawnRate = [];
// GM
EnableGM = BooleanOptionItem.Create(100, "GM", false, TabGroup.GameSettings, false)
.SetColor(Utils.GetRoleColor(CustomRoles.GM))
.SetHeader(true);
MainLoadingText = "Building general settings";
// 各职业的总体设定
ImpKnowAlliesRole = BooleanOptionItem.Create(150, "ImpKnowAlliesRole", true, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true);
ImpKnowWhosMadmate = BooleanOptionItem.Create(151, "ImpKnowWhosMadmate", false, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard);
ImpCanKillMadmate = BooleanOptionItem.Create(152, "ImpCanKillMadmate", true, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 1;
MadmateKnowWhosMadmate = BooleanOptionItem.Create(153, "MadmateKnowWhosMadmate", false, TabGroup.ImpostorRoles, false)
.SetHeader(true)
.SetGameMode(CustomGameMode.Standard);
MadmateKnowWhosImp = BooleanOptionItem.Create(154, "MadmateKnowWhosImp", true, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard);
MadmateCanKillImp = BooleanOptionItem.Create(155, "MadmateCanKillImp", true, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard);
MadmateHasImpostorVision = BooleanOptionItem.Create(156, "MadmateHasImpostorVision", true, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard);
//MadmateCanFixSabotage = BooleanOptionItem.Create(157, "MadmateCanFixSabotage", false, TabGroup.ImpostorRoles, false)
//.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 2;
DefaultShapeshiftCooldown = FloatOptionItem.Create(200, "DefaultShapeshiftCooldown", new(5f, 180f, 5f), 15f, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetValueFormat(OptionFormat.Seconds);
DeadImpCantSabotage = BooleanOptionItem.Create(201, "DeadImpCantSabotage", false, TabGroup.ImpostorRoles, false)
.SetGameMode(CustomGameMode.Standard);
NonNeutralKillingRolesMinPlayer = IntegerOptionItem.Create(202, "NonNeutralKillingRolesMinPlayer", new(0, 15, 1), 0, TabGroup.NeutralRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetValueFormat(OptionFormat.Players);
NonNeutralKillingRolesMaxPlayer = IntegerOptionItem.Create(203, "NonNeutralKillingRolesMaxPlayer", new(0, 15, 1), 0, TabGroup.NeutralRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetValueFormat(OptionFormat.Players);
NeutralKillingRolesMinPlayer = IntegerOptionItem.Create(204, "NeutralKillingRolesMinPlayer", new(0, 15, 1), 0, TabGroup.NeutralRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetValueFormat(OptionFormat.Players);
NeutralKillingRolesMaxPlayer = IntegerOptionItem.Create(205, "NeutralKillingRolesMaxPlayer", new(0, 15, 1), 0, TabGroup.NeutralRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetValueFormat(OptionFormat.Players);
LoadingPercentage = 3;
// CovenRolesMinPlayer = IntegerOptionItem.Create(206, "CovenRolesMinPlayer", new(0, 15, 1), 0, TabGroup.NeutralRoles, false)
// .SetGameMode(CustomGameMode.Standard)
// .SetHeader(true)
// .SetValueFormat(OptionFormat.Players);
// CovenRolesMaxPlayer = IntegerOptionItem.Create(207, "CovenRolesMaxPlayer", new(0, 15, 1), 0, TabGroup.NeutralRoles, false)
// .SetGameMode(CustomGameMode.Standard)
// .SetValueFormat(OptionFormat.Players);
NeutralRoleWinTogether = BooleanOptionItem.Create(208, "NeutralRoleWinTogether", false, TabGroup.NeutralRoles, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true);
NeutralWinTogether = BooleanOptionItem.Create(209, "NeutralWinTogether", false, TabGroup.NeutralRoles, false)
.SetParent(NeutralRoleWinTogether)
.SetGameMode(CustomGameMode.Standard);
NameDisplayAddons = BooleanOptionItem.Create(210, "NameDisplayAddons", true, TabGroup.Addons, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true);
NoLimitAddonsNumMax = IntegerOptionItem.Create(211, "NoLimitAddonsNumMax", new(1, 90, 1), 1, TabGroup.Addons, false)
.SetGameMode(CustomGameMode.Standard);
//==================================================================================================================================//
LoadingPercentage = 4;
MainLoadingText = "Building role settings";
RoleLoadingText = "Vanilla roles\nImpostor";
// Impostor
SetupRoleOptions(300, TabGroup.ImpostorRoles, CustomRoles.ImpostorTOHE);
RoleLoadingText = "Vanilla roles\nShapeshifter";
SetupRoleOptions(400, TabGroup.ImpostorRoles, CustomRoles.ShapeshifterTOHE);
ShapeshiftCD = FloatOptionItem.Create(402, "ShapeshiftCooldown", new(1f, 180f, 1f), 30f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.ShapeshifterTOHE])
.SetValueFormat(OptionFormat.Seconds);
ShapeshiftDur = FloatOptionItem.Create(403, "ShapeshiftDuration", new(1f, 60f, 1f), 10f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.ShapeshifterTOHE])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nEvil Tracker";
LoadingPercentage = 5;
EvilTracker.SetupCustomOption();
RoleLoadingText = "Impostor roles\nArrogance";
Sans.SetupCustomOption();//Arrogance
LoadingPercentage = 6;
RoleLoadingText = "Impostor roles\nEvil Guesser";
SetupRoleOptions(1200, TabGroup.ImpostorRoles, CustomRoles.EvilGuesser);
EGCanGuessTime = IntegerOptionItem.Create(1205, "GuesserCanGuessTimes", new(1, 15, 1), 15, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.EvilGuesser])
.SetValueFormat(OptionFormat.Times);
EGCanGuessImp = BooleanOptionItem.Create(1206, "EGCanGuessImp", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.EvilGuesser]);
EGCanGuessAdt = BooleanOptionItem.Create(1207, "EGCanGuessAdt", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.EvilGuesser]);
EGCanGuessTaskDoneSnitch = BooleanOptionItem.Create(1208, "EGCanGuessTaskDoneSnitch", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.EvilGuesser]);
EGTryHideMsg = BooleanOptionItem.Create(1209, "GuesserTryHideMsg", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.EvilGuesser])
.SetColor(Color.green);
RoleLoadingText = "Impostor roles\nBomber";
SetupRoleOptions(2400, TabGroup.ImpostorRoles, CustomRoles.Bomber);
BomberRadius = FloatOptionItem.Create(2018, "BomberRadius", new(0.5f, 5f, 0.5f), 2f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bomber])
.SetValueFormat(OptionFormat.Multiplier);
BomberCanKill = BooleanOptionItem.Create(2015, "CanKill", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bomber]);
BomberKillCD = FloatOptionItem.Create(2020, "KillCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
.SetParent(BomberCanKill)
.SetValueFormat(OptionFormat.Seconds);
BombCooldown = FloatOptionItem.Create(2030, "BombCooldown", new(5f, 180f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bomber])
.SetValueFormat(OptionFormat.Seconds);
ImpostorsSurviveBombs = BooleanOptionItem.Create(2031, "ImpostorsSurviveBombs", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bomber]);
BomberDiesInExplosion = BooleanOptionItem.Create(2032, "BomberDiesInExplosion", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bomber]);
NukerChance = IntegerOptionItem.Create(2033, "NukerChance", new(0, 100, 5), 0, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bomber])
.SetValueFormat(OptionFormat.Percent);
NukeCooldown = FloatOptionItem.Create(2035, "NukeCooldown", new(5f, 180f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
.SetParent(NukerChance)
.SetValueFormat(OptionFormat.Seconds);
NukeRadius = FloatOptionItem.Create(2034, "NukeRadius", new(5f, 100f, 1f), 25f, TabGroup.ImpostorRoles, false)
.SetParent(NukerChance)
.SetValueFormat(OptionFormat.Multiplier);
RoleLoadingText = "Impostor roles\nBounty Hunter";
BountyHunter.SetupCustomOption();
RoleLoadingText = "Impostor roles\nCouncillor";
Councillor.SetupCustomOption();
RoleLoadingText = "Impostor roles\nCursed Wolf";
SetupRoleOptions(1000, TabGroup.ImpostorRoles, CustomRoles.CursedWolf); //TOH_Y
GuardSpellTimes = IntegerOptionItem.Create(1010, "GuardSpellTimes", new(1, 15, 1), 3, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.CursedWolf])
.SetValueFormat(OptionFormat.Times);
killAttacker = BooleanOptionItem.Create(1011, "killAttacker", true, TabGroup.ImpostorRoles, false).SetParent(CustomRoleSpawnChances[CustomRoles.CursedWolf]);
RoleLoadingText = "Impostor roles\nDeathpact";
Deathpact.SetupCustomOption();
RoleLoadingText = "Impostor roles\nGreedy";
Greedier.SetupCustomOption(); //TOH_Y
RoleLoadingText = "Impostor roles\nHangman";
Hangman.SetupCustomOption();
LoadingPercentage = 7;
RoleLoadingText = "Impostor roles\nInhibitor";
SetupRoleOptions(1500, TabGroup.ImpostorRoles, CustomRoles.Inhibitor);
InhibitorCD = FloatOptionItem.Create(1510, "KillCooldown", new(0f, 180f, 2.5f), 20f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Inhibitor])
.SetValueFormat(OptionFormat.Seconds);
InhibitorCDAfterMeetings = FloatOptionItem.Create(1511, "AfterMeetingKillCooldown", new(0f, 180f, 2.5f), 22.5f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Inhibitor])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nKamikaze";
Kamikaze.SetupCustomOption();
RoleLoadingText = "Impostor roles\nKidnapper";
Kidnapper.SetupCustomOption();
RoleLoadingText = "Impostor roles\nLibrarian";
Librarian.SetupCustomOption();
RoleLoadingText = "Impostor roles\nCantankerous";
Cantankerous.SetupCustomOption();
RoleLoadingText = "Impostor roles\nDuellist";
Duellist.SetupCustomOption();
RoleLoadingText = "Impostor roles\nYin Yanger";
YinYanger.SetupCustomOption();
RoleLoadingText = "Impostor roles\nConsort";
Consort.SetupCustomOption();
RoleLoadingText = "Impostor roles\nMafioso";
Mafioso.SetupCustomOption();
RoleLoadingText = "Impostor roles\nNullifier";
Nullifier.SetupCustomOption();
RoleLoadingText = "Impostor roles\nChronomancer";
Chronomancer.SetupCustomOption();
RoleLoadingText = "Impostor roles\nStealth";
Stealth.SetupCustomOption();
RoleLoadingText = "Impostor roles\nPenguin";
Penguin.SetupCustomOption();
RoleLoadingText = "Impostor roles\nSapper";
Sapper.SetupCustomOption();
RoleLoadingText = "Impostor roles\nMastermind";
Mastermind.SetupCustomOption();
RoleLoadingText = "Impostor roles\nGambler";
Gambler.SetupCustomOption();
RoleLoadingText = "Impostor roles\nRiftMaker";
RiftMaker.SetupCustomOption();
RoleLoadingText = "Impostor roles\nHitman";
Hitman.SetupCustomOption();
RoleLoadingText = "Impostor roles\nLurker";
Lurker.SetupCustomOption();
// Mare.SetupCustomOption();
RoleLoadingText = "Impostor roles\nMercenary";
SerialKiller.SetupCustomOption();
RoleLoadingText = "Impostor roles\nNinja";
Assassin.SetupCustomOption();
RoleLoadingText = "Impostor roles\nUndertaker";
Undertaker.SetupCustomOption();
RoleLoadingText = "Impostor roles\nQuick Shooter";
QuickShooter.SetupCustomOption();
RoleLoadingText = "Impostor roles\nSaboteur";
SetupRoleOptions(10005, TabGroup.ImpostorRoles, CustomRoles.Saboteur);
SaboteurCD = FloatOptionItem.Create(10015, "KillCooldown", new(0f, 180f, 2.5f), 17.5f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Saboteur])
.SetValueFormat(OptionFormat.Seconds);
SaboteurCDAfterMeetings = FloatOptionItem.Create(10016, "AfterMeetingKillCooldown", new(0f, 180f, 2.5f), 25f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Saboteur])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nSniper";
Sniper.SetupCustomOption();
RoleLoadingText = "Impostor roles\nDoppelganger";
Doppelganger.SetupCustomOption();
RoleLoadingText = "Impostor roles\nBlackmailer";
Blackmailer.SetupCustomOption();
RoleLoadingText = "Impostor roles\nWitch";
Witch.SetupCustomOption();
RoleLoadingText = "Impostor roles\nUnderdog";
SetupRoleOptions(10025, TabGroup.ImpostorRoles, CustomRoles.Underdog);
UnderdogMaximumPlayersNeededToKill = IntegerOptionItem.Create(10030, "UnderdogMaximumPlayersNeededToKill", new(1, 15, 1), 5, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Underdog])
.SetValueFormat(OptionFormat.Players);
UnderdogKillCooldown = FloatOptionItem.Create(10031, "KillCooldown", new(0f, 180f, 2.5f), 15f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Underdog])
.SetValueFormat(OptionFormat.Seconds);
UnderdogKillCooldownWithMorePlayersAlive = FloatOptionItem.Create(10032, "UnderdogKillCooldownWithMorePlayersAlive", new(0f, 180f, 2.5f), 35f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Underdog])
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 8;
RoleLoadingText = "Impostor roles\nCamouflager";
Camouflager.SetupCustomOption();
RoleLoadingText = "Impostor roles\nCleaner";
SetupRoleOptions(2600, TabGroup.ImpostorRoles, CustomRoles.Cleaner);
CleanerKillCooldown = FloatOptionItem.Create(2610, "KillCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Cleaner])
.SetValueFormat(OptionFormat.Seconds);
KillCooldownAfterCleaning = FloatOptionItem.Create(2611, "KillCooldownAfterCleaning", new(0f, 180f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Cleaner])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nConsigliere";
EvilDiviner.SetupCustomOption();
RoleLoadingText = "Impostor roles\nDisruptor";
AntiAdminer.SetupCustomOption();
RoleLoadingText = "Impostor roles\nFireworker";
FireWorks.SetupCustomOption();
RoleLoadingText = "Impostor roles\nGangster";
Gangster.SetupCustomOption();
LoadingPercentage = 9;
RoleLoadingText = "Impostor roles\nGodfather";
SetupRoleOptions(555420, TabGroup.ImpostorRoles, CustomRoles.Godfather);
GodfatherCancelVote = CreateVoteCancellingUseSetting(555422, CustomRoles.Godfather, TabGroup.ImpostorRoles);
RoleLoadingText = "Impostor roles\nMorphling";
Morphling.SetupCustomOption();
RoleLoadingText = "Impostor roles\nNemesis";
SetupRoleOptions(3100, TabGroup.ImpostorRoles, CustomRoles.Mafia);
MafiaCanKillNum = IntegerOptionItem.Create(3200, "MafiaCanKillNum", new(0, 15, 1), 1, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mafia])
.SetValueFormat(OptionFormat.Players);
LegacyMafia = BooleanOptionItem.Create(3210, "LegacyMafia", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mafia]);
MafiaShapeshiftCD = FloatOptionItem.Create(3211, "ShapeshiftCooldown", new(1f, 180f, 1f), 15f, TabGroup.ImpostorRoles, false)
.SetParent(LegacyMafia)
.SetValueFormat(OptionFormat.Seconds);
MafiaShapeshiftDur = FloatOptionItem.Create(3212, "ShapeshiftDuration", new(1f, 180f, 1f), 30f, TabGroup.ImpostorRoles, false)
.SetParent(LegacyMafia)
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nTime Thief";
TimeThief.SetupCustomOption();
RoleLoadingText = "Impostor roles\nVindicator";
SetupRoleOptions(3400, TabGroup.ImpostorRoles, CustomRoles.Vindicator);
VindicatorAdditionalVote = IntegerOptionItem.Create(3410, "MayorAdditionalVote", new(1, 30, 1), 1, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Vindicator])
.SetValueFormat(OptionFormat.Votes);
VindicatorHideVote = BooleanOptionItem.Create(3411, "MayorHideVote", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Vindicator]);
RoleLoadingText = "Impostor roles\nVisionary";
SetupRoleOptions(16150, TabGroup.ImpostorRoles, CustomRoles.Visionary);
LoadingPercentage = 10;
RoleLoadingText = "Impostor roles\nEscapist";
SetupRoleOptions(3600, TabGroup.ImpostorRoles, CustomRoles.Escapee);
//EscapeeSSDuration = FloatOptionItem.Create(3610, "ShapeshiftDuration", new(1f, 180f, 1f), 1, TabGroup.ImpostorRoles, false)
// .SetParent(CustomRoleSpawnChances[CustomRoles.Escapee])
// .SetValueFormat(OptionFormat.Seconds);
EscapeeSSCD = FloatOptionItem.Create(3611, "ShapeshiftCooldown", new(1f, 180f, 1f), 5f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Escapee])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nSoul Catcher";
SetupRoleOptions(3700, TabGroup.ImpostorRoles, CustomRoles.ImperiusCurse);
ShapeImperiusCurseShapeshiftDuration = FloatOptionItem.Create(3710, "ShapeshiftDuration", new(2.5f, 300f, 2.5f), 20f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.ImperiusCurse])
.SetValueFormat(OptionFormat.Seconds);
ImperiusCurseShapeshiftCooldown = FloatOptionItem.Create(3711, "ShapeshiftCooldown", new(1f, 180f, 1f), 30f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.ImperiusCurse])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nMiner";
SetupRoleOptions(3800, TabGroup.ImpostorRoles, CustomRoles.Miner);
//MinerSSDuration = FloatOptionItem.Create(3810, "ShapeshiftDuration", new(1f, 180f, 1f), 1, TabGroup.ImpostorRoles, false)
// .SetParent(CustomRoleSpawnChances[CustomRoles.Miner])
// .SetValueFormat(OptionFormat.Seconds);
MinerSSCD = FloatOptionItem.Create(3811, "ShapeshiftCooldown", new(1f, 180f, 1f), 15f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Miner])
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 11;
RoleLoadingText = "Impostor roles\nPuppeteer";
SetupRoleOptions(3900, TabGroup.ImpostorRoles, CustomRoles.Puppeteer);
PuppeteerCD = FloatOptionItem.Create(3911, "PuppeteerCD", new(2.5f, 60f, 2.5f), 22.5f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer])
.SetValueFormat(OptionFormat.Seconds);
PuppeteerCanKillNormally = BooleanOptionItem.Create(3917, "PuppeteerCanKillNormally", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
PuppeteerKCD = FloatOptionItem.Create(3912, "PuppeteerKCD", new(2.5f, 60f, 2.5f), 25f, TabGroup.ImpostorRoles, false)
.SetParent(PuppeteerCanKillNormally)
.SetValueFormat(OptionFormat.Seconds);
PuppeteerMinDelay = IntegerOptionItem.Create(3913, "PuppeteerMinDelay", new(0, 90, 1), 3, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer])
.SetValueFormat(OptionFormat.Seconds);
PuppeteerMaxDelay = IntegerOptionItem.Create(3914, "PuppeteerMaxDelay", new(0, 90, 1), 7, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer])
.SetValueFormat(OptionFormat.Seconds);
PuppeteerManipulationEndsAfterFixedTime = BooleanOptionItem.Create(3915, "PuppeteerManipulationEndsAfterFixedTime", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
PuppeteerManipulationEndsAfterTime = IntegerOptionItem.Create(3916, "PuppeteerManipulationEndsAfterTime", new(0, 90, 1), 30, TabGroup.ImpostorRoles, false)
.SetParent(PuppeteerManipulationEndsAfterFixedTime)
.SetValueFormat(OptionFormat.Seconds);
PuppeteerManipulationBypassesLazy = BooleanOptionItem.Create(3918, "PuppeteerManipulationBypassesLazy", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
PuppeteerManipulationBypassesLazyGuy = BooleanOptionItem.Create(3922, "PuppeteerManipulationBypassesLazyGuy", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
PuppeteerPuppetCanKillImpostors = BooleanOptionItem.Create(3919, "PuppeteerPuppetCanKillImpostors", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
PuppeteerPuppetCanKillPuppeteer = BooleanOptionItem.Create(3920, "PuppeteerPuppetCanKillPuppeteer", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
PuppeteerMaxPuppets = IntegerOptionItem.Create(3921, "PuppeteerMaxPuppets", new(0, 30, 1), 5, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer])
.SetValueFormat(OptionFormat.Times);
PuppeteerDiesAfterMaxPuppets = BooleanOptionItem.Create(3923, "PuppeteerDiesAfterMaxPuppets", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Puppeteer]);
RoleLoadingText = "Impostor roles\nScavenger";
SetupRoleOptions(4000, TabGroup.ImpostorRoles, CustomRoles.Scavenger);
ScavengerKillCooldown = FloatOptionItem.Create(4010, "KillCooldown", new(0f, 180f, 2.5f), 40f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Scavenger])
.SetValueFormat(OptionFormat.Seconds);
ScavengerKillDuration = FloatOptionItem.Create(4011, "ScavengerKillDuration", new(0f, 90f, 0.5f), 5f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Scavenger])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nShapemaster";
//SetupRoleOptions(4100, TabGroup.ImpostorRoles, CustomRoles.ShapeMaster);
//ShapeMasterShapeshiftDuration = FloatOptionItem.Create(4110, "ShapeshiftDuration", new(0, 180, 1), 10, TabGroup.ImpostorRoles, false)
// .SetParent(CustomRoleSpawnChances[CustomRoles.ShapeMaster])
// .SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nSwooper";
Swooper.SetupCustomOption();
RoleLoadingText = "Impostor roles\nTrickster";
SetupRoleOptions(4300, TabGroup.ImpostorRoles, CustomRoles.Trickster);
RoleLoadingText = "Impostor roles\nVampire";
Vampire.SetupCustomOption();
RoleLoadingText = "Impostor roles\nWarlock";
SetupRoleOptions(4600, TabGroup.ImpostorRoles, CustomRoles.Warlock);
WarlockCanKillAllies = BooleanOptionItem.Create(4610, "CanKillAllies", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Warlock]);
WarlockCanKillSelf = BooleanOptionItem.Create(4611, "CanKillSelf", false, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Warlock]);
WarlockShiftDuration = FloatOptionItem.Create(4612, "ShapeshiftDuration", new(0, 180, 1), 1, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Warlock])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Impostor roles\nWildling";
Wildling.SetupCustomOption();
LoadingPercentage = 12;
RoleLoadingText = "Impostor roles\nAnonymous";
Hacker.SetupCustomOption(); //anonymous
RoleLoadingText = "Impostor roles\nDazzler";
Dazzler.SetupCustomOption();
RoleLoadingText = "Impostor roles\nDevourer";
Devourer.SetupCustomOption();
RoleLoadingText = "Impostor roles\nTwister";
Twister.SetupCustomOption();
LoadingPercentage = 13;
RoleLoadingText = "Madmate roles\nCrewpostor";
SetupRoleOptions(4800, TabGroup.ImpostorRoles, CustomRoles.Crewpostor);
CrewpostorCanKillAllies = BooleanOptionItem.Create(4810, "CanKillAllies", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Crewpostor]);
CrewpostorKnowsAllies = BooleanOptionItem.Create(4811, "CrewpostorKnowsAllies", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Crewpostor]);
AlliesKnowCrewpostor = BooleanOptionItem.Create(4812, "AlliesKnowCrewpostor", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Crewpostor]);
CrewpostorLungeKill = BooleanOptionItem.Create(4813, "CrewpostorLungeKill", true, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Crewpostor]);
CrewpostorKillAfterTask = IntegerOptionItem.Create(4814, "CrewpostorKillAfterTask", new(1, 50, 1), 1, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Crewpostor]);
CrewpostorTasks = OverrideTasksData.Create(4815, TabGroup.ImpostorRoles, CustomRoles.Crewpostor);
RoleLoadingText = "Madmate roles\nParasite";
SetupSingleRoleOptions(4900, TabGroup.ImpostorRoles, CustomRoles.Parasite, 1, zeroOne: false);
ParasiteCD = FloatOptionItem.Create(4910, "KillCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Parasite])
.SetValueFormat(OptionFormat.Seconds);
//==================================================================================================================================//
LoadingPercentage = 14;
RoleLoadingText = "Vanilla roles\nCrewmate";
SetupRoleOptions(5050, TabGroup.CrewmateRoles, CustomRoles.CrewmateTOHE);
RoleLoadingText = "Vanilla roles\nEngineer";
SetupRoleOptions(5000, TabGroup.CrewmateRoles, CustomRoles.EngineerTOHE);
RoleLoadingText = "Vanilla roles\nScientist";
SetupRoleOptions(5100, TabGroup.CrewmateRoles, CustomRoles.ScientistTOHE);
ScientistCD = FloatOptionItem.Create(5110, "VitalsCooldown", new(1f, 250f, 1f), 3f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.ScientistTOHE])
.SetValueFormat(OptionFormat.Seconds);
ScientistDur = FloatOptionItem.Create(5111, "VitalsDuration", new(1f, 250f, 1f), 15f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.ScientistTOHE])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Crewmate roles\nAddict";
Addict.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nAlchemist";
Alchemist.SetupCustomOption();
LoadingPercentage = 15;
RoleLoadingText = "Crewmate roles\nCelebrity";
SetupRoleOptions(5300, TabGroup.CrewmateRoles, CustomRoles.CyberStar);
ImpKnowCyberStarDead = BooleanOptionItem.Create(5400, "ImpKnowCyberStarDead", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.CyberStar]);
NeutralKnowCyberStarDead = BooleanOptionItem.Create(5500, "NeutralKnowCyberStarDead", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.CyberStar]);
RoleLoadingText = "Crewmate roles\nCleanser";
Cleanser.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nVentguard";
SetupSingleRoleOptions(5525, TabGroup.CrewmateRoles, CustomRoles.Ventguard, 1);
VentguardAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(5527, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 1f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Ventguard])
.SetValueFormat(OptionFormat.Times);
VentguardMaxGuards = IntegerOptionItem.Create(5528, "VentguardMaxGuards", new(1, 30, 1), 3, TabGroup.CrewmateRoles, false).SetParent(CustomRoleSpawnChances[CustomRoles.Ventguard]);
VentguardBlockDoesNotAffectCrew = BooleanOptionItem.Create(5529, "VentguardBlockDoesNotAffectCrew", true, TabGroup.CrewmateRoles, false).SetParent(CustomRoleSpawnChances[CustomRoles.Ventguard]);
RoleLoadingText = "Crewmate roles\nDemolitionist";
SetupSingleRoleOptions(5550, TabGroup.CrewmateRoles, CustomRoles.Demolitionist, 1);
DemolitionistVentTime = FloatOptionItem.Create(5552, "DemolitionistVentTime", new(0f, 90f, 1f), 5f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Demolitionist])
.SetValueFormat(OptionFormat.Seconds);
DemolitionistKillerDiesOnMeetingCall = BooleanOptionItem.Create(5553, "DemolitionistKillerDiesOnMeetingCall", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Demolitionist]);
RoleLoadingText = "Crewmate roles\nTask Manager";
SetupRoleOptions(5575, TabGroup.CrewmateRoles, CustomRoles.TaskManager);
RoleLoadingText = "Crewmate roles\nShiftguard";
SetupRoleOptions(5594, TabGroup.CrewmateRoles, CustomRoles.Shiftguard);
RoleLoadingText = "Crewmate roles\nMole";
Mole.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nSentinel";
Sentinel.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nElectric";
Electric.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nPhilantropist";
//Philantropist.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nTornado";
Tornado.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nDruid";
Druid.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nInsight";
SetupRoleOptions(5650, TabGroup.CrewmateRoles, CustomRoles.Insight);
InsightTasks = OverrideTasksData.Create(5653, TabGroup.CrewmateRoles, CustomRoles.Insight);
RoleLoadingText = "Crewmate roles\nTunneler";
SetupRoleOptions(5592, TabGroup.CrewmateRoles, CustomRoles.Tunneler);
RoleLoadingText = "Crewmate roles\nDetour";
SetupRoleOptions(5590, TabGroup.CrewmateRoles, CustomRoles.Detour);
RoleLoadingText = "Crewmate roles\nDrainer";
Drainer.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nGuess Manager";
GuessManagerRole.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nAltruist";
Altruist.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nTransmitter";
Transmitter.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nAutocrat";
Autocrat.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nBenefactor";
Benefactor.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nNightmare";
Nightmare.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nCamera Man";
CameraMan.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nHacker";
NiceHacker.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nDoormaster";
Doormaster.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nRicochet";
Ricochet.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nEscort";
Escort.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nAnalyzer";
Analyzer.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nGaulois";
Gaulois.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nDonut Delivery";
DonutDelivery.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nAid";
Aid.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nTether";
Tether.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nSpy";
Spy.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nEnigma";
Enigma.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nExpress";
SetupRoleOptions(5585, TabGroup.CrewmateRoles, CustomRoles.Express);
ExpressSpeed = FloatOptionItem.Create(5587, "ExpressSpeed", new(0.25f, 5f, 0.25f), 1.5f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Express])
.SetValueFormat(OptionFormat.Multiplier);
ExpressSpeedDur = IntegerOptionItem.Create(5588, "ExpressSpeedDur", new(0, 90, 1), 5, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Express])
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 16;
RoleLoadingText = "Crewmate roles\nNice Eraser";
NiceEraser.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nDoctor";
SetupRoleOptions(5600, TabGroup.CrewmateRoles, CustomRoles.Doctor);
DoctorTaskCompletedBatteryCharge = FloatOptionItem.Create(5610, "DoctorTaskCompletedBatteryCharge", new(0f, 250f, 1f), 50f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Doctor])
.SetValueFormat(OptionFormat.Seconds);
DoctorVisibleToEveryone = BooleanOptionItem.Create(5611, "DoctorVisibleToEveryone", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Doctor]);
RoleLoadingText = "Crewmate roles\nLazy Guy";
SetupRoleOptions(5700, TabGroup.CrewmateRoles, CustomRoles.Needy);
RoleLoadingText = "Crewmate roles\nLuckey";
SetupRoleOptions(5800, TabGroup.CrewmateRoles, CustomRoles.Luckey);
LuckeyProbability = IntegerOptionItem.Create(5900, "LuckeyProbability", new(0, 100, 5), 50, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Luckey])
.SetValueFormat(OptionFormat.Percent);
RoleLoadingText = "Crewmate roles\nSuper Star";
SetupRoleOptions(6000, TabGroup.CrewmateRoles, CustomRoles.SuperStar);
EveryOneKnowSuperStar = BooleanOptionItem.Create(6010, "EveryOneKnowSuperStar", true, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SuperStar]);
RoleLoadingText = "Crewmate roles\nTracefinder";
Tracefinder.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nTransporter";
SetupRoleOptions(6200, TabGroup.CrewmateRoles, CustomRoles.Transporter);
TransporterTeleportMax = IntegerOptionItem.Create(6210, "TransporterTeleportMax", new(0, 90, 1), 5, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Transporter])
.SetValueFormat(OptionFormat.Times);
TransporterTasks = OverrideTasksData.Create(6211, TabGroup.CrewmateRoles, CustomRoles.Transporter);
LoadingPercentage = 17;
RoleLoadingText = "Crewmate roles\nAdmirer";
Admirer.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nChameleon";
Chameleon.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nCoroner";
Bloodhound.SetupCustomOption();
LoadingPercentage = 18;
RoleLoadingText = "Crewmate roles\nDeputy";
Deputy.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nDetective";
SetupRoleOptions(6600, TabGroup.CrewmateRoles, CustomRoles.Detective);
DetectiveCanknowKiller = BooleanOptionItem.Create(6610, "DetectiveCanknowKiller", true, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Detective]);
RoleLoadingText = "Crewmate roles\nFortune Teller";
Divinator.SetupCustomOption(); // Fortune Teller
RoleLoadingText = "Crewmate roles\nGrenadier";
SetupRoleOptions(6800, TabGroup.CrewmateRoles, CustomRoles.Grenadier);
GrenadierSkillCooldown = FloatOptionItem.Create(6810, "GrenadierSkillCooldown", new(0f, 180f, 1f), 25f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier])
.SetValueFormat(OptionFormat.Seconds);
GrenadierSkillDuration = FloatOptionItem.Create(6811, "GrenadierSkillDuration", new(0f, 180f, 1f), 10f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier])
.SetValueFormat(OptionFormat.Seconds);
GrenadierCauseVision = FloatOptionItem.Create(6812, "GrenadierCauseVision", new(0f, 5f, 0.05f), 0.3f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier])
.SetValueFormat(OptionFormat.Multiplier);
GrenadierCanAffectNeutral = BooleanOptionItem.Create(6813, "GrenadierCanAffectNeutral", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier]);
GrenadierSkillMaxOfUseage = IntegerOptionItem.Create(6814, "GrenadierSkillMaxOfUseage", new(0, 180, 1), 2, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier])
.SetValueFormat(OptionFormat.Times);
GrenadierAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(6815, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 0.5f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier])
.SetValueFormat(OptionFormat.Times);
LoadingPercentage = 19;
RoleLoadingText = "Crewmate roles\nLighter";
SetupSingleRoleOptions(6850, TabGroup.CrewmateRoles, CustomRoles.Lighter, 1);
LighterSkillCooldown = FloatOptionItem.Create(6852, "LighterSkillCooldown", new(0f, 180f, 1f), 25f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
.SetValueFormat(OptionFormat.Seconds);
LighterSkillDuration = FloatOptionItem.Create(6853, "LighterSkillDuration", new(0f, 180f, 1f), 10f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
.SetValueFormat(OptionFormat.Seconds);
LighterVisionNormal = FloatOptionItem.Create(6854, "LighterVisionNormal", new(0f, 5f, 0.05f), 0.9f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
.SetValueFormat(OptionFormat.Multiplier);
LighterVisionOnLightsOut = FloatOptionItem.Create(6855, "LighterVisionOnLightsOut", new(0f, 5f, 0.05f), 0.35f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
.SetValueFormat(OptionFormat.Multiplier);
LighterSkillMaxOfUseage = IntegerOptionItem.Create(6856, "AbilityUseLimit", new(0, 180, 1), 2, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
.SetValueFormat(OptionFormat.Times);
LighterAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(6857, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 1.5f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
.SetValueFormat(OptionFormat.Times);
RoleLoadingText = "Crewmate roles\nSecurity Guard";
SetupRoleOptions(6860, TabGroup.CrewmateRoles, CustomRoles.SecurityGuard);
SecurityGuardSkillCooldown = FloatOptionItem.Create(6862, "SecurityGuardSkillCooldown", new(0f, 180f, 1f), 15f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SecurityGuard])
.SetValueFormat(OptionFormat.Seconds);
SecurityGuardSkillDuration = FloatOptionItem.Create(6863, "SecurityGuardSkillDuration", new(0f, 180f, 1f), 10f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SecurityGuard])
.SetValueFormat(OptionFormat.Seconds);
SecurityGuardSkillMaxOfUseage = IntegerOptionItem.Create(6866, "AbilityUseLimit", new(0, 180, 1), 1, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SecurityGuard])
.SetValueFormat(OptionFormat.Times);
SecurityGuardAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(6867, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 0.4f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SecurityGuard])
.SetValueFormat(OptionFormat.Times);
LoadingPercentage = 20;
RoleLoadingText = "Crewmate roles\nInspector";
ParityCop.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nMechanic";
SabotageMaster.SetupCustomOption(); //Mechanic
RoleLoadingText = "Crewmate roles\nMedic";
Medic.SetupCustomOption();
LoadingPercentage = 21;
RoleLoadingText = "Crewmate roles\nMedium";
Mediumshiper.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nIgnitor";
Ignitor.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nMerchant";
Merchant.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nMortician";
Mortician.SetupCustomOption();
LoadingPercentage = 22;
RoleLoadingText = "Crewmate roles\nObserver";
SetupRoleOptions(7500, TabGroup.CrewmateRoles, CustomRoles.Observer);
RoleLoadingText = "Crewmate roles\nOracle";
Oracle.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nPacifist";
SetupRoleOptions(7700, TabGroup.CrewmateRoles, CustomRoles.DovesOfNeace);
DovesOfNeaceCooldown = FloatOptionItem.Create(7710, "DovesOfNeaceCooldown", new(0f, 180f, 1f), 7f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DovesOfNeace])
.SetValueFormat(OptionFormat.Seconds);
DovesOfNeaceMaxOfUseage = IntegerOptionItem.Create(7711, "DovesOfNeaceMaxOfUseage", new(0, 180, 1), 0, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DovesOfNeace])
.SetValueFormat(OptionFormat.Times);
DovesOfNeaceAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(7712, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 0.2f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DovesOfNeace])
.SetValueFormat(OptionFormat.Times);
RoleLoadingText = "Crewmate roles\nParanoid";
SetupRoleOptions(7800, TabGroup.CrewmateRoles, CustomRoles.Paranoia);
ParanoiaNumOfUseButton = IntegerOptionItem.Create(7810, "ParanoiaNumOfUseButton", new(0, 90, 1), 3, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Paranoia])
.SetValueFormat(OptionFormat.Times);
ParanoiaVentCooldown = FloatOptionItem.Create(7811, "ParanoiaVentCooldown", new(0, 180, 1), 10, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Paranoia])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Crewmate roles\nPsychic";
Psychic.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nSnitch";
Snitch.SetupCustomOption();
LoadingPercentage = 23;
RoleLoadingText = "Crewmate roles\nSpiritualist";
Spiritualist.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nTime Manager";
TimeManager.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nTime Master";
SetupRoleOptions(8950, TabGroup.CrewmateRoles, CustomRoles.TimeMaster);
TimeMasterSkillCooldown = FloatOptionItem.Create(8960, "TimeMasterSkillCooldown", new(0f, 180f, 1f), 20f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.TimeMaster])
.SetValueFormat(OptionFormat.Seconds);
TimeMasterSkillDuration = FloatOptionItem.Create(8961, "TimeMasterSkillDuration", new(0f, 180f, 1f), 10f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.TimeMaster])
.SetValueFormat(OptionFormat.Seconds);
TimeMasterMaxUses = IntegerOptionItem.Create(8962, "TimeMasterMaxUses", new(0, 180, 1), 1, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.TimeMaster])
.SetValueFormat(OptionFormat.Times);
TimeMasterAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(8963, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 0.4f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.TimeMaster])
.SetValueFormat(OptionFormat.Times);
RoleLoadingText = "Crewmate roles\nTracker";
Tracker.SetupCustomOption();
LoadingPercentage = 24;
RoleLoadingText = "Crewmate roles\nBodyguard";
SetupRoleOptions(8400, TabGroup.CrewmateRoles, CustomRoles.Bodyguard);
BodyguardProtectRadius = FloatOptionItem.Create(8410, "BodyguardProtectRadius", new(0.5f, 5f, 0.5f), 1.5f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bodyguard])
.SetValueFormat(OptionFormat.Multiplier);
BodyguardKillsKiller = BooleanOptionItem.Create(8411, "BodyguardKillsKiller", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bodyguard]);
RoleLoadingText = "Crewmate roles\nCrusader";
Crusader.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nJailor";
//Counterfeiter.SetupCustomOption();
Jailor.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nWitness";
SetupSingleRoleOptions(8550, TabGroup.CrewmateRoles, CustomRoles.Witness, 1);
WitnessCD = FloatOptionItem.Create(8552, "AbilityCD", new(0f, 60f, 2.5f), 15f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Witness])
.SetValueFormat(OptionFormat.Seconds);
WitnessTime = IntegerOptionItem.Create(8553, "WitnessTime", new(0, 90, 1), 10, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Witness])
.SetValueFormat(OptionFormat.Seconds);
WitnessUsePet = CreatePetUseSetting(8554, CustomRoles.Witness);
RoleLoadingText = "Crewmate roles\nVigilante";
SwordsMan.SetupCustomOption();
//Reverie.SetupCustomOption();
//RoleLoadingText = "Crewmate roles\nRetributionist";
//SetupRoleOptions(8700, TabGroup.CrewmateRoles, CustomRoles.Retributionist);
//RetributionistCanKillNum = IntegerOptionItem.Create(8710, "RetributionistCanKillNum", new(0, 15, 1), 1, TabGroup.CrewmateRoles, false)
// .SetParent(CustomRoleSpawnChances[CustomRoles.Retributionist])
// .SetValueFormat(OptionFormat.Players);
//MinimumPlayersAliveToRetri = IntegerOptionItem.Create(8718, "MinimumPlayersAliveToRetri", new(0, 15, 1), 5, TabGroup.CrewmateRoles, false)
// .SetParent(CustomRoleSpawnChances[CustomRoles.Retributionist])
// .SetValueFormat(OptionFormat.Players);
//CanOnlyRetributeWithTasksDone = BooleanOptionItem.Create(8715, "CanOnlyRetributeWithTasksDone", true, TabGroup.CrewmateRoles, false)
// .SetParent(CustomRoleSpawnChances[CustomRoles.Retributionist]);
//RetributionistTasks = OverrideTasksData.Create(8720, TabGroup.CrewmateRoles, CustomRoles.Retributionist);
LoadingPercentage = 25;
RoleLoadingText = "Crewmate roles\nSheriff";
Sheriff.SetupCustomOption();
LoadingPercentage = 26;
RoleLoadingText = "Crewmate roles\nVeteran";
SetupRoleOptions(8908, TabGroup.CrewmateRoles, CustomRoles.Veteran);
VeteranSkillCooldown = FloatOptionItem.Create(8910, "VeteranSkillCooldown", new(0f, 180f, 1f), 20f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Veteran])
.SetValueFormat(OptionFormat.Seconds);
VeteranSkillDuration = FloatOptionItem.Create(8911, "VeteranSkillDuration", new(0f, 180f, 1f), 10f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Veteran])
.SetValueFormat(OptionFormat.Seconds);
VeteranSkillMaxOfUseage = IntegerOptionItem.Create(8912, "VeteranSkillMaxOfUseage", new(0, 180, 1), 1, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Veteran])
.SetValueFormat(OptionFormat.Times);
VeteranAbilityUseGainWithEachTaskCompleted = FloatOptionItem.Create(8913, "AbilityUseGainWithEachTaskCompleted", new(0f, 5f, 0.1f), 0.3f, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Veteran])
.SetValueFormat(OptionFormat.Times);
RoleLoadingText = "Crewmate roles\nNice Guesser";
SetupRoleOptions(8600, TabGroup.CrewmateRoles, CustomRoles.NiceGuesser);
GGCanGuessTime = IntegerOptionItem.Create(8610, "GuesserCanGuessTimes", new(0, 15, 1), 15, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.NiceGuesser])
.SetValueFormat(OptionFormat.Times);
GGCanGuessCrew = BooleanOptionItem.Create(8611, "GGCanGuessCrew", true, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.NiceGuesser]);
GGCanGuessAdt = BooleanOptionItem.Create(8612, "GGCanGuessAdt", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.NiceGuesser]);
GGTryHideMsg = BooleanOptionItem.Create(8613, "GuesserTryHideMsg", true, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.NiceGuesser])
.SetColor(Color.green);
RoleLoadingText = "Crewmate roles\nDictator";
SetupRoleOptions(9100, TabGroup.CrewmateRoles, CustomRoles.Dictator);
RoleLoadingText = "Crewmate roles\nSwapper";
NiceSwapper.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nGuardian";
SetupRoleOptions(9200, TabGroup.CrewmateRoles, CustomRoles.Guardian);
GuardianTasks = OverrideTasksData.Create(9210, TabGroup.CrewmateRoles, CustomRoles.Guardian);
RoleLoadingText = "Crewmate roles\nJudge";
Judge.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nLookout";
SetupRoleOptions(9150, TabGroup.CrewmateRoles, CustomRoles.Lookout);
RoleLoadingText = "Crewmate roles\nSpeedrunner";
SetupRoleOptions(9170, TabGroup.CrewmateRoles, CustomRoles.Speedrunner);
SpeedrunnerNotifyKillers = BooleanOptionItem.Create(9178, "SpeedrunnerNotifyKillers", true, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Speedrunner]);
SpeedrunnerNotifyAtXTasksLeft = IntegerOptionItem.Create(9179, "SpeedrunnerNotifyAtXTasksLeft", new(0, 90, 1), 3, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Speedrunner]);
SpeedrunnerTasks = OverrideTasksData.Create(9180, TabGroup.CrewmateRoles, CustomRoles.Speedrunner);
RoleLoadingText = "Crewmate roles\nMarshall";
Marshall.SetupCustomOption();
LoadingPercentage = 27;
RoleLoadingText = "Crewmate roles\nMayor";
SetupRoleOptions(9500, TabGroup.CrewmateRoles, CustomRoles.Mayor);
MayorAdditionalVote = IntegerOptionItem.Create(9510, "MayorAdditionalVote", new(0, 90, 1), 3, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mayor])
.SetValueFormat(OptionFormat.Votes);
MayorHasPortableButton = BooleanOptionItem.Create(9511, "MayorHasPortableButton", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mayor]);
MayorNumOfUseButton = IntegerOptionItem.Create(9512, "MayorNumOfUseButton", new(1, 90, 1), 1, TabGroup.CrewmateRoles, false)
.SetParent(MayorHasPortableButton)
.SetValueFormat(OptionFormat.Times);
MayorHideVote = BooleanOptionItem.Create(9513, "MayorHideVote", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mayor]);
MayorRevealWhenDoneTasks = BooleanOptionItem.Create(9514, "MayorRevealWhenDoneTasks", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mayor]);
MayorTasks = OverrideTasksData.Create(9515, TabGroup.CrewmateRoles, CustomRoles.Mayor);
RoleLoadingText = "Crewmate roles\nMonarch";
Monarch.SetupCustomOption();
RoleLoadingText = "Crewmate roles\nFarseer";
Farseer.SetupCustomOption();
LoadingPercentage = 28;
RoleLoadingText = "Crewmate roles\nTelecommunication";
Monitor.SetupCustomOption();
RoleLoadingText = "Neutral roles\nAmnesiac";
Amnesiac.SetupCustomOption();
RoleLoadingText = "Neutral roles\nFollower";
Totocalcio.SetupCustomOption();
RoleLoadingText = "Neutral roles\nRomantic";
Romantic.SetupCustomOption();
LoadingPercentage = 29;
RoleLoadingText = "Neutral roles\nHater";
FFF.SetupCustomOption();
RoleLoadingText = "Neutral roles\nLawyer";
Lawyer.SetupCustomOption();
RoleLoadingText = "Neutral roles\nMaverick";
Maverick.SetupCustomOption();
RoleLoadingText = "Neutral roles\nOpportunist";
SetupRoleOptions(10100, TabGroup.NeutralRoles, CustomRoles.Opportunist);
OppoImmuneToAttacksWhenTasksDone = BooleanOptionItem.Create(10110, "ImmuneToAttacksWhenTasksDone", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Opportunist]);
OpportunistTasks = OverrideTasksData.Create(10111, TabGroup.NeutralRoles, CustomRoles.Opportunist);
RoleLoadingText = "Neutral roles\nPursuer";
Pursuer.SetupCustomOption();
//NWitch.SetupCustomOption();
/* SetupSingleRoleOptions(6050530, TabGroup.NeutralRoles, CustomRoles.NWitch, 1, zeroOne: false);
ControlCooldown = FloatOptionItem.Create(6050532, "ControlCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.NWitch])
.SetValueFormat(OptionFormat.Seconds); */
LoadingPercentage = 30;
//RoleLoadingText = "Neutral roles\nCursed Soul";
//CursedSoul.SetupCustomOption();
RoleLoadingText = "Neutral roles\nDemon";
Gamer.SetupCustomOption();
RoleLoadingText = "Neutral roles\nExecutioner";
Executioner.SetupCustomOption();
RoleLoadingText = "Neutral roles\nDoomsayer";
Doomsayer.SetupCustomOption();
RoleLoadingText = "Neutral roles\nInnocent";
SetupRoleOptions(10800, TabGroup.NeutralRoles, CustomRoles.Innocent);
InnocentCanWinByImp = BooleanOptionItem.Create(10810, "InnocentCanWinByImp", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Innocent]);
RoleLoadingText = "Neutral roles\nJester";
SetupRoleOptions(10900, TabGroup.NeutralRoles, CustomRoles.Jester);
JesterCanUseButton = BooleanOptionItem.Create(10910, "JesterCanUseButton", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Jester]);
JesterCanVent = BooleanOptionItem.Create(10911, "CanVent", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Jester]);
JesterHasImpostorVision = BooleanOptionItem.Create(10913, "ImpostorVision", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Jester]);
SunnyboyChance = IntegerOptionItem.Create(10912, "SunnyboyChance", new(0, 100, 5), 0, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Jester])
.SetValueFormat(OptionFormat.Percent);
//SetupRoleOptions(10950, TabGroup.NeutralRoles, CustomRoles.Masochist);
//MasochistKillMax = IntegerOptionItem.Create(10955, "MasochistKillMax", new(1, 20, 1), 5, TabGroup.NeutralRoles, false)
//.SetParent(CustomRoleSpawnChances[CustomRoles.Masochist])
//.SetValueFormat(OptionFormat.Times);
LoadingPercentage = 31;
RoleLoadingText = "Neutral roles\nCollector";
// Baker.SetupCustomOption();
Collector.SetupCustomOption();
RoleLoadingText = "Neutral roles\nCultist";
Succubus.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPhantom";
SetupRoleOptions(11400, TabGroup.NeutralRoles, CustomRoles.Phantom);
PhantomCanVent = BooleanOptionItem.Create(11410, "CanVent", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Phantom]);
PhantomSnatchesWin = BooleanOptionItem.Create(11411, "SnatchesWin", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Phantom]);
PhantomCanGuess = BooleanOptionItem.Create(11412, "CanGuess", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Phantom]);
PhantomTasks = OverrideTasksData.Create(11413, TabGroup.NeutralRoles, CustomRoles.Phantom);
//Pirate.SetupCustomOption();
RoleLoadingText = "Neutral roles\nTerrorist";
SetupRoleOptions(11500, TabGroup.NeutralRoles, CustomRoles.Terrorist);
CanTerroristSuicideWin = BooleanOptionItem.Create(11510, "CanTerroristSuicideWin", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Terrorist]);
TerroristCanGuess = BooleanOptionItem.Create(11511, "CanGuess", true, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Terrorist]);
//50220~50223を使用
TerroristTasks = OverrideTasksData.Create(11512, TabGroup.NeutralRoles, CustomRoles.Terrorist);
RoleLoadingText = "Neutral roles\nVulture";
Vulture.SetupCustomOption();
RoleLoadingText = "Neutral roles\nWorkaholic";
SetupRoleOptions(11700, TabGroup.NeutralRoles, CustomRoles.Workaholic); //TOH_Y
WorkaholicCannotWinAtDeath = BooleanOptionItem.Create(11710, "WorkaholicCannotWinAtDeath", true, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Workaholic]);
WorkaholicVentCooldown = FloatOptionItem.Create(11711, "VentCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Workaholic])
.SetValueFormat(OptionFormat.Seconds);
WorkaholicVisibleToEveryone = BooleanOptionItem.Create(11712, "WorkaholicVisibleToEveryone", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Workaholic]);
WorkaholicGiveAdviceAlive = BooleanOptionItem.Create(11713, "WorkaholicGiveAdviceAlive", false, TabGroup.NeutralRoles, false)
.SetParent(WorkaholicVisibleToEveryone);
WorkaholicTasks = OverrideTasksData.Create(11714, TabGroup.NeutralRoles, CustomRoles.Workaholic);
WorkaholicCanGuess = BooleanOptionItem.Create(11725, "CanGuess", true, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Workaholic]);
LoadingPercentage = 32;
RoleLoadingText = "Neutral roles\nArsonist";
SetupRoleOptions(10400, TabGroup.NeutralRoles, CustomRoles.Arsonist);
ArsonistDouseTime = FloatOptionItem.Create(10410, "ArsonistDouseTime", new(0f, 90f, 1f), 3f, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Arsonist])
.SetValueFormat(OptionFormat.Seconds);
ArsonistCooldown = FloatOptionItem.Create(10411, "Cooldown", new(0f, 60f, 1f), 10f, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Arsonist])
.SetValueFormat(OptionFormat.Seconds);
ArsonistCanIgniteAnytime = BooleanOptionItem.Create(10413, "ArsonistCanIgniteAnytime", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Arsonist]);
ArsonistMinPlayersToIgnite = IntegerOptionItem.Create(10414, "ArsonistMinPlayersToIgnite", new(1, 14, 1), 1, TabGroup.NeutralRoles, false)
.SetParent(ArsonistCanIgniteAnytime);
ArsonistMaxPlayersToIgnite = IntegerOptionItem.Create(10415, "ArsonistMaxPlayersToIgnite", new(1, 14, 1), 3, TabGroup.NeutralRoles, false)
.SetParent(ArsonistCanIgniteAnytime);
ArsonistKeepsGameGoing = BooleanOptionItem.Create(10412, "ArsonistKeepsGameGoing", false, TabGroup.NeutralRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Arsonist]);
RoleLoadingText = "Neutral roles\nBlood Knight";
BloodKnight.SetupCustomOption();
RoleLoadingText = "Neutral roles\nGlitch";
Glitch.SetupCustomOption();
RoleLoadingText = "Neutral roles\nHex Master";
HexMaster.SetupCustomOption();
RoleLoadingText = "Neutral roles\nBandit";
Bandit.SetupCustomOption();
RoleLoadingText = "Neutral roles\nAgitater";
Agitater.SetupCustomOption();
RoleLoadingText = "Neutral roles\nInfectious";
Infectious.SetupCustomOption();
LoadingPercentage = 33;
RoleLoadingText = "Neutral roles\nJackal";
Jackal.SetupCustomOption();
RoleLoadingText = "Neutral roles\nJinx";
Jinx.SetupCustomOption();
RoleLoadingText = "Neutral roles\nJuggernaut";
Juggernaut.SetupCustomOption();
RoleLoadingText = "Neutral roles\nMedusa";
Medusa.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPelican";
Pelican.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPickpocket";
Pickpocket.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPlaguebearer";
PlagueBearer.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPoisoner";
Poisoner.SetupCustomOption();
LoadingPercentage = 34;
RoleLoadingText = "Neutral roles\nSerial Killer";
NSerialKiller.SetupCustomOption();
RoleLoadingText = "Neutral roles\nEnderman";
Enderman.SetupCustomOption();
RoleLoadingText = "Neutral roles\nMycologist";
Mycologist.SetupCustomOption();
RoleLoadingText = "Neutral roles\nBubble";
Bubble.SetupCustomOption();
RoleLoadingText = "Neutral roles\nHookshot";
Hookshot.SetupCustomOption();
RoleLoadingText = "Neutral roles\nSprayer";
Sprayer.SetupCustomOption();
RoleLoadingText = "Neutral roles\nCurse";
PlagueDoctor.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPostman";
Postman.SetupCustomOption();
RoleLoadingText = "Neutral roles\nReckless";
Reckless.SetupCustomOption();
RoleLoadingText = "Neutral roles\nMagician";
Magician.SetupCustomOption();
RoleLoadingText = "Neutral roles\nWeaponMaster";
WeaponMaster.SetupCustomOption();
RoleLoadingText = "Neutral roles\nPyromaniac";
Pyromaniac.SetupCustomOption();
RoleLoadingText = "Neutral roles\nEclipse";
Eclipse.SetupCustomOption();
RoleLoadingText = "Neutral roles\nHead Hunter";
HeadHunter.SetupCustomOption();
RoleLoadingText = "Neutral roles\nVengeance";
Vengeance.SetupCustomOption();
RoleLoadingText = "Neutral roles\nImitator";
Imitator.SetupCustomOption();
RoleLoadingText = "Neutral roles\nWerewolf";
Werewolf.SetupCustomOption();
RoleLoadingText = "Neutral roles\nStalker";
DarkHide.SetupCustomOption(); //TOH_Y
RoleLoadingText = "Neutral roles\nRitualist";
Ritualist.SetupCustomOption();
RoleLoadingText = "Neutral roles\nTraitor";
Traitor.SetupCustomOption();
RoleLoadingText = "Neutral roles\nVirus";
Virus.SetupCustomOption();
RoleLoadingText = "Neutral roles\nWraith";
Wraith.SetupCustomOption();
LoadingPercentage = 35;
RoleLoadingText = "Add-ons\n.";
// Add-Ons
AddBracketsToAddons = BooleanOptionItem.Create(13500, "BracketAddons", false, TabGroup.Addons, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true);
RoleLoadingText = "Add-ons\nAntidote";
SetupAdtRoleOptions(222420, CustomRoles.Antidote, canSetNum: true);
ImpCanBeAntidote = BooleanOptionItem.Create(222426, "ImpCanBeAntidote", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote]);
CrewCanBeAntidote = BooleanOptionItem.Create(222427, "CrewCanBeAntidote", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote]);
NeutralCanBeAntidote = BooleanOptionItem.Create(222423, "NeutralCanBeAntidote", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote]);
AntidoteCDOpt = FloatOptionItem.Create(222424, "AntidoteCDOpt", new(0f, 180f, 1f), 5f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote])
.SetValueFormat(OptionFormat.Seconds);
AntidoteCDReset = BooleanOptionItem.Create(222425, "AntidoteCDReset", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote]);
RoleLoadingText = "Add-ons\nAutopsy";
SetupAdtRoleOptions(13600, CustomRoles.Autopsy, canSetNum: true);
ImpCanBeAutopsy = BooleanOptionItem.Create(13610, "ImpCanBeAutopsy", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Autopsy]);
CrewCanBeAutopsy = BooleanOptionItem.Create(13611, "CrewCanBeAutopsy", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Autopsy]);
NeutralCanBeAutopsy = BooleanOptionItem.Create(13612, "NeutralCanBeAutopsy", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Autopsy]);
LoadingPercentage = 36;
RoleLoadingText = "Add-ons\nBait";
SetupAdtRoleOptions(13700, CustomRoles.Bait, canSetNum: true);
ImpCanBeBait = BooleanOptionItem.Create(13710, "ImpCanBeBait", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait]);
CrewCanBeBait = BooleanOptionItem.Create(13711, "CrewCanBeBait", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait]);
NeutralCanBeBait = BooleanOptionItem.Create(13712, "NeutralCanBeBait", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait]);
BaitDelayMin = FloatOptionItem.Create(13713, "BaitDelayMin", new(0f, 90f, 1f), 0f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait])
.SetValueFormat(OptionFormat.Seconds);
BaitDelayMax = FloatOptionItem.Create(13714, "BaitDelayMax", new(0f, 90f, 1f), 0f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait])
.SetValueFormat(OptionFormat.Seconds);
BaitDelayNotify = BooleanOptionItem.Create(13715, "BaitDelayNotify", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait]);
BaitNotification = BooleanOptionItem.Create(13716, "BaitNotification", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bait]);
RoleLoadingText = "Add-ons\nBeartrap";
SetupAdtRoleOptions(13800, CustomRoles.Trapper, canSetNum: true);
ImpCanBeTrapper = BooleanOptionItem.Create(13810, "ImpCanBeTrapper", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Trapper]);
CrewCanBeTrapper = BooleanOptionItem.Create(13811, "CrewCanBeTrapper", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Trapper]);
NeutralCanBeTrapper = BooleanOptionItem.Create(13812, "NeutralCanBeTrapper", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Trapper]);
TrapperBlockMoveTime = FloatOptionItem.Create(13813, "TrapperBlockMoveTime", new(0f, 180f, 1f), 5f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Trapper])
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 37;
RoleLoadingText = "Add-ons\nDouble Shot";
SetupAdtRoleOptions(13900, CustomRoles.DoubleShot, canSetNum: true, tab: TabGroup.Addons);
ImpCanBeDoubleShot = BooleanOptionItem.Create(13910, "ImpCanBeDoubleShot", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DoubleShot]);
CrewCanBeDoubleShot = BooleanOptionItem.Create(13911, "CrewCanBeDoubleShot", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DoubleShot]);
NeutralCanBeDoubleShot = BooleanOptionItem.Create(13912, "NeutralCanBeDoubleShot", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DoubleShot]);
RoleLoadingText = "Add-ons\nGlow";
SetupAdtRoleOptions(14020, CustomRoles.Glow, canSetNum: true);
ImpCanBeGlow = BooleanOptionItem.Create(14030, "ImpCanBeGlow", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Glow]);
CrewCanBeGlow = BooleanOptionItem.Create(14031, "CrewCanBeGlow", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Glow]);
NeutralCanBeGlow = BooleanOptionItem.Create(14032, "NeutralCanBeGlow", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Glow]);
RoleLoadingText = "Add-ons\nGravestone";
SetupAdtRoleOptions(14000, CustomRoles.Gravestone, canSetNum: true);
ImpCanBeGravestone = BooleanOptionItem.Create(14010, "ImpCanBeGravestone", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Gravestone]);
CrewCanBeGravestone = BooleanOptionItem.Create(14011, "CrewCanBeGravestone", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Gravestone]);
NeutralCanBeGravestone = BooleanOptionItem.Create(14012, "NeutralCanBeGravestone", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Gravestone]);
LoadingPercentage = 38;
RoleLoadingText = "Add-ons\nLazy";
SetupAdtRoleOptions(14100, CustomRoles.Lazy, canSetNum: true);
TasklessCrewCanBeLazy = BooleanOptionItem.Create(14110, "TasklessCrewCanBeLazy", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lazy]);
TaskBasedCrewCanBeLazy = BooleanOptionItem.Create(14120, "TaskBasedCrewCanBeLazy", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lazy]);
RoleLoadingText = "Add-ons\nTorch";
SetupAdtRoleOptions(14200, CustomRoles.Torch, canSetNum: true);
TorchVision = FloatOptionItem.Create(14210, "TorchVision", new(0.5f, 5f, 0.25f), 1.25f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Torch])
.SetValueFormat(OptionFormat.Multiplier);
TorchAffectedByLights = BooleanOptionItem.Create(14220, "TorchAffectedByLights", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Torch]);
RoleLoadingText = "Add-ons\nLoyal";
SetupAdtRoleOptions(15500, CustomRoles.Loyal, canSetNum: true);
ImpCanBeLoyal = BooleanOptionItem.Create(15510, "ImpCanBeLoyal", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Loyal]);
CrewCanBeLoyal = BooleanOptionItem.Create(15511, "CrewCanBeLoyal", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Loyal]);
LoadingPercentage = 39;
RoleLoadingText = "Add-ons\nLucky";
SetupAdtRoleOptions(14300, CustomRoles.Lucky, canSetNum: true);
LuckyProbability = IntegerOptionItem.Create(14310, "LuckyProbability", new(0, 100, 5), 50, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lucky])
.SetValueFormat(OptionFormat.Percent);
ImpCanBeLucky = BooleanOptionItem.Create(14311, "ImpCanBeLucky", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lucky]);
CrewCanBeLucky = BooleanOptionItem.Create(14312, "CrewCanBeLucky", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lucky]);
NeutralCanBeLucky = BooleanOptionItem.Create(14313, "NeutralCanBeLucky", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Lucky]);
RoleLoadingText = "Add-ons\nNecroview";
SetupAdtRoleOptions(14400, CustomRoles.Necroview, canSetNum: true, tab: TabGroup.Addons);
ImpCanBeNecroview = BooleanOptionItem.Create(14410, "ImpCanBeNecroview", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Necroview]);
CrewCanBeNecroview = BooleanOptionItem.Create(14411, "CrewCanBeNecroview", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Necroview]);
NeutralCanBeNecroview = BooleanOptionItem.Create(14412, "NeutralCanBeNecroview", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Necroview]);
RoleLoadingText = "Add-ons\nReach";
SetupAdtRoleOptions(14600, CustomRoles.Reach, canSetNum: true);
LoadingPercentage = 40;
RoleLoadingText = "Add-ons\nSchizophrenic";
SetupAdtRoleOptions(14700, CustomRoles.DualPersonality, canSetNum: true);
ImpCanBeDualPersonality = BooleanOptionItem.Create(14710, "ImpCanBeDualPersonality", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DualPersonality]);
CrewCanBeDualPersonality = BooleanOptionItem.Create(14711, "CrewCanBeDualPersonality", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DualPersonality]);
DualVotes = BooleanOptionItem.Create(14712, "DualVotes", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DualPersonality]);
// HideDualVotes = BooleanOptionItem.Create(14713, "HideDualVotes", true, TabGroup.Addons, false)
// .SetParent(DualVotes);
LoadingPercentage = 41;
RoleLoadingText = "Add-ons\nSeer";
SetupAdtRoleOptions(14800, CustomRoles.Seer, canSetNum: true);
ImpCanBeSeer = BooleanOptionItem.Create(14810, "ImpCanBeSeer", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Seer]);
CrewCanBeSeer = BooleanOptionItem.Create(14811, "CrewCanBeSeer", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Seer]);
NeutralCanBeSeer = BooleanOptionItem.Create(14812, "NeutralCanBeSeer", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Seer]);
RoleLoadingText = "Add-ons\nTiebreaker";
SetupAdtRoleOptions(14900, CustomRoles.Brakar, canSetNum: true);
ImpCanBeTiebreaker = BooleanOptionItem.Create(14910, "ImpCanBeTiebreaker", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Brakar]);
CrewCanBeTiebreaker = BooleanOptionItem.Create(14911, "CrewCanBeTiebreaker", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Brakar]);
NeutralCanBeTiebreaker = BooleanOptionItem.Create(14912, "NeutralCanBeTiebreaker", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Brakar]);
RoleLoadingText = "Add-ons\nWatcher";
SetupAdtRoleOptions(15000, CustomRoles.Watcher, canSetNum: true);
ImpCanBeWatcher = BooleanOptionItem.Create(15010, "ImpCanBeWatcher", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Watcher]);
CrewCanBeWatcher = BooleanOptionItem.Create(15011, "CrewCanBeWatcher", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Watcher]);
NeutralCanBeWatcher = BooleanOptionItem.Create(15012, "NeutralCanBeWatcher", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Watcher]);
LoadingPercentage = 42;
RoleLoadingText = "Add-ons\nAvenger";
SetupAdtRoleOptions(15100, CustomRoles.Avanger, canSetNum: true);
ImpCanBeAvanger = BooleanOptionItem.Create(15110, "ImpCanBeAvanger", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Avanger]);
RoleLoadingText = "Add-ons\nBewilder";
SetupAdtRoleOptions(15200, CustomRoles.Bewilder, canSetNum: true);
BewilderVision = FloatOptionItem.Create(15210, "BewilderVision", new(0f, 5f, 0.05f), 0.6f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bewilder])
.SetValueFormat(OptionFormat.Multiplier);
ImpCanBeBewilder = BooleanOptionItem.Create(15211, "ImpCanBeBewilder", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bewilder]);
CrewCanBeBewilder = BooleanOptionItem.Create(15212, "CrewCanBeBewilder", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bewilder]);
NeutralCanBeBewilder = BooleanOptionItem.Create(15213, "NeutralCanBeBewilder", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Bewilder]);
LoadingPercentage = 43;
RoleLoadingText = "Add-ons\nDiseased";
/* SetupAdtRoleOptions(15350, CustomRoles.Diseased, canSetNum: true);
DiseasedMultiplier = FloatOptionItem.Create(15363, "DiseasedMultiplier", new(1.5f, 5f, 0.1f), 2f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased])
.SetValueFormat(OptionFormat.Multiplier);
ImpCanBeDiseased = BooleanOptionItem.Create(15360, "ImpCanBeDiseased", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
CrewCanBeDiseased = BooleanOptionItem.Create(15361, "CrewCanBeDiseased", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
NeutralCanBeDiseased = BooleanOptionItem.Create(15362, "NeutralCanBeDiseased", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]); */
SetupAdtRoleOptions(111420, CustomRoles.Diseased, canSetNum: true);
ImpCanBeDiseased = BooleanOptionItem.Create(111426, "ImpCanBeDiseased", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
CrewCanBeDiseased = BooleanOptionItem.Create(111427, "CrewCanBeDiseased", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
NeutralCanBeDiseased = BooleanOptionItem.Create(111423, "NeutralCanBeDiseased", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
DiseasedCDOpt = FloatOptionItem.Create(111424, "DiseasedCDOpt", new(0f, 180f, 1f), 25f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased])
.SetValueFormat(OptionFormat.Seconds);
DiseasedCDReset = BooleanOptionItem.Create(111425, "DiseasedCDReset", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
LoadingPercentage = 44;
RoleLoadingText = "Add-ons\nDisregarded";
SetupAdtRoleOptions(15300, CustomRoles.Unreportable, canSetNum: true);
ImpCanBeUnreportable = BooleanOptionItem.Create(15310, "ImpCanBeUnreportable", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unreportable]);
CrewCanBeUnreportable = BooleanOptionItem.Create(15311, "CrewCanBeUnreportable", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unreportable]);
NeutralCanBeUnreportable = BooleanOptionItem.Create(15312, "NeutralCanBeUnreportable", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unreportable]);
RoleLoadingText = "Add-ons\nStressed";
Stressed.SetupCustomOption();
RoleLoadingText = "Add-ons\nNimble";
SetupAdtRoleOptions(15640, CustomRoles.Nimble);
NimbleCD = FloatOptionItem.Create(15645, "VentCooldown", new(0, 180, 1), 30, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Nimble])
.SetValueFormat(OptionFormat.Seconds);
NimbleInVentTime = FloatOptionItem.Create(15646, "MaxInVentTime", new(0, 180, 1), 15, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Nimble])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Add-ons\nPhysicist";
SetupAdtRoleOptions(15650, CustomRoles.Physicist);
PhysicistCD = FloatOptionItem.Create(15655, "VitalsCooldown", new(0, 180, 1), 20, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Physicist])
.SetValueFormat(OptionFormat.Seconds);
PhysicistViewDuration = FloatOptionItem.Create(15656, "VitalsDuration", new(0, 180, 1), 5, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Physicist])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Add-ons\nGhoul";
SetupAdtRoleOptions(15250, CustomRoles.Ghoul, canSetNum: true);
RoleLoadingText = "Add-ons\nOblivious";
SetupAdtRoleOptions(15400, CustomRoles.Oblivious, canSetNum: true);
ImpCanBeOblivious = BooleanOptionItem.Create(15410, "ImpCanBeOblivious", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Oblivious]);
CrewCanBeOblivious = BooleanOptionItem.Create(15411, "CrewCanBeOblivious", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Oblivious]);
NeutralCanBeOblivious = BooleanOptionItem.Create(15412, "NeutralCanBeOblivious", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Oblivious]);
ObliviousBaitImmune = BooleanOptionItem.Create(15413, "ObliviousBaitImmune", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Oblivious]);
RoleLoadingText = "Add-ons\nRascal";
SetupAdtRoleOptions(15600, CustomRoles.Rascal, canSetNum: true, tab: TabGroup.Addons);
RascalAppearAsMadmate = BooleanOptionItem.Create(15610, "RascalAppearAsMadmate", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Rascal]);
LoadingPercentage = 45;
RoleLoadingText = "Add-ons\nSunglasses";
SetupAdtRoleOptions(15450, CustomRoles.Sunglasses, canSetNum: true);
SunglassesVision = FloatOptionItem.Create(15460, "SunglassesVision", new(0f, 5f, 0.05f), 0.75f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sunglasses])
.SetValueFormat(OptionFormat.Multiplier);
ImpCanBeSunglasses = BooleanOptionItem.Create(15461, "ImpCanBeSunglasses", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sunglasses]);
CrewCanBeSunglasses = BooleanOptionItem.Create(15462, "CrewCanBeSunglasses", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sunglasses]);
NeutralCanBeSunglasses = BooleanOptionItem.Create(15463, "NeutralCanBeSunglasses", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sunglasses]);
LoadingPercentage = 46;
RoleLoadingText = "Add-ons\nUnlucky";
SetupAdtRoleOptions(14350, CustomRoles.Unlucky, canSetNum: true);
UnluckyKillSuicideChance = IntegerOptionItem.Create(14364, "UnluckyKillSuicideChance", new(0, 100, 1), 2, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky])
.SetValueFormat(OptionFormat.Percent);
UnluckyTaskSuicideChance = IntegerOptionItem.Create(14365, "UnluckyTaskSuicideChance", new(0, 100, 1), 5, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky])
.SetValueFormat(OptionFormat.Percent);
UnluckyVentSuicideChance = IntegerOptionItem.Create(14366, "UnluckyVentSuicideChance", new(0, 100, 1), 3, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky])
.SetValueFormat(OptionFormat.Percent);
UnluckyReportSuicideChance = IntegerOptionItem.Create(14367, "UnluckyReportSuicideChance", new(0, 100, 1), 1, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky])
.SetValueFormat(OptionFormat.Percent);
UnluckySabotageSuicideChance = IntegerOptionItem.Create(14368, "UnluckySabotageSuicideChance", new(0, 100, 1), 4, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky])
.SetValueFormat(OptionFormat.Percent);
ImpCanBeUnlucky = BooleanOptionItem.Create(14361, "ImpCanBeUnlucky", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky]);
CrewCanBeUnlucky = BooleanOptionItem.Create(14362, "CrewCanBeUnlucky", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky]);
NeutralCanBeUnlucky = BooleanOptionItem.Create(14363, "NeutralCanBeUnlucky", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Unlucky]);
LoadingPercentage = 47;
RoleLoadingText = "Add-ons\nWorkhorse";
Workhorse.SetupCustomOption();
RoleLoadingText = "Add-ons\nMadmate";
SetupAdtRoleOptions(15800, CustomRoles.Madmate, canSetNum: true, canSetChance: false);
MadmateSpawnMode = StringOptionItem.Create(15810, "MadmateSpawnMode", madmateSpawnMode, 0, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
MadmateCountMode = StringOptionItem.Create(15811, "MadmateCountMode", madmateCountMode, 0, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
SheriffCanBeMadmate = BooleanOptionItem.Create(15812, "SheriffCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
MayorCanBeMadmate = BooleanOptionItem.Create(15813, "MayorCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
NGuesserCanBeMadmate = BooleanOptionItem.Create(15814, "NGuesserCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
MarshallCanBeMadmate = BooleanOptionItem.Create(15815, "MarshallCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
FarseerCanBeMadmate = BooleanOptionItem.Create(15816, "FarseerCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
RetributionistCanBeMadmate = BooleanOptionItem.Create(15817, "RetributionistCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
SnitchCanBeMadmate = BooleanOptionItem.Create(15818, "SnitchCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
MadSnitchTasks = IntegerOptionItem.Create(15819, "MadSnitchTasks", new(0, 90, 1), 3, TabGroup.Addons, false)
.SetParent(SnitchCanBeMadmate)
.SetValueFormat(OptionFormat.Pieces);
JudgeCanBeMadmate = BooleanOptionItem.Create(15820, "JudgeCanBeMadmate", false, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Madmate]);
LoadingPercentage = 48;
RoleLoadingText = "Add-ons\nLast Impostor";
LastImpostor.SetupCustomOption();
RoleLoadingText = "Add-ons\nMare";
SetupAdtRoleOptions(1600, CustomRoles.Mare, canSetNum: true, tab: TabGroup.Addons);
MareKillCD = FloatOptionItem.Create(1605, "KillCooldown", new(0f, 60f, 1f), 15f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mare])
.SetValueFormat(OptionFormat.Seconds);
MareKillCDNormally = FloatOptionItem.Create(1606, "KillCooldownNormally", new(0f, 90f, 1f), 40f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mare])
.SetValueFormat(OptionFormat.Seconds);
MareHasIncreasedSpeed = BooleanOptionItem.Create(1607, "MareHasIncreasedSpeed", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mare]);
MareSpeedDuringLightsOut = FloatOptionItem.Create(1608, "MareSpeedDuringLightsOut", new(0.5f, 3f, 0.05f), 1.75f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mare])
.SetValueFormat(OptionFormat.Multiplier);
RoleLoadingText = "Add-ons\nMimic";
SetupAdtRoleOptions(16000, CustomRoles.Mimic, canSetNum: true, tab: TabGroup.Addons);
MimicCanSeeDeadRoles = BooleanOptionItem.Create(16010, "MimicCanSeeDeadRoles", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mimic]);
LoadingPercentage = 49;
RoleLoadingText = "Add-ons\nStealer";
SetupAdtRoleOptions(16100, CustomRoles.TicketsStealer, canSetNum: true, tab: TabGroup.Addons);
TicketsPerKill = FloatOptionItem.Create(16110, "TicketsPerKill", new(0.1f, 90f, 0.1f), 0.5f, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.TicketsStealer]);
SetupAdtRoleOptions(16050, CustomRoles.Swift, canSetNum: true, tab: TabGroup.Addons);
RoleLoadingText = "Add-ons\nDamocles";
Damocles.SetupCustomOption();
RoleLoadingText = "Add-ons\nDeadly Quota";
SetupAdtRoleOptions(14650, CustomRoles.DeadlyQuota, canSetNum: true);
DQNumOfKillsNeeded = IntegerOptionItem.Create(14660, "DQNumOfKillsNeeded", new(1, 14, 1), 3, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.DeadlyQuota]);
// SetupAdtRoleOptions(16300, CustomRoles.Minimalism, canSetNum: true, tab: TabGroup.Addons);
SetupLoversRoleOptionsToggle(16200);
/* SetupAdtRoleOptions(6050900, CustomRoles.Rogue, canSetNum: true);
ImpCanBeRogue = BooleanOptionItem.Create(6050903, "ImpCanBeRogue", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Rogue]);
CrewCanBeRogue = BooleanOptionItem.Create(6050904, "CrewCanBeRogue", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Rogue]);
NeutralCanBeRogue = BooleanOptionItem.Create(6050905, "NeutralCanBeRogue", true, TabGroup.Addons, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Rogue]);
RogueKnowEachOther = BooleanOptionItem.Create(6050906, "RogueKnowEachOther", false, TabGroup.Addons, false).SetParent(CustomRoleSpawnChances[CustomRoles.Rogue]);
RogueKnowEachOtherRoles = BooleanOptionItem.Create(6050907, "RogueKnowEachOtherRoles", false, TabGroup.Addons, false).SetParent(RogueKnowEachOther);
*/
LoadingPercentage = 50;
RoleLoadingText = "Experimental roles\nKilling Machine";
// 乐子职业
SetupRoleOptions(16300, TabGroup.OtherRoles, CustomRoles.Minimalism);
MNKillCooldown = FloatOptionItem.Create(16310, "KillCooldown", new(2.5f, 180f, 2.5f), 10f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Minimalism])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Experimental roles\nZombie";
SetupRoleOptions(16400, TabGroup.OtherRoles, CustomRoles.Zombie);
ZombieKillCooldown = FloatOptionItem.Create(16410, "KillCooldown", new(0f, 180f, 2.5f), 5f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Zombie])
.SetValueFormat(OptionFormat.Seconds);
ZombieSpeedReduce = FloatOptionItem.Create(16411, "ZombieSpeedReduce", new(0.0f, 1.0f, 0.1f), 0.1f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Zombie])
.SetValueFormat(OptionFormat.Multiplier);
LoadingPercentage = 51;
RoleLoadingText = "Experimental roles\nTrapster";
SetupRoleOptions(16500, TabGroup.OtherRoles, CustomRoles.BoobyTrap);
BTKillCooldown = FloatOptionItem.Create(16510, "KillCooldown", new(2.5f, 180f, 2.5f), 20f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.BoobyTrap])
.SetValueFormat(OptionFormat.Seconds);
TrapOnlyWorksOnTheBodyBoobyTrap = BooleanOptionItem.Create(16511, "TrapOnlyWorksOnTheBodyBoobyTrap", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.BoobyTrap]);
RoleLoadingText = "Experimental roles\nCapitalist";
SetupRoleOptions(16600, TabGroup.OtherRoles, CustomRoles.Capitalism);
CapitalismSkillCooldown = FloatOptionItem.Create(16610, "CapitalismSkillCooldown", new(0f, 60f, 1f), 10f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Capitalism])
.SetValueFormat(OptionFormat.Seconds);
CapitalismKillCooldown = FloatOptionItem.Create(16611, "KillCooldown", new(2.5f, 60f, 2.5f), 25f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Capitalism])
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 52;
RoleLoadingText = "Experimental roles\nLightning";
BallLightning.SetupCustomOption();
RoleLoadingText = "Experimental roles\nEraser";
Eraser.SetupCustomOption();
RoleLoadingText = "Experimental roles\nButcher";
SetupRoleOptions(16900, TabGroup.OtherRoles, CustomRoles.OverKiller);
RoleLoadingText = "Experimental roles\nDisperser";
Disperser.SetupCustomOption();
RoleLoadingText = "Experimental roles\nCopyCat";
/* SetupRoleOptions(18000, TabGroup.OtherRoles, CustomRoles.SpeedBooster);
SpeedBoosterUpSpeed = FloatOptionItem.Create(18010, "SpeedBoosterUpSpeed", new(0.1f, 1.0f, 0.1f), 0.2f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SpeedBooster])
.SetValueFormat(OptionFormat.Multiplier);
SpeedBoosterTimes = IntegerOptionItem.Create(18011, "SpeedBoosterTimes", new(1, 99, 1), 5, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.SpeedBooster])
.SetValueFormat(OptionFormat.Times); */
/* SetupRoleOptions(18100, TabGroup.OtherRoles, CustomRoles.Glitch);
GlitchCanVote = BooleanOptionItem.Create(18110, "GlitchCanVote", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Glitch]); */
// Divinator.SetupCustomOption();
// 中立
CopyCat.SetupCustomOption();
LoadingPercentage = 53;
RoleLoadingText = "Experimental roles\nGod";
SetupRoleOptions(18200, TabGroup.OtherRoles, CustomRoles.God);
NotifyGodAlive = BooleanOptionItem.Create(18210, "NotifyGodAlive", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.God]);
GodCanGuess = BooleanOptionItem.Create(18211, "CanGuess", false, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.God]);
RoleLoadingText = "Experimental roles\nVector";
SetupRoleOptions(18300, TabGroup.OtherRoles, CustomRoles.Mario);
MarioVentNumWin = IntegerOptionItem.Create(18310, "MarioVentNumWin", new(0, 900, 5), 40, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mario])
.SetValueFormat(OptionFormat.Times);
MarioVentCD = FloatOptionItem.Create(18311, "VentCooldown", new(0f, 180f, 1f), 15f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Mario])
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 54;
RoleLoadingText = "Experimental roles\nRevolutionist";
SetupRoleOptions(18400, TabGroup.OtherRoles, CustomRoles.Revolutionist);
RevolutionistDrawTime = FloatOptionItem.Create(18410, "RevolutionistDrawTime", new(0f, 90f, 1f), 3f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist])
.SetValueFormat(OptionFormat.Seconds);
RevolutionistCooldown = FloatOptionItem.Create(18411, "RevolutionistCooldown", new(0f, 100f, 1f), 10f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist])
.SetValueFormat(OptionFormat.Seconds);
RevolutionistDrawCount = IntegerOptionItem.Create(18412, "RevolutionistDrawCount", new(0, 14, 1), 6, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist])
.SetValueFormat(OptionFormat.Players);
RevolutionistKillProbability = IntegerOptionItem.Create(18413, "RevolutionistKillProbability", new(0, 100, 5), 15, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist])
.SetValueFormat(OptionFormat.Percent);
RevolutionistVentCountDown = FloatOptionItem.Create(18414, "RevolutionistVentCountDown", new(0f, 180f, 1f), 15f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Revolutionist])
.SetValueFormat(OptionFormat.Seconds);
RoleLoadingText = "Experimental roles\nProvocateur";
SetupRoleOptions(18500, TabGroup.OtherRoles, CustomRoles.Provocateur);
RoleLoadingText = "Experimental roles\nSpiritcaller";
Spiritcaller.SetupCustomOption();
LoadingPercentage = 55;
//RoleLoadingText = "Experimental roles\nNeptune";
//SetupAdtRoleOptions(18600, CustomRoles.Ntr, tab: TabGroup.OtherRoles);
RoleLoadingText = "Experimental roles\nFlash";
SetupAdtRoleOptions(18700, CustomRoles.Flashman, canSetNum: true, tab: TabGroup.OtherRoles);
FlashmanSpeed = FloatOptionItem.Create(6050335, "FlashmanSpeed", new(0.25f, 3f, 0.25f), 2.5f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Flashman])
.SetValueFormat(OptionFormat.Multiplier);
RoleLoadingText = "Experimental roles\nGiant";
SetupAdtRoleOptions(18750, CustomRoles.Giant, canSetNum: true, tab: TabGroup.OtherRoles);
GiantSpeed = FloatOptionItem.Create(6050335, "FlashmanSpeed", new(0.25f, 3f, 0.25f), 2.5f, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Flashman])
.SetValueFormat(OptionFormat.Multiplier);
RoleLoadingText = "Experimental roles\nYouTuber";
SetupAdtRoleOptions(18800, CustomRoles.Youtuber, canSetNum: true, tab: TabGroup.OtherRoles);
LoadingPercentage = 56;
RoleLoadingText = "Experimental roles\nEgoist";
SetupAdtRoleOptions(18900, CustomRoles.Egoist, canSetNum: true, tab: TabGroup.OtherRoles);
CrewCanBeEgoist = BooleanOptionItem.Create(18910, "CrewCanBeEgoist", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Egoist]);
ImpCanBeEgoist = BooleanOptionItem.Create(18911, "ImpCanBeEgoist", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Egoist]);
ImpEgoistVisibalToAllies = BooleanOptionItem.Create(18912, "ImpEgoistVisibalToAllies", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Egoist]);
/* SetupAdtRoleOptions(19000, CustomRoles.Sidekick, canSetNum: true, tab: TabGroup.OtherRoles);
SidekickCountMode = StringOptionItem.Create(19010, "SidekickCountMode", sidekickCountMode, 0, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
CrewmateCanBeSidekick = BooleanOptionItem.Create(19011, "CrewmatesCanBeSidekick", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
NeutralCanBeSidekick = BooleanOptionItem.Create(19012, "NeutralsCanBeSidekick", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
ImpostorCanBeSidekick = BooleanOptionItem.Create(19013, "ImpostorsCanBeSidekick", false, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
SidekickCanKillJackal = BooleanOptionItem.Create(19014, "SidekickCanKillJackal", false, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
// JackalWinWithSidekick = BooleanOptionItem.Create(19015, "JackalWinWithSidekick", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
SidekickKnowOtherSidekick = BooleanOptionItem.Create(19016, "SidekickKnowOtherSidekick", false, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Sidekick]);
SidekickKnowOtherSidekickRole = BooleanOptionItem.Create(19017, "SidekickKnowOtherSidekickRole", false, TabGroup.OtherRoles, false)
.SetParent(SidekickKnowOtherSidekick);
SidekickCanKillSidekick = BooleanOptionItem.Create(19018, "SidekickCanKillSidekick", false, TabGroup.OtherRoles, false)
.SetParent(SidekickKnowOtherSidekick); */
LoadingPercentage = 57;
RoleLoadingText = "Experimental roles\nGuesser";
SetupAdtRoleOptions(19100, CustomRoles.Guesser, canSetNum: true, tab: TabGroup.OtherRoles);
ImpCanBeGuesser = BooleanOptionItem.Create(19110, "ImpCanBeGuesser", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
CrewCanBeGuesser = BooleanOptionItem.Create(19111, "CrewCanBeGuesser", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
NeutralCanBeGuesser = BooleanOptionItem.Create(19112, "NeutralCanBeGuesser", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
LoadingPercentage = 58;
// GCanGuessImp = BooleanOptionItem.Create(19113, "GCanGuessImp", false, TabGroup.OtherRoles, false).SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
// GCanGuessCrew = BooleanOptionItem.Create(19114, "GCanGuessCrew", false, TabGroup.OtherRoles, false).SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
GCanGuessAdt = BooleanOptionItem.Create(19115, "GCanGuessAdt", false, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
GCanGuessTaskDoneSnitch = BooleanOptionItem.Create(19116, "GCanGuessTaskDoneSnitch", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Guesser]);
GTryHideMsg = BooleanOptionItem.Create(19117, "GuesserTryHideMsg", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Guesser])
.SetColor(Color.green);
LoadingPercentage = 59;
RoleLoadingText = "Experimental roles\nFool";
SetupAdtRoleOptions(19200, CustomRoles.Fool, canSetNum: true, tab: TabGroup.OtherRoles);
ImpCanBeFool = BooleanOptionItem.Create(19210, "ImpCanBeFool", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Fool]);
CrewCanBeFool = BooleanOptionItem.Create(19211, "CrewCanBeFool", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Fool]);
NeutralCanBeFool = BooleanOptionItem.Create(19212, "NeutralCanBeFool", true, TabGroup.OtherRoles, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Fool]);
RoleLoadingText = string.Empty;
#endregion
#region 系统设置
LoadingPercentage = 60;
MainLoadingText = "Building TOHE settings";
KickLowLevelPlayer = IntegerOptionItem.Create(19300, "KickLowLevelPlayer", new(0, 100, 1), 0, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Level)
.SetHeader(true);
EnableKillerLeftCommand = BooleanOptionItem.Create(44428, "EnableKillerLeftCommand", true, TabGroup.SystemSettings, false)
.SetColor(Color.green);
SeeEjectedRolesInMeeting = BooleanOptionItem.Create(44429, "SeeEjectedRolesInMeeting", true, TabGroup.SystemSettings, false)
.SetColor(Color.green);
KickAndroidPlayer = BooleanOptionItem.Create(19301, "KickAndroidPlayer", false, TabGroup.SystemSettings, false);
KickPlayerFriendCodeNotExist = BooleanOptionItem.Create(19302, "KickPlayerFriendCodeNotExist", false, TabGroup.SystemSettings, true);
ApplyDenyNameList = BooleanOptionItem.Create(19303, "ApplyDenyNameList", true, TabGroup.SystemSettings, true);
ApplyBanList = BooleanOptionItem.Create(19304, "ApplyBanList", true, TabGroup.SystemSettings, true);
ApplyModeratorList = BooleanOptionItem.Create(19305, "ApplyModeratorList", false, TabGroup.SystemSettings, false);
LoadingPercentage = 61;
// ApplyAllowList = BooleanOptionItem.Create(19306, "ApplyAllowList", false, TabGroup.SystemSettings, false);
// AllowSayCommand = BooleanOptionItem.Create(19307, "AllowSayCommand", false, TabGroup.SystemSettings, false);
// ApplyReminderMsg = BooleanOptionItem.Create(19308, "ApplyReminderMsg", false, TabGroup.SystemSettings, false);
/* TimeForReminder = IntegerOptionItem.Create(19309, "TimeForReminder", new(0, 90, 1), 3, TabGroup.SystemSettings, false)
.SetParent(TimeForReminder)
.SetValueFormat(OptionFormat.Seconds); */
AutoKickStart = BooleanOptionItem.Create(19310, "AutoKickStart", false, TabGroup.SystemSettings, false);
AutoKickStartTimes = IntegerOptionItem.Create(19311, "AutoKickStartTimes", new(0, 90, 1), 1, TabGroup.SystemSettings, false)
.SetParent(AutoKickStart)
.SetValueFormat(OptionFormat.Times);
AutoKickStartAsBan = BooleanOptionItem.Create(19312, "AutoKickStartAsBan", false, TabGroup.SystemSettings, false)
.SetParent(AutoKickStart);
AutoKickStopWords = BooleanOptionItem.Create(19313, "AutoKickStopWords", false, TabGroup.SystemSettings, false);
AutoKickStopWordsTimes = IntegerOptionItem.Create(19314, "AutoKickStopWordsTimes", new(0, 90, 1), 3, TabGroup.SystemSettings, false)
.SetParent(AutoKickStopWords)
.SetValueFormat(OptionFormat.Times);
AutoKickStopWordsAsBan = BooleanOptionItem.Create(19315, "AutoKickStopWordsAsBan", false, TabGroup.SystemSettings, false)
.SetParent(AutoKickStopWords);
LoadingPercentage = 62;
AutoWarnStopWords = BooleanOptionItem.Create(19316, "AutoWarnStopWords", false, TabGroup.SystemSettings, false);
MinWaitAutoStart = FloatOptionItem.Create(44420, "MinWaitAutoStart", new(0f, 10f, 0.5f), 1.5f, TabGroup.SystemSettings, false);
MaxWaitAutoStart = FloatOptionItem.Create(44421, "MaxWaitAutoStart", new(0f, 10f, 0.5f), 1.5f, TabGroup.SystemSettings, false);
PlayerAutoStart = IntegerOptionItem.Create(44422, "PlayerAutoStart", new(1, 15, 1), 14, TabGroup.SystemSettings, false);
AutoStartTimer = IntegerOptionItem.Create(44423, "AutoStartTimer", new(10, 600, 1), 20, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds);
AutoPlayAgain = BooleanOptionItem.Create(44424, "AutoPlayAgain", false, TabGroup.SystemSettings, false);
AutoPlayAgainCountdown = IntegerOptionItem.Create(44425, "AutoPlayAgainCountdown", new(1, 90, 1), 10, TabGroup.SystemSettings, false)
.SetParent(AutoPlayAgain);
LowLoadMode = BooleanOptionItem.Create(19317, "LowLoadMode", true, TabGroup.SystemSettings, false)
.SetHeader(true)
.SetColor(Color.green);
DeepLowLoad = BooleanOptionItem.Create(19325, "DeepLowLoad", false, TabGroup.SystemSettings, false)
.SetColor(Color.red);
DontUpdateDeadPlayers = BooleanOptionItem.Create(19326, "DontUpdateDeadPlayers", true, TabGroup.SystemSettings, false)
.SetColor(Color.red);
EndWhenPlayerBug = BooleanOptionItem.Create(19318, "EndWhenPlayerBug", true, TabGroup.SystemSettings, false)
.SetHeader(true)
.SetColor(Color.blue);
RemovePetsAtDeadPlayers = BooleanOptionItem.Create(60294, "RemovePetsAtDeadPlayers", false, TabGroup.SystemSettings, false)
.SetColor(Color.magenta);
CheatResponses = StringOptionItem.Create(19319, "CheatResponses", CheatResponsesName, 2, TabGroup.SystemSettings, false)
.SetHeader(true);
//HighLevelAntiCheat = StringOptionItem.Create(19320, "HighLevelAntiCheat", CheatResponsesName, 0, TabGroup.SystemSettings, false)
//.SetHeader(true);
LoadingPercentage = 63;
AutoDisplayKillLog = BooleanOptionItem.Create(19321, "AutoDisplayKillLog", true, TabGroup.SystemSettings, false)
.SetHeader(true);
AutoDisplayLastRoles = BooleanOptionItem.Create(19322, "AutoDisplayLastRoles", true, TabGroup.SystemSettings, false);
AutoDisplayLastResult = BooleanOptionItem.Create(19323, "AutoDisplayLastResult", true, TabGroup.SystemSettings, false);
SuffixMode = StringOptionItem.Create(19324, "SuffixMode", suffixModes, 0, TabGroup.SystemSettings, true)
.SetHeader(true);
HideGameSettings = BooleanOptionItem.Create(19400, "HideGameSettings", false, TabGroup.SystemSettings, false);
DIYGameSettings = BooleanOptionItem.Create(19401, "DIYGameSettings", false, TabGroup.SystemSettings, false);
PlayerCanSetColor = BooleanOptionItem.Create(19402, "PlayerCanSetColor", false, TabGroup.SystemSettings, false);
FormatNameMode = StringOptionItem.Create(19403, "FormatNameMode", formatNameModes, 0, TabGroup.SystemSettings, false);
DisableEmojiName = BooleanOptionItem.Create(19404, "DisableEmojiName", true, TabGroup.SystemSettings, false);
ChangeNameToRoleInfo = BooleanOptionItem.Create(19405, "ChangeNameToRoleInfo", true, TabGroup.SystemSettings, false);
SendRoleDescriptionFirstMeeting = BooleanOptionItem.Create(19406, "SendRoleDescriptionFirstMeeting", true, TabGroup.SystemSettings, false);
NoGameEnd = BooleanOptionItem.Create(19407, "NoGameEnd", false, TabGroup.SystemSettings, false)
.SetColor(Color.red);
AllowConsole = BooleanOptionItem.Create(19408, "AllowConsole", false, TabGroup.SystemSettings, false)
.SetColor(Color.red);
RoleAssigningAlgorithm = StringOptionItem.Create(19409, "RoleAssigningAlgorithm", roleAssigningAlgorithms, 4, TabGroup.SystemSettings, true)
.RegisterUpdateValueEvent(
(object obj, OptionItem.UpdateValueEventArgs args) => IRandom.SetInstanceById(args.CurrentValue)
);
KPDCamouflageMode = StringOptionItem.Create(19500, "KPDCamouflageMode", CamouflageMode, 0, TabGroup.SystemSettings, false)
.SetHeader(true)
.SetColor(new Color32(255, 192, 203, byte.MaxValue));
LoadingPercentage = 64;
//DebugModeManager.SetupCustomOption();
EnableUpMode = BooleanOptionItem.Create(19600, "EnableYTPlan", false, TabGroup.SystemSettings, false)
.SetColor(Color.cyan)
.SetHeader(true);
#endregion
#region 游戏设置
MainLoadingText = "Building Settings for Other Gamemodes";
//SoloKombat
SoloKombatManager.SetupCustomOption();
//FFA
FFAManager.SetupCustomOption();
//Move And Stop
MoveAndStopManager.SetupCustomOption();
LoadingPercentage = 65;
MainLoadingText = "Building game settings";
//驱逐相关设定
TextOptionItem.Create(100023, "MenuTitle.Ejections", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue));
CEMode = StringOptionItem.Create(19800, "ConfirmEjectionsMode", ConfirmEjectionsMode, 2, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetColor(new Color32(255, 238, 232, byte.MaxValue));
ShowImpRemainOnEject = BooleanOptionItem.Create(19810, "ShowImpRemainOnEject", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue));
ShowNKRemainOnEject = BooleanOptionItem.Create(19811, "ShowNKRemainOnEject", true, TabGroup.GameSettings, false)
.SetParent(ShowImpRemainOnEject)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue));
LoadingPercentage = 66;
ShowTeamNextToRoleNameOnEject = BooleanOptionItem.Create(19812, "ShowTeamNextToRoleNameOnEject", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue));
ConfirmEgoistOnEject = BooleanOptionItem.Create(19813, "ConfirmEgoistOnEject", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue))
.SetHeader(true);
/* ConfirmSidekickOnEject = BooleanOptionItem.Create(19814, "ConfirmSidekickOnEject", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue)); */
ConfirmLoversOnEject = BooleanOptionItem.Create(19815, "ConfirmLoversOnEject", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 238, 232, byte.MaxValue));
LoadingPercentage = 67;
//Maps Settings
TextOptionItem.Create(100024, "MenuTitle.MapsSettings", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Random Maps Mode
RandomMapsMode = BooleanOptionItem.Create(19900, "RandomMapsMode", false, TabGroup.GameSettings, false)
.SetHeader(true)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
//AddedTheSkeld = BooleanOptionItem.Create(19910, "AddedTheSkeld", false, TabGroup.GameSettings, false)
// .SetParent(RandomMapsMode);
//AddedMiraHQ = BooleanOptionItem.Create(19911, "AddedMIRAHQ", false, TabGroup.GameSettings, false)
// .SetParent(RandomMapsMode);
LoadingPercentage = 68;
//AddedPolus = BooleanOptionItem.Create(19912, "AddedPolus", false, TabGroup.GameSettings, false)
// .SetParent(RandomMapsMode);
//AddedTheAirship = BooleanOptionItem.Create(19913, "AddedTheAirship", false, TabGroup.GameSettings, false)
// .SetParent(RandomMapsMode);
// MapDleks = CustomOption.Create(19914, Color.white, "AddedDleks", false, RandomMapMode);
SkeldChance = IntegerOptionItem.Create(19910, "SkeldChance", new(0, 100, 5), 0, TabGroup.GameSettings, false)
.SetParent(RandomMapsMode)
.SetValueFormat(OptionFormat.Percent);
MiraChance = IntegerOptionItem.Create(19911, "MiraChance", new(0, 100, 5), 0, TabGroup.GameSettings, false)
.SetParent(RandomMapsMode)
.SetValueFormat(OptionFormat.Percent);
PolusChance = IntegerOptionItem.Create(19912, "PolusChance", new(0, 100, 5), 0, TabGroup.GameSettings, false)
.SetParent(RandomMapsMode)
.SetValueFormat(OptionFormat.Percent);
AirshipChance = IntegerOptionItem.Create(19913, "AirshipChance", new(0, 100, 5), 0, TabGroup.GameSettings, false)
.SetParent(RandomMapsMode)
.SetValueFormat(OptionFormat.Percent);
FungleChance = IntegerOptionItem.Create(19922, "FungleChance", new(0, 100, 5), 10, TabGroup.GameSettings, false)
.SetParent(RandomMapsMode)
.SetValueFormat(OptionFormat.Percent);
LoadingPercentage = 69;
// Random Spawn
RandomSpawn = BooleanOptionItem.Create(22000, "RandomSpawn", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
AirshipAdditionalSpawn = BooleanOptionItem.Create(22010, "AirshipAdditionalSpawn", false, TabGroup.GameSettings, false)
.SetParent(RandomSpawn)
.SetGameMode(CustomGameMode.Standard);
// Airship Variable Electrical
AirshipVariableElectrical = BooleanOptionItem.Create(22100, "AirshipVariableElectrical", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Disable Airship Moving Platform
DisableAirshipMovingPlatform = BooleanOptionItem.Create(22110, "DisableAirshipMovingPlatform", false, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Disable Spore Triggers on Fungle
DisableSporeTriggerOnFungle = BooleanOptionItem.Create(22130, "DisableSporeTriggerOnFungle", false, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Disable Zipline On Fungle
DisableZiplineOnFungle = BooleanOptionItem.Create(22305, "DisableZiplineOnFungle", false, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Disable Zipline From Top
DisableZiplineFromTop = BooleanOptionItem.Create(22308, "DisableZiplineFromTop", false, TabGroup.GameSettings, false)
.SetParent(DisableZiplineOnFungle)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Disable Zipline From Under
DisableZiplineFromUnder = BooleanOptionItem.Create(22310, "DisableZiplineFromUnder", false, TabGroup.GameSettings, false)
.SetParent(DisableZiplineOnFungle)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
DisableZiplineForCrew = BooleanOptionItem.Create(22316, "DisableZiplineForCrew", false, TabGroup.GameSettings, false)
.SetParent(DisableZiplineOnFungle)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
DisableZiplineForImps = BooleanOptionItem.Create(22318, "DisableZiplineForImps", false, TabGroup.GameSettings, false)
.SetParent(DisableZiplineOnFungle)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
DisableZiplineForNeutrals = BooleanOptionItem.Create(22320, "DisableZiplineForNeutrals", false, TabGroup.GameSettings, false)
.SetParent(DisableZiplineOnFungle)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
ZiplineTravelTimeFromBottom = FloatOptionItem.Create(22312, "ZiplineTravelTimeFromBottom", new(0.5f, 10f, 0.5f), 4f, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
ZiplineTravelTimeFromTop = FloatOptionItem.Create(22314, "ZiplineTravelTimeFromTop", new(0.5f, 10f, 0.5f), 2f, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Reset Doors After Meeting
ResetDoorsEveryTurns = BooleanOptionItem.Create(22120, "ResetDoorsEveryTurns", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Reset Doors Mode
DoorsResetMode = StringOptionItem.Create(22122, "DoorsResetMode", EnumHelper.GetAllNames<DoorsReset.ResetMode>(), 2, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue))
.SetGameMode(CustomGameMode.Standard)
.SetParent(ResetDoorsEveryTurns);
// Change decontamination time on MiraHQ/Polus
ChangeDecontaminationTime = BooleanOptionItem.Create(60503, "ChangeDecontaminationTime", false, TabGroup.GameSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Decontamination time on MiraHQ
DecontaminationTimeOnMiraHQ = FloatOptionItem.Create(60504, "DecontaminationTimeOnMiraHQ", new(0.5f, 10f, 0.25f), 3f, TabGroup.GameSettings, false)
.SetParent(ChangeDecontaminationTime)
.SetValueFormat(OptionFormat.Multiplier)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
// Decontamination time on Polus
DecontaminationTimeOnPolus = FloatOptionItem.Create(60505, "DecontaminationTimeOnPolus", new(0.5f, 10f, 0.25f), 3f, TabGroup.GameSettings, false)
.SetParent(ChangeDecontaminationTime)
.SetValueFormat(OptionFormat.Multiplier)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
LoadingPercentage = 70;
// Sabotage
TextOptionItem.Create(100025, "MenuTitle.Sabotage", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(243, 96, 96, byte.MaxValue))
.SetHeader(true);
// CommsCamouflage
CommsCamouflage = BooleanOptionItem.Create(22200, "CommsCamouflage", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetColor(new Color32(243, 96, 96, byte.MaxValue));
CommsCamouflageDisableOnFungle = BooleanOptionItem.Create(22202, "CommsCamouflageDisableOnFungle", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetParent(CommsCamouflage)
.SetColor(new Color32(243, 96, 96, byte.MaxValue));
DisableReportWhenCC = BooleanOptionItem.Create(22300, "DisableReportWhenCC", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(243, 96, 96, byte.MaxValue));
LoadingPercentage = 71;
// Sabotage Cooldown Control
SabotageCooldownControl = BooleanOptionItem.Create(22400, "SabotageCooldownControl", false, TabGroup.GameSettings, false)
.SetColor(new Color32(243, 96, 96, byte.MaxValue))
.SetGameMode(CustomGameMode.Standard);
SabotageCooldown = FloatOptionItem.Create(22405, "SabotageCooldown", new(1f, 60f, 1f), 30f, TabGroup.GameSettings, false)
.SetParent(SabotageCooldownControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
// Sabotage Duration Control
SabotageTimeControl = BooleanOptionItem.Create(22410, "SabotageTimeControl", false, TabGroup.GameSettings, false)
.SetColor(new Color32(243, 96, 96, byte.MaxValue))
.SetGameMode(CustomGameMode.Standard);
// The Skeld
SkeldReactorTimeLimit = FloatOptionItem.Create(22418, "SkeldReactorTimeLimit", new(5f, 90f, 1f), 30f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
SkeldO2TimeLimit = FloatOptionItem.Create(22419, "SkeldO2TimeLimit", new(5f, 90f, 1f), 30f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
// Mira HQ
MiraReactorTimeLimit = FloatOptionItem.Create(22422, "MiraReactorTimeLimit", new(5f, 90f, 1f), 45f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
MiraO2TimeLimit = FloatOptionItem.Create(22423, "MiraO2TimeLimit", new(5f, 90f, 1f), 45f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
// Polus
PolusReactorTimeLimit = FloatOptionItem.Create(22424, "PolusReactorTimeLimit", new(5f, 90f, 1f), 60f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
// The Airship
AirshipReactorTimeLimit = FloatOptionItem.Create(22425, "AirshipReactorTimeLimit", new(5f, 90f, 1f), 90f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
// The Fungle
FungleReactorTimeLimit = FloatOptionItem.Create(22426, "FungleReactorTimeLimit", new(5f, 90f, 1f), 60f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
FungleMushroomMixupDuration = FloatOptionItem.Create(22427, "FungleMushroomMixupDuration", new(5f, 90f, 1f), 10f, TabGroup.GameSettings, false)
.SetParent(SabotageTimeControl)
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 72;
// LightsOutSpecialSettings
LightsOutSpecialSettings = BooleanOptionItem.Create(22500, "LightsOutSpecialSettings", false, TabGroup.GameSettings, false)
.SetColor(new Color32(243, 96, 96, byte.MaxValue))
.SetGameMode(CustomGameMode.Standard);
DisableAirshipViewingDeckLightsPanel = BooleanOptionItem.Create(22510, "DisableAirshipViewingDeckLightsPanel", false, TabGroup.GameSettings, false)
.SetParent(LightsOutSpecialSettings)
.SetGameMode(CustomGameMode.Standard);
DisableAirshipGapRoomLightsPanel = BooleanOptionItem.Create(22511, "DisableAirshipGapRoomLightsPanel", false, TabGroup.GameSettings, false)
.SetParent(LightsOutSpecialSettings)
.SetGameMode(CustomGameMode.Standard);
DisableAirshipCargoLightsPanel = BooleanOptionItem.Create(22512, "DisableAirshipCargoLightsPanel", false, TabGroup.GameSettings, false)
.SetParent(LightsOutSpecialSettings)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 73;
//禁用相关设定
TextOptionItem.Create(100026, "MenuTitle.Disable", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableShieldAnimations = BooleanOptionItem.Create(22601, "DisableShieldAnimations", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableKillAnimationOnGuess = BooleanOptionItem.Create(22602, "DisableKillAnimationOnGuess", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableCrackedGlass = BooleanOptionItem.Create(22603, "DisableCrackedGlass", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHidden(true)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableShapeshiftAnimations = BooleanOptionItem.Create(22604, "DisableShapeshiftAnimations", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableVanillaRoles = BooleanOptionItem.Create(22600, "DisableVanillaRoles", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
/* DisableHiddenRoles = BooleanOptionItem.Create(22610, "DisableHiddenRoles", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableSunnyboy = BooleanOptionItem.Create(22620, "DisableSunnyboy", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetParent(DisableHiddenRoles)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableBard = BooleanOptionItem.Create(22630, "DisableBard", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetParent(DisableHiddenRoles)
.SetColor(new Color32(255, 153, 153, byte.MaxValue)); */
/* DisableSaboteur = BooleanOptionItem.Create(22640, "DisableSaboteur", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetParent(DisableHiddenRoles)
.SetColor(new Color32(255, 153, 153, byte.MaxValue)); */
DisableTaskWin = BooleanOptionItem.Create(22650, "DisableTaskWin", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
LoadingPercentage = 74;
// 禁用任务
DisableMeeting = BooleanOptionItem.Create(22700, "DisableMeeting", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableSabotage = BooleanOptionItem.Create(22800, "DisableSabotage", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableCloseDoor = BooleanOptionItem.Create(22810, "DisableCloseDoor", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetParent(DisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
LoadingPercentage = 75;
//禁用设备
DisableDevices = BooleanOptionItem.Create(22900, "DisableDevices", false, TabGroup.GameSettings, false)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableSkeldDevices = BooleanOptionItem.Create(22905, "DisableSkeldDevices", false, TabGroup.GameSettings, false)
.SetParent(DisableDevices);
DisableSkeldAdmin = BooleanOptionItem.Create(22906, "DisableSkeldAdmin", false, TabGroup.GameSettings, false)
.SetParent(DisableSkeldDevices);
DisableSkeldCamera = BooleanOptionItem.Create(22907, "DisableSkeldCamera", false, TabGroup.GameSettings, false)
.SetParent(DisableSkeldDevices);
LoadingPercentage = 76;
DisableMiraHQDevices = BooleanOptionItem.Create(22908, "DisableMiraHQDevices", false, TabGroup.GameSettings, false)
.SetParent(DisableDevices);
DisableMiraHQAdmin = BooleanOptionItem.Create(22909, "DisableMiraHQAdmin", false, TabGroup.GameSettings, false)
.SetParent(DisableMiraHQDevices);
DisableMiraHQDoorLog = BooleanOptionItem.Create(22910, "DisableMiraHQDoorLog", false, TabGroup.GameSettings, false)
.SetParent(DisableMiraHQDevices);
DisablePolusDevices = BooleanOptionItem.Create(22911, "DisablePolusDevices", false, TabGroup.GameSettings, false)
.SetParent(DisableDevices);
DisablePolusAdmin = BooleanOptionItem.Create(22912, "DisablePolusAdmin", false, TabGroup.GameSettings, false)
.SetParent(DisablePolusDevices);
DisablePolusCamera = BooleanOptionItem.Create(22913, "DisablePolusCamera", false, TabGroup.GameSettings, false)
.SetParent(DisablePolusDevices);
DisablePolusVital = BooleanOptionItem.Create(22914, "DisablePolusVital", false, TabGroup.GameSettings, false)
.SetParent(DisablePolusDevices);
DisableAirshipDevices = BooleanOptionItem.Create(22915, "DisableAirshipDevices", false, TabGroup.GameSettings, false)
.SetParent(DisableDevices);
DisableAirshipCockpitAdmin = BooleanOptionItem.Create(22916, "DisableAirshipCockpitAdmin", false, TabGroup.GameSettings, false)
.SetParent(DisableAirshipDevices);
LoadingPercentage = 77;
DisableAirshipRecordsAdmin = BooleanOptionItem.Create(22917, "DisableAirshipRecordsAdmin", false, TabGroup.GameSettings, false)
.SetParent(DisableAirshipDevices);
DisableAirshipCamera = BooleanOptionItem.Create(22918, "DisableAirshipCamera", false, TabGroup.GameSettings, false)
.SetParent(DisableAirshipDevices);
DisableAirshipVital = BooleanOptionItem.Create(22919, "DisableAirshipVital", false, TabGroup.GameSettings, false)
.SetParent(DisableAirshipDevices);
DisableFungleDevices = BooleanOptionItem.Create(22925, "DisableFungleDevices", false, TabGroup.GameSettings, false)
.SetParent(DisableDevices)
.SetGameMode(CustomGameMode.Standard);
DisableFungleCamera = BooleanOptionItem.Create(22926, "DisableFungleCamera", false, TabGroup.GameSettings, false)
.SetParent(DisableFungleDevices)
.SetGameMode(CustomGameMode.Standard);
DisableFungleVital = BooleanOptionItem.Create(22927, "DisableFungleVital", false, TabGroup.GameSettings, false)
.SetParent(DisableFungleDevices)
.SetGameMode(CustomGameMode.Standard);
DisableDevicesIgnoreConditions = BooleanOptionItem.Create(22920, "IgnoreConditions", false, TabGroup.GameSettings, false)
.SetParent(DisableDevices);
DisableDevicesIgnoreImpostors = BooleanOptionItem.Create(22921, "IgnoreImpostors", false, TabGroup.GameSettings, false)
.SetParent(DisableDevicesIgnoreConditions);
DisableDevicesIgnoreNeutrals = BooleanOptionItem.Create(22922, "IgnoreNeutrals", false, TabGroup.GameSettings, false)
.SetParent(DisableDevicesIgnoreConditions);
DisableDevicesIgnoreCrewmates = BooleanOptionItem.Create(22923, "IgnoreCrewmates", false, TabGroup.GameSettings, false)
.SetParent(DisableDevicesIgnoreConditions);
DisableDevicesIgnoreAfterAnyoneDied = BooleanOptionItem.Create(22924, "IgnoreAfterAnyoneDied", false, TabGroup.GameSettings, false)
.SetParent(DisableDevicesIgnoreConditions)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 78;
UsePets = BooleanOptionItem.Create(23850, "UsePets", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetColor(new Color32(60, 0, 255, byte.MaxValue));
PetToAssignToEveryone = StringOptionItem.Create(23854, "PetToAssign", PetToAssign, 24, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetParent(UsePets)
.SetColor(new Color32(60, 0, 255, byte.MaxValue));
UseVoteCancelling = BooleanOptionItem.Create(23852, "UseVoteCancelling", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetColor(new Color32(0, 65, 196, byte.MaxValue));
//Disable Short Tasks
DisableShortTasks = BooleanOptionItem.Create(23000, "DisableShortTasks", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetHeader(true)
.SetColor(new Color32(239, 89, 175, byte.MaxValue));
DisableCleanVent = BooleanOptionItem.Create(23001, "DisableCleanVent", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableCalibrateDistributor = BooleanOptionItem.Create(23002, "DisableCalibrateDistributor", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableChartCourse = BooleanOptionItem.Create(23003, "DisableChartCourse", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 79;
DisableStabilizeSteering = BooleanOptionItem.Create(23004, "DisableStabilizeSteering", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableCleanO2Filter = BooleanOptionItem.Create(23005, "DisableCleanO2Filter", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableUnlockManifolds = BooleanOptionItem.Create(23006, "DisableUnlockManifolds", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePrimeShields = BooleanOptionItem.Create(23007, "DisablePrimeShields", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableMeasureWeather = BooleanOptionItem.Create(23008, "DisableMeasureWeather", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 80;
DisableBuyBeverage = BooleanOptionItem.Create(23009, "DisableBuyBeverage", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableAssembleArtifact = BooleanOptionItem.Create(23010, "DisableAssembleArtifact", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableSortSamples = BooleanOptionItem.Create(23011, "DisableSortSamples", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableProcessData = BooleanOptionItem.Create(23012, "DisableProcessData", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableRunDiagnostics = BooleanOptionItem.Create(23013, "DisableRunDiagnostics", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 81;
DisableRepairDrill = BooleanOptionItem.Create(23014, "DisableRepairDrill", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableAlignTelescope = BooleanOptionItem.Create(23015, "DisableAlignTelescope", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableRecordTemperature = BooleanOptionItem.Create(23016, "DisableRecordTemperature", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableFillCanisters = BooleanOptionItem.Create(23017, "DisableFillCanisters", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 82;
DisableMonitorTree = BooleanOptionItem.Create(23018, "DisableMonitorTree", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableStoreArtifacts = BooleanOptionItem.Create(23019, "DisableStoreArtifacts", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePutAwayPistols = BooleanOptionItem.Create(23020, "DisablePutAwayPistols", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePutAwayRifles = BooleanOptionItem.Create(23021, "DisablePutAwayRifles", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableMakeBurger = BooleanOptionItem.Create(23022, "DisableMakeBurger", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 83;
DisableCleanToilet = BooleanOptionItem.Create(23023, "DisableCleanToilet", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableDecontaminate = BooleanOptionItem.Create(23024, "DisableDecontaminate", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableSortRecords = BooleanOptionItem.Create(23025, "DisableSortRecords", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableFixShower = BooleanOptionItem.Create(23026, "DisableFixShower", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePickUpTowels = BooleanOptionItem.Create(23027, "DisablePickUpTowels", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePolishRuby = BooleanOptionItem.Create(23028, "DisablePolishRuby", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableDressMannequin = BooleanOptionItem.Create(23029, "DisableDressMannequin", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableRoastMarshmallow = BooleanOptionItem.Create(23030, "DisableRoastMarshmallow", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableCollectSamples = BooleanOptionItem.Create(23031, "DisableCollectSamples", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
DisableReplaceParts = BooleanOptionItem.Create(23032, "DisableReplaceParts", false, TabGroup.TaskSettings, false)
.SetParent(DisableShortTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 84;
//Disable Common Tasks
DisableCommonTasks = BooleanOptionItem.Create(23100, "DisableCommonTasks", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(239, 89, 175, byte.MaxValue));
DisableSwipeCard = BooleanOptionItem.Create(23101, "DisableSwipeCardTask", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableFixWiring = BooleanOptionItem.Create(23102, "DisableFixWiring", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableEnterIdCode = BooleanOptionItem.Create(23103, "DisableEnterIdCode", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableInsertKeys = BooleanOptionItem.Create(23104, "DisableInsertKeys", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableScanBoardingPass = BooleanOptionItem.Create(23105, "DisableScanBoardingPass", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableCollectVegetables = BooleanOptionItem.Create(23106, "DisableCollectVegetables", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableMineOres = BooleanOptionItem.Create(23107, "DisableMineOres", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableExtractFuel = BooleanOptionItem.Create(23108, "DisableExtractFuel", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableCatchFish = BooleanOptionItem.Create(23109, "DisableCatchFish", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePolishGem = BooleanOptionItem.Create(23110, "DisablePolishGem", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableHelpCritter = BooleanOptionItem.Create(23111, "DisableHelpCritter", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
DisableHoistSupplies = BooleanOptionItem.Create(23112, "DisableHoistSupplies", false, TabGroup.TaskSettings, false)
.SetParent(DisableCommonTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 85;
//Disable Long Tasks
DisableLongTasks = BooleanOptionItem.Create(23150, "DisableLongTasks", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(239, 89, 175, byte.MaxValue));
DisableSubmitScan = BooleanOptionItem.Create(23151, "DisableSubmitScanTask", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableUnlockSafe = BooleanOptionItem.Create(23152, "DisableUnlockSafeTask", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableStartReactor = BooleanOptionItem.Create(23153, "DisableStartReactorTask", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableResetBreaker = BooleanOptionItem.Create(23154, "DisableResetBreakerTask", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 86;
DisableAlignEngineOutput = BooleanOptionItem.Create(23155, "DisableAlignEngineOutput", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableInspectSample = BooleanOptionItem.Create(23156, "DisableInspectSample", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableEmptyChute = BooleanOptionItem.Create(23157, "DisableEmptyChute", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableClearAsteroids = BooleanOptionItem.Create(23158, "DisableClearAsteroids", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableWaterPlants = BooleanOptionItem.Create(23159, "DisableWaterPlants", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableOpenWaterways = BooleanOptionItem.Create(23160, "DisableOpenWaterways", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 87;
DisableReplaceWaterJug = BooleanOptionItem.Create(23161, "DisableReplaceWaterJug", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableRebootWifi = BooleanOptionItem.Create(23162, "DisableRebootWifi", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableDevelopPhotos = BooleanOptionItem.Create(23163, "DisableDevelopPhotos", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableRewindTapes = BooleanOptionItem.Create(23164, "DisableRewindTapes", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableStartFans = BooleanOptionItem.Create(23165, "DisableStartFans", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableFixAntenna = BooleanOptionItem.Create(23166, "DisableFixAntenna", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableBuildSandcastle = BooleanOptionItem.Create(23167, "DisableBuildSandcastle", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 88;
DisableCrankGenerator = BooleanOptionItem.Create(23168, "DisableCrankGenerator", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableMonitorMushroom = BooleanOptionItem.Create(23169, "DisableMonitorMushroom", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisablePlayVideoGame = BooleanOptionItem.Create(23170, "DisablePlayVideoGame", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableFindSignal = BooleanOptionItem.Create(23171, "DisableFindSignal", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableThrowFisbee = BooleanOptionItem.Create(23172, "DisableThrowFisbee", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableLiftWeights = BooleanOptionItem.Create(23173, "DisableLiftWeights", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
DisableCollectShells = BooleanOptionItem.Create(23174, "DisableCollectShells", false, TabGroup.TaskSettings, false)
.SetParent(DisableLongTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 89;
//Disable Divert Power, Weather Nodes and etc. situational Tasks
DisableOtherTasks = BooleanOptionItem.Create(23200, "DisableOtherTasks", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(239, 89, 175, byte.MaxValue));
DisableUploadData = BooleanOptionItem.Create(23205, "DisableUploadDataTask", false, TabGroup.TaskSettings, false)
.SetParent(DisableOtherTasks)
.SetGameMode(CustomGameMode.Standard);
DisableEmptyGarbage = BooleanOptionItem.Create(23206, "DisableEmptyGarbage", false, TabGroup.TaskSettings, false)
.SetParent(DisableOtherTasks)
.SetGameMode(CustomGameMode.Standard);
DisableFuelEngines = BooleanOptionItem.Create(23207, "DisableFuelEngines", false, TabGroup.TaskSettings, false)
.SetParent(DisableOtherTasks)
.SetGameMode(CustomGameMode.Standard);
DisableDivertPower = BooleanOptionItem.Create(23208, "DisableDivertPower", false, TabGroup.TaskSettings, false)
.SetParent(DisableOtherTasks)
.SetGameMode(CustomGameMode.Standard);
DisableActivateWeatherNodes = BooleanOptionItem.Create(23209, "DisableActivateWeatherNodes", false, TabGroup.TaskSettings, false)
.SetParent(DisableOtherTasks)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 90;
MainLoadingText = "Building Guesser Mode settings";
TextOptionItem.Create(100022, "MenuTitle.Guessers", TabGroup.TaskSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(Color.yellow)
.SetHeader(true);
GuesserMode = BooleanOptionItem.Create(19700, "GuesserMode", false, TabGroup.TaskSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(Color.yellow)
.SetHeader(true);
CrewmatesCanGuess = BooleanOptionItem.Create(19710, "CrewmatesCanGuess", false, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
ImpostorsCanGuess = BooleanOptionItem.Create(19711, "ImpostorsCanGuess", false, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
LoadingPercentage = 91;
NeutralKillersCanGuess = BooleanOptionItem.Create(19712, "NeutralKillersCanGuess", false, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
PassiveNeutralsCanGuess = BooleanOptionItem.Create(19713, "PassiveNeutralsCanGuess", false, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
CanGuessAddons = BooleanOptionItem.Create(19714, "CanGuessAddons", true, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
CrewCanGuessCrew = BooleanOptionItem.Create(19715, "CrewCanGuessCrew", true, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
ImpCanGuessImp = BooleanOptionItem.Create(19716, "ImpCanGuessImp", true, TabGroup.TaskSettings, false)
.SetParent(GuesserMode);
HideGuesserCommands = BooleanOptionItem.Create(19717, "GuesserTryHideMsg", true, TabGroup.TaskSettings, false)
.SetParent(GuesserMode)
.SetColor(Color.green);
LoadingPercentage = 92;
TextOptionItem.Create(100050, "MenuTitle.GuesserModeRoles", TabGroup.TaskSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(Color.yellow)
.SetHeader(true);
SetupAdtRoleOptions(14500, CustomRoles.Onbound, canSetNum: true, tab: TabGroup.TaskSettings);
ImpCanBeOnbound = BooleanOptionItem.Create(14510, "ImpCanBeOnbound", true, TabGroup.TaskSettings, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Onbound]);
CrewCanBeOnbound = BooleanOptionItem.Create(14511, "CrewCanBeOnbound", true, TabGroup.TaskSettings, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Onbound]);
NeutralCanBeOnbound = BooleanOptionItem.Create(14512, "NeutralCanBeOnbound", true, TabGroup.TaskSettings, false)
.SetParent(CustomRoleSpawnChances[CustomRoles.Onbound]);
LoadingPercentage = 93;
MainLoadingText = "Building game settings";
//会议相关设定
TextOptionItem.Create(100027, "MenuTitle.Meeting", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(147, 241, 240, byte.MaxValue));
// 会议限制次数
SyncButtonMode = BooleanOptionItem.Create(23300, "SyncButtonMode", false, TabGroup.GameSettings, false)
.SetHeader(true)
.SetColor(new Color32(147, 241, 240, byte.MaxValue))
.SetGameMode(CustomGameMode.Standard);
SyncedButtonCount = IntegerOptionItem.Create(23310, "SyncedButtonCount", new(0, 100, 1), 10, TabGroup.GameSettings, false)
.SetParent(SyncButtonMode)
.SetValueFormat(OptionFormat.Times)
.SetGameMode(CustomGameMode.Standard);
// 全员存活时的会议时间
AllAliveMeeting = BooleanOptionItem.Create(23400, "AllAliveMeeting", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(147, 241, 240, byte.MaxValue));
AllAliveMeetingTime = FloatOptionItem.Create(23410, "AllAliveMeetingTime", new(1f, 300f, 1f), 10f, TabGroup.GameSettings, false)
.SetParent(AllAliveMeeting)
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 94;
// 附加紧急会议
AdditionalEmergencyCooldown = BooleanOptionItem.Create(23500, "AdditionalEmergencyCooldown", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(147, 241, 240, byte.MaxValue));
AdditionalEmergencyCooldownThreshold = IntegerOptionItem.Create(23510, "AdditionalEmergencyCooldownThreshold", new(1, 15, 1), 1, TabGroup.GameSettings, false)
.SetParent(AdditionalEmergencyCooldown)
.SetGameMode(CustomGameMode.Standard)
.SetValueFormat(OptionFormat.Players);
AdditionalEmergencyCooldownTime = FloatOptionItem.Create(23511, "AdditionalEmergencyCooldownTime", new(1f, 60f, 1f), 1f, TabGroup.GameSettings, false)
.SetParent(AdditionalEmergencyCooldown)
.SetGameMode(CustomGameMode.Standard)
.SetValueFormat(OptionFormat.Seconds);
LoadingPercentage = 95;
// 投票相关设定
VoteMode = BooleanOptionItem.Create(23600, "VoteMode", false, TabGroup.GameSettings, false)
.SetColor(new Color32(147, 241, 240, byte.MaxValue))
.SetGameMode(CustomGameMode.Standard);
WhenSkipVote = StringOptionItem.Create(23610, "WhenSkipVote", voteModes[0..3], 0, TabGroup.GameSettings, false)
.SetParent(VoteMode)
.SetGameMode(CustomGameMode.Standard);
WhenSkipVoteIgnoreFirstMeeting = BooleanOptionItem.Create(23611, "WhenSkipVoteIgnoreFirstMeeting", false, TabGroup.GameSettings, false)
.SetParent(WhenSkipVote)
.SetGameMode(CustomGameMode.Standard);
WhenSkipVoteIgnoreNoDeadBody = BooleanOptionItem.Create(23612, "WhenSkipVoteIgnoreNoDeadBody", false, TabGroup.GameSettings, false)
.SetParent(WhenSkipVote)
.SetGameMode(CustomGameMode.Standard);
WhenSkipVoteIgnoreEmergency = BooleanOptionItem.Create(23613, "WhenSkipVoteIgnoreEmergency", false, TabGroup.GameSettings, false)
.SetParent(WhenSkipVote)
.SetGameMode(CustomGameMode.Standard);
WhenNonVote = StringOptionItem.Create(23700, "WhenNonVote", voteModes, 0, TabGroup.GameSettings, false)
.SetParent(VoteMode)
.SetGameMode(CustomGameMode.Standard);
WhenTie = StringOptionItem.Create(23750, "WhenTie", tieModes, 0, TabGroup.GameSettings, false)
.SetParent(VoteMode)
.SetGameMode(CustomGameMode.Standard);
LoadingPercentage = 96;
// 其它设定
TextOptionItem.Create(100028, "MenuTitle.Other", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(193, 255, 209, byte.MaxValue));
// 梯子摔死
LadderDeath = BooleanOptionItem.Create(23800, "LadderDeath", false, TabGroup.GameSettings, false)
.SetColor(new Color32(193, 255, 209, byte.MaxValue));
LadderDeathChance = StringOptionItem.Create(23810, "LadderDeathChance", rates[1..], 0, TabGroup.GameSettings, false)
.SetParent(LadderDeath);
LoadingPercentage = 97;
// 修正首刀时间
FixFirstKillCooldown = BooleanOptionItem.Create(23900, "FixFirstKillCooldown", false, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(193, 255, 209, byte.MaxValue));
StartingKillCooldown = FloatOptionItem.Create(23950, "StartingKillCooldown", new(1, 60, 1), 18, TabGroup.GameSettings, false)
.SetColor(new Color32(193, 255, 209, byte.MaxValue))
.SetValueFormat(OptionFormat.Seconds);
// 首刀保护
ShieldPersonDiedFirst = BooleanOptionItem.Create(24000, "ShieldPersonDiedFirst", false, TabGroup.GameSettings, false)
.SetColor(new Color32(193, 255, 209, byte.MaxValue));
LoadingPercentage = 98;
// 杀戮闪烁持续
KillFlashDuration = FloatOptionItem.Create(24100, "KillFlashDuration", new(0.1f, 0.45f, 0.05f), 0.3f, TabGroup.GameSettings, false)
.SetColor(new Color32(193, 255, 209, byte.MaxValue))
.SetValueFormat(OptionFormat.Seconds)
.SetGameMode(CustomGameMode.Standard);
// 幽灵相关设定
TextOptionItem.Create(100029, "MenuTitle.Ghost", TabGroup.GameSettings)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(217, 218, 255, byte.MaxValue));
LoadingPercentage = 99;
// 幽灵设置
//GhostIgnoreTasks = BooleanOptionItem.Create(24200, "GhostIgnoreTasks", false, TabGroup.GameSettings, false)
// .SetGameMode(CustomGameMode.Standard)
// .SetColor(new Color32(217, 218, 255, byte.MaxValue));
GhostCanSeeOtherRoles = BooleanOptionItem.Create(24300, "GhostCanSeeOtherRoles", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(217, 218, 255, byte.MaxValue));
GhostCanSeeOtherVotes = BooleanOptionItem.Create(24400, "GhostCanSeeOtherVotes", true, TabGroup.GameSettings, false)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(217, 218, 255, byte.MaxValue));
GhostCanSeeDeathReason = BooleanOptionItem.Create(24500, "GhostCanSeeDeathReason", true, TabGroup.GameSettings, false)
.SetHeader(true)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(217, 218, 255, byte.MaxValue));
LoadingPercentage = 100;
#endregion
OptionSaver.Load();
IsLoaded = true;
}
public static void SetupRoleOptions(int id, TabGroup tab, CustomRoles role, CustomGameMode customGameMode = CustomGameMode.Standard, bool zeroOne = false)
{
var spawnOption = StringOptionItem.Create(id, role.ToString(), zeroOne ? ratesZeroOne : rates, 0, tab, false).SetColor(Utils.GetRoleColor(role))
.SetHeader(true)
.SetGameMode(customGameMode) as StringOptionItem;
var countOption = IntegerOptionItem.Create(id + 1, "Maximum", new(1, 15, 1), 1, tab, false)
.SetParent(spawnOption)
.SetValueFormat(OptionFormat.Players)
.SetGameMode(customGameMode);
CustomRoleSpawnChances.Add(role, spawnOption);
CustomRoleCounts.Add(role, countOption);
}
private static void SetupLoversRoleOptionsToggle(int id, CustomGameMode customGameMode = CustomGameMode.Standard)
{
var role = CustomRoles.Lovers;
var spawnOption = StringOptionItem.Create(id, role.ToString(), ratesZeroOne, 0, TabGroup.Addons, false).SetColor(Utils.GetRoleColor(role))
.SetHeader(true)
.SetGameMode(customGameMode) as StringOptionItem;
LoverSpawnChances = IntegerOptionItem.Create(id + 2, "LoverSpawnChances", new(0, 100, 5), 50, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetValueFormat(OptionFormat.Percent)
.SetGameMode(customGameMode);
LoverKnowRoles = BooleanOptionItem.Create(id + 4, "LoverKnowRoles", true, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetGameMode(customGameMode);
LoverSuicide = BooleanOptionItem.Create(id + 3, "LoverSuicide", true, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetGameMode(customGameMode);
ImpCanBeInLove = BooleanOptionItem.Create(id + 5, "ImpCanBeInLove", true, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetGameMode(customGameMode);
CrewCanBeInLove = BooleanOptionItem.Create(id + 6, "CrewCanBeInLove", true, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetGameMode(customGameMode);
NeutralCanBeInLove = BooleanOptionItem.Create(id + 7, "NeutralCanBeInLove", true, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetGameMode(customGameMode);
var countOption = IntegerOptionItem.Create(id + 1, "NumberOfLovers", new(2, 2, 1), 2, TabGroup.Addons, false)
.SetParent(spawnOption)
.SetHidden(true)
.SetGameMode(customGameMode);
CustomRoleSpawnChances.Add(role, spawnOption);
CustomRoleCounts.Add(role, countOption);
}
public static void SetupAdtRoleOptions(int id, CustomRoles role, CustomGameMode customGameMode = CustomGameMode.Standard, bool canSetNum = false, TabGroup tab = TabGroup.Addons, bool canSetChance = true)
{
var spawnOption = StringOptionItem.Create(id, role.ToString(), ratesZeroOne, 0, tab, false).SetColor(Utils.GetRoleColor(role))
.SetHeader(true)
.SetGameMode(customGameMode) as StringOptionItem;
var countOption = IntegerOptionItem.Create(id + 1, "Maximum", new(1, canSetNum ? 15 : 1, 1), 1, tab, false)
.SetParent(spawnOption)
.SetValueFormat(OptionFormat.Players)
.SetHidden(!canSetNum)
.SetGameMode(customGameMode);
var spawnRateOption = IntegerOptionItem.Create(id + 2, "AdditionRolesSpawnRate", new(0, 100, 5), canSetChance ? 65 : 100, tab, false)
.SetParent(spawnOption)
.SetValueFormat(OptionFormat.Percent)
.SetHidden(!canSetChance)
.SetGameMode(customGameMode) as IntegerOptionItem;
CustomAdtRoleSpawnRate.Add(role, spawnRateOption);
CustomRoleSpawnChances.Add(role, spawnOption);
CustomRoleCounts.Add(role, countOption);
}
public static void SetupSingleRoleOptions(int id, TabGroup tab, CustomRoles role, int count, CustomGameMode customGameMode = CustomGameMode.Standard, bool zeroOne = false)
{
var spawnOption = StringOptionItem.Create(id, role.ToString(), zeroOne ? ratesZeroOne : rates, 0, tab, false).SetColor(Utils.GetRoleColor(role))
.SetHeader(true)
.SetGameMode(customGameMode) as StringOptionItem;
// 初期値,最大値,最小値が同じで、stepが0のどうやっても変えることができない個数オプション
var countOption = IntegerOptionItem.Create(id + 1, "Maximum", new(count, count, count), count, tab, false)
.SetParent(spawnOption)
.SetGameMode(customGameMode);
CustomRoleSpawnChances.Add(role, spawnOption);
CustomRoleCounts.Add(role, countOption);
}
public static OptionItem CreateCDSetting(int id, TabGroup tab, CustomRoles role, bool isKCD = false) =>
FloatOptionItem.Create(id, isKCD ? "KillCooldown" : "AbilityCooldown", new(0f, 180f, 2.5f), 30f, tab, false)
.SetParent(CustomRoleSpawnChances[role])
.SetValueFormat(OptionFormat.Seconds);
public static OptionItem CreatePetUseSetting(int id, CustomRoles role) =>
BooleanOptionItem.Create(id, "UsePetInsteadOfKillButton", false, TabGroup.CrewmateRoles, false)
.SetParent(CustomRoleSpawnChances[role])
.SetColor(Color.magenta);
public static OptionItem CreateVoteCancellingUseSetting(int id, CustomRoles role, TabGroup tab) =>
BooleanOptionItem.Create(id, "UseVoteCancellingAfterVote", false, tab, false)
.SetParent(CustomRoleSpawnChances[role])
.SetColor(Color.yellow);
public class OverrideTasksData
{
public static Dictionary<CustomRoles, OverrideTasksData> AllData = [];
public CustomRoles Role { get; private set; }
public int IdStart { get; private set; }
public OptionItem doOverride;
public OptionItem assignCommonTasks;
public OptionItem numLongTasks;
public OptionItem numShortTasks;
public OverrideTasksData(int idStart, TabGroup tab, CustomRoles role)
{
IdStart = idStart;
Role = role;
Dictionary<string, string> replacementDic = new() { { "%role%", Utils.ColorString(Utils.GetRoleColor(role), Utils.GetRoleName(role)) } };
doOverride = BooleanOptionItem.Create(idStart++, "doOverride", false, tab, false)
.SetParent(CustomRoleSpawnChances[role])
.SetValueFormat(OptionFormat.None);
doOverride.ReplacementDictionary = replacementDic;
assignCommonTasks = BooleanOptionItem.Create(idStart++, "assignCommonTasks", true, tab, false)
.SetParent(doOverride)
.SetValueFormat(OptionFormat.None);
assignCommonTasks.ReplacementDictionary = replacementDic;
numLongTasks = IntegerOptionItem.Create(idStart++, "roleLongTasksNum", new(0, 99, 1), 3, tab, false)
.SetParent(doOverride)
.SetValueFormat(OptionFormat.Pieces);
numLongTasks.ReplacementDictionary = replacementDic;
numShortTasks = IntegerOptionItem.Create(idStart++, "roleShortTasksNum", new(0, 99, 1), 3, tab, false)
.SetParent(doOverride)
.SetValueFormat(OptionFormat.Pieces);
numShortTasks.ReplacementDictionary = replacementDic;
if (!AllData.ContainsKey(role)) AllData.Add(role, this);
else Logger.Warn("OverrideTasksData created for duplicate CustomRoles", "OverrideTasksData");
}
public static OverrideTasksData Create(int idStart, TabGroup tab, CustomRoles role) => new(idStart, tab, role);
}
}