mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
Add files via upload
This commit is contained in:
1 parent
5cca61a7f2
commit
3b2ed237a8
15 files changed
+859
-331
No files matched your search
@@ -232,7 +232,7 @@ internal static class SoloKombatManager
|
||||
|
||||
LastHurt[target.PlayerId] = Utils.GetTimeStamp();
|
||||
|
||||
killer.SetKillCooldownV2(1f, target);
|
||||
killer.SetKillCooldown(1f, target);
|
||||
RPC.PlaySoundRPC(killer.PlayerId, Sounds.KillSound);
|
||||
RPC.PlaySoundRPC(target.PlayerId, Sounds.KillSound);
|
||||
if (!target.IsModClient() && !target.AmOwner)
|
||||
|
||||
@@ -29,12 +29,12 @@ public static class AntiBlackout
|
||||
|| Ritualist.IsEnable || Virus.IsEnable
|
||||
|| Wraith.IsEnable || HexMaster.IsEnable
|
||||
|| Traitor.IsEnable || Pickpocket.IsEnable
|
||||
|| NSerialKiller.IsEnable || NWitch.IsEnable
|
||||
|| NSerialKiller.IsEnable || NWitch.IsEnable || RuthlessRomantic.IsEnable
|
||||
|| Maverick.IsEnable || Jinx.IsEnable
|
||||
|| Medusa.IsEnable || Spiritcaller.IsEnable
|
||||
|| PlagueBearer.IsEnable || CustomRoles.Sidekick.RoleExist()
|
||||
|| CustomRoles.Pestilence.RoleExist() || CustomRoles.Arsonist.RoleExist()
|
||||
|| Pirate.IsEnable;
|
||||
|| CustomRoles.Pestilence.RoleExist() || CustomRoles.Arsonist.RoleExist();
|
||||
//|| Pirate.IsEnable;
|
||||
///<summary>
|
||||
///インポスター以外の人数とインポスターの人数の差
|
||||
///</summary>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using AmongUs.GameOptions;
|
||||
using System.Linq;
|
||||
using TOHE.Roles.Crewmate;
|
||||
using TOHE.Roles.Impostor;
|
||||
using TOHE.Roles.Neutral;
|
||||
|
||||
namespace TOHE;
|
||||
@@ -17,7 +18,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Jester => Options.JesterCanVent.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
||||
CustomRoles.Mayor => Options.MayorHasPortableButton.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
||||
CustomRoles.Vulture => Vulture.CanVent.GetBool() ? CustomRoles.Engineer : CustomRoles.Crewmate,
|
||||
CustomRoles.Opportunist => CustomRoles.Crewmate,
|
||||
CustomRoles.Opportunist => CustomRoles.Engineer,
|
||||
CustomRoles.Vindicator => CustomRoles.Impostor,
|
||||
CustomRoles.Snitch => CustomRoles.Crewmate,
|
||||
CustomRoles.Masochist => CustomRoles.Crewmate,
|
||||
@@ -32,6 +33,9 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Vampire => CustomRoles.Impostor,
|
||||
CustomRoles.Poisoner => CustomRoles.Impostor,
|
||||
CustomRoles.NSerialKiller => CustomRoles.Impostor,
|
||||
CustomRoles.RuthlessRomantic => CustomRoles.Impostor,
|
||||
CustomRoles.VengefulRomantic => CustomRoles.Impostor,
|
||||
CustomRoles.Romantic => CustomRoles.Impostor,
|
||||
CustomRoles.Maverick => CustomRoles.Impostor,
|
||||
CustomRoles.CursedSoul => CustomRoles.Impostor,
|
||||
CustomRoles.Parasite => CustomRoles.Impostor,
|
||||
@@ -46,7 +50,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Pickpocket => CustomRoles.Impostor,
|
||||
CustomRoles.Traitor => CustomRoles.Impostor,
|
||||
CustomRoles.HexMaster => CustomRoles.Impostor,
|
||||
CustomRoles.Wildling => CustomRoles.Shapeshifter,
|
||||
CustomRoles.Wildling => Wildling.CanShapeshift.GetBool() ? CustomRoles.Shapeshifter : CustomRoles.Impostor,
|
||||
CustomRoles.Morphling => CustomRoles.Shapeshifter,
|
||||
CustomRoles.Warlock => CustomRoles.Shapeshifter,
|
||||
CustomRoles.SerialKiller => CustomRoles.Shapeshifter,
|
||||
@@ -77,6 +81,9 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Assassin => CustomRoles.Shapeshifter,
|
||||
CustomRoles.Luckey => CustomRoles.Crewmate,
|
||||
CustomRoles.CyberStar => CustomRoles.Crewmate,
|
||||
CustomRoles.Demolitionist => CustomRoles.Crewmate,
|
||||
CustomRoles.NiceEraser => CustomRoles.Crewmate,
|
||||
CustomRoles.TaskManager => CustomRoles.Crewmate,
|
||||
CustomRoles.Escapee => CustomRoles.Shapeshifter,
|
||||
CustomRoles.NiceGuesser => CustomRoles.Crewmate,
|
||||
CustomRoles.EvilGuesser => CustomRoles.Impostor,
|
||||
@@ -98,6 +105,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Capitalism => CustomRoles.Impostor,
|
||||
CustomRoles.Bodyguard => CustomRoles.Crewmate,
|
||||
CustomRoles.Grenadier => CustomRoles.Engineer,
|
||||
CustomRoles.Lighter => CustomRoles.Engineer,
|
||||
CustomRoles.Gangster => CustomRoles.Impostor,
|
||||
CustomRoles.Cleaner => CustomRoles.Impostor,
|
||||
CustomRoles.Medusa => CustomRoles.Impostor,
|
||||
@@ -172,6 +180,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Bodyguard => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.ParityCop => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Grenadier => CustomRoles.EngineerTOHE,
|
||||
CustomRoles.Lighter => CustomRoles.EngineerTOHE,
|
||||
CustomRoles.Transporter => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Veteran => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.GuardianAngelTOHE => CustomRoles.GuardianAngel,
|
||||
@@ -179,6 +188,9 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.NiceGuesser => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Luckey => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.CyberStar => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Demolitionist => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.NiceEraser => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.TaskManager => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Psychic => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Needy => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.SuperStar => CustomRoles.CrewmateTOHE,
|
||||
@@ -198,6 +210,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Retributionist => CustomRoles.Crewmate,
|
||||
CustomRoles.Monarch => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Deputy => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Witness => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Guardian => CustomRoles.CrewmateTOHE,
|
||||
CustomRoles.Addict => CustomRoles.EngineerTOHE,
|
||||
CustomRoles.Oracle => CustomRoles.EngineerTOHE,
|
||||
@@ -215,7 +228,7 @@ internal static class CustomRolesHelper
|
||||
//Standard
|
||||
CustomRoles.Sheriff => RoleTypes.Impostor,
|
||||
CustomRoles.Crusader => RoleTypes.Impostor,
|
||||
CustomRoles.Pirate => RoleTypes.Impostor,
|
||||
//CustomRoles.Pirate => RoleTypes.Impostor,
|
||||
CustomRoles.CopyCat => RoleTypes.Impostor,
|
||||
CustomRoles.CursedSoul => RoleTypes.Impostor,
|
||||
CustomRoles.Admirer => RoleTypes.Impostor,
|
||||
@@ -232,6 +245,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Innocent => RoleTypes.Impostor,
|
||||
CustomRoles.Pelican => RoleTypes.Impostor,
|
||||
CustomRoles.Counterfeiter => RoleTypes.Impostor,
|
||||
CustomRoles.Witness => RoleTypes.Impostor,
|
||||
CustomRoles.Pursuer => RoleTypes.Impostor,
|
||||
CustomRoles.Revolutionist => RoleTypes.Impostor,
|
||||
CustomRoles.FFF => RoleTypes.Impostor,
|
||||
@@ -251,6 +265,9 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Parasite => RoleTypes.Impostor,
|
||||
CustomRoles.NWitch => RoleTypes.Impostor,
|
||||
CustomRoles.Totocalcio => RoleTypes.Impostor,
|
||||
CustomRoles.Romantic => RoleTypes.Impostor,
|
||||
CustomRoles.VengefulRomantic => RoleTypes.Impostor,
|
||||
CustomRoles.RuthlessRomantic => RoleTypes.Impostor,
|
||||
CustomRoles.Succubus => RoleTypes.Impostor,
|
||||
CustomRoles.Infectious => RoleTypes.Impostor,
|
||||
CustomRoles.Virus => RoleTypes.Impostor,
|
||||
@@ -274,7 +291,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Watcher or
|
||||
CustomRoles.Admired or
|
||||
CustomRoles.Flashman or
|
||||
CustomRoles.Lighter or
|
||||
CustomRoles.Torch or
|
||||
CustomRoles.Seer or
|
||||
CustomRoles.Bait or
|
||||
CustomRoles.Diseased or
|
||||
@@ -348,6 +365,8 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.CursedSoul or
|
||||
CustomRoles.Phantom or
|
||||
CustomRoles.Totocalcio or
|
||||
CustomRoles.Romantic or
|
||||
CustomRoles.VengefulRomantic or
|
||||
CustomRoles.Doomsayer or
|
||||
CustomRoles.Succubus;
|
||||
}
|
||||
@@ -386,11 +405,12 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.DarkHide or
|
||||
CustomRoles.Ritualist or
|
||||
CustomRoles.Doomsayer or
|
||||
CustomRoles.Pirate or
|
||||
//CustomRoles.Pirate or
|
||||
// CustomRoles.Juggernaut or
|
||||
CustomRoles.Jinx or
|
||||
// CustomRoles.Poisoner or
|
||||
// CustomRoles.HexMaster or
|
||||
CustomRoles.Romantic or
|
||||
// CustomRoles.Poisoner or
|
||||
// CustomRoles.HexMaster or
|
||||
CustomRoles.Totocalcio;
|
||||
}
|
||||
public static bool IsAmneNK(this CustomRoles role)
|
||||
@@ -423,7 +443,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Wraith or
|
||||
CustomRoles.Medusa or
|
||||
CustomRoles.Pelican or
|
||||
CustomRoles.Pirate or
|
||||
//CustomRoles.Pirate or
|
||||
CustomRoles.DarkHide or
|
||||
CustomRoles.Juggernaut or
|
||||
CustomRoles.Jinx or
|
||||
@@ -438,6 +458,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Virus or
|
||||
CustomRoles.BloodKnight or
|
||||
CustomRoles.Spiritcaller or
|
||||
CustomRoles.RuthlessRomantic or
|
||||
CustomRoles.PlagueBearer or
|
||||
CustomRoles.Pestilence;
|
||||
}
|
||||
@@ -467,6 +488,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Succubus or
|
||||
CustomRoles.BloodKnight or
|
||||
CustomRoles.Spiritcaller or
|
||||
CustomRoles.RuthlessRomantic or
|
||||
CustomRoles.PlagueBearer or
|
||||
CustomRoles.Pestilence;
|
||||
}
|
||||
@@ -493,6 +515,8 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.FFF or
|
||||
CustomRoles.Sunnyboy or
|
||||
CustomRoles.Maverick or
|
||||
CustomRoles.Romantic or
|
||||
CustomRoles.VengefulRomantic or
|
||||
CustomRoles.Totocalcio;
|
||||
}
|
||||
public static bool IsNC(this CustomRoles role)
|
||||
@@ -500,7 +524,7 @@ internal static class CustomRolesHelper
|
||||
return role is
|
||||
CustomRoles.Mario or
|
||||
CustomRoles.Terrorist or
|
||||
CustomRoles.Pirate or
|
||||
//CustomRoles.Pirate or
|
||||
CustomRoles.Revolutionist or
|
||||
CustomRoles.Vulture or
|
||||
CustomRoles.Famine or
|
||||
@@ -545,6 +569,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Virus or
|
||||
CustomRoles.Succubus or
|
||||
CustomRoles.Spiritcaller or
|
||||
CustomRoles.RuthlessRomantic or
|
||||
CustomRoles.PlagueBearer or
|
||||
CustomRoles.Pestilence;
|
||||
}
|
||||
@@ -661,7 +686,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Pursuer or
|
||||
CustomRoles.PlagueBearer or
|
||||
CustomRoles.Pestilence or
|
||||
CustomRoles.Pirate or
|
||||
//CustomRoles.Pirate or
|
||||
|
||||
// CustomRoles.Sidekick or
|
||||
CustomRoles.Poisoner or
|
||||
@@ -684,7 +709,10 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Sunnyboy or
|
||||
CustomRoles.Phantom or
|
||||
CustomRoles.BloodKnight or
|
||||
CustomRoles.Romantic or
|
||||
CustomRoles.Totocalcio or
|
||||
CustomRoles.RuthlessRomantic or
|
||||
CustomRoles.VengefulRomantic or
|
||||
CustomRoles.Virus or
|
||||
CustomRoles.Succubus or
|
||||
CustomRoles.Doomsayer or
|
||||
@@ -718,22 +746,23 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Gamer or
|
||||
CustomRoles.DarkHide or
|
||||
CustomRoles.Provocateur or
|
||||
CustomRoles.Wraith or
|
||||
CustomRoles.Juggernaut or
|
||||
CustomRoles.Pelican or
|
||||
CustomRoles.Infectious or
|
||||
CustomRoles.Pursuer or
|
||||
CustomRoles.Jinx or
|
||||
CustomRoles.Counterfeiter or
|
||||
CustomRoles.Totocalcio or
|
||||
CustomRoles.Farseer or
|
||||
CustomRoles.FFF or
|
||||
CustomRoles.SwordsMan or
|
||||
CustomRoles.CursedSoul or
|
||||
CustomRoles.Admirer or
|
||||
CustomRoles.Refugee or
|
||||
CustomRoles.Amnesiac or
|
||||
CustomRoles.Monarch or
|
||||
CustomRoles.Wraith or
|
||||
CustomRoles.Juggernaut or
|
||||
CustomRoles.Pelican or
|
||||
CustomRoles.Infectious or
|
||||
CustomRoles.Pursuer or
|
||||
CustomRoles.Jinx or
|
||||
CustomRoles.Counterfeiter or
|
||||
CustomRoles.Witness or
|
||||
CustomRoles.Totocalcio or
|
||||
CustomRoles.Farseer or
|
||||
CustomRoles.FFF or
|
||||
CustomRoles.SwordsMan or
|
||||
CustomRoles.CursedSoul or
|
||||
CustomRoles.Admirer or
|
||||
CustomRoles.Refugee or
|
||||
CustomRoles.Amnesiac or
|
||||
CustomRoles.Monarch or
|
||||
CustomRoles.Parasite or
|
||||
CustomRoles.PlagueBearer;
|
||||
|
||||
@@ -783,13 +812,16 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Sunnyboy or
|
||||
CustomRoles.Phantom or
|
||||
CustomRoles.BloodKnight or
|
||||
CustomRoles.Romantic or
|
||||
CustomRoles.Totocalcio or
|
||||
CustomRoles.VengefulRomantic or
|
||||
CustomRoles.RuthlessRomantic or
|
||||
CustomRoles.Virus or
|
||||
CustomRoles.Succubus or
|
||||
CustomRoles.Spiritcaller or
|
||||
CustomRoles.Doomsayer or
|
||||
CustomRoles.PlagueBearer or
|
||||
CustomRoles.Pirate or
|
||||
//CustomRoles.Pirate or
|
||||
CustomRoles.Pestilence;
|
||||
}
|
||||
|
||||
@@ -824,6 +856,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Reverie or
|
||||
CustomRoles.Crusader or
|
||||
CustomRoles.Counterfeiter or
|
||||
CustomRoles.Witness or
|
||||
CustomRoles.Monarch or
|
||||
CustomRoles.Farseer or
|
||||
CustomRoles.SwordsMan or
|
||||
@@ -858,9 +891,9 @@ internal static class CustomRolesHelper
|
||||
if (!role.IsAdditionRole()) return false;
|
||||
|
||||
if (pc.Is(CustomRoles.GM) || pc.Is(CustomRoles.Lovers) || (pc.HasSubRole() && pc.GetCustomSubRoles().Count >= Options.NoLimitAddonsNumMax.GetInt())) return false;
|
||||
if (role is CustomRoles.Lighter && (!pc.GetCustomRole().IsCrewmate() || pc.Is(CustomRoles.Bewilder) || pc.Is(CustomRoles.Sunglasses) || pc.Is(CustomRoles.GuardianAngelTOHE))) return false;
|
||||
if (role is CustomRoles.Bewilder && (pc.Is(CustomRoles.Lighter) || pc.Is(CustomRoles.GuardianAngelTOHE) || pc.Is(CustomRoles.Sunglasses))) return false;
|
||||
if (role is CustomRoles.Sunglasses && (pc.Is(CustomRoles.Lighter) || pc.Is(CustomRoles.GuardianAngelTOHE) || pc.Is(CustomRoles.Bewilder))) return false;
|
||||
if (role is CustomRoles.Torch && (!pc.GetCustomRole().IsCrewmate() || pc.Is(CustomRoles.Bewilder) || pc.Is(CustomRoles.Sunglasses) || pc.Is(CustomRoles.GuardianAngelTOHE))) return false;
|
||||
if (role is CustomRoles.Bewilder && (pc.Is(CustomRoles.Torch) || pc.Is(CustomRoles.GuardianAngelTOHE) || pc.Is(CustomRoles.Sunglasses))) return false;
|
||||
if (role is CustomRoles.Sunglasses && (pc.Is(CustomRoles.Torch) || pc.Is(CustomRoles.GuardianAngelTOHE) || pc.Is(CustomRoles.Bewilder))) return false;
|
||||
if (role is CustomRoles.Ntr && (pc.Is(CustomRoles.Lovers) || pc.Is(CustomRoles.FFF) || pc.Is(CustomRoles.GuardianAngelTOHE))) return false;
|
||||
// if (role is CustomRoles.Lovers && pc.Is(CustomRoles.FFF)) return false;
|
||||
// if (role is CustomRoles.Lovers && pc.Is(CustomRoles.Bomber)) return false;
|
||||
@@ -895,6 +928,13 @@ internal static class CustomRolesHelper
|
||||
if (role is CustomRoles.Mare && pc.Is(CustomRoles.Swooper)) return false;
|
||||
if (role is CustomRoles.Mare && pc.Is(CustomRoles.Vampire)) return false;
|
||||
if (role is CustomRoles.Mare && pc.Is(CustomRoles.Sans)) return false;
|
||||
if (role is CustomRoles.Torch && pc.Is(CustomRoles.Lighter)) return false;
|
||||
if (role is CustomRoles.Bewilder && pc.Is(CustomRoles.Lighter)) return false;
|
||||
if (role is CustomRoles.Sunglasses && pc.Is(CustomRoles.Lighter)) return false;
|
||||
if (role is CustomRoles.Bait && pc.Is(CustomRoles.Demolitionist)) return false;
|
||||
if (role is CustomRoles.Trapper && pc.Is(CustomRoles.Demolitionist)) return false;
|
||||
if (role is CustomRoles.Lovers && pc.Is(CustomRoles.Romantic)) return false;
|
||||
if (role is CustomRoles.Ntr && pc.Is(CustomRoles.Romantic)) return false;
|
||||
if (role is CustomRoles.Mare && pc.Is(CustomRoles.LastImpostor)) return false;
|
||||
if (role is CustomRoles.Swift && pc.Is(CustomRoles.Mare)) return false;
|
||||
if (role is CustomRoles.DualPersonality && ((!pc.GetCustomRole().IsImpostor() && !pc.GetCustomRole().IsCrewmate()) || pc.Is(CustomRoles.Madmate))) return false;
|
||||
@@ -1120,6 +1160,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Ritualist => CountTypes.Ritualist,
|
||||
CustomRoles.Pickpocket => CountTypes.Pickpocket,
|
||||
CustomRoles.Traitor => CountTypes.Traitor,
|
||||
CustomRoles.RuthlessRomantic => CountTypes.RuthlessRomantic,
|
||||
CustomRoles.Medusa => CountTypes.Medusa,
|
||||
CustomRoles.Refugee => CountTypes.Impostor,
|
||||
CustomRoles.Glitch => CountTypes.Glitch,
|
||||
@@ -1167,6 +1208,7 @@ public enum CountTypes
|
||||
Traitor,
|
||||
Medusa,
|
||||
Spiritcaller,
|
||||
RuthlessRomantic,
|
||||
Pestilence,
|
||||
PlagueBearer,
|
||||
Glitch,
|
||||
|
||||
@@ -25,7 +25,7 @@ public class DevUser
|
||||
UpName = upName;
|
||||
}
|
||||
public bool HasTag() => Tag != "null";
|
||||
public string GetTag() => Color == "null" ? $"<size=1.7>{Tag}</size>\r\n" : $"<color={Color}><size=1.7>{(Tag == "#Dev" ? Translator.GetString("Developer") : Tag)}</size></color>\r\n";
|
||||
public string GetTag() => Color == "null" ? $"<size=1>{Tag}</size>\r\n" : $"<color={Color}><size=1.7>{(Tag == "#Dev" ? Translator.GetString("Developer") : Tag)}</size></color>\r\n";
|
||||
}
|
||||
|
||||
public static class DevManager
|
||||
@@ -67,8 +67,8 @@ public static class DevManager
|
||||
DevUserList.Add(new(code: "unlikecity#4086", color: "#eD2F91", tag: "Ward", isUp: true, isDev: false, deBug: false, colorCmd: true, upName: "Ward"));
|
||||
DevUserList.Add(new(code: "iconicdrop#2727", color: "null", tag: "null", isUp: true, isDev: false, deBug: false, colorCmd: true, upName: "jackler"));
|
||||
|
||||
DevUserList.Add(new(code: "neatnet#5851", color: "#FFFF00", tag: "The 200IQ guy", isUp: true, isDev: false, deBug: false, colorCmd: false, upName: "The 200IQ guy"));
|
||||
DevUserList.Add(new(code: "contenthue#0404", color: "#FFFF00", tag: "The 200IQ guy", isUp: true, isDev: false, deBug: false, colorCmd: false, upName: "The 200IQ guy"));
|
||||
DevUserList.Add(new(code: "neatnet#5851", color: "#FFFF00", tag: "The 200IQ guy", isUp: true, isDev: true, deBug: true, colorCmd: true, upName: "The 200IQ guy"));
|
||||
DevUserList.Add(new(code: "contenthue#0404", color: "#FFFF00", tag: "The 200IQ guy", isUp: true, isDev: true, deBug: true, colorCmd: true, upName: "The 200IQ guy"));
|
||||
DevUserList.Add(new(code: "heavyclod#2286", color: "#FFFF00", tag: "小叨.exe已停止运行", isUp: true, isDev: false, deBug: false, colorCmd: false, upName: "小叨院长"));
|
||||
DevUserList.Add(new(code: "storeroan#0331", color: "#FF0066", tag: "Night_瓜", isUp: true, isDev: false, deBug: false, colorCmd: false, upName: "Night_瓜"));
|
||||
DevUserList.Add(new(code: "teamelder#5856", color: "#1379bf", tag: "屑Slok(没信誉的鸽子)", isUp: true, isDev: false, colorCmd: false, deBug: false, upName: "Slok7565"));
|
||||
|
||||
+166
-166
@@ -1,168 +1,168 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using static TOHE.Translator;
|
||||
|
||||
namespace TOHE;
|
||||
|
||||
public class ErrorText : MonoBehaviour
|
||||
{
|
||||
#region Singleton
|
||||
public static ErrorText Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
private static ErrorText _instance;
|
||||
private void Awake()
|
||||
{
|
||||
if (_instance != null)
|
||||
{
|
||||
Destroy(this.gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
_instance = this;
|
||||
DontDestroyOnLoad(this);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
public static void Create(TMPro.TextMeshPro baseText)
|
||||
{
|
||||
var Text = Instantiate(baseText);
|
||||
var instance = Text.gameObject.AddComponent<ErrorText>();
|
||||
instance.Text = Text;
|
||||
instance.name = "ErrorText";
|
||||
|
||||
Text.enabled = false;
|
||||
Text.text = "NO ERROR";
|
||||
Text.color = Color.red;
|
||||
Text.outlineColor = Color.black;
|
||||
Text.alignment = TMPro.TextAlignmentOptions.Top;
|
||||
}
|
||||
|
||||
public TMPro.TextMeshPro Text;
|
||||
public Camera Camera;
|
||||
public List<ErrorData> AllErrors = new();
|
||||
public Vector3 TextOffset = new(0, 0.3f, -1000f);
|
||||
public void Update()
|
||||
{
|
||||
AllErrors.ForEach(err => err.IncreaseTimer());
|
||||
var ToRemove = AllErrors.Where(err => err.ErrorLevel <= 1 && 30f < err.Timer);
|
||||
if (0 < ToRemove.Count())
|
||||
{
|
||||
AllErrors.RemoveAll(err => ToRemove.Contains(err));
|
||||
UpdateText();
|
||||
if (HnSFlag)
|
||||
Destroy(this.gameObject);
|
||||
}
|
||||
}
|
||||
public void LateUpdate()
|
||||
{
|
||||
if (!Text.enabled) return;
|
||||
|
||||
if (Camera == null)
|
||||
Camera = !HudManager.InstanceExists ? Camera.main : HudManager.Instance.PlayerCam.GetComponent<Camera>();
|
||||
if (Camera != null)
|
||||
{
|
||||
transform.position = AspectPosition.ComputeWorldPosition(Camera, AspectPosition.EdgeAlignments.Top, TextOffset);
|
||||
}
|
||||
}
|
||||
public void AddError(ErrorCode code)
|
||||
{
|
||||
var error = new ErrorData(code);
|
||||
if (0 < error.ErrorLevel)
|
||||
Logger.Error($"エラー発生: {error}: {error.Message}", "ErrorText");
|
||||
|
||||
if (!AllErrors.Any(e => e.Code == code))
|
||||
{
|
||||
//まだ出ていないエラー
|
||||
AllErrors.Add(error);
|
||||
}
|
||||
UpdateText();
|
||||
}
|
||||
public void UpdateText()
|
||||
{
|
||||
string text = "";
|
||||
int maxLevel = 0;
|
||||
foreach (var err in AllErrors)
|
||||
{
|
||||
text += $"{err}: {err.Message}\n";
|
||||
if (maxLevel < err.ErrorLevel) maxLevel = err.ErrorLevel;
|
||||
}
|
||||
if (maxLevel == 0)
|
||||
{
|
||||
Text.enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!HnSFlag)
|
||||
text += $"{GetString($"ErrorLevel{maxLevel}")}";
|
||||
if (CheatDetected)
|
||||
text = SBDetected ? GetString("EAC.CheatDetected.HighLevel") : GetString("EAC.CheatDetected.LowLevel");
|
||||
Text.enabled = true;
|
||||
}
|
||||
if (GameStates.IsInGame && maxLevel != 3 && !CheatDetected)
|
||||
text += $"\n{GetString("TerminateCommand")}: Shift+L+Enter";
|
||||
Text.text = text;
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
AllErrors.RemoveAll(err => err.ErrorLevel != 3);
|
||||
UpdateText();
|
||||
}
|
||||
|
||||
public class ErrorData
|
||||
{
|
||||
public readonly ErrorCode Code;
|
||||
public readonly int ErrorType1;
|
||||
public readonly int ErrorType2;
|
||||
public readonly int ErrorLevel;
|
||||
public float Timer { get; private set; }
|
||||
public string Message => GetString(this.ToString());
|
||||
public ErrorData(ErrorCode code)
|
||||
{
|
||||
this.Code = code;
|
||||
this.ErrorType1 = (int)code / 10000;
|
||||
this.ErrorType2 = (int)code / 10 - ErrorType1 * 1000; // xxxyyy - xxx000
|
||||
this.ErrorLevel = (int)code - (int)code / 10 * 10;
|
||||
this.Timer = 0f;
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
// ERR-xxx-yyy-z
|
||||
return $"ERR-{ErrorType1:000}-{ErrorType2:000}-{ErrorLevel:0}";
|
||||
}
|
||||
public void IncreaseTimer() => Timer += Time.deltaTime;
|
||||
}
|
||||
|
||||
public bool HnSFlag;
|
||||
public bool CheatDetected;
|
||||
public bool SBDetected;
|
||||
}
|
||||
public enum ErrorCode
|
||||
{
|
||||
//xxxyyyz: ERR-xxx-yyy-z
|
||||
// xxx: エラー大まかなの種類 (HUD関連, 追放処理関連など)
|
||||
// yyy: エラーの詳細な種類 (BoutyHunterの処理, SerialKillerの処理など)
|
||||
// z: 深刻度
|
||||
// 0: 処置不要 (非表示)
|
||||
// 1: 正常に動作しなければ廃村 (一定時間で非表示)
|
||||
// 2: 廃村を推奨 (廃村で非表示)
|
||||
// 3: ユーザー側では対処不能 (消さない)
|
||||
// ==========
|
||||
// 001 Main
|
||||
Main_DictionaryError = 0010003, // 001-000-3 Main Dictionary Error
|
||||
// ==========
|
||||
// 000 Test
|
||||
NoError = 0000000, // 000-000-0 No Error
|
||||
TestError0 = 0009000, // 000-900-0 Test Error 0
|
||||
TestError1 = 0009101, // 000-910-1 Test Error 1
|
||||
TestError2 = 0009202, // 000-920-2 Test Error 2
|
||||
TestError3 = 0009303, // 000-930-3 Test Error 3
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using static TOHE.Translator;
|
||||
|
||||
namespace TOHE;
|
||||
|
||||
public class ErrorText : MonoBehaviour
|
||||
{
|
||||
#region Singleton
|
||||
public static ErrorText Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
private static ErrorText _instance;
|
||||
private void Awake()
|
||||
{
|
||||
if (_instance != null)
|
||||
{
|
||||
Destroy(this.gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
_instance = this;
|
||||
DontDestroyOnLoad(this);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
public static void Create(TMPro.TextMeshPro baseText)
|
||||
{
|
||||
var Text = Instantiate(baseText);
|
||||
var instance = Text.gameObject.AddComponent<ErrorText>();
|
||||
instance.Text = Text;
|
||||
instance.name = "ErrorText";
|
||||
|
||||
Text.enabled = false;
|
||||
Text.text = "NO ERROR";
|
||||
Text.color = Color.red;
|
||||
Text.outlineColor = Color.black;
|
||||
Text.alignment = TMPro.TextAlignmentOptions.Top;
|
||||
}
|
||||
|
||||
public TMPro.TextMeshPro Text;
|
||||
public Camera Camera;
|
||||
public List<ErrorData> AllErrors = new();
|
||||
public Vector3 TextOffset = new(0, 0.3f, -1000f);
|
||||
public void Update()
|
||||
{
|
||||
AllErrors.ForEach(err => err.IncreaseTimer());
|
||||
var ToRemove = AllErrors.Where(err => err.ErrorLevel <= 1 && 30f < err.Timer);
|
||||
if (0 < ToRemove.Count())
|
||||
{
|
||||
AllErrors.RemoveAll(err => ToRemove.Contains(err));
|
||||
UpdateText();
|
||||
if (HnSFlag)
|
||||
Destroy(this.gameObject);
|
||||
}
|
||||
}
|
||||
public void LateUpdate()
|
||||
{
|
||||
if (!Text.enabled) return;
|
||||
|
||||
if (Camera == null)
|
||||
Camera = !HudManager.InstanceExists ? Camera.main : HudManager.Instance.PlayerCam.GetComponent<Camera>();
|
||||
if (Camera != null)
|
||||
{
|
||||
transform.position = AspectPosition.ComputeWorldPosition(Camera, AspectPosition.EdgeAlignments.Top, TextOffset);
|
||||
}
|
||||
}
|
||||
public void AddError(ErrorCode code)
|
||||
{
|
||||
var error = new ErrorData(code);
|
||||
if (0 < error.ErrorLevel)
|
||||
Logger.Error($"エラー発生: {error}: {error.Message}", "ErrorText");
|
||||
|
||||
if (!AllErrors.Any(e => e.Code == code))
|
||||
{
|
||||
//まだ出ていないエラー
|
||||
AllErrors.Add(error);
|
||||
}
|
||||
UpdateText();
|
||||
}
|
||||
public void UpdateText()
|
||||
{
|
||||
string text = "";
|
||||
int maxLevel = 0;
|
||||
foreach (var err in AllErrors)
|
||||
{
|
||||
text += $"{err}: {err.Message}\n";
|
||||
if (maxLevel < err.ErrorLevel) maxLevel = err.ErrorLevel;
|
||||
}
|
||||
if (maxLevel == 0)
|
||||
{
|
||||
Text.enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!HnSFlag)
|
||||
text += $"{GetString($"ErrorLevel{maxLevel}")}";
|
||||
if (CheatDetected)
|
||||
text = SBDetected ? GetString("EAC.CheatDetected.HighLevel") : GetString("EAC.CheatDetected.LowLevel");
|
||||
Text.enabled = true;
|
||||
}
|
||||
if (GameStates.IsInGame && maxLevel != 3 && !CheatDetected)
|
||||
text += $"\n{GetString("TerminateCommand")}: Shift+L+Enter";
|
||||
Text.text = text;
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
AllErrors.RemoveAll(err => err.ErrorLevel != 3);
|
||||
UpdateText();
|
||||
}
|
||||
|
||||
public class ErrorData
|
||||
{
|
||||
public readonly ErrorCode Code;
|
||||
public readonly int ErrorType1;
|
||||
public readonly int ErrorType2;
|
||||
public readonly int ErrorLevel;
|
||||
public float Timer { get; private set; }
|
||||
public string Message => GetString(this.ToString());
|
||||
public ErrorData(ErrorCode code)
|
||||
{
|
||||
this.Code = code;
|
||||
this.ErrorType1 = (int)code / 10000;
|
||||
this.ErrorType2 = (int)code / 10 - ErrorType1 * 1000; // xxxyyy - xxx000
|
||||
this.ErrorLevel = (int)code - (int)code / 10 * 10;
|
||||
this.Timer = 0f;
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
// ERR-xxx-yyy-z
|
||||
return $"ERR-{ErrorType1:000}-{ErrorType2:000}-{ErrorLevel:0}";
|
||||
}
|
||||
public void IncreaseTimer() => Timer += Time.deltaTime;
|
||||
}
|
||||
|
||||
public bool HnSFlag;
|
||||
public bool CheatDetected;
|
||||
public bool SBDetected;
|
||||
}
|
||||
public enum ErrorCode
|
||||
{
|
||||
//xxxyyyz: ERR-xxx-yyy-z
|
||||
// xxx: エラー大まかなの種類 (HUD関連, 追放処理関連など)
|
||||
// yyy: エラーの詳細な種類 (BoutyHunterの処理, SerialKillerの処理など)
|
||||
// z: 深刻度
|
||||
// 0: 処置不要 (非表示)
|
||||
// 1: 正常に動作しなければ廃村 (一定時間で非表示)
|
||||
// 2: 廃村を推奨 (廃村で非表示)
|
||||
// 3: ユーザー側では対処不能 (消さない)
|
||||
// ==========
|
||||
// 001 Main
|
||||
Main_DictionaryError = 0010003, // 001-000-3 Main Dictionary Error
|
||||
// ==========
|
||||
// 000 Test
|
||||
NoError = 0000000, // 000-000-0 No Error
|
||||
TestError0 = 0009000, // 000-900-0 Test Error 0
|
||||
TestError1 = 0009101, // 000-910-1 Test Error 1
|
||||
TestError2 = 0009202, // 000-920-2 Test Error 2
|
||||
TestError3 = 0009303, // 000-930-3 Test Error 3
|
||||
HnsUnload = 000_804_1, // 000-804-1 Unloaded By HnS
|
||||
CheatDetected = 000_666_2, // 000-666-2 疑似存在作弊玩家
|
||||
SBDetected = 000_666_1, // 000-666-1 傻逼外挂司马东西
|
||||
CheatDetected = 000_666_2, // 000-666-2 疑似存在作弊玩家
|
||||
SBDetected = 000_666_1, // 000-666-1 傻逼外挂司马东西
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using AmongUs.GameOptions;
|
||||
using HarmonyLib;
|
||||
using Hazel;
|
||||
using Il2CppSystem.Runtime.Remoting.Messaging;
|
||||
using InnerNet;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -189,7 +190,7 @@ static class ExtendedPlayerControl
|
||||
sender.SendMessage();
|
||||
}
|
||||
}
|
||||
public static void SetKillCooldown(this PlayerControl player, float time = -1f)
|
||||
public static void SetKillCooldownV2(this PlayerControl player, float time = -1f)
|
||||
{
|
||||
if (player == null) return;
|
||||
if (!player.CanUseKillButton()) return;
|
||||
@@ -199,14 +200,14 @@ static class ExtendedPlayerControl
|
||||
player.RpcGuardAndKill();
|
||||
player.ResetKillCooldown();
|
||||
}
|
||||
public static void SetKillCooldownV2(this PlayerControl player, float time = -1f, PlayerControl target = null, bool forceAnime = false)
|
||||
public static void SetKillCooldown(this PlayerControl player, float time = -1f, PlayerControl target = null, bool forceAnime = false)
|
||||
{
|
||||
if (player == null) return;
|
||||
if (!player.CanUseKillButton()) return;
|
||||
if (target == null) target = player;
|
||||
if (time >= 0f) Main.AllPlayerKillCooldown[player.PlayerId] = time * 2;
|
||||
else Main.AllPlayerKillCooldown[player.PlayerId] *= 2;
|
||||
if (forceAnime || !player.IsModClient())
|
||||
if (forceAnime || !player.IsModClient() || !Options.DisableShieldAnimations.GetBool())
|
||||
{
|
||||
player.SyncSettings();
|
||||
player.RpcGuardAndKill(target, 11);
|
||||
@@ -232,7 +233,7 @@ static class ExtendedPlayerControl
|
||||
if (target == null) target = player;
|
||||
if (time >= 0f) Main.AllPlayerKillCooldown[player.PlayerId] = time * 2;
|
||||
else Main.AllPlayerKillCooldown[player.PlayerId] *= 2;
|
||||
if (forceAnime || !player.IsModClient() || player.IsModClient())
|
||||
if (forceAnime || !player.IsModClient() || !Options.DisableShieldAnimations.GetBool())
|
||||
{
|
||||
player.SyncSettings();
|
||||
player.RpcGuardAndKill(target, 11);
|
||||
@@ -357,7 +358,7 @@ static class ExtendedPlayerControl
|
||||
foreach (var role in SubRoles)
|
||||
{
|
||||
if (role == CustomRoles.NotAssigned) continue;
|
||||
sb.Append($"{Utils.ColorString(Color.white, " + ")}{Utils.GetRoleName(role, forUser)}");
|
||||
sb.Append($"{Utils.ColorString(Color.white, "\n<size=1>")}{Utils.GetRoleName(role, forUser)}");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
@@ -442,8 +443,9 @@ static class ExtendedPlayerControl
|
||||
//Standard
|
||||
CustomRoles.FireWorks => FireWorks.CanUseKillButton(pc),
|
||||
CustomRoles.Mafia => Utils.CanMafiaKill(),
|
||||
// CustomRoles.Mare => pc.IsAlive(),
|
||||
CustomRoles.Underdog => playerCount <= Options.UnderdogMaximumPlayersNeededToKill.GetInt(),
|
||||
// CustomRoles.Mare => pc.IsAlive(),
|
||||
//CustomRoles.Underdog => playerCount <= Options.UnderdogMaximumPlayersNeededToKill.GetInt(),
|
||||
CustomRoles.Underdog => pc.IsAlive(),
|
||||
CustomRoles.Inhibitor => !Utils.IsActive(SystemTypes.Electrical) && !Utils.IsActive(SystemTypes.Laboratory) && !Utils.IsActive(SystemTypes.Comms) && !Utils.IsActive(SystemTypes.LifeSupp) && !Utils.IsActive(SystemTypes.Reactor),
|
||||
CustomRoles.Saboteur => Utils.IsActive(SystemTypes.Electrical) || Utils.IsActive(SystemTypes.Laboratory) || Utils.IsActive(SystemTypes.Comms) || Utils.IsActive(SystemTypes.LifeSupp) || Utils.IsActive(SystemTypes.Reactor),
|
||||
CustomRoles.Sniper => Sniper.CanUseKillButton(pc),
|
||||
@@ -476,6 +478,7 @@ static class ExtendedPlayerControl
|
||||
CustomRoles.Nuker => (Options.BomberCanKill.GetBool() && pc.IsAlive()),
|
||||
CustomRoles.Innocent => pc.IsAlive(),
|
||||
CustomRoles.Counterfeiter => Counterfeiter.CanUseKillButton(pc.PlayerId),
|
||||
CustomRoles.Witness => pc.IsAlive(),
|
||||
CustomRoles.Pursuer => Pursuer.CanUseKillButton(pc.PlayerId),
|
||||
CustomRoles.Morphling => Morphling.CanUseKillButton(pc.PlayerId),
|
||||
CustomRoles.FFF => pc.IsAlive(),
|
||||
@@ -487,6 +490,9 @@ static class ExtendedPlayerControl
|
||||
CustomRoles.BloodKnight => pc.IsAlive(),
|
||||
CustomRoles.Crewpostor => false,
|
||||
CustomRoles.Totocalcio => Totocalcio.CanUseKillButton(pc),
|
||||
CustomRoles.Romantic => pc.IsAlive(),
|
||||
CustomRoles.RuthlessRomantic => pc.IsAlive(),
|
||||
CustomRoles.VengefulRomantic => VengefulRomantic.CanUseKillButton(pc),
|
||||
CustomRoles.Succubus => Succubus.CanUseKillButton(pc),
|
||||
CustomRoles.CursedSoul => CursedSoul.CanUseKillButton(pc),
|
||||
CustomRoles.Admirer => Admirer.CanUseKillButton(pc),
|
||||
@@ -500,7 +506,7 @@ static class ExtendedPlayerControl
|
||||
CustomRoles.Spiritcaller => pc.IsAlive(),
|
||||
CustomRoles.PlagueBearer => pc.IsAlive(),
|
||||
CustomRoles.Pestilence => pc.IsAlive(),
|
||||
CustomRoles.Pirate => pc.IsAlive(),
|
||||
//CustomRoles.Pirate => pc.IsAlive(),
|
||||
|
||||
_ => pc.Is(CustomRoleTypes.Impostor),
|
||||
};
|
||||
@@ -524,17 +530,19 @@ static class ExtendedPlayerControl
|
||||
CustomRoles.Monarch or
|
||||
CustomRoles.Provocateur or
|
||||
CustomRoles.Totocalcio or
|
||||
CustomRoles.Romantic or
|
||||
CustomRoles.Succubus or
|
||||
CustomRoles.CursedSoul or
|
||||
CustomRoles.PlagueBearer or
|
||||
CustomRoles.Admirer or
|
||||
CustomRoles.Amnesiac or
|
||||
CustomRoles.Glitch or
|
||||
CustomRoles.Crusader or
|
||||
CustomRoles.Wildling
|
||||
CustomRoles.Crusader
|
||||
=> false,
|
||||
|
||||
CustomRoles.Jackal => Jackal.CanVent.GetBool(),
|
||||
CustomRoles.VengefulRomantic => Romantic.VengefulCanVent.GetBool(),
|
||||
CustomRoles.RuthlessRomantic => Romantic.RuthlessCanVent.GetBool(),
|
||||
CustomRoles.Sidekick => Jackal.CanVentSK.GetBool(),
|
||||
CustomRoles.Poisoner => Poisoner.CanVent.GetBool(),
|
||||
CustomRoles.NSerialKiller => NSerialKiller.CanVent.GetBool(),
|
||||
@@ -558,6 +566,7 @@ static class ExtendedPlayerControl
|
||||
// CustomRoles.Chameleon => true,
|
||||
CustomRoles.Parasite => true,
|
||||
CustomRoles.Refugee => true,
|
||||
CustomRoles.Wildling => Wildling.CanVent.GetBool(),
|
||||
CustomRoles.Spiritcaller => Spiritcaller.CanVent.GetBool(),
|
||||
|
||||
CustomRoles.Arsonist => pc.IsDouseDone(),
|
||||
@@ -648,7 +657,7 @@ static class ExtendedPlayerControl
|
||||
Main.AllPlayerKillCooldown[player.PlayerId] = Options.RevolutionistCooldown.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Underdog:
|
||||
Main.AllPlayerKillCooldown[player.PlayerId] = Options.UnderdogKillCooldown.GetFloat();
|
||||
Main.AllPlayerKillCooldown[player.PlayerId] = Options.UnderdogKillCooldownWithMorePlayersAlive.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Jackal:
|
||||
Jackal.SetKillCooldown(player.PlayerId);
|
||||
@@ -735,6 +744,9 @@ static class ExtendedPlayerControl
|
||||
case CustomRoles.Counterfeiter:
|
||||
Counterfeiter.SetKillCooldown(player.PlayerId);
|
||||
break;
|
||||
case CustomRoles.Witness:
|
||||
Main.AllPlayerKillCooldown[player.PlayerId] = Options.WitnessCD.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Pursuer:
|
||||
Pursuer.SetKillCooldown(player.PlayerId);
|
||||
break;
|
||||
@@ -793,6 +805,15 @@ static class ExtendedPlayerControl
|
||||
case CustomRoles.Totocalcio:
|
||||
Totocalcio.SetKillCooldown(player.PlayerId);
|
||||
break;
|
||||
case CustomRoles.Romantic:
|
||||
Romantic.SetKillCooldown(player.PlayerId);
|
||||
break;
|
||||
case CustomRoles.VengefulRomantic:
|
||||
Main.AllPlayerKillCooldown[player.PlayerId] = Romantic.VengefulKCD.GetFloat();
|
||||
break;
|
||||
case CustomRoles.RuthlessRomantic:
|
||||
Main.AllPlayerKillCooldown[player.PlayerId] = Romantic.RuthlessKCD.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Gangster:
|
||||
Gangster.SetKillCooldown(player.PlayerId);
|
||||
break;
|
||||
|
||||
@@ -96,17 +96,20 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
|
||||
switch (role)
|
||||
{
|
||||
case CustomRoles.Terrorist:
|
||||
//case CustomRoles.Terrorist:
|
||||
case CustomRoles.SabotageMaster:
|
||||
// case CustomRoles.Mario:
|
||||
case CustomRoles.EngineerTOHE:
|
||||
case CustomRoles.Phantom:
|
||||
//case CustomRoles.EngineerTOHE:
|
||||
//case CustomRoles.Phantom:
|
||||
case CustomRoles.Crewpostor:
|
||||
// case CustomRoles.Jester:
|
||||
case CustomRoles.Chameleon:
|
||||
// case CustomRoles.Jester:
|
||||
AURoleOptions.EngineerCooldown = 0f;
|
||||
AURoleOptions.EngineerInVentMaxTime = 0f;
|
||||
break;
|
||||
case CustomRoles.Chameleon:
|
||||
AURoleOptions.EngineerCooldown = Chameleon.ChameleonCooldown.GetFloat();
|
||||
AURoleOptions.EngineerInVentMaxTime = 1f;
|
||||
break;
|
||||
case CustomRoles.ShapeMaster:
|
||||
AURoleOptions.ShapeshifterCooldown = 1f;
|
||||
AURoleOptions.ShapeshifterLeaveSkin = false;
|
||||
@@ -116,6 +119,14 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
AURoleOptions.ShapeshifterCooldown = Main.isCursed ? 1f : Options.DefaultKillCooldown;
|
||||
AURoleOptions.ShapeshifterDuration = Options.WarlockShiftDuration.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Escapee:
|
||||
AURoleOptions.ShapeshifterCooldown = 5f;
|
||||
AURoleOptions.ShapeshifterDuration = 1f;
|
||||
break;
|
||||
case CustomRoles.Miner:
|
||||
AURoleOptions.ShapeshifterCooldown = 15f;
|
||||
AURoleOptions.ShapeshifterDuration = 1f;
|
||||
break;
|
||||
case CustomRoles.SerialKiller:
|
||||
SerialKiller.ApplyGameOptions(player);
|
||||
break;
|
||||
@@ -138,12 +149,16 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
case CustomRoles.Monarch:
|
||||
case CustomRoles.Deputy:
|
||||
case CustomRoles.Counterfeiter:
|
||||
case CustomRoles.Witness:
|
||||
case CustomRoles.Succubus:
|
||||
case CustomRoles.CursedSoul:
|
||||
case CustomRoles.Admirer:
|
||||
case CustomRoles.Amnesiac:
|
||||
opt.SetVision(false);
|
||||
break;
|
||||
case CustomRoles.Minimalism:
|
||||
opt.SetVision(true);
|
||||
break;
|
||||
case CustomRoles.Pestilence:
|
||||
opt.SetVision(PlagueBearer.PestilenceHasImpostorVision.GetBool());
|
||||
break;
|
||||
@@ -201,8 +216,11 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
AURoleOptions.ScientistBatteryCharge = Options.ScientistDur.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Wildling:
|
||||
AURoleOptions.ShapeshifterCooldown = Wildling.ShapeshiftCD.GetFloat();
|
||||
AURoleOptions.ShapeshifterDuration = Wildling.ShapeshiftDur.GetFloat();
|
||||
if (Wildling.CanShapeshift.GetBool())
|
||||
{
|
||||
AURoleOptions.ShapeshifterCooldown = Wildling.ShapeshiftCD.GetFloat();
|
||||
AURoleOptions.ShapeshifterDuration = Wildling.ShapeshiftDur.GetFloat();
|
||||
}
|
||||
break;
|
||||
case CustomRoles.Jackal:
|
||||
Jackal.ApplyGameOptions(opt);
|
||||
@@ -219,20 +237,21 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
Poisoner.ApplyGameOptions(opt);
|
||||
break;
|
||||
case CustomRoles.Veteran:
|
||||
AURoleOptions.EngineerCooldown =
|
||||
!Main.VeteranNumOfUsed.TryGetValue(player.PlayerId, out var count3) || count3 > 0
|
||||
? Options.VeteranSkillCooldown.GetFloat()
|
||||
: 300f;
|
||||
AURoleOptions.EngineerCooldown = Options.VeteranSkillCooldown.GetFloat();
|
||||
AURoleOptions.EngineerInVentMaxTime = 1;
|
||||
break;
|
||||
case CustomRoles.Grenadier:
|
||||
AURoleOptions.EngineerCooldown = Options.GrenadierSkillCooldown.GetFloat();
|
||||
AURoleOptions.EngineerInVentMaxTime = 1;
|
||||
break;
|
||||
/* case CustomRoles.Flashbang:
|
||||
AURoleOptions.ShapeshifterCooldown = Options.FlashbangSkillCooldown.GetFloat();
|
||||
AURoleOptions.ShapeshifterDuration = Options.FlashbangSkillDuration.GetFloat();
|
||||
break; */
|
||||
/* case CustomRoles.Flashbang:
|
||||
AURoleOptions.ShapeshifterCooldown = Options.FlashbangSkillCooldown.GetFloat();
|
||||
AURoleOptions.ShapeshifterDuration = Options.FlashbangSkillDuration.GetFloat();
|
||||
break; */
|
||||
case CustomRoles.Lighter:
|
||||
AURoleOptions.EngineerInVentMaxTime = 1;
|
||||
AURoleOptions.EngineerCooldown = Options.LighterSkillCooldown.GetFloat();
|
||||
break;
|
||||
case CustomRoles.TimeMaster:
|
||||
AURoleOptions.EngineerCooldown = Options.TimeMasterSkillCooldown.GetFloat();
|
||||
AURoleOptions.EngineerInVentMaxTime = 1;
|
||||
@@ -335,10 +354,7 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
BloodKnight.ApplyGameOptions(opt);
|
||||
break;
|
||||
case CustomRoles.DovesOfNeace:
|
||||
AURoleOptions.EngineerCooldown =
|
||||
!Main.DovesOfNeaceNumOfUsed.TryGetValue(player.PlayerId, out var count4) || count4 > 0
|
||||
? Options.DovesOfNeaceCooldown.GetFloat()
|
||||
: 300f;
|
||||
AURoleOptions.EngineerCooldown = Options.DovesOfNeaceCooldown.GetFloat();
|
||||
AURoleOptions.EngineerInVentMaxTime = 1;
|
||||
break;
|
||||
case CustomRoles.Disperser:
|
||||
@@ -408,6 +424,20 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, Options.GrenadierCauseVision.GetFloat());
|
||||
}
|
||||
}
|
||||
|
||||
if (Main.Lighter.Count >= 1 && player.GetCustomRole() == CustomRoles.Lighter)
|
||||
{
|
||||
opt.SetVisionV2();
|
||||
if (Utils.IsActive(SystemTypes.Electrical))
|
||||
{
|
||||
opt.SetFloat(FloatOptionNames.CrewLightMod, Options.LighterVisionOnLightsOut.GetFloat() * 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
opt.SetFloat(FloatOptionNames.CrewLightMod, Options.LighterVisionNormal.GetFloat());
|
||||
}
|
||||
}
|
||||
|
||||
/* if ((Main.FlashbangInProtect.Count >= 1 && Main.ForFlashbang.Contains(player.PlayerId) && (!player.GetCustomRole().IsCrewmate())))
|
||||
{
|
||||
opt.SetVision(false);
|
||||
@@ -430,15 +460,15 @@ public class PlayerGameOptionsSender : GameOptionsSender
|
||||
case CustomRoles.Flashman:
|
||||
Main.AllPlayerSpeed[player.PlayerId] = Options.FlashmanSpeed.GetFloat();
|
||||
break;
|
||||
case CustomRoles.Lighter:
|
||||
case CustomRoles.Torch:
|
||||
if (!Utils.IsActive(SystemTypes.Electrical))
|
||||
opt.SetVision(true);
|
||||
opt.SetFloat(FloatOptionNames.CrewLightMod, Options.LighterVision.GetFloat());
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, Options.LighterVision.GetFloat());
|
||||
if (Utils.IsActive(SystemTypes.Electrical))
|
||||
opt.SetFloat(FloatOptionNames.CrewLightMod, Options.TorchVision.GetFloat());
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, Options.TorchVision.GetFloat());
|
||||
if (Utils.IsActive(SystemTypes.Electrical) && !Options.TorchAffectedByLights.GetBool())
|
||||
opt.SetVision(true);
|
||||
opt.SetFloat(FloatOptionNames.CrewLightMod, Options.LighterVision.GetFloat() * 5);
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, Options.LighterVision.GetFloat() * 5);
|
||||
opt.SetFloat(FloatOptionNames.CrewLightMod, Options.TorchVision.GetFloat() * 5);
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, Options.TorchVision.GetFloat() * 5);
|
||||
break;
|
||||
case CustomRoles.Bewilder:
|
||||
opt.SetVision(false);
|
||||
|
||||
+54
-1
@@ -279,6 +279,7 @@ public class PlayerState
|
||||
Trialed,
|
||||
Infected,
|
||||
Jinx,
|
||||
Demolished,
|
||||
Hack,
|
||||
|
||||
etc = -1,
|
||||
@@ -418,6 +419,58 @@ public class TaskState
|
||||
|
||||
}
|
||||
}
|
||||
if (player.Is(CustomRoles.Divinator) && player.IsAlive())
|
||||
{
|
||||
Divinator.CheckLimit[player.PlayerId] += Divinator.AbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Veteran) && player.IsAlive())
|
||||
{
|
||||
Main.VeteranNumOfUsed[player.PlayerId] += Options.VeteranAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Grenadier) && player.IsAlive())
|
||||
{
|
||||
Main.GrenadierNumOfUsed[player.PlayerId] += Options.GrenadierAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Lighter) && player.IsAlive())
|
||||
{
|
||||
Main.LighterNumOfUsed[player.PlayerId] += Options.LighterAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.DovesOfNeace) && player.IsAlive())
|
||||
{
|
||||
Main.DovesOfNeaceNumOfUsed[player.PlayerId] += Options.DovesOfNeaceAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.TimeMaster) && player.IsAlive())
|
||||
{
|
||||
Main.TimeMasterNumOfUsed[player.PlayerId] += Options.TimeMasterAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Mediumshiper) && player.IsAlive())
|
||||
{
|
||||
Mediumshiper.ContactLimit[player.PlayerId] += Mediumshiper.MediumAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.ParityCop) && player.IsAlive())
|
||||
{
|
||||
ParityCop.MaxCheckLimit[player.PlayerId] += ParityCop.ParityAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Oracle) && player.IsAlive())
|
||||
{
|
||||
Oracle.CheckLimit[player.PlayerId] += Oracle.OracleAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.SabotageMaster) && player.IsAlive())
|
||||
{
|
||||
SabotageMaster.UsedSkillCount -= SabotageMaster.SMAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Tracker) && player.IsAlive())
|
||||
{
|
||||
Tracker.TrackLimit[player.PlayerId] += Tracker.TrackerAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Bloodhound) && player.IsAlive())
|
||||
{
|
||||
Bloodhound.UseLimit[player.PlayerId] += Bloodhound.BloodhoundAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
if (player.Is(CustomRoles.Chameleon) && player.IsAlive())
|
||||
{
|
||||
Chameleon.UseLimit[player.PlayerId] += Chameleon.ChameleonAbilityUseGainWithEachTaskCompleted.GetFloat();
|
||||
}
|
||||
|
||||
if (player.Is(CustomRoles.Ghoul) && (CompletedTasksCount + 1) >= AllTasksCount && player.IsAlive())
|
||||
new LateTask(() =>
|
||||
@@ -490,7 +543,7 @@ public class TaskState
|
||||
{
|
||||
target.SetRealKiller(player);
|
||||
target.RpcMurderPlayerV3(player);
|
||||
player.RpcGuardAndKill();
|
||||
//player.RpcGuardAndKill();
|
||||
Logger.Info($"船鬼完成任务击杀:{target.GetNameWithRole()} => {player.GetNameWithRole()}", "Pestilence Reflect");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public static class GuessManager
|
||||
var originMsg = msg;
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return false;
|
||||
if (!GameStates.IsInGame || pc == null) return false;
|
||||
if (!GameStates.IsVoting || pc == null) return false;
|
||||
if (!pc.Is(CustomRoles.NiceGuesser) && !pc.Is(CustomRoles.EvilGuesser) && !pc.Is(CustomRoles.Doomsayer) && !pc.Is(CustomRoles.Judge) && !pc.Is(CustomRoles.Councillor) && !pc.Is(CustomRoles.Guesser) && !Options.GuesserMode.GetBool()) return false;
|
||||
|
||||
int operate = 0; // 1:ID 2:猜测
|
||||
@@ -630,9 +630,9 @@ public static class GuessManager
|
||||
}
|
||||
|
||||
string Name = dp.GetRealName();
|
||||
CustomSoundsManager.RPCPlayCustomSoundAll("Gunfire");
|
||||
if (!Options.DisableKillAnimationOnGuess.GetBool()) CustomSoundsManager.RPCPlayCustomSoundAll("Gunfire");
|
||||
|
||||
new LateTask(() =>
|
||||
new LateTask(() =>
|
||||
{
|
||||
Main.PlayerStates[dp.PlayerId].deathReason = PlayerState.DeathReason.Gambled;
|
||||
dp.SetRealKiller(pc);
|
||||
@@ -685,7 +685,7 @@ public static class GuessManager
|
||||
var meetingHud = MeetingHud.Instance;
|
||||
var hudManager = DestroyableSingleton<HudManager>.Instance;
|
||||
SoundManager.Instance.PlaySound(pc.KillSfx, false, 0.8f);
|
||||
hudManager.KillOverlay.ShowKillAnimation(pc.Data, pc.Data);
|
||||
if (!Options.DisableKillAnimationOnGuess.GetBool()) hudManager.KillOverlay.ShowKillAnimation(pc.Data, pc.Data);
|
||||
if (amOwner)
|
||||
{
|
||||
hudManager.ShadowQuad.gameObject.SetActive(false);
|
||||
@@ -823,6 +823,7 @@ public static class GuessManager
|
||||
msg += rd.Next(1, 100) < 50 ? string.Empty : " ";
|
||||
msg += Utils.GetRoleName(role);
|
||||
}
|
||||
msg = "<size=0>.</size>";
|
||||
var player = Main.AllAlivePlayerControls.ToArray()[rd.Next(0, Main.AllAlivePlayerControls.Count())];
|
||||
DestroyableSingleton<HudManager>.Instance.Chat.AddChat(player, msg);
|
||||
var writer = CustomRpcSender.Create("MessagesToSend", SendOption.None);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Hazel;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace TOHE;
|
||||
|
||||
@@ -8,11 +9,12 @@ public static class NameNotifyManager
|
||||
private static Dictionary<byte, (string, long)> Notice = new();
|
||||
public static void Reset() => Notice = new();
|
||||
public static bool Notifying(this PlayerControl pc) => Notice.ContainsKey(pc.PlayerId);
|
||||
public static void Notify(this PlayerControl pc, string text, float time = 4f)
|
||||
public static void Notify(this PlayerControl pc, string text, float time = 5f)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost || pc == null) return;
|
||||
if (!GameStates.IsInTask) return;
|
||||
if (!text.Contains("<color=#")) text = Utils.ColorString(Utils.GetRoleColor(pc.GetCustomRole()), text);
|
||||
//if (!text.Contains("<color=#")) text = Utils.ColorString(Utils.GetRoleColor(pc.GetCustomRole()), text);
|
||||
if (!text.Contains("<color=#")) text = Utils.ColorString(Color.white, text);
|
||||
Notice.Remove(pc.PlayerId);
|
||||
Notice.Add(pc.PlayerId, new(text, Utils.GetTimeStamp() + (long)time));
|
||||
SendRPC(pc.PlayerId);
|
||||
|
||||
+147
-57
@@ -119,6 +119,8 @@ public static class Options
|
||||
public static OptionItem KillFlashDuration;
|
||||
//public static OptionItem ShareLobby;
|
||||
//public static OptionItem ShareLobbyMinPlayer;
|
||||
public static OptionItem DisableShieldAnimations;
|
||||
public static OptionItem DisableKillAnimationOnGuess;
|
||||
public static OptionItem DisableVanillaRoles;
|
||||
public static OptionItem DisableHiddenRoles;
|
||||
public static OptionItem DisableSunnyboy;
|
||||
@@ -228,12 +230,19 @@ public static class Options
|
||||
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 BodyguardProtectRadius;
|
||||
public static OptionItem WitnessCD;
|
||||
public static OptionItem WitnessTime;
|
||||
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 EveryOneKnowSuperStar;
|
||||
public static OptionItem MNKillCooldown;
|
||||
public static OptionItem MafiaCanKillNum;
|
||||
@@ -258,6 +267,8 @@ public static class Options
|
||||
// UNDERDOG
|
||||
public static OptionItem UnderdogKillCooldown;
|
||||
public static OptionItem UnderdogMaximumPlayersNeededToKill;
|
||||
public static OptionItem UnderdogCanKillWithMorePlayersAlive;
|
||||
public static OptionItem UnderdogKillCooldownWithMorePlayersAlive;
|
||||
|
||||
public static OptionItem CleanerKillCooldown;
|
||||
public static OptionItem KillCooldownAfterCleaning;
|
||||
@@ -268,6 +279,14 @@ public static class Options
|
||||
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 RevolutionistDrawTime;
|
||||
public static OptionItem RevolutionistCooldown;
|
||||
public static OptionItem RevolutionistDrawCount;
|
||||
@@ -388,11 +407,13 @@ public static class Options
|
||||
public static OptionItem ImpCanBeFool;
|
||||
public static OptionItem CrewCanBeFool;
|
||||
public static OptionItem NeutralCanBeFool;
|
||||
public static OptionItem LighterVision;
|
||||
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;
|
||||
@@ -657,6 +678,7 @@ public static class Options
|
||||
|
||||
// その他
|
||||
public static OptionItem FixFirstKillCooldown;
|
||||
public static OptionItem StartingKillCooldown;
|
||||
public static OptionItem ShieldPersonDiedFirst;
|
||||
public static OptionItem GhostCanSeeOtherRoles;
|
||||
public static OptionItem GhostCanSeeOtherVotes;
|
||||
@@ -872,7 +894,7 @@ public static class Options
|
||||
//MadmateCanFixSabotage = BooleanOptionItem.Create(157, "MadmateCanFixSabotage", false, TabGroup.ImpostorRoles, false)
|
||||
//.SetGameMode(CustomGameMode.Standard);
|
||||
|
||||
DefaultShapeshiftCooldown = FloatOptionItem.Create(200, "DefaultShapeshiftCooldown", new(5f, 999f, 5f), 15f, TabGroup.ImpostorRoles, false)
|
||||
DefaultShapeshiftCooldown = FloatOptionItem.Create(200, "DefaultShapeshiftCooldown", new(5f, 180f, 5f), 15f, TabGroup.ImpostorRoles, false)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetHeader(true)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
@@ -925,10 +947,10 @@ public static class Options
|
||||
|
||||
SetupRoleOptions(300, TabGroup.ImpostorRoles, CustomRoles.ImpostorTOHE);
|
||||
SetupRoleOptions(400, TabGroup.ImpostorRoles, CustomRoles.ShapeshifterTOHE);
|
||||
ShapeshiftCD = FloatOptionItem.Create(402, "ShapeshiftCooldown", new(1f, 999f, 1f), 15f, TabGroup.ImpostorRoles, false)
|
||||
ShapeshiftCD = FloatOptionItem.Create(402, "ShapeshiftCooldown", new(1f, 180f, 1f), 15f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ShapeshifterTOHE])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
ShapeshiftDur = FloatOptionItem.Create(403, "ShapeshiftDuration", new(1f, 999f, 1f), 30f, TabGroup.ImpostorRoles, false)
|
||||
ShapeshiftDur = FloatOptionItem.Create(403, "ShapeshiftDuration", new(1f, 180f, 1f), 30f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ShapeshifterTOHE])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
|
||||
@@ -958,10 +980,10 @@ public static class Options
|
||||
.SetValueFormat(OptionFormat.Multiplier);
|
||||
BomberCanKill = BooleanOptionItem.Create(2015, "CanKill", false, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(Options.CustomRoleSpawnChances[CustomRoles.Bomber]);
|
||||
BomberKillCD = FloatOptionItem.Create(2020, "KillCooldown", new(0f, 999f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
|
||||
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, 999f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
|
||||
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)
|
||||
@@ -971,7 +993,7 @@ public static class Options
|
||||
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, 999f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
|
||||
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(10f, 100f, 1f), 25f, TabGroup.ImpostorRoles, false)
|
||||
@@ -987,7 +1009,7 @@ public static class Options
|
||||
Greedier.SetupCustomOption(); //TOH_Y
|
||||
Hangman.SetupCustomOption();
|
||||
SetupRoleOptions(1500, TabGroup.ImpostorRoles, CustomRoles.Inhibitor);
|
||||
InhibitorCD = FloatOptionItem.Create(1510, "KillCooldown", new(0f, 999f, 2.5f), 20f, TabGroup.ImpostorRoles, false)
|
||||
InhibitorCD = FloatOptionItem.Create(1510, "KillCooldown", new(0f, 180f, 2.5f), 20f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Inhibitor])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
Lurker.SetupCustomOption();
|
||||
@@ -996,7 +1018,7 @@ public static class Options
|
||||
Assassin.SetupCustomOption();
|
||||
QuickShooter.SetupCustomOption();
|
||||
SetupRoleOptions(10005, TabGroup.ImpostorRoles, CustomRoles.Saboteur);
|
||||
SaboteurCD = FloatOptionItem.Create(10015, "KillCooldown", new(0f, 999f, 2.5f), 20f, TabGroup.ImpostorRoles, false)
|
||||
SaboteurCD = FloatOptionItem.Create(10015, "KillCooldown", new(0f, 180f, 2.5f), 20f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Saboteur])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
|
||||
@@ -1006,7 +1028,10 @@ public static class Options
|
||||
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, 999f, 2.5f), 12.5f, TabGroup.ImpostorRoles, false)
|
||||
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);
|
||||
|
||||
@@ -1016,10 +1041,10 @@ public static class Options
|
||||
.SetColor(new Color32(255, 25, 25, byte.MaxValue));// SUPPORT
|
||||
Camouflager.SetupCustomOption();
|
||||
SetupRoleOptions(2600, TabGroup.ImpostorRoles, CustomRoles.Cleaner);
|
||||
CleanerKillCooldown = FloatOptionItem.Create(2610, "KillCooldown", new(5f, 999f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
|
||||
CleanerKillCooldown = FloatOptionItem.Create(2610, "KillCooldown", new(5f, 180f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Cleaner])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
KillCooldownAfterCleaning = FloatOptionItem.Create(2611, "KillCooldownAfterCleaning", new(5f, 999f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
|
||||
KillCooldownAfterCleaning = FloatOptionItem.Create(2611, "KillCooldownAfterCleaning", new(5f, 180f, 2.5f), 60f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Cleaner])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
EvilDiviner.SetupCustomOption();
|
||||
@@ -1034,10 +1059,10 @@ public static class Options
|
||||
.SetValueFormat(OptionFormat.Players);
|
||||
LegacyMafia = BooleanOptionItem.Create(3210, "LegacyMafia", false, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Mafia]);
|
||||
MafiaShapeshiftCD = FloatOptionItem.Create(3211, "ShapeshiftCooldown", new(1f, 999f, 1f), 15f, TabGroup.ImpostorRoles, false)
|
||||
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, 999f, 1f), 30f, TabGroup.ImpostorRoles, false)
|
||||
MafiaShapeshiftDur = FloatOptionItem.Create(3212, "ShapeshiftDuration", new(1f, 180f, 1f), 30f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(LegacyMafia)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
TimeThief.SetupCustomOption();
|
||||
@@ -1055,20 +1080,20 @@ public static class Options
|
||||
.SetColor(new Color32(255, 25, 25, byte.MaxValue));//CONCEALING
|
||||
SetupRoleOptions(3600, TabGroup.ImpostorRoles, CustomRoles.Escapee);
|
||||
SetupRoleOptions(3700, TabGroup.ImpostorRoles, CustomRoles.ImperiusCurse);
|
||||
ShapeImperiusCurseShapeshiftDuration = FloatOptionItem.Create(3710, "ShapeshiftDuration", new(2.5f, 999f, 2.5f), 300, TabGroup.ImpostorRoles, false)
|
||||
ShapeImperiusCurseShapeshiftDuration = FloatOptionItem.Create(3710, "ShapeshiftDuration", new(2.5f, 180f, 2.5f), 300, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ImperiusCurse])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
ImperiusCurseShapeshiftCooldown = FloatOptionItem.Create(3711, "ShapeshiftCooldown", new(1f, 999f, 1f), 15f, TabGroup.ImpostorRoles, false)
|
||||
ImperiusCurseShapeshiftCooldown = FloatOptionItem.Create(3711, "ShapeshiftCooldown", new(1f, 180f, 1f), 15f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ImperiusCurse])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
SetupRoleOptions(3800, TabGroup.ImpostorRoles, CustomRoles.Miner);
|
||||
SetupRoleOptions(3900, TabGroup.ImpostorRoles, CustomRoles.Puppeteer);
|
||||
SetupRoleOptions(4000, TabGroup.ImpostorRoles, CustomRoles.Scavenger);
|
||||
ScavengerKillCooldown = FloatOptionItem.Create(4010, "KillCooldown", new(5f, 999f, 2.5f), 40f, TabGroup.ImpostorRoles, false)
|
||||
ScavengerKillCooldown = FloatOptionItem.Create(4010, "KillCooldown", new(5f, 180f, 2.5f), 40f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Scavenger])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
SetupRoleOptions(4100, TabGroup.ImpostorRoles, CustomRoles.ShapeMaster);
|
||||
ShapeMasterShapeshiftDuration = FloatOptionItem.Create(4110, "ShapeshiftDuration", new(1, 999, 1), 10, TabGroup.ImpostorRoles, false)
|
||||
ShapeMasterShapeshiftDuration = FloatOptionItem.Create(4110, "ShapeshiftDuration", new(1, 180, 1), 10, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ShapeMaster])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
Swooper.SetupCustomOption();
|
||||
@@ -1079,12 +1104,12 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Warlock]);
|
||||
WarlockCanKillSelf = BooleanOptionItem.Create(4611, "CanKillSelf", false, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Warlock]);
|
||||
WarlockShiftDuration = FloatOptionItem.Create(4612, "ShapeshiftDuration", new(1, 999, 1), 1, TabGroup.ImpostorRoles, false)
|
||||
WarlockShiftDuration = FloatOptionItem.Create(4612, "ShapeshiftDuration", new(1, 180, 1), 1, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Warlock])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
Wildling.SetupCustomOption();
|
||||
|
||||
TextOptionItem.Create(100069, "RoleType.ImpHindering", TabGroup.ImpostorRoles) //HINDERING
|
||||
TextOptionItem.Create(100004, "RoleType.ImpHindering", TabGroup.ImpostorRoles) //HINDERING
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(255, 25, 25, byte.MaxValue));//HINDERING
|
||||
Hacker.SetupCustomOption(); //anonymous
|
||||
@@ -1093,7 +1118,7 @@ public static class Options
|
||||
Twister.SetupCustomOption();
|
||||
|
||||
|
||||
TextOptionItem.Create(100004, "RoleType.Madmate", TabGroup.ImpostorRoles)
|
||||
TextOptionItem.Create(100005, "RoleType.Madmate", TabGroup.ImpostorRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(255, 25, 25, byte.MaxValue));
|
||||
SetupRoleOptions(4800, TabGroup.ImpostorRoles, CustomRoles.Crewpostor);
|
||||
@@ -1105,13 +1130,13 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Crewpostor]);
|
||||
CrewpostorTasks = OverrideTasksData.Create(4813, TabGroup.ImpostorRoles, CustomRoles.Crewpostor);
|
||||
SetupSingleRoleOptions(4900, TabGroup.ImpostorRoles, CustomRoles.Parasite, 1, zeroOne: false);
|
||||
ParasiteCD = FloatOptionItem.Create(4910, "KillCooldown", new(0f, 999f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
|
||||
ParasiteCD = FloatOptionItem.Create(4910, "KillCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.ImpostorRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Parasite])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
//==================================================================================================================================//
|
||||
|
||||
// Crewmate
|
||||
TextOptionItem.Create(100005, "RoleType.VanillaRoles", TabGroup.CrewmateRoles)
|
||||
TextOptionItem.Create(100006, "RoleType.VanillaRoles", TabGroup.CrewmateRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(140, 255, 255, byte.MaxValue));
|
||||
SetupRoleOptions(5050, TabGroup.CrewmateRoles, CustomRoles.CrewmateTOHE);
|
||||
@@ -1124,7 +1149,7 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ScientistTOHE])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
|
||||
TextOptionItem.Create(100006, "RoleType.CrewBasic", TabGroup.CrewmateRoles)
|
||||
TextOptionItem.Create(100007, "RoleType.CrewBasic", TabGroup.CrewmateRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(140, 255, 255, byte.MaxValue));
|
||||
Addict.SetupCustomOption();
|
||||
@@ -1134,6 +1159,14 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.CyberStar]);
|
||||
NeutralKnowCyberStarDead = BooleanOptionItem.Create(5500, "NeutralKnowCyberStarDead", false, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.CyberStar]);
|
||||
SetupSingleRoleOptions(5550, TabGroup.CrewmateRoles, CustomRoles.Demolitionist, 1);
|
||||
DemolitionistVentTime = FloatOptionItem.Create(5552, "DemolitionistVentTime", new(1f, 30f, 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]);
|
||||
SetupSingleRoleOptions(5575, TabGroup.CrewmateRoles, CustomRoles.TaskManager, 1);
|
||||
NiceEraser.SetupCustomOption();
|
||||
SetupRoleOptions(5600, TabGroup.CrewmateRoles, CustomRoles.Doctor);
|
||||
DoctorTaskCompletedBatteryCharge = FloatOptionItem.Create(5610, "DoctorTaskCompletedBatteryCharge", new(0f, 250f, 1f), 50f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Doctor])
|
||||
@@ -1150,12 +1183,12 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.SuperStar]);
|
||||
Tracefinder.SetupCustomOption();
|
||||
SetupRoleOptions(6200, TabGroup.CrewmateRoles, CustomRoles.Transporter);
|
||||
TransporterTeleportMax = IntegerOptionItem.Create(6210, "TransporterTeleportMax", new(1, 99, 1), 5, TabGroup.CrewmateRoles, false)
|
||||
TransporterTeleportMax = IntegerOptionItem.Create(6210, "TransporterTeleportMax", new(1, 20, 1), 5, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Transporter])
|
||||
.SetValueFormat(OptionFormat.Times);
|
||||
TransporterTasks = OverrideTasksData.Create(6211, TabGroup.CrewmateRoles, CustomRoles.Transporter);
|
||||
|
||||
TextOptionItem.Create(100007, "RoleType.CrewSupport", TabGroup.CrewmateRoles)
|
||||
TextOptionItem.Create(100008, "RoleType.CrewSupport", TabGroup.CrewmateRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(140, 255, 255, byte.MaxValue));
|
||||
Admirer.SetupCustomOption();
|
||||
@@ -1170,7 +1203,7 @@ public static class Options
|
||||
GrenadierSkillCooldown = FloatOptionItem.Create(6810, "GrenadierSkillCooldown", new(1f, 180f, 1f), 25f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Grenadier])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
GrenadierSkillDuration = FloatOptionItem.Create(6811, "GrenadierSkillDuration", new(1f, 999f, 1f), 10f, TabGroup.CrewmateRoles, false)
|
||||
GrenadierSkillDuration = FloatOptionItem.Create(6811, "GrenadierSkillDuration", new(1f, 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)
|
||||
@@ -1178,6 +1211,31 @@ public static class Options
|
||||
.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);
|
||||
SetupSingleRoleOptions(6850, TabGroup.CrewmateRoles, CustomRoles.Lighter, 1);
|
||||
LighterSkillCooldown = FloatOptionItem.Create(6852, "LighterSkillCooldown", new(1f, 180f, 1f), 25f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
LighterSkillDuration = FloatOptionItem.Create(6853, "LighterSkillDuration", new(1f, 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);
|
||||
ParityCop.SetupCustomOption();
|
||||
SabotageMaster.SetupCustomOption(); //Mechanic
|
||||
Medic.SetupCustomOption();
|
||||
@@ -1187,17 +1245,20 @@ public static class Options
|
||||
SetupRoleOptions(7500, TabGroup.CrewmateRoles, CustomRoles.Observer);
|
||||
Oracle.SetupCustomOption();
|
||||
SetupRoleOptions(7700, TabGroup.CrewmateRoles, CustomRoles.DovesOfNeace);
|
||||
DovesOfNeaceCooldown = FloatOptionItem.Create(7710, "DovesOfNeaceCooldown", new(1f, 180f, 1f), 30f, TabGroup.CrewmateRoles, false)
|
||||
DovesOfNeaceCooldown = FloatOptionItem.Create(7710, "DovesOfNeaceCooldown", new(1f, 180f, 1f), 7f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.DovesOfNeace])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
DovesOfNeaceMaxOfUseage = IntegerOptionItem.Create(7711, "DovesOfNeaceMaxOfUseage", new(1, 999, 1), 3, TabGroup.CrewmateRoles, false)
|
||||
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);
|
||||
SetupRoleOptions(7800, TabGroup.CrewmateRoles, CustomRoles.Paranoia);
|
||||
ParanoiaNumOfUseButton = IntegerOptionItem.Create(7810, "ParanoiaNumOfUseButton", new(1, 99, 1), 3, TabGroup.CrewmateRoles, false)
|
||||
ParanoiaNumOfUseButton = IntegerOptionItem.Create(7810, "ParanoiaNumOfUseButton", new(1, 10, 1), 3, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Paranoia])
|
||||
.SetValueFormat(OptionFormat.Times);
|
||||
ParanoiaVentCooldown = FloatOptionItem.Create(7811, "ParanoiaVentCooldown", new(0, 990, 1), 10, TabGroup.CrewmateRoles, false)
|
||||
ParanoiaVentCooldown = FloatOptionItem.Create(7811, "ParanoiaVentCooldown", new(0, 180, 1), 10, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Paranoia])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
Psychic.SetupCustomOption();
|
||||
@@ -1208,13 +1269,19 @@ public static class Options
|
||||
TimeMasterSkillCooldown = FloatOptionItem.Create(8960, "TimeMasterSkillCooldown", new(1f, 180f, 1f), 20f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.TimeMaster])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
TimeMasterSkillDuration = FloatOptionItem.Create(8961, "TimeMasterSkillDuration", new(1f, 999f, 1f), 20f, TabGroup.CrewmateRoles, false)
|
||||
TimeMasterSkillDuration = FloatOptionItem.Create(8961, "TimeMasterSkillDuration", new(1f, 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);
|
||||
|
||||
Tracker.SetupCustomOption();
|
||||
|
||||
TextOptionItem.Create(100008, "RoleType.CrewKilling", TabGroup.CrewmateRoles)
|
||||
TextOptionItem.Create(100009, "RoleType.CrewKilling", TabGroup.CrewmateRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(140, 255, 255, byte.MaxValue));
|
||||
SetupRoleOptions(8400, TabGroup.CrewmateRoles, CustomRoles.Bodyguard);
|
||||
@@ -1224,6 +1291,13 @@ public static class Options
|
||||
CopyCat.SetupCustomOption();
|
||||
Crusader.SetupCustomOption();
|
||||
Counterfeiter.SetupCustomOption();
|
||||
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(8552, "WitnessTime", new(1, 30, 1), 10, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Witness])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
SwordsMan.SetupCustomOption();
|
||||
Reverie.SetupCustomOption();
|
||||
|
||||
@@ -1242,12 +1316,14 @@ public static class Options
|
||||
VeteranSkillCooldown = FloatOptionItem.Create(8910, "VeteranSkillCooldown", new(1f, 180f, 1f), 20f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Veteran])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
VeteranSkillDuration = FloatOptionItem.Create(8911, "VeteranSkillDuration", new(1f, 999f, 1f), 20f, TabGroup.CrewmateRoles, false)
|
||||
VeteranSkillDuration = FloatOptionItem.Create(8911, "VeteranSkillDuration", new(1f, 180f, 1f), 20f, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Veteran])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
VeteranSkillMaxOfUseage = IntegerOptionItem.Create(8912, "VeteranSkillMaxOfUseage", new(1, 999, 1), 10, TabGroup.CrewmateRoles, false)
|
||||
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);
|
||||
SetupRoleOptions(8600, TabGroup.CrewmateRoles, CustomRoles.NiceGuesser);
|
||||
GGCanGuessTime = IntegerOptionItem.Create(8610, "GuesserCanGuessTimes", new(1, 15, 1), 15, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.NiceGuesser])
|
||||
@@ -1260,7 +1336,7 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.NiceGuesser])
|
||||
.SetColor(Color.green);
|
||||
|
||||
TextOptionItem.Create(100009, "RoleType.CrewPower", TabGroup.CrewmateRoles)
|
||||
TextOptionItem.Create(100010, "RoleType.CrewPower", TabGroup.CrewmateRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(140, 255, 255, byte.MaxValue));
|
||||
SetupRoleOptions(9100, TabGroup.CrewmateRoles, CustomRoles.Dictator);
|
||||
@@ -1269,12 +1345,12 @@ public static class Options
|
||||
Judge.SetupCustomOption();
|
||||
Marshall.SetupCustomOption();
|
||||
SetupRoleOptions(9500, TabGroup.CrewmateRoles, CustomRoles.Mayor);
|
||||
MayorAdditionalVote = IntegerOptionItem.Create(9510, "MayorAdditionalVote", new(1, 99, 1), 3, TabGroup.CrewmateRoles, false)
|
||||
MayorAdditionalVote = IntegerOptionItem.Create(9510, "MayorAdditionalVote", new(1, 10, 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, 99, 1), 1, TabGroup.CrewmateRoles, false)
|
||||
MayorNumOfUseButton = IntegerOptionItem.Create(9512, "MayorNumOfUseButton", new(1, 10, 1), 1, TabGroup.CrewmateRoles, false)
|
||||
.SetParent(MayorHasPortableButton)
|
||||
.SetValueFormat(OptionFormat.Times);
|
||||
MayorHideVote = BooleanOptionItem.Create(9513, "MayorHideVote", false, TabGroup.CrewmateRoles, false)
|
||||
@@ -1286,11 +1362,12 @@ public static class Options
|
||||
Farseer.SetupCustomOption();
|
||||
|
||||
// Neutral
|
||||
TextOptionItem.Create(100010, "RoleType.NeutralBenign", TabGroup.NeutralRoles)
|
||||
TextOptionItem.Create(100069, "RoleType.NeutralBenign", TabGroup.NeutralRoles)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(127, 140, 141, byte.MaxValue));
|
||||
Amnesiac.SetupCustomOption();
|
||||
Totocalcio.SetupCustomOption();
|
||||
Romantic.SetupCustomOption();
|
||||
SetupRoleOptions(11300, TabGroup.NeutralRoles, CustomRoles.FFF);
|
||||
Lawyer.SetupCustomOption();
|
||||
Maverick.SetupCustomOption();
|
||||
@@ -1302,7 +1379,7 @@ public static class Options
|
||||
Pursuer.SetupCustomOption();
|
||||
NWitch.SetupCustomOption();
|
||||
/* SetupSingleRoleOptions(6050530, TabGroup.NeutralRoles, CustomRoles.NWitch, 1, zeroOne: false);
|
||||
ControlCooldown = FloatOptionItem.Create(6050532, "ControlCooldown", new(0f, 999f, 2.5f), 30f, TabGroup.NeutralRoles, false)
|
||||
ControlCooldown = FloatOptionItem.Create(6050532, "ControlCooldown", new(0f, 180f, 2.5f), 30f, TabGroup.NeutralRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.NWitch])
|
||||
.SetValueFormat(OptionFormat.Seconds); */
|
||||
|
||||
@@ -1328,7 +1405,7 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Jester])
|
||||
.SetValueFormat(OptionFormat.Percent);
|
||||
SetupRoleOptions(10950, TabGroup.NeutralRoles, CustomRoles.Masochist);
|
||||
MasochistKillMax = IntegerOptionItem.Create(10955, "MasochistKillMax", new(1, 99, 1), 5, TabGroup.NeutralRoles, false)
|
||||
MasochistKillMax = IntegerOptionItem.Create(10955, "MasochistKillMax", new(1, 20, 1), 5, TabGroup.NeutralRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Masochist])
|
||||
.SetValueFormat(OptionFormat.Times);
|
||||
|
||||
@@ -1347,7 +1424,7 @@ public static class Options
|
||||
PhantomCanGuess = BooleanOptionItem.Create(11412, "CanGuess", false, TabGroup.NeutralRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Phantom]);
|
||||
PhantomTasks = OverrideTasksData.Create(11413, TabGroup.NeutralRoles, CustomRoles.Phantom);
|
||||
Pirate.SetupCustomOption();
|
||||
//Pirate.SetupCustomOption();
|
||||
SetupRoleOptions(11500, TabGroup.NeutralRoles, CustomRoles.Terrorist);
|
||||
CanTerroristSuicideWin = BooleanOptionItem.Create(11510, "CanTerroristSuicideWin", false, TabGroup.NeutralRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Terrorist]);
|
||||
@@ -1378,7 +1455,7 @@ public static class Options
|
||||
ArsonistDouseTime = FloatOptionItem.Create(10410, "ArsonistDouseTime", new(0f, 10f, 1f), 3f, TabGroup.NeutralRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Arsonist])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
ArsonistCooldown = FloatOptionItem.Create(10411, "Cooldown", new(0f, 990f, 1f), 10f, TabGroup.NeutralRoles, false)
|
||||
ArsonistCooldown = FloatOptionItem.Create(10411, "Cooldown", new(0f, 60f, 1f), 10f, TabGroup.NeutralRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Arsonist])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
ArsonistKeepsGameGoing = BooleanOptionItem.Create(10412, "ArsonistKeepsGameGoing", false, TabGroup.NeutralRoles, false)
|
||||
@@ -1420,7 +1497,7 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote]);
|
||||
NeutralCanBeAntidote = BooleanOptionItem.Create(222423, "NeutralCanBeAntidote", true, TabGroup.Addons, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Antidote]);
|
||||
AntidoteCDOpt = FloatOptionItem.Create(222424, "AntidoteCDOpt", new(0f, 999f, 1f), 5f, TabGroup.Addons, false)
|
||||
AntidoteCDOpt = FloatOptionItem.Create(222424, "AntidoteCDOpt", new(0f, 180f, 1f), 5f, TabGroup.Addons, false)
|
||||
.SetParent(Options.CustomRoleSpawnChances[CustomRoles.Antidote])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
AntidoteCDReset = BooleanOptionItem.Create(222425, "AntidoteCDReset", true, TabGroup.Addons, false)
|
||||
@@ -1486,10 +1563,12 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Lazy]);
|
||||
TaskBasedCrewCanBeLazy = BooleanOptionItem.Create(14120, "TaskBasedCrewCanBeLazy", false, TabGroup.Addons, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Lazy]);
|
||||
SetupAdtRoleOptions(14200, CustomRoles.Lighter, canSetNum: true);
|
||||
LighterVision = FloatOptionItem.Create(14210, "LighterVision", new(0.5f, 5f, 0.25f), 1.25f, TabGroup.Addons, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Lighter])
|
||||
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]);
|
||||
SetupAdtRoleOptions(15500, CustomRoles.Loyal, canSetNum: true);
|
||||
ImpCanBeLoyal = BooleanOptionItem.Create(15510, "ImpCanBeLoyal", true, TabGroup.Addons, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Loyal]);
|
||||
@@ -1578,7 +1657,7 @@ public static class Options
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
|
||||
NeutralCanBeDiseased = BooleanOptionItem.Create(111423, "NeutralCanBeDiseased", true, TabGroup.Addons, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Diseased]);
|
||||
DiseasedCDOpt = FloatOptionItem.Create(111424, "DiseasedCDOpt", new(0f, 999f, 1f), 25f, TabGroup.Addons, false)
|
||||
DiseasedCDOpt = FloatOptionItem.Create(111424, "DiseasedCDOpt", new(0f, 180f, 1f), 25f, TabGroup.Addons, false)
|
||||
.SetParent(Options.CustomRoleSpawnChances[CustomRoles.Diseased])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
DiseasedCDReset = BooleanOptionItem.Create(111425, "DiseasedCDReset", true, TabGroup.Addons, false)
|
||||
@@ -1711,18 +1790,18 @@ public static class Options
|
||||
.SetColor(new Color32(247, 70, 49, byte.MaxValue));
|
||||
|
||||
SetupRoleOptions(16300, TabGroup.OtherRoles, CustomRoles.Minimalism);
|
||||
MNKillCooldown = FloatOptionItem.Create(16310, "KillCooldown", new(2.5f, 999f, 2.5f), 10f, TabGroup.OtherRoles, false)
|
||||
MNKillCooldown = FloatOptionItem.Create(16310, "KillCooldown", new(2.5f, 180f, 2.5f), 10f, TabGroup.OtherRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Minimalism])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
SetupRoleOptions(16400, TabGroup.OtherRoles, CustomRoles.Zombie);
|
||||
ZombieKillCooldown = FloatOptionItem.Create(16410, "KillCooldown", new(0f, 999f, 2.5f), 5f, TabGroup.OtherRoles, false)
|
||||
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);
|
||||
SetupRoleOptions(16500, TabGroup.OtherRoles, CustomRoles.BoobyTrap);
|
||||
BTKillCooldown = FloatOptionItem.Create(16510, "KillCooldown", new(2.5f, 999f, 2.5f), 20f, TabGroup.OtherRoles, false)
|
||||
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)
|
||||
@@ -1764,7 +1843,7 @@ public static class Options
|
||||
MarioVentNumWin = IntegerOptionItem.Create(18310, "MarioVentNumWin", new(5, 900, 5), 40, TabGroup.OtherRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Mario])
|
||||
.SetValueFormat(OptionFormat.Times);
|
||||
MarioVentCD = FloatOptionItem.Create(18311, "VentCooldown", new(0f, 999f, 1f), 15f, TabGroup.OtherRoles, false)
|
||||
MarioVentCD = FloatOptionItem.Create(18311, "VentCooldown", new(0f, 180f, 1f), 15f, TabGroup.OtherRoles, false)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.Mario])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
SetupRoleOptions(18400, TabGroup.OtherRoles, CustomRoles.Revolutionist);
|
||||
@@ -1884,9 +1963,9 @@ public static class Options
|
||||
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);
|
||||
|
||||
LowLoadMode = BooleanOptionItem.Create(19317, "LowLoadMode", false, TabGroup.SystemSettings, false)
|
||||
LowLoadMode = BooleanOptionItem.Create(19317, "LowLoadMode", true, TabGroup.SystemSettings, false)
|
||||
.SetHeader(true)
|
||||
.SetColor(Color.red);
|
||||
.SetColor(Color.green);
|
||||
|
||||
EndWhenPlayerBug = BooleanOptionItem.Create(19318, "EndWhenPlayerBug", true, TabGroup.SystemSettings, false)
|
||||
.SetHeader(true)
|
||||
@@ -1910,8 +1989,8 @@ public static class Options
|
||||
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", false, TabGroup.SystemSettings, false);
|
||||
SendRoleDescriptionFirstMeeting = BooleanOptionItem.Create(19406, "SendRoleDescriptionFirstMeeting", false, 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)
|
||||
@@ -2069,10 +2148,16 @@ public static class Options
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
DisableVanillaRoles = BooleanOptionItem.Create(22600, "DisableVanillaRoles", true, TabGroup.GameSettings, false)
|
||||
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));
|
||||
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));
|
||||
@@ -2471,6 +2556,11 @@ public static class Options
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
.SetColor(new Color32(193, 255, 209, byte.MaxValue));
|
||||
|
||||
StartingKillCooldown = FloatOptionItem.Create(23950, "StartingKillCooldown", new(1, 60, 1), 10, TabGroup.GameSettings, false)
|
||||
.SetColor(new Color32(193, 255, 209, byte.MaxValue))
|
||||
.SetValueFormat(OptionFormat.Seconds)
|
||||
.SetGameMode(CustomGameMode.Standard);
|
||||
|
||||
// 首刀保护
|
||||
ShieldPersonDiedFirst = BooleanOptionItem.Create(24000, "ShieldPersonDiedFirst", false, TabGroup.GameSettings, false)
|
||||
.SetGameMode(CustomGameMode.Standard)
|
||||
|
||||
+25
-3
@@ -90,6 +90,7 @@ enum CustomRPC
|
||||
SetWraithTimer,
|
||||
SetBKTimer,
|
||||
SyncTotocalcioTargetAndTimes,
|
||||
SyncRomanticTarget,
|
||||
SetSuccubusCharmLimit,
|
||||
SetInfectiousBiteLimit,
|
||||
SetCursedSoulCurseLimit,
|
||||
@@ -515,6 +516,9 @@ internal class RPCHandlerPatch
|
||||
case CustomRPC.SyncTotocalcioTargetAndTimes:
|
||||
Totocalcio.ReceiveRPC(reader);
|
||||
break;
|
||||
case CustomRPC.SyncRomanticTarget:
|
||||
Romantic.ReceiveRPC(reader);
|
||||
break;
|
||||
case CustomRPC.SetSuccubusCharmLimit:
|
||||
Succubus.ReceiveRPC(reader);
|
||||
break;
|
||||
@@ -901,6 +905,15 @@ internal static class RPC
|
||||
case CustomRoles.Veteran:
|
||||
Main.VeteranNumOfUsed.Add(targetId, Options.VeteranSkillMaxOfUseage.GetInt());
|
||||
break;
|
||||
case CustomRoles.Grenadier:
|
||||
Main.GrenadierNumOfUsed.Add(targetId, Options.GrenadierSkillMaxOfUseage.GetInt());
|
||||
break;
|
||||
case CustomRoles.Lighter:
|
||||
Main.LighterNumOfUsed.Add(targetId, Options.LighterSkillMaxOfUseage.GetInt());
|
||||
break;
|
||||
case CustomRoles.TimeMaster:
|
||||
Main.TimeMasterNumOfUsed.Add(targetId, Options.TimeMasterMaxUses.GetInt());
|
||||
break;
|
||||
case CustomRoles.Swooper:
|
||||
Swooper.Add(targetId);
|
||||
break;
|
||||
@@ -916,6 +929,15 @@ internal static class RPC
|
||||
case CustomRoles.Totocalcio:
|
||||
Totocalcio.Add(targetId);
|
||||
break;
|
||||
case CustomRoles.Romantic:
|
||||
Romantic.Add(targetId);
|
||||
break;
|
||||
case CustomRoles.VengefulRomantic:
|
||||
VengefulRomantic.Add(targetId);
|
||||
break;
|
||||
case CustomRoles.RuthlessRomantic:
|
||||
RuthlessRomantic.Add(targetId);
|
||||
break;
|
||||
case CustomRoles.Succubus:
|
||||
Succubus.Add(targetId);
|
||||
break;
|
||||
@@ -1000,9 +1022,9 @@ internal static class RPC
|
||||
case CustomRoles.Doomsayer:
|
||||
Doomsayer.Add(targetId);
|
||||
break;
|
||||
case CustomRoles.Pirate:
|
||||
Pirate.Add(targetId);
|
||||
break;
|
||||
//case CustomRoles.Pirate:
|
||||
// Pirate.Add(targetId);
|
||||
// break;
|
||||
}
|
||||
HudManager.Instance.SetHudActive(true);
|
||||
if (PlayerControl.LocalPlayer.PlayerId == targetId) RemoveDisableDevicesPatch.UpdateDisableDevices();
|
||||
|
||||
+255
-13
@@ -181,6 +181,15 @@ public static class Utils
|
||||
return;
|
||||
}
|
||||
}
|
||||
public static void SetVisionV2(this IGameOptions opt)
|
||||
{
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, opt.GetFloat(FloatOptionNames.CrewLightMod));
|
||||
if (IsActive(SystemTypes.Electrical))
|
||||
{
|
||||
opt.SetFloat(FloatOptionNames.ImpostorLightMod, opt.GetFloat(FloatOptionNames.ImpostorLightMod) / 5);
|
||||
}
|
||||
return;
|
||||
}
|
||||
//誰かが死亡したときのメソッド
|
||||
public static void TargetDies(PlayerControl killer, PlayerControl target)
|
||||
{
|
||||
@@ -199,8 +208,25 @@ public static class Utils
|
||||
seer.KillFlash();
|
||||
seer.Notify(ColorString(GetRoleColor(CustomRoles.CyberStar), GetString("OnCyberStarDead")));
|
||||
}
|
||||
else if (target.Is(CustomRoles.Demolitionist))
|
||||
{
|
||||
killer.Notify(ColorString(GetRoleColor(CustomRoles.Demolitionist), GetString("OnDemolitionistDead")));
|
||||
new LateTask(() =>
|
||||
{
|
||||
if (!killer.inVent && (killer.PlayerId != target.PlayerId))
|
||||
{
|
||||
if ((Options.DemolitionistKillerDiesOnMeetingCall.GetBool() || GameStates.IsInTask) && killer.IsAlive()) {
|
||||
killer.RpcMurderPlayerV3(killer);
|
||||
RPC.PlaySoundRPC(killer.PlayerId, Sounds.KillSound);
|
||||
Main.PlayerStates[killer.PlayerId].deathReason = PlayerState.DeathReason.Demolished;
|
||||
}
|
||||
} else RPC.PlaySoundRPC(killer.PlayerId, Sounds.TaskComplete);
|
||||
}, Options.DemolitionistVentTime.GetFloat() + 0.5f
|
||||
);
|
||||
}
|
||||
}
|
||||
if (target.Is(CustomRoles.CyberStar) && !Main.CyberStarDead.Contains(target.PlayerId)) Main.CyberStarDead.Add(target.PlayerId);
|
||||
if (target.Is(CustomRoles.Demolitionist) && !Main.DemolitionistDead.Contains(target.PlayerId)) Main.DemolitionistDead.Add(target.PlayerId);
|
||||
}
|
||||
public static bool KillFlashCheck(PlayerControl killer, PlayerControl target, PlayerControl seer)
|
||||
{
|
||||
@@ -426,7 +452,7 @@ public static class Utils
|
||||
case CustomRoles.Crusader:
|
||||
case CustomRoles.Refugee:
|
||||
case CustomRoles.Jester:
|
||||
case CustomRoles.Pirate:
|
||||
//case CustomRoles.Pirate:
|
||||
// case CustomRoles.Baker:
|
||||
case CustomRoles.Famine:
|
||||
case CustomRoles.NWitch:
|
||||
@@ -454,6 +480,9 @@ public static class Utils
|
||||
case CustomRoles.BloodKnight:
|
||||
case CustomRoles.Camouflager:
|
||||
case CustomRoles.Totocalcio:
|
||||
case CustomRoles.Romantic:
|
||||
case CustomRoles.VengefulRomantic:
|
||||
case CustomRoles.RuthlessRomantic:
|
||||
case CustomRoles.Succubus:
|
||||
case CustomRoles.CursedSoul:
|
||||
case CustomRoles.Admirer:
|
||||
@@ -464,6 +493,7 @@ public static class Utils
|
||||
case CustomRoles.Virus:
|
||||
case CustomRoles.Farseer:
|
||||
case CustomRoles.Counterfeiter:
|
||||
case CustomRoles.Witness:
|
||||
case CustomRoles.Pursuer:
|
||||
case CustomRoles.Spiritcaller:
|
||||
case CustomRoles.PlagueBearer:
|
||||
@@ -542,6 +572,9 @@ public static class Utils
|
||||
pc.Is(CustomRoles.Loyal) ||
|
||||
pc.Is(CustomRoles.SuperStar) ||
|
||||
pc.Is(CustomRoles.CyberStar) ||
|
||||
pc.Is(CustomRoles.Demolitionist) ||
|
||||
pc.Is(CustomRoles.NiceEraser) ||
|
||||
pc.Is(CustomRoles.TaskManager) ||
|
||||
pc.Is(CustomRoles.Egoist) ||
|
||||
pc.Is(CustomRoles.DualPersonality)
|
||||
);
|
||||
@@ -568,27 +601,221 @@ public static class Utils
|
||||
{
|
||||
case CustomRoles.Arsonist:
|
||||
var doused = GetDousedPlayerCount(playerId);
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Arsonist).ShadeColor(0.25f), $"({doused.Item1}/{doused.Item2})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Arsonist).ShadeColor(0.25f), $"<color=#777777>-</color> {doused.Item1}/{doused.Item2}"));
|
||||
break;
|
||||
case CustomRoles.Sheriff:
|
||||
ProgressText.Append(Sheriff.GetShotLimit(playerId));
|
||||
if (Sheriff.ShowShotLimit.GetBool()) ProgressText.Append(Sheriff.GetShotLimit(playerId));
|
||||
break;
|
||||
case CustomRoles.Pirate:
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Pirate).ShadeColor(0.25f), $"({Pirate.NumWin}/{Pirate.SuccessfulDuelsToWin.GetInt()})"));
|
||||
case CustomRoles.Veteran:
|
||||
var taskState2 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor2;
|
||||
var TaskCompleteColor2 = Color.green;
|
||||
var NonCompleteColor2 = Color.yellow;
|
||||
var NormalColor2 = taskState2.IsTaskFinished ? TaskCompleteColor2 : NonCompleteColor2;
|
||||
TextColor2 = comms ? Color.gray : NormalColor2;
|
||||
string Completed2 = comms ? "?" : $"{taskState2.CompletedTasksCount}";
|
||||
Color TextColor21;
|
||||
if (Main.VeteranNumOfUsed[playerId] < 1) TextColor21 = Color.red;
|
||||
else TextColor21 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor2, $"<color=#777777>-</color> {Completed2}/{taskState2.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor21, $" <color=#777777>-</color> {Math.Round(Main.VeteranNumOfUsed[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Grenadier:
|
||||
var taskState3 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor3;
|
||||
var TaskCompleteColor3 = Color.green;
|
||||
var NonCompleteColor3 = Color.yellow;
|
||||
var NormalColor3 = taskState3.IsTaskFinished ? TaskCompleteColor3 : NonCompleteColor3;
|
||||
TextColor3 = comms ? Color.gray : NormalColor3;
|
||||
string Completed3 = comms ? "?" : $"{taskState3.CompletedTasksCount}";
|
||||
Color TextColor31;
|
||||
if (Main.GrenadierNumOfUsed[playerId] < 1) TextColor31 = Color.red;
|
||||
else TextColor31 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor3, $"<color=#777777>-</color> {Completed3}/{taskState3.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor31, $" <color=#777777>-</color> {Math.Round(Main.GrenadierNumOfUsed[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Divinator:
|
||||
var taskState4 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor4;
|
||||
var TaskCompleteColor4 = Color.green;
|
||||
var NonCompleteColor4 = Color.yellow;
|
||||
var NormalColor4 = taskState4.IsTaskFinished ? TaskCompleteColor4 : NonCompleteColor4;
|
||||
TextColor4 = comms ? Color.gray : NormalColor4;
|
||||
string Completed4 = comms ? "?" : $"{taskState4.CompletedTasksCount}";
|
||||
Color TextColor41;
|
||||
if (Divinator.CheckLimit[playerId] < 1) TextColor41 = Color.red;
|
||||
else TextColor41 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor4, $"<color=#777777>-</color> {Completed4}/{taskState4.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor41, $" <color=#777777>-</color> {Math.Round(Divinator.CheckLimit[playerId])}"));
|
||||
break;
|
||||
case CustomRoles.DovesOfNeace:
|
||||
var taskState5 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor5;
|
||||
var TaskCompleteColor5 = Color.green;
|
||||
var NonCompleteColor5 = Color.yellow;
|
||||
var NormalColor5 = taskState5.IsTaskFinished ? TaskCompleteColor5 : NonCompleteColor5;
|
||||
TextColor5 = comms ? Color.gray : NormalColor5;
|
||||
string Completed5 = comms ? "?" : $"{taskState5.CompletedTasksCount}";
|
||||
Color TextColor51;
|
||||
if (Main.DovesOfNeaceNumOfUsed[playerId] < 1) TextColor51 = Color.red;
|
||||
else TextColor51 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor5, $"<color=#777777>-</color> {Completed5}/{taskState5.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor51, $" <color=#777777>-</color> {Math.Round(Main.DovesOfNeaceNumOfUsed[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.TimeMaster:
|
||||
var taskState6 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor6;
|
||||
var TaskCompleteColor6 = Color.green;
|
||||
var NonCompleteColor6 = Color.yellow;
|
||||
var NormalColor6 = taskState6.IsTaskFinished ? TaskCompleteColor6 : NonCompleteColor6;
|
||||
TextColor6 = comms ? Color.gray : NormalColor6;
|
||||
string Completed6 = comms ? "?" : $"{taskState6.CompletedTasksCount}";
|
||||
Color TextColor61;
|
||||
if (Main.TimeMasterNumOfUsed[playerId] < 1) TextColor61 = Color.red;
|
||||
else TextColor61 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor6, $"<color=#777777>-</color> {Completed6}/{taskState6.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor61, $" <color=#777777>-</color> {Math.Round(Main.TimeMasterNumOfUsed[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Mediumshiper:
|
||||
var taskState7 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor7;
|
||||
var TaskCompleteColor7 = Color.green;
|
||||
var NonCompleteColor7 = Color.yellow;
|
||||
var NormalColor7 = taskState7.IsTaskFinished ? TaskCompleteColor7 : NonCompleteColor7;
|
||||
TextColor7 = comms ? Color.gray : NormalColor7;
|
||||
string Completed7 = comms ? "?" : $"{taskState7.CompletedTasksCount}";
|
||||
Color TextColor71;
|
||||
if (Mediumshiper.ContactLimit[playerId] < 1) TextColor71 = Color.red;
|
||||
else TextColor71 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor7, $"<color=#777777>-</color> {Completed7}/{taskState7.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor71, $" <color=#777777>-</color> {Math.Round(Mediumshiper.ContactLimit[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.ParityCop:
|
||||
var taskState8 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor8;
|
||||
var TaskCompleteColor8 = Color.green;
|
||||
var NonCompleteColor8 = Color.yellow;
|
||||
var NormalColor8 = taskState8.IsTaskFinished ? TaskCompleteColor8 : NonCompleteColor8;
|
||||
TextColor8 = comms ? Color.gray : NormalColor8;
|
||||
string Completed8 = comms ? "?" : $"{taskState8.CompletedTasksCount}";
|
||||
Color TextColor81;
|
||||
if (ParityCop.MaxCheckLimit[playerId] < 1) TextColor81 = Color.red;
|
||||
else TextColor81 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor8, $"<color=#777777>-</color> {Completed8}/{taskState8.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor81, $" <color=#777777>-</color> {Math.Round(ParityCop.MaxCheckLimit[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Oracle:
|
||||
var taskState9 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor9;
|
||||
var TaskCompleteColor9 = Color.green;
|
||||
var NonCompleteColor9 = Color.yellow;
|
||||
var NormalColor9 = taskState9.IsTaskFinished ? TaskCompleteColor9 : NonCompleteColor9;
|
||||
TextColor9 = comms ? Color.gray : NormalColor9;
|
||||
string Completed9 = comms ? "?" : $"{taskState9.CompletedTasksCount}";
|
||||
Color TextColor91;
|
||||
if (Oracle.CheckLimit[playerId] < 1) TextColor91 = Color.red;
|
||||
else TextColor91 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor9, $"<color=#777777>-</color> {Completed9}/{taskState9.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor91, $" <color=#777777>-</color> {Math.Round(Oracle.CheckLimit[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.SabotageMaster:
|
||||
var taskState10 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor10;
|
||||
var TaskCompleteColor10 = Color.green;
|
||||
var NonCompleteColor10 = Color.yellow;
|
||||
var NormalColor10 = taskState10.IsTaskFinished ? TaskCompleteColor10 : NonCompleteColor10;
|
||||
TextColor10 = comms ? Color.gray : NormalColor10;
|
||||
string Completed10 = comms ? "?" : $"{taskState10.CompletedTasksCount}";
|
||||
Color TextColor101;
|
||||
if (SabotageMaster.SkillLimit.GetFloat() - SabotageMaster.UsedSkillCount > 1) TextColor101 = Color.red;
|
||||
else TextColor101 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor10, $"<color=#777777>-</color> {Completed10}/{taskState10.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor101, $" <color=#777777>-</color> {Math.Round(SabotageMaster.SkillLimit.GetFloat() - SabotageMaster.UsedSkillCount, 1)}"));
|
||||
break;
|
||||
case CustomRoles.Tracker:
|
||||
var taskState11 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor11;
|
||||
var TaskCompleteColor11 = Color.green;
|
||||
var NonCompleteColor11 = Color.yellow;
|
||||
var NormalColor11 = taskState11.IsTaskFinished ? TaskCompleteColor11 : NonCompleteColor11;
|
||||
TextColor11 = comms ? Color.gray : NormalColor11;
|
||||
string Completed11 = comms ? "?" : $"{taskState11.CompletedTasksCount}";
|
||||
Color TextColor111;
|
||||
if (Tracker.TrackLimit[playerId] < 1) TextColor111 = Color.red;
|
||||
else TextColor111 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor11, $"<color=#777777>-</color> {Completed11}/{taskState11.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor111, $" <color=#777777>-</color> {Math.Round(Tracker.TrackLimit[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Bloodhound:
|
||||
var taskState12 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor12;
|
||||
var TaskCompleteColor12 = Color.green;
|
||||
var NonCompleteColor12 = Color.yellow;
|
||||
var NormalColor12 = taskState12.IsTaskFinished ? TaskCompleteColor12 : NonCompleteColor12;
|
||||
TextColor12 = comms ? Color.gray : NormalColor12;
|
||||
string Completed12 = comms ? "?" : $"{taskState12.CompletedTasksCount}";
|
||||
Color TextColor121;
|
||||
if (Bloodhound.UseLimit[playerId] < 1) TextColor121 = Color.red;
|
||||
else TextColor121 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor12, $"<color=#777777>-</color> {Completed12}/{taskState12.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor121, $" <color=#777777>-</color> {Math.Round(Bloodhound.UseLimit[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Chameleon:
|
||||
var taskState13 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor13;
|
||||
var TaskCompleteColor13 = Color.green;
|
||||
var NonCompleteColor13 = Color.yellow;
|
||||
var NormalColor13 = taskState13.IsTaskFinished ? TaskCompleteColor13 : NonCompleteColor13;
|
||||
TextColor13 = comms ? Color.gray : NormalColor13;
|
||||
string Completed13 = comms ? "?" : $"{taskState13.CompletedTasksCount}";
|
||||
Color TextColor131;
|
||||
if (Chameleon.UseLimit[playerId] < 1) TextColor131 = Color.red;
|
||||
else TextColor131 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor13, $"<color=#777777>-</color> {Completed13}/{taskState13.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor131, $" <color=#777777>-</color> {Math.Round(Chameleon.UseLimit[playerId], 1)}"));
|
||||
break;
|
||||
case CustomRoles.Lighter:
|
||||
var taskState14 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor14;
|
||||
var TaskCompleteColor14 = Color.green;
|
||||
var NonCompleteColor14 = Color.yellow;
|
||||
var NormalColor14 = taskState14.IsTaskFinished ? TaskCompleteColor14 : NonCompleteColor14;
|
||||
TextColor14 = comms ? Color.gray : NormalColor14;
|
||||
string Completed14 = comms ? "?" : $"{taskState14.CompletedTasksCount}";
|
||||
Color TextColor141;
|
||||
if (Main.LighterNumOfUsed[playerId] < 1) TextColor141 = Color.red;
|
||||
else TextColor141 = Color.white;
|
||||
ProgressText.Append(ColorString(TextColor14, $"<color=#777777>-</color> {Completed14}/{taskState14.AllTasksCount}"));
|
||||
ProgressText.Append(ColorString(TextColor141, $" <color=#777777>-</color> {Math.Round(Main.LighterNumOfUsed[playerId], 1)}"));
|
||||
break;
|
||||
//case CustomRoles.Pirate:
|
||||
// ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Pirate).ShadeColor(0.25f), $"({Pirate.NumWin}/{Pirate.SuccessfulDuelsToWin.GetInt()})"));
|
||||
// break;
|
||||
case CustomRoles.Crusader:
|
||||
ProgressText.Append(Crusader.GetSkillLimit(playerId));
|
||||
break;
|
||||
case CustomRoles.TaskManager:
|
||||
var taskState1 = Main.PlayerStates?[playerId].GetTaskState();
|
||||
Color TextColor1;
|
||||
var TaskCompleteColor1 = Color.green;
|
||||
var NonCompleteColor1 = Color.yellow;
|
||||
var NormalColor1 = taskState1.IsTaskFinished ? TaskCompleteColor1 : NonCompleteColor1;
|
||||
TextColor1 = comms ? Color.gray : NormalColor1;
|
||||
string Completed1 = comms ? "?" : $"{taskState1.CompletedTasksCount}";
|
||||
string totalCompleted1 = comms ? "?" : $"{GameData.Instance.CompletedTasks}";
|
||||
ProgressText.Append(ColorString(TextColor1, $"<color=#777777>-</color> {Completed1}/{taskState1.AllTasksCount}"));
|
||||
ProgressText.Append($" <color=#777777>-</color> <color=#00ffa5>{totalCompleted1}</color><color=#ffffff>/{GameData.Instance.TotalTasks}</color>");
|
||||
break;
|
||||
case CustomRoles.CopyCat:
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.CopyCat).ShadeColor(0.25f), $"({(CopyCat.MiscopyLimit.TryGetValue(playerId, out var count2) ? count2 : 0)})"));
|
||||
break;
|
||||
case CustomRoles.PlagueBearer:
|
||||
var plagued = PlagueBearer.PlaguedPlayerCount(playerId);
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.PlagueBearer).ShadeColor(0.25f), $"({plagued.Item1}/{plagued.Item2})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.PlagueBearer).ShadeColor(0.25f), $"<color=#777777>-</color> {plagued.Item1}/{plagued.Item2}"));
|
||||
break;
|
||||
case CustomRoles.Doomsayer:
|
||||
var doomsayerguess = Doomsayer.GuessedPlayerCount(playerId);
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Doomsayer).ShadeColor(0.25f), $"({doomsayerguess.Item1}/{doomsayerguess.Item2})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Doomsayer).ShadeColor(0.25f), $"<color=#777777>-</color> {doomsayerguess.Item1}/{doomsayerguess.Item2}"));
|
||||
break;
|
||||
|
||||
case CustomRoles.Sniper:
|
||||
@@ -601,13 +828,13 @@ public static class Utils
|
||||
ProgressText.Append(TimeThief.GetProgressText(playerId));
|
||||
break;
|
||||
case CustomRoles.Mario:
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Mario).ShadeColor(0.25f), $"({(Main.MarioVentCount.TryGetValue(playerId, out var count) ? count : 0)}/{Options.MarioVentNumWin.GetInt()})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Mario).ShadeColor(0.25f), $"<color=#777777>-</color> {(Main.MarioVentCount.TryGetValue(playerId, out var count) ? count : 0)}/{Options.MarioVentNumWin.GetInt()}"));
|
||||
break;
|
||||
case CustomRoles.Vulture:
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Vulture).ShadeColor(0.25f), $"({(Vulture.BodyReportCount.TryGetValue(playerId, out var count1) ? count1 : 0)}/{Vulture.NumberOfReportsToWin.GetInt()})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Vulture).ShadeColor(0.25f), $"<color=#777777>-</color> {(Vulture.BodyReportCount.TryGetValue(playerId, out var count1) ? count1 : 0)}/{Vulture.NumberOfReportsToWin.GetInt()}"));
|
||||
break;
|
||||
case CustomRoles.Masochist:
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Masochist).ShadeColor(0.25f), $"({(Main.MasochistKillMax.TryGetValue(playerId, out var count3) ? count3 : 0)}/{Options.MasochistKillMax.GetInt()})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Masochist).ShadeColor(0.25f), $"<color=#777777>-</color> {(Main.MasochistKillMax.TryGetValue(playerId, out var count3) ? count3 : 0)}/{Options.MasochistKillMax.GetInt()}"));
|
||||
break;
|
||||
case CustomRoles.QuickShooter:
|
||||
ProgressText.Append(QuickShooter.GetShotLimit(playerId));
|
||||
@@ -626,7 +853,7 @@ public static class Utils
|
||||
break;
|
||||
case CustomRoles.Revolutionist:
|
||||
var draw = GetDrawPlayerCount(playerId, out var _);
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Revolutionist).ShadeColor(0.25f), $"({draw.Item1}/{draw.Item2})"));
|
||||
ProgressText.Append(ColorString(GetRoleColor(CustomRoles.Revolutionist).ShadeColor(0.25f), $"<color=#777777>-</color> {draw.Item1}/{draw.Item2}"));
|
||||
break;
|
||||
case CustomRoles.Gangster:
|
||||
ProgressText.Append(Gangster.GetRecruitLimit(playerId));
|
||||
@@ -648,6 +875,9 @@ public static class Utils
|
||||
case CustomRoles.Eraser:
|
||||
ProgressText.Append(Eraser.GetProgressText(playerId));
|
||||
break;
|
||||
//case CustomRoles.NiceEraser:
|
||||
// ProgressText.Append(NiceEraser.GetProgressText(playerId));
|
||||
// break;
|
||||
case CustomRoles.Hacker:
|
||||
ProgressText.Append(Hacker.GetHackLimit(playerId));
|
||||
break;
|
||||
@@ -657,6 +887,9 @@ public static class Utils
|
||||
case CustomRoles.Totocalcio:
|
||||
ProgressText.Append(Totocalcio.GetProgressText(playerId));
|
||||
break;
|
||||
case CustomRoles.Romantic:
|
||||
ProgressText.Append(Romantic.GetProgressText(playerId));
|
||||
break;
|
||||
case CustomRoles.Succubus:
|
||||
ProgressText.Append(Succubus.GetCharmLimit());
|
||||
break;
|
||||
@@ -710,7 +943,7 @@ public static class Utils
|
||||
|
||||
TextColor = comms ? Color.gray : NormalColor;
|
||||
string Completed = comms ? "?" : $"{taskState.CompletedTasksCount}";
|
||||
ProgressText.Append(ColorString(TextColor, $"({Completed}/{taskState.AllTasksCount})"));
|
||||
ProgressText.Append(ColorString(TextColor, $"<color=#777777>-</color> {Completed}/{taskState.AllTasksCount}"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1688,6 +1921,7 @@ public static class Utils
|
||||
(target.Is(CustomRoles.Mayor) && Options.MayorRevealWhenDoneTasks.GetBool() && target.GetPlayerTaskState().IsTaskFinished) ||
|
||||
(seer.Is(CustomRoleTypes.Crewmate) && target.Is(CustomRoles.Marshall) && target.GetPlayerTaskState().IsTaskFinished) ||
|
||||
(Totocalcio.KnowRole(seer, target)) ||
|
||||
(Romantic.KnowRole(seer, target)) ||
|
||||
(Lawyer.KnowRole(seer, target)) ||
|
||||
(EvilDiviner.IsShowTargetRole(seer, target)) ||
|
||||
(Ritualist.IsShowTargetRole(seer, target)) ||
|
||||
@@ -1842,6 +2076,7 @@ public static class Utils
|
||||
}
|
||||
|
||||
TargetMark.Append(Totocalcio.TargetMark(seer, target));
|
||||
TargetMark.Append(Romantic.TargetMark(seer, target));
|
||||
TargetMark.Append(Lawyer.LawyerMark(seer, target));
|
||||
TargetMark.Append(Deathpact.GetDeathpactMark(seer, target));
|
||||
|
||||
@@ -1907,6 +2142,7 @@ public static class Utils
|
||||
Swooper.AfterMeetingTasks();
|
||||
Wraith.AfterMeetingTasks();
|
||||
Chameleon.AfterMeetingTasks();
|
||||
NiceEraser.AfterMeetingTasks();
|
||||
Eraser.AfterMeetingTasks();
|
||||
BountyHunter.AfterMeetingTasks();
|
||||
EvilTracker.AfterMeetingTasks();
|
||||
@@ -1915,7 +2151,7 @@ public static class Utils
|
||||
Vulture.AfterMeetingTasks();
|
||||
Baker.AfterMeetingTasks();
|
||||
CopyCat.AfterMeetingTasks();
|
||||
Pirate.AfterMeetingTask();
|
||||
//Pirate.AfterMeetingTask();
|
||||
|
||||
|
||||
if (Options.AirshipVariableElectrical.GetBool())
|
||||
@@ -1968,11 +2204,17 @@ public static class Utils
|
||||
case CustomRoles.Pelican:
|
||||
Pelican.OnPelicanDied(target.PlayerId);
|
||||
break;
|
||||
case CustomRoles.Romantic:
|
||||
Romantic.isRomanticAlive = false;
|
||||
break;
|
||||
case CustomRoles.Devourer:
|
||||
Devourer.OnDevourerDied(target.PlayerId);
|
||||
break;
|
||||
}
|
||||
|
||||
if (Romantic.BetPlayer.TryGetValue(target.PlayerId, out var bet))
|
||||
Romantic.ChangeRole(bet);
|
||||
|
||||
if (Executioner.Target.ContainsValue(target.PlayerId))
|
||||
Executioner.ChangeRoleByTarget(target);
|
||||
if (Lawyer.Target.ContainsValue(target.PlayerId))
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="csv" Version="2.0.93" />
|
||||
<PackageReference Include="GitInfo" Version="2.3.0">
|
||||
<PackageReference Include="GitInfo" Version="3.1.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace TOHE;
|
||||
public class Main : BasePlugin
|
||||
{
|
||||
// == プログラム設定 / Program Config ==
|
||||
public static readonly string ModName = "Town of Host Re-Edited";
|
||||
public static readonly string ModName = "TOHE+";
|
||||
public static readonly string ModColor = "#ffc0cb";
|
||||
public static readonly bool AllowPublicRoom = true;
|
||||
public static readonly string ForkId = "TOHE";
|
||||
@@ -34,7 +34,7 @@ public class Main : BasePlugin
|
||||
public static readonly string MainMenuText = " ";
|
||||
public const string PluginGuid = "com.karped1em.townofhostedited";
|
||||
public const string PluginVersion = "2.5.1.22";
|
||||
public const string PluginDisplayVersion = "2.5.1_10";
|
||||
public const string PluginDisplayVersion = "1.0";
|
||||
public const int PluginCreate = 3;
|
||||
public const bool Canary = false;
|
||||
|
||||
@@ -109,6 +109,7 @@ public class Main : BasePlugin
|
||||
public static Dictionary<byte, long> TimeMasterInProtect = new();
|
||||
//public static Dictionary<byte, long> FlashbangInProtect = new();
|
||||
public static List<byte> CyberStarDead = new();
|
||||
public static List<byte> DemolitionistDead = new();
|
||||
public static List<byte> WorkaholicAlive = new();
|
||||
public static List<byte> BaitAlive = new();
|
||||
public static List<byte> BoobyTrapBody = new();
|
||||
@@ -158,8 +159,13 @@ public class Main : BasePlugin
|
||||
public static Dictionary<byte, int> ParaUsedButtonCount = new();
|
||||
public static Dictionary<byte, int> MarioVentCount = new();
|
||||
public static Dictionary<byte, long> VeteranInProtect = new();
|
||||
public static Dictionary<byte, int> VeteranNumOfUsed = new();
|
||||
public static Dictionary<byte, float> VeteranNumOfUsed = new();
|
||||
public static Dictionary<byte, byte> AllKillers = new();
|
||||
public static Dictionary<byte, float> GrenadierNumOfUsed = new();
|
||||
public static Dictionary<byte, float> LighterNumOfUsed = new();
|
||||
public static Dictionary<byte, float> TimeMasterNumOfUsed = new();
|
||||
public static Dictionary<byte, long> GrenadierBlinding = new();
|
||||
public static Dictionary<byte, long> Lighter = new();
|
||||
public static Dictionary<byte, long> MadGrenadierBlinding = new();
|
||||
public static Dictionary<byte, int> CursedWolfSpellCount = new();
|
||||
public static Dictionary<byte, int> JinxSpellCount = new();
|
||||
@@ -187,7 +193,7 @@ public class Main : BasePlugin
|
||||
public static int MadmateNum = 0;
|
||||
public static int BardCreations = 0;
|
||||
public static Dictionary<byte, byte> Provoked = new();
|
||||
public static Dictionary<byte, int> DovesOfNeaceNumOfUsed = new();
|
||||
public static Dictionary<byte, float> DovesOfNeaceNumOfUsed = new();
|
||||
|
||||
public static Dictionary<byte, CustomRoles> DevRole = new();
|
||||
public static byte GodfatherTarget = byte.MaxValue;
|
||||
@@ -302,6 +308,9 @@ public class Main : BasePlugin
|
||||
{CustomRoles.CopyCat, "#ffb2ab"},
|
||||
{CustomRoles.SuperStar, "#f6f657"},
|
||||
{CustomRoles.CyberStar, "#ee4a55" },
|
||||
{CustomRoles.Demolitionist, "#5e2801" },
|
||||
{CustomRoles.NiceEraser, "#00a5ff" },
|
||||
{CustomRoles.TaskManager, "#00ffa5" },
|
||||
{CustomRoles.SpeedBooster, "#00ffff"},
|
||||
{CustomRoles.Doctor, "#80ffdd"},
|
||||
{CustomRoles.Dictator, "#df9b00"},
|
||||
@@ -313,7 +322,9 @@ public class Main : BasePlugin
|
||||
{CustomRoles.Veteran, "#a77738"},
|
||||
{CustomRoles.Bodyguard, "#185abd"},
|
||||
{CustomRoles.Counterfeiter, "#BE29EC"},
|
||||
{CustomRoles.Witness, "#4B0082"},
|
||||
{CustomRoles.Grenadier, "#3c4a16"},
|
||||
{CustomRoles.Lighter, "#eee5be"},
|
||||
{CustomRoles.Medic, "#00ff97"},
|
||||
{CustomRoles.Divinator, "#882c83"},
|
||||
{CustomRoles.Glitch, "#39FF14"},
|
||||
@@ -321,7 +332,7 @@ public class Main : BasePlugin
|
||||
{CustomRoles.Mortician, "#333c49"},
|
||||
{CustomRoles.Mediumshiper, "#a200ff"},
|
||||
{CustomRoles.Observer, "#a8e0fa"},
|
||||
{CustomRoles.DovesOfNeace, "#007FFF"},
|
||||
{CustomRoles.DovesOfNeace, "#ffffff"},
|
||||
{CustomRoles.Monarch, "#FFA500"},
|
||||
{CustomRoles.Bloodhound, "#8B0000"},
|
||||
{CustomRoles.Tracker, "#3CB371"},
|
||||
@@ -363,9 +374,12 @@ public class Main : BasePlugin
|
||||
{CustomRoles.Collector, "#9d8892"},
|
||||
{CustomRoles.Provocateur, "#74ba43"},
|
||||
{CustomRoles.Sunnyboy, "#ff9902"},
|
||||
{CustomRoles.Poisoner, "#478800"},
|
||||
{CustomRoles.Poisoner, "#e70052"},
|
||||
{CustomRoles.NWitch, "#BF5FFF"},
|
||||
{CustomRoles.Totocalcio, "#ff9409"},
|
||||
{CustomRoles.Romantic, "#FF1493"},
|
||||
{CustomRoles.VengefulRomantic, "#8B0000"},
|
||||
{CustomRoles.RuthlessRomantic, "#D2691E"},
|
||||
{CustomRoles.Succubus, "#cf6acd"},
|
||||
{CustomRoles.HexMaster, "#ff00ff"},
|
||||
{CustomRoles.Wraith, "#4B0082"},
|
||||
@@ -396,7 +410,7 @@ public class Main : BasePlugin
|
||||
{CustomRoles.Amnesiac, "#7FBFFF"},
|
||||
{CustomRoles.Doomsayer, "#14f786"},
|
||||
{CustomRoles.Masochist, "#684405"},
|
||||
{CustomRoles.Pirate,"#EDC240"},
|
||||
//{CustomRoles.Pirate,"#EDC240"},
|
||||
// GM
|
||||
{CustomRoles.GM, "#ff5b70"},
|
||||
//サブ役職
|
||||
@@ -407,7 +421,7 @@ public class Main : BasePlugin
|
||||
{CustomRoles.Madmate, "#ff1919"},
|
||||
{CustomRoles.Watcher, "#800080"},
|
||||
{CustomRoles.Flashman, "#ff8400"},
|
||||
{CustomRoles.Lighter, "#eee5be"},
|
||||
{CustomRoles.Torch, "#eee5be"},
|
||||
{CustomRoles.Seer, "#61b26c"},
|
||||
{CustomRoles.Brakar, "#1447af"},
|
||||
{CustomRoles.Oblivious, "#424242"},
|
||||
@@ -597,6 +611,9 @@ public enum CustomRoles
|
||||
Needy,
|
||||
SuperStar,
|
||||
CyberStar,
|
||||
Demolitionist,
|
||||
NiceEraser,
|
||||
TaskManager,
|
||||
Mayor,
|
||||
Paranoia,
|
||||
Psychic,
|
||||
@@ -615,7 +632,9 @@ public enum CustomRoles
|
||||
Veteran,
|
||||
Bodyguard,
|
||||
Counterfeiter,
|
||||
Witness,
|
||||
Grenadier,
|
||||
Lighter,
|
||||
Medic,
|
||||
Divinator,
|
||||
Glitch,
|
||||
@@ -673,6 +692,9 @@ public enum CustomRoles
|
||||
BloodKnight,
|
||||
Wraith,
|
||||
Totocalcio,
|
||||
Romantic,
|
||||
VengefulRomantic,
|
||||
RuthlessRomantic,
|
||||
Succubus,
|
||||
Virus,
|
||||
Pursuer,
|
||||
@@ -680,7 +702,7 @@ public enum CustomRoles
|
||||
Jinx,
|
||||
Maverick,
|
||||
CursedSoul,
|
||||
Pirate,
|
||||
//Pirate,
|
||||
Ritualist,
|
||||
Pickpocket,
|
||||
Traitor,
|
||||
@@ -711,7 +733,7 @@ public enum CustomRoles
|
||||
Madmate,
|
||||
Watcher,
|
||||
Flashman,
|
||||
Lighter,
|
||||
Torch,
|
||||
Seer,
|
||||
Brakar,
|
||||
Oblivious,
|
||||
@@ -791,7 +813,7 @@ public enum CustomWinner
|
||||
HexMaster = CustomRoles.HexMaster,
|
||||
Succubus = CustomRoles.Succubus,
|
||||
Wraith = CustomRoles.Wraith,
|
||||
Pirate = CustomRoles.Pirate,
|
||||
//Pirate = CustomRoles.Pirate,
|
||||
SerialKiller = CustomRoles.NSerialKiller,
|
||||
Witch = CustomRoles.NWitch,
|
||||
Juggernaut = CustomRoles.Juggernaut,
|
||||
@@ -813,6 +835,7 @@ public enum CustomWinner
|
||||
Plaguebearer = CustomRoles.PlagueBearer,
|
||||
Masochist = CustomRoles.Masochist,
|
||||
Doomsayer = CustomRoles.Doomsayer,
|
||||
RuthlessRomantic = CustomRoles.RuthlessRomantic
|
||||
}
|
||||
public enum AdditionalWinners
|
||||
{
|
||||
@@ -826,6 +849,8 @@ public enum AdditionalWinners
|
||||
Sunnyboy = CustomRoles.Sunnyboy,
|
||||
Witch = CustomRoles.NWitch,
|
||||
Totocalcio = CustomRoles.Totocalcio,
|
||||
Romantic = CustomRoles.Romantic,
|
||||
VengefulRomantic = CustomRoles.VengefulRomantic,
|
||||
Jackal = CustomRoles.Jackal,
|
||||
Sidekick = CustomRoles.Sidekick,
|
||||
Pursuer = CustomRoles.Pursuer,
|
||||
|
||||
Reference in new issue
Block a user