Add files via upload

This commit is contained in:
Gurge44 authored and GitHub committed 2023-08-14 18:12:30 +02:00
1 parent 5cca61a7f2
commit 3b2ed237a8
15 files changed
+859 -331

No files matched your search

+1 -1
View File
@@ -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)
+3 -3
View File
@@ -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>
+72 -30
View File
@@ -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,
+3 -3
View File
@@ -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
View File
@@ -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 傻逼外挂司马东西
}
+32 -11
View File
@@ -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
View File
@@ -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");
}
}
+5 -4
View File
@@ -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);
+4 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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>
+36 -11
View File
@@ -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,