This commit is contained in:
Gurge44 committed 2024-12-16 16:36:58 +01:00
1 parent 13626c8d00
commit 7643210f4a
10 files changed
+132 -220

No files matched your search

+50 -161
View File
@@ -1,172 +1,61 @@
using System.Collections.Generic;
using System.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using UnityEngine.Networking;
namespace EHR;
public class DevUser(string code = "", string color = "null", string tag = "null", bool isUp = false, bool deBug = false)
{
public string Code { get; } = code;
private string Color { get; } = color;
private string Tag { get; } = tag;
public bool IsUp { get; } = isUp;
public bool DeBug { get; } = deBug;
public bool HasTag()
{
return Tag != "null";
}
public string GetTag()
{
return Color == "null" ? $"<size=1.4>{Tag}</size>\r\n" : $"<color={Color}><size=1.4>{(Tag == "#Dev" ? Translator.GetString("Developer") : Tag)}</size></color>\r\n";
}
}
public static class DevManager
{
private static readonly DevUser DefaultDevUser = new();
private static List<DevUser> DevUserList = [];
private static readonly TagInfo DefaultDevUser = new();
public static void Init()
{
DevUserList =
[
// Dev
new("actorour#0029", "#ffc0cb", "TOHE/TONX Developer", true, true), // KARPED1EM
new("pinklaze#1776", isUp: true), // NCSIMON
new("keepchirpy#6354", "#1FF3C6", "TOHEN Developer", true), // TommyXL
new("motelchief#4112", "#eb57af", "<alpha=#CC>Twilight Raven<alpha=#FF>", true, true), // Drakos
new("eagergaol#1562", "#5534eb", "Drakos Alt", true, true), // Drakos Steam Alt
new("timedapper#9496"), //阿龍
new("sofaagile#3120"), //天寸
new("keyscreech#2151"), //Endrmen40409
private static Dictionary<string, TagInfo> Tags { get; set; } = [];
// Up
new("primether#5348", tag: "<color=#FF0000>YouTuber</color>/<color=#8800FF>Streamer</color>", isUp: true), // AnonWorks
new("truantwarm#9165", isUp: true), // 萧暮不姓萧
new("drilldinky#1386", isUp: true), // 爱玩AU的河豚
new("farardour#6818", isUp: true), // -提米SaMa-
new("vealused#8192", isUp: true), // lag丶xy
new("storyeager#0815", isUp: true), // 航娜丽莎
new("versegame#3885", isUp: true), // 柴唔cw
new("closegrub#6217", isUp: true), // 警长不会玩
new("frownnatty#7935", isUp: true), // 鬼灵official
new("veryscarf#5368", isUp: true), // 小武同学102
new("sparklybee#0275", isUp: true), // --红包SaMa--
new("endingyon#3175", isUp: true), // 游侠开摆
new("firmine#0232", isUp: true), // YH永恒_
new("storkfey#3570", isUp: true), // Calypso
new("fellowsand#1003", isUp: true), // C-Faust
new("jetsafe#8512", isUp: true), // Hoream是好人
new("spoonkey#0792", isUp: true), // 没好康的
new("beakedmire#6099", isUp: true), // 茄-au
new("doggedsize#7892", isUp: true), // TronAndRey
new("openlanded#9533", "#9e2424", "God Of Death Love Apples", true), // ryuk
new("unlikecity#4086", "#eD2F91", "Ward", true), // Ward
new("iconicdrop#2727", isUp: true), // jackler
new("goneria#8334", "#FFFF00", "The Dev on Phone", true, true), // [Developer] The 200IQ guy // Me on phone
new("neatnet#5851", "#FFFF00", "[Developer] The 200IQ guy", true, true), // [Developer] The 200IQ guy
new("contenthue#0404", "#FFFF00", "[Developer] The 200IQ guy", true, true), // [Developer] The 200IQ guy
new("theseform#5686", tag: "<color=#7800FF>PTBR-Translator</color>/<color=#FF0000>Role Idea Creator</color>", isUp: true), // Tomix
new("heavyclod#2286", "#FFFF00", "小叨.exe已停止运行", true), // 小叨院长
new("storeroan#0331", "#FF0066", "Night_瓜", true), // Night_瓜
new("teamelder#5856", "#1379bf", "屑Slok(没信誉的鸽子)", true), // Slok7565
new("radarright#2509"),
// EHR players
new("ravenknurl#4562", "#008000", "Moderador do FH", true), // RicardoFumante
new("crustzonal#9589", "#00FFFF", "Translator PT-BR", true), // artyleague01
new("tinedpun#6584", "#0000ff", "Translator PT-BR", true), // Dechis
new("swiftlord#8072", isUp: true), // But What About
new("ovalinstep#2984", isUp: true), // Seleneous
new("seleneous#6930", isUp: true), // Seleneous
new("innerruler#4140", isUp: true), // thewhiskas27
new("urbanecalf#4975", "#420773", "Streamer", true), // Gugutsik
new("crustzonal#9589", isUp: true), // aviiiv0102
new("tubedilute#9062", isUp: true), // Xcl4udioX
new("ponyholey#5532", "#0000FF", "desenvolvedor", true), // DrawingsZz
new("akinlaptop#2206", isUp: true), // MR Carr
new("fursilty#4676", "#0000ff", "arthurzin", true), // arthurzin
new("stonefuzzy#8673", "#ff0062", "<size=1.6>Ru Translator</size>", true, true), // HyperAtill
new("momenthale#7626", "#6f3bd9", "Amiran", true), // Amiran
new("valuecubic#5819", "#6f3bd9", "Kate", true), // Kate Cat
new("frizzytram#2508", "#1C87FF", "RafaelBIT50", true), // RafaelBIT50
new("ruefulscar#0287", isUp: true), // Zendena
new("foggyzing#6238", isUp: true), // LdZinnn
new("onsideblur#3929", "#fc3a51", "YouTuber", isUp: true), // Manelzin
new("modestspan#7071", "null", "null", true), // Shark
new("divotbusy#0624", isUp: true), // PreCeptorBR
new("pinsrustic#5496", "#fc3a51", "YouTuber", isUp: true), // FHgameplay
new("opaquedot#5610", isUp: true), // Deh_66
new("furpolitic#3380", "#a020f0", "EuOncologico o impostor", isUp: true), // EuOncologico
new("pithfierce#5073", isUp: true), // OrigeTv
new("cannylink#0564", isUp: true), // SpicyPoops
new("ghostapt#7243", "#a48d6b", "AUME", true), // MasterKy
new("planegame#5847", "#44fff7", "Kopp56", true), // Kopp56 PRO
new("clovesorry#6973", "#191970", "Master", true), // MAT
new("ivorywish#3580", "#ff0000", "YouTuber", true), // Erik Carr
new("cleardress#6310", "#ffffff", "<#00BFFF>一</color><#48D1CC>个</color><#7CFC00>热狗</color><#32CD32>uwu</color>", true), // ABoringCat (CN Translator Team Leader)
new("alphacook#6624", "#ff0000", "Translator CN", true), // Dispenser (CN Translator Member)
new("rainypearl#9545", "#A020F0", "YouTuber", true), // bielModzs
new("kiltedbill#4145", isUp: true), // tsaki84
new("onlyfax#3941", "#ff0000", "YouTuber", true), // The Nick AG
new("somewallet#5521", "#ffff00", "Artist", true), // YoshiBertil
new("pagersane#4064", isUp: true), // Bluejava3
new("pocketdoor#9080", isUp: true), // Imnot
new("motorstack#2287", "#E34234", "Foxfire", true), // Esrazraft
new("motorlace#4741", "#DFB722", "\u2756 Assistant Tester \u2756", true), // PEPPERcula
new("kohlcuboid#5702", "#DFB722", "\u2756 Assistant Tester \u2756", true), // PEPPERcula
new("keyrunning#8720", "#00ffff", "Miku", true), // EverMortal_1455
new("yellowjoy#3138", "#FFE87C", "Sunshine", true), // Becksy
new("stuckclaw#5717", "#FF474C", "The biggest SUS", true), // BIG SUS
new("funnytiger#8420", "#ffd4ec", "Registered Bozo", true), // Differntperson
new("raritykey#6021", "#08f638", "DESPAIR", true), // Junko
new("stiltedgap#2406", "#ffff00", "Youtuber", true), // Marcopolo1982
new("spaglad#3866", "#ff0000", "YouTuber", true), // spider_191
new("stapleecho#3635", isUp: true), // Thaylor1819
new("coralcolt#2815", "#ed5356", "YouTuber", true), // TheDarkYT
new("deltasunny#0515", "#ff0000", "YouTuber", true), // LuffyFelx
new("strangeant#6543", isUp: true), // after.edits
new("ninjanice#3990", isUp: true), // void_daora
new("magicmill#4146", isUp: true), // Sr.Angel
new("grassyprey#9593", "#ff0000", "YouTuber", true), // LucasCarr
new("blessedtea#6684", "#ff0000", "YouTuber", true), // Rvimpostor
new("seriouslug#1532", "#FF2400", "ZEN", true), // Zypherus
new("potatotall#5573", isUp: true), // V.K
new("kamedexter#7241", "#ff0000", "YouTuber", true), // Lean
new("faintforge#1505", isUp: true), // hira._.gana
new("rarespite#3723", isUp: true), // Buddah2400
// Sponsor
new("recentduct#6068", "#FF00FF", "高冷男模法师", false, true),
new("canneddrum#2370", "#fffcbe", "我是喜唉awa"),
new("dovefitted#5329", "#1379bf", "不要首刀我"),
new("luckylogo#7352", "#f30000", "林@林"),
new("axefitful#8788", "#8e8171", "寄才是真理"),
new("raftzonal#8893", "#8e8171", "寄才是真理"),
new("twainrobin#8089", "#0000FF", "啊哈修maker"),
new("mallcasual#6075", "#f89ccb", "波奇酱"),
new("beamelfin#9478", "#6495ED", "Amaster-1111"),
new("lordcosy#8966", "#FFD6EC", "HostEHR"), // K
new("honestsofa#2870", "#D381D9", "Discord: SolarFlare#0700", true), // SolarFlare
new("caseeast#7194", "#1c2451", "disc.gg/maul"), // laikrai
// Other
new("peakcrown#8292", isUp: true) // Hakaka
];
}
private static bool IsDevUser(this string code)
{
return DevUserList.Any(x => x.Code == code);
}
public static DevUser GetDevUser(this string code)
public static TagInfo GetDevUser(this string code)
{
code = code.Replace(':', '#');
return code.IsDevUser() ? DevUserList.Find(x => x.Code == code) : DefaultDevUser;
return Tags.GetValueOrDefault(code, DefaultDevUser);
}
private static IEnumerator FetchTags()
{
UnityWebRequest request = UnityWebRequest.Get("https://gurge44.pythonanywhere.com/get_all_tags");
yield return request.SendWebRequest();
if (request.result is UnityWebRequest.Result.ConnectionError or UnityWebRequest.Result.ProtocolError) { Logger.Error($"Error fetching tags: {request.error}", "DevManager.FetchTags"); }
else
{
try
{
string json = request.downloadHandler.text.Trim();
Tags = JsonSerializer.Deserialize<Dictionary<string, TagInfo>>(json);
Logger.Info($"Tags successfully fetched: {Tags.Count} tags loaded.", "DevManager.FetchTags");
}
catch (Exception ex) { Logger.Error($"Error parsing tags JSON: {ex.Message}", "DevManager.FetchTags"); }
}
}
public static void StartFetchingTags()
{
Main.Instance.StartCoroutine(FetchTags());
}
// ReSharper disable once ClassNeverInstantiated.Global
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Local")]
[SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Global")]
[SuppressMessage("ReSharper", "UnusedMember.Global")]
public class TagInfo
{
public string tag_name { get; set; }
public string tag_color { get; set; }
public bool up { get; set; }
public string ip { get; set; }
public bool HasTag() => !string.IsNullOrEmpty(tag_name);
public string GetTag() => !HasTag() ? "" : $"<size=1.4><color={tag_color}>{tag_name}</color></size>\r\n";
}
}
+13 -14
View File
@@ -11,15 +11,15 @@ public class SimpleButton
private float _fontSize;
private Vector2 _scale;
/// <summary>新しいボタンを作成する</summary>
/// <param name="parent">親オブジェクト</param>
/// <param name="name">オブジェクト名</param>
/// <param name="normalColor">通常時の背景色</param>
/// <param name="hoverColor">マウスホバー時の背景色</param>
/// <param name="action">クリック時に発火するアクション</param>
/// <param name="label">ボタンのラベル</param>
/// <param name="scale">ボタンの大きさ</param>
/// <param name="isActive">初期状態でアクティブにするかどうか(デフォルトtrue)</param>
/// <summary>Creates a new button</summary>
/// <param name="parent">Parent object</param>
/// <param name="name">Object name</param>
/// <param name="normalColor">Background color in normal state</param>
/// <param name="hoverColor">Background color when mouse hovers</param>
/// <param name="action">Action triggered on click</param>
/// <param name="label">Button label</param>
/// <param name="localPosition">Button position</param>
/// <param name="isActive">Whether to be active initially (default true)</param>
public SimpleButton(
Transform parent,
string name,
@@ -38,7 +38,7 @@ public class SimpleButton
HoverSprite = Button.activeSprites.GetComponent<SpriteRenderer>();
buttonCollider = Button.GetComponent<BoxCollider2D>();
// ラベルをセンタリング
// Center the label
Transform container = Label.transform.parent;
Object.Destroy(Label.GetComponent<AspectPosition>());
container.SetLocalX(0f);
@@ -75,20 +75,19 @@ public class SimpleButton
{
if (baseButton != null || passiveButton == null) return;
// 複製
baseButton = Object.Instantiate(passiveButton);
var label = baseButton.transform.Find("FontPlacer/Text_TMP").GetComponent<TextMeshPro>();
baseButton.gameObject.SetActive(false);
// シーン切替時に破棄されないようにする
Object.DontDestroyOnLoad(baseButton);
baseButton.name = "EHR_SimpleButtonBase";
// 不要なコンポーネントを無効化
Object.Destroy(baseButton.GetComponent<AspectPosition>());
label.DestroyTranslator();
label.fontSize = label.fontSizeMax = label.fontSizeMin = 3.5f;
label.enableWordWrapping = false;
label.text = "EHR SIMPLE BUTTON BASE";
// 当たり判定がズレてるのを直す
var buttonCollider = baseButton.GetComponent<BoxCollider2D>();
buttonCollider.offset = new(0f, 0f);
baseButton.OnClick = new();
+8 -4
View File
@@ -26,7 +26,9 @@ public static class Statistics
{
bool won = CustomWinnerHolder.WinnerIds.Contains(lp.PlayerId) || CustomWinnerHolder.WinnerRoles.Contains(role) || (CustomWinnerHolder.WinnerTeam == CustomWinner.Bloodlust && addons.Contains(CustomRoles.Bloodlust));
switch (Options.CurrentGameMode)
CustomGameMode gm = Options.CurrentGameMode;
switch (gm)
{
case CustomGameMode.FFA when won:
Achievements.Type.SerialKiller.CompleteAfterGameEnd();
@@ -150,9 +152,11 @@ public static class Statistics
if (correctGuesses >= 6) Achievements.Type.BestGuesserAward.CompleteAfterGameEnd();
Main.NumWinsPerGM.TryAdd(Options.CurrentGameMode, []);
Main.NumWinsPerGM[Options.CurrentGameMode].AddRange(CustomWinnerHolder.WinnerIds.ToValidPlayers().ToDictionary(x => x.FriendCode, _ => 0), overrideExistingKeys: false);
Main.NumWinsPerGM[Options.CurrentGameMode].AdjustAllValues(x => ++x);
if (gm == CustomGameMode.Standard) return;
Main.NumWinsPerGM.TryAdd(gm, []);
Main.NumWinsPerGM[gm].AddRange(CustomWinnerHolder.WinnerIds.ToValidPlayers().ToDictionary(x => x.FriendCode, _ => 0), overrideExistingKeys: false);
Main.NumWinsPerGM[gm].AdjustAllValues(x => ++x);
}
catch (Exception e) { Utils.ThrowException(e); }
+1 -1
View File
@@ -1797,7 +1797,7 @@ public static class Utils
};
}
DevUser devUser = player.FriendCode.GetDevUser();
var devUser = player.FriendCode.GetDevUser();
bool isMod = ChatCommands.IsPlayerModerator(player.FriendCode);
bool isVIP = ChatCommands.IsPlayerVIP(player.FriendCode);
bool hasTag = devUser.HasTag();
+7 -8
View File
@@ -32,8 +32,7 @@ public static class Zoom
}
case < 0:
{
if (GameStates.IsDead || GameStates.IsFreePlay || DebugModeManager.AmDebugger || GameStates.IsLobby ||
PlayerControl.LocalPlayer.FriendCode.GetDevUser().DeBug)
if (GameStates.IsDead || GameStates.IsFreePlay || DebugModeManager.AmDebugger || GameStates.IsLobby)
if (Camera.main.orthographicSize < 18.0f)
SetZoomSize(true);
@@ -107,10 +106,10 @@ public static class Flag
if (!OneTimeList.Contains(type)) OneTimeList.Add(type);
}
/*
public static void DeleteFlag(string type)
{
if (OneTimeList.Contains(type)) OneTimeList.Remove(type);
}
*/
/*
public static void DeleteFlag(string type)
{
if (OneTimeList.Contains(type)) OneTimeList.Remove(type);
}
*/
}
+4 -4
View File
@@ -926,7 +926,7 @@ internal static class ChatCommands
private static void ChangeRoleCommand(ChatController __instance, PlayerControl player, string text, string[] args)
{
if (GameStates.IsLobby || !player.FriendCode.GetDevUser().IsUp) return;
if (GameStates.IsLobby || !player.FriendCode.GetDevUser().up) return;
string subArgs = text.Remove(0, 8);
string setRole = FixRoleNameInput(subArgs.Trim());
@@ -983,7 +983,7 @@ internal static class ChatCommands
return;
}
if (!player.IsHost() && !Options.PlayerCanSetColor.GetBool() && !IsPlayerVIP(player.FriendCode) && !player.FriendCode.GetDevUser().IsUp)
if (!player.IsHost() && !Options.PlayerCanSetColor.GetBool() && !IsPlayerVIP(player.FriendCode) && !player.FriendCode.GetDevUser().up)
{
Utils.SendMessage(GetString("DisableUseCommand"), player.PlayerId);
return;
@@ -1565,7 +1565,7 @@ internal static class ChatCommands
return;
}
if (resultId != 0 && !player.FriendCode.GetDevUser().IsUp)
if (resultId != 0 && !player.FriendCode.GetDevUser().up)
{
Utils.SendMessage($"{GetString("Message.NoPermissionSetRoleOthers")}", player.PlayerId);
return;
@@ -1599,7 +1599,7 @@ internal static class ChatCommands
private static void RCommand(ChatController __instance, PlayerControl player, string text, string[] args)
{
string subArgs = text.Remove(0, 2);
SendRolesInfo(subArgs, player.PlayerId, player.FriendCode.GetDevUser().DeBug);
SendRolesInfo(subArgs, player.PlayerId);
}
private static void DisconnectCommand(ChatController __instance, PlayerControl player, string text, string[] args)
+36 -9
View File
@@ -56,7 +56,9 @@ internal static class EndGamePatch
if (Options.DumpLogAfterGameEnd.GetBool()) Utils.DumpLog(false);
StringBuilder sb = new(GetString("KillLog") + ":");
StringBuilder sb = new(GetString("KillLog"));
sb.Append(':');
sb.Append("<size=70%>");
foreach ((byte key, PlayerState value) in Main.PlayerStates.OrderBy(x => x.Value.RealKiller.TimeStamp.Ticks))
{
@@ -70,7 +72,7 @@ internal static class EndGamePatch
if (killerId != byte.MaxValue && killerId != key) sb.Append($"\n\t⇐ {Main.AllPlayerNames[killerId]} ({(gmIsFMHH ? string.Empty : Utils.GetDisplayRoleName(killerId, true))}{(gmIsFM ? string.Empty : Utils.GetSubRolesText(killerId, summary: true))})");
}
KillLog = sb.ToString();
KillLog = sb.Append("</size>").ToString();
if (!KillLog.Contains('\n')) KillLog = string.Empty;
Main.NormalOptions.KillCooldown = Options.DefaultKillCooldown;
@@ -132,6 +134,7 @@ internal static class SetEverythingUpPatch
{
public static string LastWinsText = string.Empty;
public static string LastWinsReason = string.Empty;
private static SimpleButton showHideButton;
public static void Postfix(EndGameManager __instance)
{
@@ -494,16 +497,19 @@ internal static class SetEverythingUpPatch
}
}
sb.Append("</font>");
var winCounts = Utils.GetWinCountsString();
if (winCounts != string.Empty)
if (Options.CurrentGameMode != CustomGameMode.Standard)
{
sb.Append("\n\n");
sb.Append(winCounts);
var winCounts = Utils.GetWinCountsString();
if (winCounts != string.Empty)
{
sb.Append("\n\n\n");
sb.Append(winCounts);
}
}
sb.Append("</font>");
var RoleSummary = RoleSummaryObject.GetComponent<TextMeshPro>();
RoleSummary.alignment = TextAlignmentOptions.TopLeft;
RoleSummary.color = Color.white;
@@ -514,6 +520,27 @@ internal static class SetEverythingUpPatch
RoleSummaryRectTransform.anchoredPosition = new(Pos.x + 3.5f, Pos.y - 0.1f);
RoleSummary.text = sb.ToString();
var showInitially = Main.ShowResult;
showHideButton = new SimpleButton(
__instance.transform,
"ShowHideResultsButton",
new(-4.5f, 2.6f, -14f),
new(0, 165, 255, 255),
new(0, 255, 255, 255),
() =>
{
var setToActive = !RoleSummary.gameObject.activeSelf;
RoleSummary.gameObject.SetActive(setToActive);
Main.ShowResult = setToActive;
showHideButton.Label.text = GetString(setToActive ? "HideResults" : "ShowResults");
},
GetString(showInitially ? "HideResults" : "ShowResults"))
{
Scale = new(1.5f, 0.5f),
FontSize = 2f,
};
return;
static string GetAdditionalWinnerRoleName(CustomRoles role)
+5 -17
View File
@@ -78,14 +78,8 @@ internal static class OnGameJoinedPatch
if (GameStates.IsOnlineGame && GameStates.IsVanillaServer)
{
try
{
LobbyNotifierForDiscord.NotifyLobbyStatusChanged(LobbyStatus.In_Lobby);
}
catch (Exception e)
{
Utils.ThrowException(e);
}
try { LobbyNotifierForDiscord.NotifyLobbyStatusChanged(LobbyStatus.In_Lobby); }
catch (Exception e) { Utils.ThrowException(e); }
}
}, 5f, "NotifyLobbyCreated");
}
@@ -144,10 +138,7 @@ internal static class OnPlayerJoinedPatch
AmongUsClient.Instance.FinishRpcImmediately(retry);
}
if (client.Character != null && client.Character.Data != null && (client.Character.Data.DefaultOutfit.ColorId < 0 || Palette.PlayerColors.Length <= client.Character.Data.DefaultOutfit.ColorId) && Main.AllPlayerControls.Length >= 18)
{
Disco.ChangeColor(client.Character);
}
if (client.Character != null && client.Character.Data != null && (client.Character.Data.DefaultOutfit.ColorId < 0 || Palette.PlayerColors.Length <= client.Character.Data.DefaultOutfit.ColorId) && Main.AllPlayerControls.Length >= 18) { Disco.ChangeColor(client.Character); }
}
}
catch { }
@@ -328,10 +319,7 @@ internal static class OnPlayerLeftPatch
Utils.CountAlivePlayers(true);
}
catch (NullReferenceException) { }
catch (Exception ex)
{
Logger.Error(ex.ToString(), "OnPlayerLeftPatch.Postfix");
}
catch (Exception ex) { Logger.Error(ex.ToString(), "OnPlayerLeftPatch.Postfix"); }
finally
{
Utils.NotifyRoles(NoCache: true);
@@ -452,7 +440,7 @@ internal static class InnerNetClientSpawnPatch
}, 1.3f, "DisplayLastResult");
}
// if (PlayerControl.LocalPlayer.FriendCode.GetDevUser().IsUp && Options.EnableUpMode.GetBool())
// if (PlayerControl.LocalPlayer.FriendCode.GetDevUser().Up && Options.EnableUpMode.GetBool())
// {
// LateTask.New(() =>
// {
+2
View File
@@ -4109,6 +4109,8 @@
"BackstabberTeam.NK": "a <#ffab1b>Neutral Killer</color>",
"Backstabber.RevealAfterKilling": "Revealed after killing",
"GuessBackstabber": "You cannot guess a revealed Backstabber.",
"HideResults": "Hide Results",
"ShowResults": "Show Results",
"Curser": "Curser",
"CurserInfo": "Make Others' Life Worse",
"CurserInfoLong": "(Neutrals):\\nAs the Curser, when you use your kill button on someone, you can single click on them to reveal their alignment, and double click to give them one of the following effects:<size=80%>\\n- -1 ability use\\n- +1 harmful add-on\\n- permanent low vision\\n- permanent low speed</size>\\nYou win if crewmates lose.",
+6 -2
View File
@@ -108,7 +108,7 @@ public class Main : BasePlugin
public static string FirstDied = string.Empty;
public static string ShieldPlayer = string.Empty;
public static Dictionary<CustomGameMode, Dictionary<string, int>> NumWinsPerGM = [];
public static readonly Dictionary<CustomGameMode, Dictionary<string, int>> NumWinsPerGM = [];
public static HashSet<byte> DiedThisRound = [];
public static List<PlayerControl> LoversPlayers = [];
public static bool IsLoversDead = true;
@@ -120,6 +120,8 @@ public class Main : BasePlugin
public static Dictionary<byte, string> SleuthMsgs = [];
public static int MadmateNum;
public static bool ShowResult = true;
public static Main Instance;
@@ -698,7 +700,6 @@ public class Main : BasePlugin
BanManager.Init();
TemplateManager.Init();
SpamManager.Init();
DevManager.Init();
Cloud.Init();
IRandom.SetInstance(new NetRandomWrapper());
@@ -724,6 +725,9 @@ public class Main : BasePlugin
CustomLogger.ClearLog();
try { DevManager.StartFetchingTags(); }
catch (Exception e) { Utils.ThrowException(e); }
Harmony.PatchAll();
if (!DebugModeManager.AmDebugger)