From a74f7872e9f6d5bd4e0a4076764f20d60aacfb3b Mon Sep 17 00:00:00 2001 From: Ape <155788660+ApeMV@users.noreply.github.com> Date: Sat, 1 Aug 2026 00:10:52 +0200 Subject: [PATCH] 1.9.0 --- AmongUsRevamped.cs | 3 +- Modules/BanManager.cs | 34 ++- Modules/CommandHelper.cs | 8 +- Modules/CustomOptionsHolder.cs | 113 +-------- Modules/CustomRoleManagement.cs | 8 +- Modules/FixedUpdate.cs | 27 +- Modules/OptionItem/OptionItem.cs | 1 - Modules/Translator.cs | 8 +- Modules/Utils.cs | 6 +- Patches/ChatPatches.cs | 228 ++++++++++------- Patches/ClientOptionsPatch.cs | 2 + Patches/EndGamePatches.cs | 25 +- Patches/ExilePatch.cs | 8 - Patches/GameSettingMenuPatch.cs | 3 - Patches/GameStartManagerPatch.cs | 1 + Patches/IntroPatch.cs | 4 - Patches/JoinAndLeavePatches.cs | 4 +- Patches/MeetingPatches.cs | 10 +- Patches/NumberOptionsPatch.cs | 12 + Patches/OnGameStartedPatch.cs | 57 +++-- Patches/PlayerControlPatches.cs | 41 +--- Patches/SabotagePatches.cs | 8 +- Patches/TaskAssignPatch.cs | 6 - README.md | 22 +- Resources/Language/English.json | 49 ++-- Resources/Language/Italian.json | 31 +-- Resources/Language/Japanese.json | 287 ++++++++++++++++++++++ Resources/Language/Russian.json | 287 ++++++++++++++++++++++ Resources/Language/SimplifiedChinese.json | 31 +-- Resources/Language/Spanish.json | 26 +- build.cake | 28 --- 31 files changed, 861 insertions(+), 517 deletions(-) create mode 100644 Resources/Language/Japanese.json create mode 100644 Resources/Language/Russian.json delete mode 100644 build.cake diff --git a/AmongUsRevamped.cs b/AmongUsRevamped.cs index a5fb14c..3865cae 100644 --- a/AmongUsRevamped.cs +++ b/AmongUsRevamped.cs @@ -44,7 +44,7 @@ public partial class Main : BasePlugin public static bool HasArgumentException; public static string CredentialsText; - public const string ModVersion = "v1.8.4"; + public const string ModVersion = "v1.9.0"; public static float GameTimer; @@ -110,7 +110,6 @@ public partial class Main : BasePlugin { public static void Prefix(ModManager __instance) { - __instance.ShowModStamp(); LateTask.Update(Time.deltaTime); } } diff --git a/Modules/BanManager.cs b/Modules/BanManager.cs index 2dab869..76d326c 100644 --- a/Modules/BanManager.cs +++ b/Modules/BanManager.cs @@ -27,6 +27,7 @@ public static class BanManager public static string ModeratorListPath = $"{DataPath}/AUR-DATA/Moderator.txt"; public static string AdminListPath = $"{DataPath}/AUR-DATA/Admin.txt"; private static string TemplatePath = $"{DataPath}/AUR-DATA/Templates.txt"; + private static string StartWordsPath = $"{DataPath}/AUR-DATA/Startwords.txt"; public static Dictionary Templates = new(); public static List TempBanWhiteList = []; public static void Init() @@ -42,6 +43,7 @@ public static class BanManager CheckFile(ModeratorListPath, Translator.Get("moderatorWelcome"), "Moderator.txt"); CheckFile(AdminListPath, Translator.Get("adminWelcome"), "Admin.txt"); CheckFile(TemplatePath, Translator.Get("templateWelcome"), "Templates.txt"); + CheckFile(StartWordsPath, Translator.Get("startWordsWelcome"), "StartWords.txt"); LoadTemplates(); @@ -194,6 +196,33 @@ public static class BanManager else return false; } + public static bool IsStartWord(PlayerControl player, string input) + { + if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0) return false; + + int clientId = player.Data.ClientId; + var startWords = File.ReadAllLines(BanWordPath).Where(x => !x.StartsWith("#")); + + if ((Options.AutoKickStartStrength.GetBool() && startWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase))) || (!Options.AutoKickStartStrength.GetBool() && startWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Equals(code, StringComparison.OrdinalIgnoreCase)))) + { + if (!Main.SayStartTimes.ContainsKey(clientId)) + { + Main.SayStartTimes.Add(clientId, 0); + } + + Main.SayStartTimes[clientId]++; + + if (Main.SayStartTimes[clientId] >= Options.AutoKickStartTimes.GetInt()) + { + AmongUsClient.Instance.KickPlayer(clientId, false); + Logger.Info(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()), "StartWordKick"); + Logger.SendInGame(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt())); + } + return true; + } + else return false; + } + [HarmonyPatch(typeof(BanMenu), nameof(BanMenu.Select))] class BanMenuSelectPatch { @@ -249,7 +278,8 @@ public static class BanManager { Dictionary variables = new() { - { "ModVersion", Main.ModVersion } + { "ModVersion", Main.ModVersion }, + { "\\n", Environment.NewLine } }; foreach (var kvp in variables) @@ -257,6 +287,8 @@ public static class BanManager text = text.Replace($"{{{kvp.Key}}}", kvp.Value); } + text = text.Replace("\\n", Environment.NewLine); + return text; } } diff --git a/Modules/CommandHelper.cs b/Modules/CommandHelper.cs index f73b521..70267f1 100644 --- a/Modules/CommandHelper.cs +++ b/Modules/CommandHelper.cs @@ -45,7 +45,7 @@ internal static class CommandHelper new Cmd { Name = new[] { "/s" }, Prompt = "/s", Description = Translator.Get("sDesc"), HasVariable = false }, new Cmd { Name = new[] { "/start" }, Prompt = "/start", Description = Translator.Get("sDesc"), HasVariable = false }, - new Cmd { Name = new[] { "/r" }, Prompt = "/r {role}", Description = Translator.Get("rDesc"), HasVariable = true }, + new Cmd { Name = new[] { "/r" }, Prompt = "/r", Description = Translator.Get("rDesc"), HasVariable = false }, new Cmd { Name = new[] { "/roles" }, Prompt = "/roles", Description = Translator.Get("rolesDesc"), HasVariable = false }, new Cmd { Name = new[] { "/kick" }, Prompt = "/kick {name}", Description = Translator.Get("kickDesc"), HasVariable = true }, @@ -72,7 +72,11 @@ internal static class CommandHelper new Cmd { Name = new[] { "/lastgame" }, Prompt = "/lastgame", Description = Translator.Get("lastgameDesc"), HasVariable = false }, - new Cmd { Name = new[] { "/t" }, Prompt = "/t {template}", Description = Translator.Get("templateDesc"), HasVariable = true } + new Cmd { Name = new[] { "/t" }, Prompt = "/t {template}", Description = Translator.Get("templateDesc"), HasVariable = true }, + + new Cmd { Name = new[] { "/seeker" }, Prompt = "/seeker {name}", Description = Translator.Get("seekerDesc"), HasVariable = true }, + new Cmd { Name = new[] { "/seekers" }, Prompt = "/seekers", Description = Translator.Get("seekersDesc"), HasVariable = false }, + new Cmd { Name = new[] { "/clearseeker" }, Prompt = "/clearseeker", Description = Translator.Get("clearSeekerDesc"), HasVariable = false } }; [HarmonyPostfix] diff --git a/Modules/CustomOptionsHolder.cs b/Modules/CustomOptionsHolder.cs index dc642b5..42a86e7 100644 --- a/Modules/CustomOptionsHolder.cs +++ b/Modules/CustomOptionsHolder.cs @@ -48,7 +48,7 @@ namespace AmongUsRevamped public static readonly string[] gameModes = { - "Standard", "0 Kill Cooldown", "Shift And Seek", "Speedrun" + "Standard", "Shift And Seek", "Speedrun" }; public static readonly string[] accessLevels = @@ -267,9 +267,6 @@ namespace AmongUsRevamped public static OptionItem TabGroupHNS; public static OptionItem NumSeekers; - public static OptionItem TabGroup0Kcd; - public static OptionItem NoKcdSettingsOverride; - public static OptionItem TabGroupSNS; public static OptionItem SNSSettingsOverride; public static OptionItem SNSChatInGame; @@ -290,52 +287,6 @@ namespace AmongUsRevamped public static OptionItem GameAutoEndsAfter; public static OptionItem EngineerMode; - // Abilities - public static OptionItem TabGroupCrewmate; - - public static OptionItem OverrideCrewmate; - public static OptionItem CrewmateAbility; - - public static OptionItem OverrideScientist; - public static OptionItem ScientistAbility; - - public static OptionItem OverrideEngineer; - public static OptionItem EngineerAbility; - - public static OptionItem OverrideNoisemaker; - public static OptionItem NoisemakerAbility; - - public static OptionItem OverrideTracker; - public static OptionItem TrackerAbility; - - public static OptionItem OverrideDetective; - public static OptionItem DetectiveAbility; - - public static OptionItem TabGroupCrewmateAbilities; - public static OptionItem ExtraVotesCrewmate; - public static OptionItem ExtraVotesPerTask; - public static OptionItem SpeedrunnerShortTasks; - public static OptionItem SpeedrunnerLongTasks; - - public static OptionItem TabGroupImpostor; - - public static OptionItem OverrideImpostor; - public static OptionItem ImpostorAbility; - - public static OptionItem OverrideShapeshifter; - public static OptionItem ShapeshifterAbility; - - public static OptionItem OverridePhantom; - public static OptionItem PhantomAbility; - - public static OptionItem OverrideViper; - public static OptionItem ViperAbility; - - public static OptionItem TabGroupImpostorAbilities; - public static OptionItem ExtraVotesImpostor; - public static OptionItem ExtraVotesPerKill; - public static OptionItem KillsNeededForJuggernaut; - public static bool IsLoaded = false; public static void Load() @@ -409,64 +360,6 @@ namespace AmongUsRevamped SlashEndMeetingCmd = StringOptionItem.Create(60407, Translator.Get("slashEndMeetingCmd"), accessLevels, 3, TabGroup.SystemSettings, false); SlashStartAndEndGameCmd = StringOptionItem.Create(60408, Translator.Get("slashStartAndEndGameCmd"), accessLevels, 3, TabGroup.SystemSettings, false); - // Ability settings - TabGroupCrewmate = TextOptionItem.Create(100000, Translator.Get("tabGroupCrewmate"), TabGroup.AbilitySettings) - .SetColor(CL.Hex("#8cffff")); - - CrewmateAbility = StringOptionItem.Create(100001, Translator.Get("crewmateAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#8cffff")); - - ScientistAbility = StringOptionItem.Create(100101, Translator.Get("scientistAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#8cffff")); - - EngineerAbility = StringOptionItem.Create(100201, Translator.Get("engineerAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#8cffff")); - - NoisemakerAbility = StringOptionItem.Create(100301, Translator.Get("noisemakerAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#8cffff")); - - TrackerAbility = StringOptionItem.Create(100401, Translator.Get("trackerAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#8cffff")); - - DetectiveAbility = StringOptionItem.Create(100501, Translator.Get("detectiveAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#8cffff")); - - TabGroupCrewmateAbilities = TextOptionItem.Create(101000, Translator.Get("tabGroupCrewmateAbilities"), TabGroup.AbilitySettings) - .SetColor(CL.Hex("#8cffff")); - ExtraVotesCrewmate = IntegerOptionItem.Create(101001, Translator.Get("extraVotesCrewmate"), new(1, 15, 1), 1, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - ExtraVotesPerTask = FloatOptionItem.Create(101002, Translator.Get("extraVotesPerTask"), new(0.25f, 3f, 0.25f), 0.5f, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - SpeedrunnerShortTasks = IntegerOptionItem.Create(101003, Translator.Get("speedrunnerShortTasks"), new(0, 15, 1), 4, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - SpeedrunnerLongTasks = IntegerOptionItem.Create(101004, Translator.Get("speedrunnerLongTasks"), new(0, 15, 1), 3, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - - TabGroupImpostor = TextOptionItem.Create(102000, Translator.Get("tabGroupImpostor"), TabGroup.AbilitySettings) - .SetColor(CL.Hex("#ff1919")); - - ImpostorAbility = StringOptionItem.Create(100002, Translator.Get("impostorAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#ff1919")); - - ShapeshifterAbility = StringOptionItem.Create(102101, Translator.Get("shapeshifterAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#ff1919")); - - PhantomAbility = StringOptionItem.Create(102201, Translator.Get("phantomAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#ff1919")); - - - ViperAbility = StringOptionItem.Create(102301, Translator.Get("viperAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false) - .SetColor(CL.Hex("#ff1919")); - - TabGroupImpostorAbilities = TextOptionItem.Create(103000, Translator.Get("tabGroupImpostorAbilities"), TabGroup.AbilitySettings) - .SetColor(CL.Hex("#ff1919")); - ExtraVotesImpostor = IntegerOptionItem.Create(103001, Translator.Get("extraVotesImpostor"), new(1, 15, 1), 1, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - ExtraVotesPerKill = FloatOptionItem.Create(103002, Translator.Get("extraVotesPerKill"), new(0.25f, 3f, 0.25f), 0.5f, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - KillsNeededForJuggernaut = IntegerOptionItem.Create(103003, Translator.Get("killsNeededForJuggernaut"), new(3, 15, 1), 7, TabGroup.AbilitySettings, false) - .SetValueFormat(OptionFormat.Level); - // Gamemode Settings TabGroupHNS = TextOptionItem.Create(70000, Translator.Get("tabGroupHNS"), TabGroup.GamemodeSettings) @@ -474,10 +367,6 @@ namespace AmongUsRevamped NumSeekers = IntegerOptionItem.Create(70001, Translator.Get("numSeekers"), new(1, 15, 1), 1, TabGroup.GamemodeSettings, false) .SetValueFormat(OptionFormat.Level); - TabGroup0Kcd = TextOptionItem.Create(70025, Translator.Get("tabGroup0Kcd"), TabGroup.GamemodeSettings) - .SetColor(Color.red); - NoKcdSettingsOverride = BooleanOptionItem.Create(70026, Translator.Get("noKcdSettingsOverride"), true, TabGroup.GamemodeSettings, false); - TabGroupSNS = TextOptionItem.Create(70050, Translator.Get("tabGroupSNS"), TabGroup.GamemodeSettings) .SetColor(Color.yellow); SNSSettingsOverride = BooleanOptionItem.Create(70051, Translator.Get("snsSettingsOverride"), true, TabGroup.GamemodeSettings, false); diff --git a/Modules/CustomRoleManagement.cs b/Modules/CustomRoleManagement.cs index 9e7053c..2471b49 100644 --- a/Modules/CustomRoleManagement.cs +++ b/Modules/CustomRoleManagement.cs @@ -7,9 +7,11 @@ using UnityEngine; namespace AmongUsRevamped; // It was a fun ride, but this won't last. // Edit: WE ARE SO BACK +// Edit 2: Hello old friend. It's time to go again. public static class AbilityManagement { + /* public static bool IsMayor(PlayerControl player) { if (player.Data.RoleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 0 || @@ -179,7 +181,7 @@ public static class AbilityManagement }, 6.6f, "SendRoleMessage"); } } -/* + public static class CustomRoleManagement { public static Dictionary PlayerRoles = new Dictionary(); @@ -380,5 +382,5 @@ public static class CustomRoleManagement } return string.Join("\n", lines); } -} -*/ \ No newline at end of file + */ +} \ No newline at end of file diff --git a/Modules/FixedUpdate.cs b/Modules/FixedUpdate.cs index 12bfe6d..88b5e5f 100644 --- a/Modules/FixedUpdate.cs +++ b/Modules/FixedUpdate.cs @@ -72,18 +72,10 @@ class FixedUpdateInGamePatch switch (gamemode) { - case 1: // 0Kc - if (Main.NormalOptions.KillCooldown != 0.01f) - Main.NormalOptions.KillCooldown = 0.01f; - - if (Options.NoKcdSettingsOverride.GetBool() && settingsLabel == null) - { - Main.NormalOptions.EmergencyCooldown = 0; - Main.NormalOptions.TaskBarMode = 0; - } + case 0: break; - case 2: // SnS + case 1: // SnS if (Main.NormalOptions.KillCooldown != 2.5f) Main.NormalOptions.KillCooldown = 2.5f; @@ -91,19 +83,14 @@ class FixedUpdateInGamePatch Main.NormalOptions.TaskBarMode = 0; break; - case 3: // Speedrun - break; - - case 0: // Reset - if (Main.NormalOptions.KillCooldown <= 0.01f) - Main.NormalOptions.KillCooldown = 25f; + case 2: // Speedrun break; } if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance) { - // 2 = Shift and Seek - if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool()) + // 1 = Shift and Seek + if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool()) { if (Main.GameTimer > Options.CrewAutoWinsGameAfter.GetInt()) { @@ -114,8 +101,8 @@ class FixedUpdateInGamePatch NormalGameEndChecker.CheckWinnerText("SnSTimer"); } } - // 3 = Speedrun - if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek && Options.GameAutoEndsAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool()) + // 2 = Speedrun + if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Options.GameAutoEndsAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool()) { if (Main.GameTimer > Options.GameAutoEndsAfter.GetInt()) { diff --git a/Modules/OptionItem/OptionItem.cs b/Modules/OptionItem/OptionItem.cs index 7294cd4..fdf5172 100644 --- a/Modules/OptionItem/OptionItem.cs +++ b/Modules/OptionItem/OptionItem.cs @@ -215,7 +215,6 @@ namespace AmongUsRevamped { SystemSettings, //CustomRoleSettings, - AbilitySettings, ModSettings, GamemodeSettings, diff --git a/Modules/Translator.cs b/Modules/Translator.cs index c03fdd6..e525a33 100644 --- a/Modules/Translator.cs +++ b/Modules/Translator.cs @@ -13,7 +13,9 @@ public static class Translator English, Italian, SimplifiedChinese, - Spanish + Spanish, + Japanese, + Russian } private static readonly Dictionary> _languages = new(); @@ -29,12 +31,12 @@ public static class Translator try { - string path = $"{BanManager.DataPath}/Language/YourLanguage.txt"; + string path = Path.Combine(LanguageFolder, "YourLanguage.txt"); if (!File.Exists(path)) { Logger.Warn($" Creating a new language file", "Translator"); - File.WriteAllText(path, "# In this file you can set your Among Us Revamped language.\n# To set the language, replace the 'English' text below with the language you want to select.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian\n\nEnglish"); + File.WriteAllText(path, "# In this file you can set your Among Us Revamped language.\n# To set the language, replace the 'English' text below with the language you want to select.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian, Japanese, Russian\n\nEnglish"); } string l = File.ReadAllLines(path).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x) && !x.StartsWith("#"))?.Trim() ?? "English"; diff --git a/Modules/Utils.cs b/Modules/Utils.cs index 6133472..1bb582b 100644 --- a/Modules/Utils.cs +++ b/Modules/Utils.cs @@ -73,8 +73,6 @@ public static class Utils { case TabGroup.SystemSettings: return Translator.Get("systemSettings"); - case TabGroup.AbilitySettings: - return Translator.Get("abilitySettings"); case TabGroup.ModSettings: return Translator.Get("gameplaySettings"); case TabGroup.GamemodeSettings: @@ -212,9 +210,7 @@ public static class Utils NormalGameEndChecker.ImpCheckComplete = false; CreateOptionsPickerPatch.SetDleks2 = false; CanCallMeetings = true; - AbilityManagement.HandlingRoleMessages = false; PlayerControlSetRolePatch.FirstAssign = true; - PlayerControlSetRolePatch.Jesters.Clear(); PlayerControlCompleteTaskPatch.playerTasksCompleted.Clear(); PlayerControlCompleteTaskPatch.tasksPerPlayer.Clear(); @@ -225,8 +221,8 @@ public static class Utils OnPlayerJoinedPatch.JoinNum = 0; PlayerControlSetRolePatch.Seekers.Clear(); - PlayerControlSetRolePatch.Jesters.Clear(); PlayerControlSetRolePatch.FirstAssign = true; + PlayerControlSetRolePatch.manualSeekers.Clear(); OnGameStartPatch.ScheduleExile = false; CoShowIntroPatch.IntroInitiated = false; diff --git a/Patches/ChatPatches.cs b/Patches/ChatPatches.cs index 637003c..facfa88 100644 --- a/Patches/ChatPatches.cs +++ b/Patches/ChatPatches.cs @@ -1,4 +1,5 @@ -using Hazel; +using AmongUs.GameOptions; +using Hazel; using InnerNet; using System; using System.IO; @@ -323,45 +324,88 @@ internal static class SendChatPatch return false; } - if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat || AbilityManagement.HandlingRoleMessages) return false; + if (text.StartsWith("/seeker ")) + { + if (!Utils.IsLobby || !Utils.isHideNSeek) + { + __instance.freeChatField.textArea.Clear(); + __instance.freeChatField.textArea.SetText(string.Empty); + return false; + } + + string argSeeker = text.Substring(8).Trim(); + bool found = false; + + foreach (PlayerControl p in PlayerControl.AllPlayerControls) + { + if (p.Data == null) continue; + + if (p.Data.PlayerName.Equals(argSeeker, StringComparison.OrdinalIgnoreCase)) + { + found = true; + PlayerControlSetRolePatch.manualSeekers.Add(p.PlayerId); + break; + } + } + + if (found) + { + List names = new(); + + foreach (PlayerControl pl in PlayerControl.AllPlayerControls) + { + if (PlayerControlSetRolePatch.manualSeekers.Contains(pl.PlayerId)) names.Add(pl.Data.PlayerName); + } + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", names)); + } + + if (!found) + { + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Player '{argSeeker}' not found."); + } + + __instance.freeChatField.textArea.Clear(); + __instance.freeChatField.textArea.SetText(string.Empty); + return false; + } + + if (text == "/clearseeker") + { + PlayerControlSetRolePatch.manualSeekers.Clear(); + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("clearedSeekers")); + + __instance.freeChatField.textArea.Clear(); + __instance.freeChatField.textArea.SetText(string.Empty); + return false; + } + + if (text == "/seekers") + { + List n = new(); + + foreach (PlayerControl pc in PlayerControl.AllPlayerControls) + { + if (PlayerControlSetRolePatch.manualSeekers.Contains(pc.PlayerId)) n.Add(pc.Data.PlayerName); + } + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", n)); + + __instance.freeChatField.textArea.Clear(); + __instance.freeChatField.textArea.SetText(string.Empty); + return false; + } + + if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat) return false; if (text == "/l" || text == "/lastgame") { if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return false; Utils.ChatCommand(__instance, $"{NormalGameEndChecker.LastWinReason}", "", false); return false; - } - if (text == "/r jester"){ - Utils.ChatCommand(__instance, "Jester:\n\nThe Jester is a Crewmate who can also win alone by getting voted.", "", false); - return false;} - - if (text == "/r mayor"){ - Utils.ChatCommand(__instance, $"Mayor:\n\nThe Mayor is a Crewmate with {Options.ExtraVotesCrewmate.GetInt()} additional vote(s). Use them wisely.", "", false); - return false;} - - if (text == "/r tyrant"){ - Utils.ChatCommand(__instance, $"Tyrant:\n\nThe Tyrant is an Impostor with {Options.ExtraVotesImpostor.GetInt()} additional vote(s). Use them wisely.", "", false); - return false;} - - if (text == "/r workhorse"){ - Utils.ChatCommand(__instance, $"Workhorse:\n\nThe Workhorse gains {Options.ExtraVotesPerTask.GetInt()} additional vote(s) per completed task. Votes are rounded down.", "", false); - return false;} - - if (text == "/r stealer"){ - Utils.ChatCommand(__instance, $"Stealer:\n\nThe Stealer gains {Options.ExtraVotesPerKill.GetInt()} additional vote(s) per killed player. Votes are rounded down.", "", false); - return false;} - - if (text == "/r juggernaut"){ - Utils.ChatCommand(__instance, $"Juggernaut:\n\nThe Impostors instantly win if the Juggernaut gains {Options.KillsNeededForJuggernaut.GetInt()} kills.", "", false); - return false;} - - if (text == "/r tasker"){ - Utils.ChatCommand(__instance, "Tasker:\n\nThe Crewmates win if the Tasker completes tasks and is alive. The Tasker has more tasks.", "", false); - return false;} + } if (text == "/aur" || text == "/socials") { - Utils.ChatCommand(__instance, "AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c o r d . g g /\n83Zhzhyhya", "", false); + Utils.ChatCommand(__instance, "AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c о r d . g g /\n83Zhzhyhya", "", false); return false; } @@ -379,7 +423,7 @@ internal static class SendChatPatch } else { - Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide", true); + Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true); } return false; } @@ -395,25 +439,24 @@ internal static class SendChatPatch switch (Options.Gamemode.GetValue()) { case 0: - AbilityManagement.SendRoleList(__instance, AbilityManagement.RoleList(), false); + if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f) + { + Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false); + } break; case 1: - Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false); - break; - - case 2: if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0) { Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crewmates win by doing tasks or surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone\n{Options.MisfiresToSuicide.GetInt()} wrong kill(s) = suicide", true); } else { - Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide", true); + Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true); } break; - case 3: + case 2: Utils.ChatCommand(__instance, $"Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s", "", false); break; @@ -541,38 +584,54 @@ public static class RPCHandlerPatch string text = msgtext.ToLower(); Logger.Info($" {__instance.Data.PlayerName}: {msgtext}", "SendChat"); - - string[] keywords = Options.AutoKickStartStrength.GetBool() ? new[] { "start", "begin", "commence" } : new[] { "start", "begin", "commence", "s t a r t", "go" }; - - bool c = false; - - if (Options.AutoKickStartStrength.GetBool()) - { - c = keywords.Any(k => text.Contains(k)); - } - else - { - c = keywords.Any(k => text == k); - } - if (c && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1 && Options.AutoKickStart.GetBool() && !Utils.InGame) + BanManager.IsStartWord(__instance, text); + BanManager.IsWordBanned(__instance, text); + + if (text.StartsWith("/seeker ") && Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashEndMeetingCmd.GetValue()) { - int clientId = __instance.Data.ClientId; - - if (!Main.SayStartTimes.ContainsKey(clientId)) - Main.SayStartTimes.Add(clientId, 0); - Main.SayStartTimes[clientId]++; - - if (Main.SayStartTimes[clientId] >= Options.AutoKickStartTimes.GetInt()) + if (!Utils.IsLobby || !Utils.isHideNSeek) { - bool sBan = Options.AutoKickStartAsBan.GetBool(); - AmongUsClient.Instance.KickPlayer(clientId, sBan); - Logger.Info($" {__instance.Data.PlayerName} was {(sBan ? "banned" : "kicked")} for saying start", "KickAnnoyingKids"); - Logger.SendInGame($" {__instance.Data.PlayerName} was {(sBan ? "banned" : "kicked")} for saying start"); + return; + } + + string argSeeker = text.Substring(8).Trim(); + bool found = false; + + foreach (PlayerControl p in PlayerControl.AllPlayerControls) + { + if (p.Data == null) continue; + + if (p.Data.PlayerName.Equals(argSeeker, StringComparison.OrdinalIgnoreCase)) + { + found = true; + PlayerControlSetRolePatch.manualSeekers.Add(p.PlayerId); + break; + } + } + + if (found) + { + List names = new(); + + foreach (PlayerControl pl in PlayerControl.AllPlayerControls) + { + if (PlayerControlSetRolePatch.manualSeekers.Contains(pl.PlayerId)) names.Add(pl.Data.PlayerName); + } + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", names)); + } + + if (!found) + { + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Player '{argSeeker}' not found."); } } - BanManager.IsWordBanned(__instance, text); + if (text == "/clearseeker" && Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashEndMeetingCmd.GetValue()) + { + PlayerControlSetRolePatch.manualSeekers.Clear(); + HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("clearedSeekers")); + } bool col1 = text.StartsWith("/col "); bool col2 = text.StartsWith("/color "); @@ -638,7 +697,7 @@ public static class RPCHandlerPatch } } - if (AbilityManagement.HandlingRoleMessages || OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return; + if (OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return; if (text == "/eg" || text == "/endgame") { @@ -691,7 +750,8 @@ public static class RPCHandlerPatch } else { - Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide", true); + + Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", SendChatPatch.ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true); } } @@ -707,25 +767,24 @@ public static class RPCHandlerPatch switch (Options.Gamemode.GetValue()) { case 0: - AbilityManagement.SendRoleList(DestroyableSingleton.Instance.Chat, AbilityManagement.RoleList(), true); + if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f) + { + Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false); + } break; case 1: - Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false); - break; - - case 2: if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0) { Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crewmates win by doing tasks or surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone\n{Options.MisfiresToSuicide.GetInt()} wrong kill(s) = suicide", true); } else { - Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide", true); + Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", SendChatPatch.ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true); } break; - case 3: + case 2: Utils.ModeratorChatCommand($"Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s", "", false); break; @@ -733,27 +792,6 @@ public static class RPCHandlerPatch } if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return; - - if (text == "/r jester"){ - Utils.ModeratorChatCommand("Jester:\n\nThe Jester is a Crewmate who can also win alone by getting voted.", "", false);} - - if (text == "/r mayor"){ - Utils.ModeratorChatCommand($"Mayor:\n\nThe Mayor is a Crewmate with {Options.ExtraVotesCrewmate.GetInt()} additional vote(s). Use them wisely.", "", false);} - - if (text == "/r tyrant"){ - Utils.ModeratorChatCommand($"Tyrant:\n\nThe Tyrant is an Impostor with {Options.ExtraVotesImpostor.GetInt()} additional vote(s). Use them wisely.", "", false);} - - if (text == "/r workhorse"){ - Utils.ModeratorChatCommand($"Workhorse:\n\nThe Workhorse gains {Options.ExtraVotesPerTask.GetInt()} additional vote(s) per completed task. Votes are rounded down.", "", false);} - - if (text == "/r stealer"){ - Utils.ModeratorChatCommand($"Stealer:\n\nThe Stealer gains {Options.ExtraVotesPerKill.GetInt()} additional vote(s) per killed player. Votes are rounded down.", "", false);} - - if (text == "/r juggernaut"){ - Utils.ModeratorChatCommand($"Juggernaut:\n\nThe Impostors instantly win if the Juggernaut gains {Options.KillsNeededForJuggernaut.GetInt()} kills.", "", false);} - - if (text == "/r tasker"){ - Utils.ModeratorChatCommand("Tasker:\n\nThe Crewmates win if the Tasker completes tasks and is alive. The Tasker has more tasks.", "", false);} if (text.StartsWith("/t ")) { diff --git a/Patches/ClientOptionsPatch.cs b/Patches/ClientOptionsPatch.cs index 8bb7240..3c9c0b4 100644 --- a/Patches/ClientOptionsPatch.cs +++ b/Patches/ClientOptionsPatch.cs @@ -77,11 +77,13 @@ namespace AmongUsRevamped } } + // MY MODSTAMP IS FASTER THAN YOURS!!11!!!1 [HarmonyPatch(typeof(SplashManager), nameof(SplashManager.Update))] internal class SplashLogoAnimatorPatch { public static void Prefix(SplashManager __instance) { + ModManager.Instance.ShowModStamp(); __instance.sceneChanger.AllowFinishLoadingScene(); __instance.startedSceneLoad = true; } diff --git a/Patches/EndGamePatches.cs b/Patches/EndGamePatches.cs index 591ed0f..b64f15f 100644 --- a/Patches/EndGamePatches.cs +++ b/Patches/EndGamePatches.cs @@ -29,7 +29,7 @@ class NormalGameEndChecker public static bool Prefix() { - if (Options.NoGameEnd.GetBool() || Options.Gamemode.GetValue() == 3 || Utils.HandlingGameEnd) return false; + if (Options.NoGameEnd.GetBool() || Options.Gamemode.GetValue() == 2 || Utils.HandlingGameEnd) return false; var allPlayers = PlayerControl.AllPlayerControls.ToArray(); @@ -50,27 +50,6 @@ class NormalGameEndChecker var impostorList = string.Join(", ", imps.Select(p => p.Data.PlayerName)); if (!canUpdateWinnerText) return; - - if (Winner == "Jester") - { - LastWinReason = "Jester wins! (voted)\n\nImpostors: " + impostorList; - canUpdateWinnerText = false; - return; - } - - if (Winner == "Juggernaut") - { - LastWinReason = $"Impostors win! (Juggernaut killed {Options.KillsNeededForJuggernaut.GetInt()} players)\n\nImpostors: " + impostorList; - canUpdateWinnerText = false; - return; - } - - if (Winner == "Speedrunner") - { - LastWinReason = "Crewmates win! (Tasker finished tasks)\n\nImpostors: " + impostorList; - canUpdateWinnerText = false; - return; - } if (Winner == "SnSTimer") { @@ -101,7 +80,7 @@ class NormalGameEndChecker LastWinReason = $"Crewmates Win! ({Options.TaskPercentNeededToWin.GetInt()}% tasks completed)\n\nImpostors: " + impostorList; canUpdateWinnerText = false; } - else if (Options.Gamemode.GetValue() < 2 || Winner == "ImpostorSabotage") + else if (Options.Gamemode.GetValue() < 1 || Winner == "ImpostorSabotage") { LastWinReason = "Impostors Win! (Sabotage)\n\n Impostors: " + impostorList; } diff --git a/Patches/ExilePatch.cs b/Patches/ExilePatch.cs index 6c7b706..21c6c00 100644 --- a/Patches/ExilePatch.cs +++ b/Patches/ExilePatch.cs @@ -48,14 +48,6 @@ class ExileControllerWrapUpPatch } Logger.Info($" {ejectedPlayer.PlayerName} was ejected", "ExileController"); - - if (PlayerControlSetRolePatch.Jesters.Contains(exiledPlayer)) - { - Logger.Info($"Jester {ejectedPlayer.PlayerName} wins", "ExilePatch"); - Utils.CustomWinnerEndGame(exiledPlayer, 1); - NormalGameEndChecker.CheckWinnerText("Jester"); - return; - } } [HarmonyPatch] diff --git a/Patches/GameSettingMenuPatch.cs b/Patches/GameSettingMenuPatch.cs index 811ca08..abe9db4 100644 --- a/Patches/GameSettingMenuPatch.cs +++ b/Patches/GameSettingMenuPatch.cs @@ -115,9 +115,6 @@ namespace AmongUsRevamped case TabGroup.SystemSettings: __instance.MenuDescriptionText.text = Translator.Get("systemSettingsDesc"); break; - case TabGroup.AbilitySettings: - __instance.MenuDescriptionText.text = Translator.Get("abilitySettingsDesc"); - break; case TabGroup.ModSettings: __instance.MenuDescriptionText.text = Translator.Get("gameplaySettingsDesc"); break; diff --git a/Patches/GameStartManagerPatch.cs b/Patches/GameStartManagerPatch.cs index 6b4dedf..a490718 100644 --- a/Patches/GameStartManagerPatch.cs +++ b/Patches/GameStartManagerPatch.cs @@ -119,6 +119,7 @@ public class GameStartManagerBeginGamePatch public static void Prefix(GameStartManager __instance) { if (Options.NoGameEnd.GetBool()) Logger.SendInGame(Translator.Get("noGameEndWarning")); + if (Main.GM.Value) Logger.SendInGame(Translator.Get("gameMasterWarningTwo")); } } \ No newline at end of file diff --git a/Patches/IntroPatch.cs b/Patches/IntroPatch.cs index 2cdeb72..84de296 100644 --- a/Patches/IntroPatch.cs +++ b/Patches/IntroPatch.cs @@ -17,8 +17,6 @@ internal static class CoShowIntroPatch if (!AmongUsClient.Instance.AmHost) return; IntroInitiated = true; - - AbilityManagement.SendRoleMessages(); foreach (var p in PlayerControl.AllPlayerControls) { @@ -32,8 +30,6 @@ internal static class CoShowIntroPatch Logger.Info($" {p.Data.PlayerName} -> {p.Data.RoleType}", "RoleInfo"); } - if (!Utils.isHideNSeek && Options.Gamemode.GetValue() < 2) Logger.Info($" {AbilityManagement.RoleList()}", "AbilityInfo"); - if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.isHideNSeek) { Utils.CanCallMeetings = false; diff --git a/Patches/JoinAndLeavePatches.cs b/Patches/JoinAndLeavePatches.cs index ecfdfd4..cb870ba 100644 --- a/Patches/JoinAndLeavePatches.cs +++ b/Patches/JoinAndLeavePatches.cs @@ -139,13 +139,13 @@ public static class SetLevelPatch if (level == 0 && Options.DontKickLevelOnes.GetBool()) return; if (HandledLevelKicks.Contains(__instance)) return; - if (!Options.TempBanLowLevelPlayer.GetBool()) + if (!Options.TempBanLowLevelPlayer.GetBool() && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1) { AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false); Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer"); Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}"); } - else + else if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1) { AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true); Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer"); diff --git a/Patches/MeetingPatches.cs b/Patches/MeetingPatches.cs index 5befd93..8dff034 100644 --- a/Patches/MeetingPatches.cs +++ b/Patches/MeetingPatches.cs @@ -2,6 +2,8 @@ namespace AmongUsRevamped; +// Old patch for roles and abilities. Might use later. +/* [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.CheckForEndVoting))] public static class CheckForEndVotingPatch { @@ -36,12 +38,7 @@ public static class CheckForEndVotingPatch int extraVotesPerTask = (int)(Options.ExtraVotesPerTask.GetFloat()*PlayerControlCompleteTaskPatch.playerTasksCompleted[voterId]+0.1f); int extraVotesPerKill = (int)(Options.ExtraVotesPerKill.GetFloat()*MurderPlayerPatch.killCount[voterId]+0.1f); - if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0; - - if (AbilityManagement.IsMayor(pc)) extraVotes += extraVotesCrewmate; - if (AbilityManagement.IsTyrant(pc)) extraVotes += extraVotesImpostor; - if (AbilityManagement.IsWorkhorse(pc)) extraVotes += extraVotesPerTask; - if (AbilityManagement.IsStealer(pc)) extraVotes += extraVotesPerKill; + if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0; for (int i = 0; i < extraVotes; i++) { @@ -59,6 +56,7 @@ public static class CheckForEndVotingPatch return false; } } +*/ [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Start))] class MeetingHudStartPatch diff --git a/Patches/NumberOptionsPatch.cs b/Patches/NumberOptionsPatch.cs index 5c6e80a..edb40f6 100644 --- a/Patches/NumberOptionsPatch.cs +++ b/Patches/NumberOptionsPatch.cs @@ -17,6 +17,17 @@ public static class NumberOption_Increase if (Utils.IsLobby) { + if (__instance.Title == StringNames.GameKillCooldown) + { + if (__instance.Value == 0.01f) + { + __instance.Value = 0.5f; + __instance.UpdateValue(); + __instance.OnValueChanged.Invoke(__instance); + return false; + } + } + if (__instance.Value <= __instance.ValidRange.min) { return true; @@ -103,6 +114,7 @@ public static class NumberOption_Initialize case StringNames.GameKillCooldown: __instance.Increment = 0.5f; + __instance.ValidRange = new FloatRange(0.01f, 900f); break; case StringNames.GamePlayerSpeed: diff --git a/Patches/OnGameStartedPatch.cs b/Patches/OnGameStartedPatch.cs index e52bbd9..167873e 100644 --- a/Patches/OnGameStartedPatch.cs +++ b/Patches/OnGameStartedPatch.cs @@ -17,6 +17,11 @@ internal class CoStartGamePatch Logger.Info($" Players: {PlayerControl.AllPlayerControls.Count}", "StartGame"); Logger.Info($" Map: {(MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId}", "StartGame"); + if (Main.GM.Value) + { + Logger.Info($" Game Master Enabled", "StartGame"); + } + NormalGameEndChecker.imps.Clear(); NormalGameEndChecker.LastWinReason = ""; @@ -29,7 +34,7 @@ class PlayerControlSetRolePatch public static bool FirstAssign; private static readonly HashSet ProcessedPlayers = new(); public static HashSet Seekers = new(); - public static HashSet Jesters = new(); + public static HashSet manualSeekers = new(); private static readonly System.Random rand = new System.Random(); public static bool Prefix(PlayerControl __instance, ref RoleTypes roleType, ref bool canOverrideRole) @@ -40,23 +45,40 @@ class PlayerControlSetRolePatch canOverrideRole = false; - if (Main.GM.Value && __instance == PlayerControl.LocalPlayer) + if (Main.GM.Value && __instance.PlayerId == PlayerControl.LocalPlayer.PlayerId) { roleType = RoleTypes.Crewmate; OnGameStartPatch.ScheduleExile = true; } - if (Utils.isHideNSeek && Seekers.Count() == 0 && Options.NumSeekers.GetInt() != 1) + if (Utils.isHideNSeek && Seekers.Count() == 0 && Options.NumSeekers.GetInt() > 0) { int seekersCount = Options.NumSeekers.GetInt(); + if (manualSeekers.Count > seekersCount) seekersCount = manualSeekers.Count; + var candidates = new List(); foreach (var p in PlayerControl.AllPlayerControls) { if (!Main.GM.Value || p != PlayerControl.LocalPlayer) candidates.Add(p); } - seekersCount = Math.Min(seekersCount, candidates.Count); + if (manualSeekers.Count == 0) + { + seekersCount = Math.Min(seekersCount, candidates.Count); + } + else + { + seekersCount = Math.Min(seekersCount, candidates.Count + manualSeekers.Count); + } + + foreach (byte id in manualSeekers) + { + if (Seekers.Count >= seekersCount) break; + Seekers.Add(id); + } + + candidates.RemoveAll(p => manualSeekers.Contains(p.PlayerId)); for (int j = candidates.Count - 1; j > 0; j--) { @@ -64,25 +86,27 @@ class PlayerControlSetRolePatch (candidates[j], candidates[k]) = (candidates[k], candidates[j]); } - for (int j = 0; j < seekersCount; j++) + foreach (var p in candidates) { - Seekers.Add(candidates[j].PlayerId); + if (Seekers.Count >= seekersCount) break; + + Seekers.Add(p.PlayerId); } } - if (Utils.isHideNSeek && Options.NumSeekers.GetInt() != 1) + if (Utils.isHideNSeek && Options.NumSeekers.GetInt() > 0) { if (Seekers.Contains(__instance.PlayerId)) roleType = RoleTypes.Impostor; else roleType = RoleTypes.Engineer; } - if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek) + if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek) { if (Options.EngineerMode.GetBool()) roleType = RoleTypes.Engineer; else roleType = RoleTypes.Crewmate; } - if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek) + if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek) { if (roleType == RoleTypes.Impostor || roleType == RoleTypes.Phantom || roleType == RoleTypes.Viper) roleType = RoleTypes.Shapeshifter; } @@ -95,16 +119,6 @@ class PlayerControlSetRolePatch Logger.Info("PCSRP successful", "RoleManaging"); } - - if (roleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 2 || - roleType == RoleTypes.Scientist && Options.ScientistAbility.GetValue() == 2 || - roleType == RoleTypes.Engineer && Options.EngineerAbility.GetValue() == 2 || - roleType == RoleTypes.Noisemaker && Options.NoisemakerAbility.GetValue() == 2 || - roleType == RoleTypes.Tracker && Options.TrackerAbility.GetValue() == 2 || - roleType == RoleTypes.Detective && Options.DetectiveAbility.GetValue() == 2) - { - Jesters.Add(__instance); - } return true; } @@ -116,7 +130,7 @@ internal static class OnGameStartPatch public static bool ScheduleExile; public static void Postfix() { - if (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 2 && Options.SNSChatInGame.GetBool()) + if (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 1 && Options.SNSChatInGame.GetBool()) { PlayerControl.LocalPlayer.CmdReportDeadBody(null); if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose(); @@ -124,7 +138,8 @@ internal static class OnGameStartPatch if (ScheduleExile) { - PlayerControl.LocalPlayer.Exiled(); + Logger.Info($" Game Master Successful", "StartGame"); + PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost); ScheduleExile = false; } diff --git a/Patches/PlayerControlPatches.cs b/Patches/PlayerControlPatches.cs index dfa37a7..e739406 100644 --- a/Patches/PlayerControlPatches.cs +++ b/Patches/PlayerControlPatches.cs @@ -17,7 +17,7 @@ class ReportDeadBodyPatch if (!AmongUsClient.Instance.AmHost || __instance == null) return true; if (Utils.isHideNSeek) return false; - if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings && target == null && Options.Gamemode.GetValue() < 2) + if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings && target == null && Options.Gamemode.GetValue() < 1) { Logger.Info($" {__instance.Data.PlayerName} is calling a meeting too fast, attempt blocked", "ReportDeadBodyPatch"); return false; @@ -25,7 +25,7 @@ class ReportDeadBodyPatch // target == null means meeting - if (Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3) + if (Options.Gamemode.GetValue() == 1 || Options.Gamemode.GetValue() == 2) { if (target != null) { @@ -81,15 +81,8 @@ internal static class MurderPlayerPatch } } - if (Options.Gamemode.GetValue() < 2 && AbilityManagement.IsJuggernaut(__instance) && killCount[__instance.PlayerId] >= Options.KillsNeededForJuggernaut.GetInt()) - { - Logger.Info("Juggernaut win", "MurderPlayer"); - Utils.ContinueEndGame((byte)GameOverReason.ImpostorsByVote); - NormalGameEndChecker.CheckWinnerText("Juggernaut"); - } - //2 = Shift and Seek - if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek) + if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek) { if (!resultFlags.HasFlag(MurderResultFlags.Succeeded)) return; @@ -115,7 +108,7 @@ internal static class MurderPlayerPatch new LateTask(() => { __instance.isNew = false; - if (!__instance.Data.IsDead) {__instance.RpcSetRole(RoleTypes.Shapeshifter, false);} + if (!__instance.Data.IsDead && __instance != null) {__instance.RpcSetRole(RoleTypes.Shapeshifter, false);} }, Options.CantKillTime.GetInt(), "SNSResetRole"); } @@ -140,7 +133,7 @@ internal static class CheckShapeshiftPatch if (!AmongUsClient.Instance.AmHost) return true; // Canceling a Shapeshift freezes the player until they successfully Shapeshift again. Unavoidable game logic. - if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && __instance.isNew) + if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && __instance.isNew) { Logger.Info($" {__instance.Data.PlayerName} shapeshifted during misfire cooldown, making the game temporarily freeze them.", "SNSShapeshiftManager"); Logger.SendInGame($" {__instance.Data.PlayerName} shapeshifted during misfire cooldown, making the game temporarily freeze them."); @@ -166,11 +159,6 @@ class PlayerControlCompleteTaskPatch foreach (var p in PlayerControl.AllPlayerControls) { - if (AbilityManagement.IsJester(p) && !tasksInitiated) - { - ignoredTasks += p.Data.Tasks.Count; - tasksInitiated = true; - } if (!playerTasksCompleted.ContainsKey(p.PlayerId)) { @@ -181,26 +169,11 @@ class PlayerControlCompleteTaskPatch playerTasksCompleted[__instance.PlayerId]++; - if (AbilityManagement.IsJester(__instance)) - { - ignoredCompletedTasks = playerTasksCompleted[__instance.PlayerId]; - } - Logger.Info($" {__instance.Data.PlayerName} completed {idx}", "TaskPatch"); - if (Options.Gamemode.GetValue() < 2) - { - if (AbilityManagement.IsSpeedrunner(__instance) && !__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count) - { - Logger.Info($"Speedrunner {__instance.Data.PlayerName} won", "TaskPatch"); - Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote); - NormalGameEndChecker.CheckWinnerText("Speedrunner"); - } - } + if (Options.Gamemode.GetValue() != 2) CalculateTaskWin(); - if (Options.Gamemode.GetValue() != 3) CalculateTaskWin(); - - if (Options.Gamemode.GetValue() == 3) + if (Options.Gamemode.GetValue() == 2) { if (!__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count) { diff --git a/Patches/SabotagePatches.cs b/Patches/SabotagePatches.cs index 208aade..4ca3234 100644 --- a/Patches/SabotagePatches.cs +++ b/Patches/SabotagePatches.cs @@ -18,7 +18,7 @@ public static class SabotageSystemTypeRepairDamagePatch var Sabo = (SystemTypes)amount; Logger.Info($" {player.Data.PlayerName} is trying to sabotage: {Sabo}", "SabotageCheck"); - if (Options.Gamemode.GetValue() == 0 || Options.Gamemode.GetValue() == 1) + if (Options.Gamemode.GetValue() == 0) { if (Sabo == SystemTypes.LifeSupp && Options.DisableOxygen.GetBool() || Sabo == SystemTypes.Reactor && Options.DisableReactor.GetBool() || @@ -26,6 +26,7 @@ public static class SabotageSystemTypeRepairDamagePatch Sabo == SystemTypes.Comms && Options.DisableComms.GetBool() || Sabo == SystemTypes.HeliSabotage && Options.DisableHeli.GetBool() || Sabo == SystemTypes.MushroomMixupSabotage && Options.DisableMushroomMixup.GetBool() || + Sabo == SystemTypes.Laboratory && Options.DisableReactor.GetBool() && msgReader != null || player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool()) { Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SabotageCheck"); @@ -34,7 +35,7 @@ public static class SabotageSystemTypeRepairDamagePatch return true; } - if (Options.Gamemode.GetValue() == 2) + if (Options.Gamemode.GetValue() == 1) { if (Sabo == SystemTypes.LifeSupp && Options.SNSDisableOxygen.GetBool() || Sabo == SystemTypes.Reactor && Options.SNSDisableReactor.GetBool() || @@ -42,6 +43,7 @@ public static class SabotageSystemTypeRepairDamagePatch Sabo == SystemTypes.Comms && Options.SNSDisableComms.GetBool() || Sabo == SystemTypes.HeliSabotage && Options.SNSDisableHeli.GetBool() || Sabo == SystemTypes.MushroomMixupSabotage && Options.SNSDisableMushroomMixup.GetBool() || + Sabo == SystemTypes.Laboratory && Options.DisableReactor.GetBool() && msgReader != null || player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool()) { Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SnSSabotageCheck"); @@ -62,7 +64,7 @@ class ShipStatusCloseDoorsPatch Logger.Info($" Trying to close the door in: {room}", "DoorCheck"); - if (Options.DisableCloseDoor.GetBool() && (Options.Gamemode.GetValue() == 0 || Options.Gamemode.GetValue() == 1) || Options.Gamemode.GetValue() == 2 && Options.SNSDisableCloseDoor.GetBool()) + if ((Options.DisableCloseDoor.GetBool() && Options.Gamemode.GetValue() == 0) || (Options.Gamemode.GetValue() == 1 && Options.SNSDisableCloseDoor.GetBool())) { Logger.Info($" Door sabotage in: {room} was blocked", "DoorCheck"); return false; diff --git a/Patches/TaskAssignPatch.cs b/Patches/TaskAssignPatch.cs index 2fd60e0..f160360 100644 --- a/Patches/TaskAssignPatch.cs +++ b/Patches/TaskAssignPatch.cs @@ -163,12 +163,6 @@ internal static class RpcSetTasksPatch int numLongTasks = Main.NormalOptions.NumLongTasks; int numShortTasks = Main.NormalOptions.NumShortTasks; - if (AbilityManagement.IsSpeedrunner(pc)) - { - numLongTasks = Options.SpeedrunnerLongTasks.GetInt(); - numShortTasks = Options.SpeedrunnerShortTasks.GetInt(); - } - if (taskTypeIds.Length == 0) hasCommonTasks = false; switch (hasCommonTasks) diff --git a/README.md b/README.md index 117cdf9..91b1037 100644 --- a/README.md +++ b/README.md @@ -29,24 +29,7 @@ **** ‎ -# 🎮 Features (v1.8.3): -## 🌟 Custom Abilities: -- Mayor (Crewmate) -- The Mayor has a configurable amount of extra votes -- Jester (Crewmate) -- The Jester wins alone by getting ejected, can win with Crewmates -- Tasker (Crewmate) -- The Crewmates win if the Tasker completes tasks and is alive -- Workhorse (Crewmate) -- The Workhorse gains additional votes per completed task -- Tyrant (Impostor) -- The Tyrant has a configurable amount of extra votes -- Stealer (Impostor) -- The Stealer gains additional votes per kill -- Juggernaut (Impostor) -- The Impostors win if the Juggernaut gains a set amount of kills -- For the enabled ability list, type /r -- To check ability descriptions, type /r {ability} +# 🎮 Features (v1.9.0): ## ♠️ Client Side settings: - Game Master (Spectator) @@ -84,7 +67,7 @@ - All players have same tasks - Hide and Seek: Custom Seeker count ## 🏆 Custom Gamemodes: -- 0 Kill Cooldown +- 0 Kill Cooldown -> Set Kill Cooldown to 0.01 - Shift and Seek - Speedrun ## ❓ Other Improvements: @@ -103,6 +86,7 @@ - Higher and more accurate Option ranges - Always visible lobby timer - Access experimental animation test scene +- Manually set multiple Seekers in HnS - 🎉 And this all works in public lobbies! ### Hotkeys diff --git a/Resources/Language/English.json b/Resources/Language/English.json index 8b7f849..3f80334 100644 --- a/Resources/Language/English.json +++ b/Resources/Language/English.json @@ -10,7 +10,7 @@ "disableCommandHelper": "Disable Command Helper", "disableCompatibilityWarning": "Disable Compatibility Warning", - "gameMasterWarning":"You will now spectate games until Game Master is turned off. WARNING: Ability messages will not be sent and role assigning might be inaccurate if this setting is enabled.", + "gameMasterWarning":"You will now spectate games until Game Master is turned off. WARNING: Role assigning might be inaccurate if this setting is enabled.", "cancelStartCountdown": "Start countdown canceled", @@ -50,7 +50,7 @@ "slashLastGameCmd": "Who Can Use /l & /aur", "slashKickCmd": "Who Can Use /kick & /ckick", "slashBanCmd": "Who Can Use /ban & /cban", - "slashEndMeetingCmd": "Who Can Use /endmeeting", + "slashEndMeetingCmd": "Who Can Use /endmeeting & /seeker", "slashStartAndEndGameCmd": "Who Can Use /startgame & /endgame", "tabGroupCrewmate": "Crewmate Roles", @@ -216,35 +216,10 @@ "disableSubmitScan": "Disable Submit Scan", "disableUploadData": "Disable Upload Data", - "allCommandsFull": "ALL COMMANDS:\n\n/help\nShow this message.\n/aur, /socials\nSend Among Us Revamped social links.\n\n/r, /gm\nSend current mode description or ability list.\n/r {ability}\nSend specific ability info.\n/l, /lastgame\nSend last winner info.\n\n/0kc, /0killcooldown\nSend 0 Kill Cooldown mode description.\n/sns, /shiftandseek\nSend Shift and Seek mode description.\n/sp, /speedrun\nSend Speedrun mode description.\n\n/kick, /ban\nKick or ban a player by name.\n/ckick, /cban\nKick or ban a player by color.\n\n/vip /moderator /admin\nAdd a player as VIP, Moderator, or Admin.\n/removevip, /removemoderator, /removeadmin\nRemove VIP, Moderator, or Admin from a player.\n\n/eg, /endgame\nEnd the current game.\n/em, /endmeeting\nEnd the current meeting.\n/s, /start\nBegin the game starting countdown.\n\n/t {template}\nSend a template from AUR-DATA/templates.txt.\n\n/col, /color, /colour\nSet your color, can be used to bypass limits.", + "allCommandsFull": "ALL COMMANDS:\n\n/help\nShow this message.\n/aur, /socials\nSend Among Us Revamped social links.\n\n/r, /gm\nSend current mode description.\n/l, /lastgame\nSend last winner info.\n\n/0kc, /0killcooldown\nSend 0 Kill Cooldown mode description.\n/sns, /shiftandseek\nSend Shift and Seek mode description.\n/sp, /speedrun\nSend Speedrun mode description.\n\n/kick, /ban\nKick or ban a player by name.\n/ckick, /cban\nKick or ban a player by color.\n\n/vip /moderator /admin\nAdd a player as VIP, Moderator, or Admin.\n/removevip, /removemoderator, /removeadmin\nRemove VIP, Moderator, or Admin from a player.\n\n/eg, /endgame\nEnd the current game.\n/em, /endmeeting\nEnd the current meeting.\n/s, /start\nBegin the game starting countdown.\n\n/t {template}\nSend a template from AUR-DATA/templates.txt.\n\n/col, /color, /colour\nSet your color, can be used to bypass limits.", "translationReloaded": "Your file has successfully been reset.\nTo apply all changes, restart your game.", - "tabGroupCrewmateAbilities": "Crewmate Ability Settings", - "crewmateAbility": "Crewmate (Role) Ability", - "scientistAbility": "Scientist Ability", - "engineerAbility": "Engineer Ability", - "noisemakerAbility": "Noisemaker Ability", - "trackerAbility": "Tracker Ability", - "detectiveAbility": "Detective Ability", - - "extraVotesCrewmate": "Extra Votes For Mayor", - "extraVotesPerTask": "Extra Votes Per Task For Workhorse", - "speedrunnerShortTasks": "Short Tasks For Tasker", - "speedrunnerLongTasks": "Long Tasks For Tasker", - - "tabGroupImpostorAbilities": "Impostor Ability Settings", - "impostorAbility": "Impostor (Role) Ability", - "shapeshifterAbility": "Shapeshifter Ability", - "phantomAbility": "Phantom Ability", - "viperAbility": "Viper Ability", - - "extraVotesImpostor": "Extra Votes For Tyrant", - "extraVotesPerKill": "Extra Votes Per Kill For Stealer", - "killsNeededForJuggernaut": "Kills Needed For Juggernaut", - - "ability": "Ability", - "templateWelcome": "# In this file you can add Templates, which serve as easy copy-paste alternatives.\n# To create a template, write a new line with the same formatting as the test Template below.\n# Note that Templates can't be longer than 120 characters and can't contain special characters. Having so will kick you.\n\ntest: this is an example template. Type '/t test' to see it.\n\nwelcome: Welcome! This lobby uses Among Us Revamped {ModVersion} by MV. Enjoy!", "moderatorWelcome": "# In this file you can add Moderators by Friendcode.\n# If you add someone, they will gain a purple name in-game.\n# Go to 'System Settings' in-game to customize Moderator permissions. Below is a Friendcode example.\n\nfriendcode#0000", "vipWelcome": "# In this file you can add VIP's by Friendcode.\n# If you add someone, they will gain a yellow name in-game.\n# Go to 'System Settings' in-game to customize VIP permissions. Below is a Friendcode example.\n\nfriendcode#0000\n", @@ -252,9 +227,10 @@ "banlistWelcome": "# In this file you can ban players from your lobby by Friendcode.\n# Banning someone in-game will automatically add them here as well. Below is a Friendcode example.\n\nfriendcode#0000\n", "banwordWelcome": "# In this file you can set denied words, automatically kicking anyone in-game who sends words listed here.\n# Make sure to separate words by using new lines.", "bannameWelcome": "# In this file you can set denied names, automatically kicking anyone in-game who uses names listed here.\n# Make sure to separate names by using new lines.", - "languageWelcome": "# In this file you can set your Among Us Revamped language.\n# To set the language, type one of the supported languages in a new line. The default is English.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian\n\nEnglish", + "startWordsWelcome": "# In this file you can set the detected words for 'Kick Players Who Say Start'.\n# 'Strict Detection Mode' OFF = Messages have to exactly match words. 'Strict Detection Mode' ON = Messages only have to contain words.\n# You can put unrelated words in as well in order to detect them only in lobby.\n\nstart\nbegin\ncommence", "noGameEndWarning": "WARNING: No Game End is enabled", + "gameMasterWarningTwo": "WARNING: Game Master is enabled", "tooLongTemplate": "Your Template is longer than 120 characters and would kick you upon sending. Please reduce the length.", @@ -274,7 +250,7 @@ "emDesc": "End the current meeting.", "aurDesc": "Send Among Us Revamped social links.", "sDesc": "Start the game countdown.", - "rDesc": "/r sends active abilities or current gamemode. /r {ability} sends specific ability info", + "rDesc": "Sends current gamemode description.", "rolesDesc": "Send all abilities/gamemode overview.", "kickDesc": "Kick a player by name.", "ckickDesc": "Kick a player by color.", @@ -291,18 +267,20 @@ "removeAdminDesc": "Remove Admin from user.", "lastgameDesc": "Send last game info.", "templateDesc": "Send a specified template from AUR-DATA/templates.txt.", + "seekerDesc": "Adds player as Seeker in HnS.", + "seekersDesc": "Shows all manually selected Seekers.", + "clearSeekerDesc": "Clears the manual Seeker list.", - "banWordKick": "{0} was kicked because they sent a banned word {1} time(s)", + "banWordKick": "{0} was kicked because they sent a word in DeniedWords.txt {1} time(s)", + "startWordKick": "{0} was kicked because they sent a word in StartWords.txt {1} time(s)", "pluginWarning": "WARNING:\nYou have 2 or more detected Plugins.\nAmong Us Revamped is not compatible with most mods.\nIf you find bugs, they are most likely due to incompatibility.", "systemSettings": "System Settings", - "abilitySettings": "Ability Settings", "gameplaySettings": "Gameplay Settings", "gamemodeSettings": "Gamemode Settings", "systemSettingsDesc": "Quality settings to improve comfort and testing.", - "abilitySettingsDesc": "Ability settings to enhance vanilla roles.", "gameplaySettingsDesc": "Gameplay settings to improve the in-game experience.", "gamemodeSettingsDesc": "Situational settings to apply for specific gamemodes.", @@ -310,5 +288,8 @@ "vipAndAbove": "VIP And Above", "moderatorAndAbove": "Moderator And Above", "admin": "Admin", - "onlyYou": "Only You" + "onlyYou": "Only You", + + "seekers": "Seekers: ", + "clearedSeekers": "Successfully cleared the manual Seeker list." } diff --git a/Resources/Language/Italian.json b/Resources/Language/Italian.json index 4f52cfc..8ee9f0c 100644 --- a/Resources/Language/Italian.json +++ b/Resources/Language/Italian.json @@ -216,35 +216,10 @@ "disableSubmitScan": "Disabilita Invia la scansione", "disableUploadData": "Disabilita Carica i dati", - "allCommandsFull": "TUTTI I COMANDI:\n\n/help\nMostra questo messaggio.\n/aur, /socials\nInvia i link social di Among Us Revamped.\n\n/r, /gm\nInvia la descrizione della modalità corrente o l'elenco delle abilità.\n/r {ability}\nInvia le informazioni di un'abilità specifica.\n/l, /lastgame\nInvia le informazioni sull'ultimo vincitore.\n\n/0kc, /0killcooldown\nInvia la descrizione della modalità Ricarica uccisione a 0.\n/sns, /shiftandseek\nInvia la descrizione della modalità Mutaforma e cerca.\n/sp, /speedrun\nInvia la descrizione della modalità Speedrun.\n\n/kick, /ban\nEspelli o banna un giocatore per nome.\n/ckick, /cban\nEspelli o banna un giocatore per colore.\n\n/vip /moderator /admin\nAggiungi un giocatore come VIP, Moderatore o Admin.\n/removevip, /removemoderator, /removeadmin\nRimuovi VIP, Moderatore o Admin da un giocatore.\n\n/eg, /endgame\nTermina la partita corrente.\n/em, /endmeeting\nTermina la riunione corrente.\n/s, /start\nAvvia il conto alla rovescia di inizio partita.\n\n/t {template}\nInvia un template da AUR-DATA/templates.txt.\n\n/col, /color, /colour\nImposta il tuo colore, può essere usato per aggirare i limiti.", + "allCommandsFull": "TUTTI I COMANDI:\n\n/help\nMostra questo messaggio.\n/aur, /socials\nInvia i link social di Among Us Revamped.\n\n/r, /gm\nInvia la descrizione della modalità corrente o l'elenco delle abilità.\n/l, /lastgame\nInvia le informazioni sull'ultimo vincitore.\n\n/0kc, /0killcooldown\nInvia la descrizione della modalità Ricarica uccisione a 0.\n/sns, /shiftandseek\nInvia la descrizione della modalità Mutaforma e cerca.\n/sp, /speedrun\nInvia la descrizione della modalità Speedrun.\n\n/kick, /ban\nEspelli o banna un giocatore per nome.\n/ckick, /cban\nEspelli o banna un giocatore per colore.\n\n/vip /moderator /admin\nAggiungi un giocatore come VIP, Moderatore o Admin.\n/removevip, /removemoderator, /removeadmin\nRimuovi VIP, Moderatore o Admin da un giocatore.\n\n/eg, /endgame\nTermina la partita corrente.\n/em, /endmeeting\nTermina la riunione corrente.\n/s, /start\nAvvia il conto alla rovescia di inizio partita.\n\n/t {template}\nInvia un template da AUR-DATA/templates.txt.\n\n/col, /color, /colour\nImposta il tuo colore, può essere usato per aggirare i limiti.", "translationReloaded": "Il tuo file è stato ripristinato con successo.\nPer applicare tutte le modifiche, riavvia il gioco.", - "tabGroupCrewmateAbilities": "Impostazioni abilità astronauta", - "crewmateAbility": "Abilità dell'astronauta (Ruolo)", - "scientistAbility": "Abilità dello scienziato", - "engineerAbility": "Abilità dell'ingegnere", - "noisemakerAbility": "Abilità del noisemaker", - "trackerAbility": "Abilità del tracker", - "detectiveAbility": "Abilità del detective", - - "extraVotesCrewmate": "Voti extra per il sindaco", - "extraVotesPerTask": "Voti extra per incarico per lo sgobbone", - "speedrunnerShortTasks": "Incarichi brevi per il tasker", - "speedrunnerLongTasks": "Incarichi lunghi per il tasker", - - "tabGroupImpostorAbilities": "Impostazioni abilità impostore", - "impostorAbility": "Abilità dell'impostore (Ruolo)", - "shapeshifterAbility": "Abilità del mutaforma", - "phantomAbility": "Abilità del fantasma", - "viperAbility": "Abilità della vipera", - - "extraVotesImpostor": "Voti extra per il tiranno", - "extraVotesPerKill": "Voti extra per uccisione per il ladro", - "killsNeededForJuggernaut": "Uccisioni necessarie per il juggernaut", - - "ability": "Abilità", - "templateWelcome": "# In questo file puoi aggiungere i Template, che fungono da comode alternative per il copia-incolla.\n# Per creare un template, scrivi una nuova riga con la stessa formattazione del Template di prova qui sotto.\n# Nota che i Template non possono superare i 120 caratteri e non possono contenere caratteri speciali. In caso contrario verrai espulso.\n\ntest: questo è un esempio di template. Digita '/t test' per vederlo.\n\nwelcome: Benvenuto! Questa lobby utilizza Among Us Revamped {ModVersion} di MV. Buon divertimento!", "moderatorWelcome": "# In questo file puoi aggiungere i Moderatori tramite Codice Amico.\n# Se aggiungi qualcuno, otterrà un nome viola all'interno del gioco.\n# Vai su 'Impostazioni di sistema' nel gioco per personalizzare i permessi dei Moderatori. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000", "vipWelcome": "# In questo file puoi aggiungere i VIP tramite Codice Amico.\n# Se aggiungi qualcuno, otterrà un nome giallo all'interno del gioco.\n# Vai su 'Impostazioni di sistema' nel gioco per personalizzare i permessi dei VIP. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n", @@ -273,7 +248,7 @@ "emDesc": "Termina la riunione corrente.", "aurDesc": "Invia i link social di Among Us Revamped.", "sDesc": "Avvia il conto alla rovescia del gioco.", - "rDesc": "/r invia le abilità attive o la modalità di gioco corrente. /r {ability} invia le informazioni di un'abilità specifica", + "rDesc": "/r invia le abilità attive o la modalità di gioco corrente.", "rolesDesc": "Invia una panoramica di tutte le abilità/modalità di gioco.", "kickDesc": "Espelli un giocatore per nome.", "ckickDesc": "Espelli un giocatore per colore.", @@ -296,12 +271,10 @@ "pluginWarning": "AVVISO:\nHai 2 o più Plugin rilevati.\nAmong Us Revamped non è compatibile con la maggior parte delle mod.\nSe riscontri dei bug, molto probabilmente sono dovuti all'incompatibilità.", "systemSettings": "Impostazioni di sistema", - "abilitySettings": "Impostazioni abilità", "gameplaySettings": "Impostazioni di gioco", "gamemodeSettings": "Impostazioni modalità di gioco", "systemSettingsDesc": "Impostazioni di qualità per migliorare il comfort e i test.", - "abilitySettingsDesc": "Impostazioni delle abilità per potenziare i ruoli base.", "gameplaySettingsDesc": "Impostazioni di gioco per migliorare l'esperienza in partita.", "gamemodeSettingsDesc": "Impostazioni situazionali da applicare per specifiche modalità di gioco.", diff --git a/Resources/Language/Japanese.json b/Resources/Language/Japanese.json new file mode 100644 index 0000000..3b81c38 --- /dev/null +++ b/Resources/Language/Japanese.json @@ -0,0 +1,287 @@ +{ + "LanguageID": "4", + + "disableCompatibilityWarning": "互換性警告を無効化", + + "systemSettings": "システム設定", + "gameplaySettings": "ゲームプレイ設定", + "gamemodeSettings": "モード設定", + + "systemSettingsDesc": "快適性の向上やテスト目的の画質・システム設定。", + "gameplaySettingsDesc": "ゲーム内体験を改善するための設定。", + "gamemodeSettingsDesc": "特定のゲームモードに適したシチュエーション設定。", + + "everyone": "全員", + "vipAndAbove": "VIP 以上", + "moderatorAndAbove": "モデレーター 以上", + "admin": "管理者", + "onlyYou": "自分のみ", + + "gameMaster": "管理者", + "showFPS": "FPSを表示", + "autoStart": "自動開始", + "enableDarkTheme": "ダークテーマを有効化", + "enableLobbyMusic": "ロビーBGM", + "disableInfoWhenDead": "死亡後に情報を非表示", + "disableCommandHelper": "コマンドヘルパーを無効化", + + "gameMasterWarning": "ゲーム管理者をオフにするまで、観戦モードに入ります。警告:この設定を有効にすると、スキルのメッセージが送信されなくなったり、配役の割り当てが不正確になったりする可能性があります。", + + "cancelStartCountdown": "開始カウントダウンがキャンセルされました", + + "invalidFriendCodeKick": "{0} はフレンドコードが無効なためキックされました", + "invalidFriendCodeBan": "{0} はフレンドコードが無効なためBANされました", + "language": "言語 (再起動が必要)", + "gamemode": "ゲームモード", + "tabGroupMain": "管理設定", + "kickLowLevelPlayer": "このレベル未満のプレイヤーをキック", + "tempBanLowLevelPlayer": "キックではなくBANにする", + "dontKickLevelOnes": "部屋のエラーによるレベル1プレイヤーのキックを防止", + "kickInvalidFriendCodes": "無効(空)のフレンドコードをキック", + "tempBanInvalidFriendCodes": "キックではなくBANにする", + "deniedWordsToKick": "NGワード送信時にプレイヤーをキック", + "moderatorCanUseCommand": "モデレーターはコマンドを使用可能", + "autoKickStart": "「Start」と送信したプレイヤーを自動キック", + "autoKickStartAsBan": "キックではなくBANにする", + "autoKickStartTimes": "キックに必要な「Start」の送信回数", + "autoKickStartStrength": "厳格な検出モード", + "tabGroupAutomation": "自動化", + "autoSendGameInfo": "勝者情報を自動送信", + "autoRejoinLobby": "ロビーに自動で再参加", + "autoStartTimer": "自動開始カウントダウン", + "waitAutoStart": "自動開始の待機時間", + "playerAutoStart": "自動開始に必要な人数", + "enableJoinMessages": "入室歓迎メッセージを有効化", + "messagePerPlayerNum": "指定した入室人数に達するごとにメッセージを送信", + "tabGroupMisc": "その他設定", + "startCountdown": "デフォルトの開始カウントダウン", + "colorCommandLevel": "カラーコマンドを使用できる権限", + "allowFortegreen": "フォートグリーンを許可", + "noGameEnd": "ゲームが絶対に終了しない", + + "tabGroupAccess": "権限レベル", + "slashColorCmd": "/color を使用できる権限", + "slashRolesAndGamemodeCmd": "/r とテンプレートを使用できる権限", + "slashLastGameCmd": "/l と /aur を使用できる権限", + "slashKickCmd": "/kick と /ckick を使用できる権限", + "slashBanCmd": "/ban と /cban を使用できる権限", + "slashEndMeetingCmd": "/endmeeting を使用できる権限", + "slashStartAndEndGameCmd": "/startgame と /endgame を使用できる権限", + + "tabGroupCrewmate": "クルーメイトの役職", + "tabGroupNeutral": "ニュートラルの役職", + "tabGroupImpostor": "インポスターの役職", + + "tabGroupStandard": "スタンダードモード", + + "tabGroupHNS": "かくれんぼモード (Hide and Seek)", + "numSeekers": "オニの数", + "tabGroup0Kcd": "キルクールダウン0秒モード (0 Kill Cooldown)", + "noKcdSettingsOverride": "設定の自動更新", + "tabGroupSNS": "シフト&シーク (Shift and Seek)", + "snsChatInGame": "ゲーム進行中のチャットを許可 (実験的)", + "snsSettingsOverride": "設定の自動更新", + "cantKillTime": "ミス/空振り後のキル不能時間", + "misfiresToSuicide": "ミスが指定回数に達した時に自害", + "crewAutoWinsGameAfter": "クルーがこの時間経過後に自動勝利", + "snsDisableSabotage": "SnSの緊急サボタージュを無効化", + "snsDisableReactor": "リアクター妨害を無効化", + "snsDisableOxygen": "酸素妨害を無効化", + "snsDisableLights": "停電妨害を無効化", + "snsDisableComms": "通信妨害を無効化", + "snsDisableHeli": "墜落危機妨害を無効化", + "snsDisableMushroomMixup": "キノコまぜまぜ妨害を無効化", + "snsDisableCloseDoor": "SnSのドア閉め妨害を無効化", + "tabGroupSpeedrun": "タイムアタックモード (Speedrun)", + "speedrunSettingsOverride": "設定の自動更新", + "gameAutoEndsAfter": "ゲームがこの時間経過後に自動終了", + "engineerMode": "全員がエンジニア", + + "tabGroupSabotages": "サボタージュ設定", + "deadImpostorsCanSabotage": "死亡したインポスターもサボタージュ可能", + "disableSabotage": "緊急サボタージュを無効化", + "disableReactor": "リアクター妨害を無効化", + "disableOxygen": "酸素妨害を無効化", + "disableLights": "停電妨害を無効化", + "disableComms": "通信妨害を無効化", + "disableHeli": "墜落危機妨害を無効化", + "disableMushroomMixup": "キノコまぜまぜ妨害を無効化", + "disableCloseDoor": "ドア閉め妨害を無効化", + + "tabGroupGameplayGeneral": "全般的なゲームプレイ", + "disableAnnoyingMeetingCalls": "ゲーム開始後30秒間は緊急会議の招集を禁止", + "disableReport": "死体通報を無効化", + "changeDecontaminationTime": "除染室の時間を上書き (スタンダードモードのみ)", + "decontaminationTimeOnMiraHQ": "Mira HQの除染持続時間", + "decontaminationDoorOpenTimeOnMiraHQ": "Mira HQのドア開放持続時間", + "decontaminationTimeOnPolus": "Polusの除染持続時間", + "decontaminationDoorOpenTimeOnPolus": "Polusのドア開放持続時間", + "disableSporeTrigger": "The Fungleの胞子トリガーを無効化", + + "disableDevices": "端末を無効化", + "disableSkeldDevices": "Skeldの端末を無効化", + "disableSkeldAdmin": "Skeldの管理室マップを無効化", + "disableSkeldCamera": "Skeldの監視カメラを無効化", + "disableMiraHQDevices": "Mira HQの端末を無効化", + "disableMiraHQAdmin": "Mira HQの管理室マップを無効化", + "disableMiraHQDoorLog": "Mira HQのセンサーログを無効化", + "disablePolusDevices": "Polusの端末を無効化", + "disablePolusAdmin": "Polusの管理室マップを無効化", + "disablePolusCamera": "Polusの監視カメラを無効化", + "disablePolusVital": "Polusのバイタルを無効化", + "disableAirshipDevices": "Airshipの端末を無効化", + "disableAirshipCockpitAdmin": "Airshipのコックピット管理室マップを無効化", + "disableAirshipRecordsAdmin": "Airshipの記録室管理室マップを無効化", + "disableAirshipCamera": "Airshipの監視カメラを無効化", + "disableAirshipVital": "Airshipのバイタルを無効化", + "disableFungleDevices": "The Fungleの端末を無効化", + "disableFungleVital": "The Fungleのバイタルを無効化", + + "tabGroupTasks": "タスク設定", + "allPlayersSameTasks": "全員が同じタスクを所持", + "overrideTaskSettings": "タスクを無効化", + "taskPercentNeededToWin": "クルーの勝利に必要なタスク達成割合", + + "disableMiraTasks": "Mira HQのタスクを無効化", + "disableBuyBeverage": "「飲料を買う」を無効化", + "disableMeasureWeather": "「天気を計測する」を無効化", + "disableProcessData": "「データを処理する」を無効化", + "disableRunDiagnostics": "「診断を実行する」を無効化", + "disableSortSamples": "「サンプルを整理する」を無効化", + + "disablePolusTasks": "Polusのタスクを無効化", + "disableActivateWeatherNodes": "「気象ノードを起動する」を無効化", + "disableAlignTelescope": "「望遠鏡を調整する」を無効化", + "disableFillCanisters": "「キャニスターを満たす」を無効化", + "disableInsertKeys": "「鍵を差し込む」を無効化", + "disableOpenWaterways": "「水路を開く」を無効化", + "disableRebootWifi": "「Wi-Fiを再起動する」を無効化", + "disableRepairDrill": "「ドリルを修理する」を無効化", + "disableScanBoardingPass": "「搭乗券をスキャンする」を無効化", + + "disableAirshipTasks": "Airshipのタスクを無効化", + "disableCleanToilet": "「トイレを掃除する」を無効化", + "disableDecontaminate": "「除染する」を無効化", + "disableDevelopPhotos": "「写真を現像する」を無効化", + "disableDressMannequin": "「マネキンに着せ替える」を無効化", + "disableFixShower": "「シャワーヘッドを修理する」を無効化", + "disableMakeBurger": "「ハンバーガーを作る」を無効化", + "disablePickUpTowels": "「タオルを拾う」を無効化", + "disablePolishRuby": "「ルビーを磨く」を無効化", + "disablePutAwayPistols": "「ピストルを片付ける」を無効化", + "disablePutAwayRifles": "「ライフルを片付ける」を無効化", + "disableRewindTapes": "「テープを巻き戻す」を無効化", + "disableResetBreaker": "「ブレーカーをリセットする」を無効化", + "disableSortRecords": "「記録を整理する」を無効化", + "disableStartFans": "「ファンを始動する」を無効化", + "disableUnlockSafe": "「金庫を開ける」を無効化", + + "disableFungleTasks": "The Fungleのタスクを無効化", + "disableBuildSandcastle": "「砂のお城を作る」を無効化", + "disableCatchFish": "「魚釣りをする」を無効化", + "disableCollectSamples": "「サンプルを採集する」を無効化", + "disableCollectShells": "「貝殻を集める」を無効化", + "disableCollectVegetables": "「野菜を収穫する」を無効化", + "disableCrankGenerator": "「発電機を回す」を無効化", + "disableExtractFuel": "「燃料を抽出する」を無効化", + "disableFixAntenna": "「アンテナを修理する」を無効化", + "disableHelpCritter": "「小動物を助ける」を無効化", + "disableHoistSupplies": "「物資を巻き上げる」を無効化", + "disableLiftWeights": "「ウエイトリフティング」を無効化", + "disableMineOres": "「鉱石を採掘する」を無効化", + "disablePlayVideoGame": "「ゲームを遊ぶ」を無効化", + "disablePolishGem": "「宝石を磨く」を無効化", + "disableReplaceParts": "「部品を交換する」を無効化", + "disableRoastMarshmallow": "「マシュマロを焼く」を無効化", + "disableThrowFisbee": "「フリスビーを投げる」を無効化", + "disableFindSignal": "「電波を探す」を無効化", + + "disableMiscCommonTasks": "共通タスクをグローバル無効化", + "disableEnterIdCode": "「IDコードを入力する」を無効化", + "disableFixWiring": "「配線を修理する」を無効化", + "disableSwipeCard": "「カードをスワイプする」を無効化", + + "disableMiscShortTasks": "ショートタスクをグローバル無効化", + "disableAssembleArtifact": "「遺物を組み立てる」を無効化", + "disableChartCourse": "「航路を設定する」を無効化", + "disableCleanO2Filter": "「酸素フィルターを清掃する」を無効化", + "disableCleanVent": "「ベントを清掃する」を無効化", + "disableMonitorMushroom": "「キノコを監視する」を無効化", + "disableMonitorTree": "「木を監視する」を無効化", + "disablePrimeShields": "「シールドを充填する」を無効化", + "disableRecordTemperature": "「温度を記録する」を無効化", + "disableStabilizeSteering": "「操縦を安定させる」を無効化", + "disableStoreArtifacts": "「遺物を保管する」を無効化", + "disableUnlockManifolds": "「マニホールドを開ける」を無効化", + + "disableMiscLongTasks": "ロングタスクをグローバル無効化", + "disableAlignEngineOutput": "「エンジン出力を調整する」を無効化", + "disableClearAsteroids": "「小惑星をクリアする」を無効化", + "disableEmptyChute": "「ゴミ捨て場のシュートを空にする」を無効化", + "disableInspectSample": "「サンプルを検査する」を無効化", + "disableReplaceWaterJug": "「給水ボトルの交換」を無効化", + "disableStartReactor": "「リアクターを起動する」を無効化", + "disableWaterPlants": "「植物に水をやる」を無効化", + + "disableMiscMixedTasks": "複合タスクをグローバル無効化", + "disableCalibrateDistributor": "「配電盤を調整する」を無効化", + "disableDivertPower": "「電力を転送する」を無効化", + "disableEmptyGarbage": "「ゴミを捨てる」を無効化", + "disableFuelEngines": "「エンジンに燃料を補給する」を無効化", + "disableSubmitScan": "「スキャンを送信する」を無効化", + "disableUploadData": "「データをアップロードする」を無効化", + + "allCommandsFull": "すべてのコマンド:\n\n/help\nこのヘルプメッセージを表示します。\n/aur, /socials\nAmong Us RevampedのSNSリンクを送信します。\n\n/r, /gm\n現在のモード紹介またはスキルリストを送信します。\n/l, /lastgame\n前回のゲームの勝者情報を送信します。\n\n/0kc, /0killcooldown\nキルクールダウン0秒モードの紹介を送信します。\n/sns, /shiftandseek\nシフト&シークモードの紹介を送信します。\n/sp, /speedrun\nタイムアタックモードの紹介を送信します。\n\n/kick, /ban\n名前を指定してプレイヤーをキックまたはBANします。\n/ckick, /cban\n色を指定してプレイヤーをキックまたはBANします。\n\n/vip /moderator /admin\nプレイヤーをVIP、モデレーター、または管理者に設定します。\n/removevip, /removemoderator, /removeadmin\nプレイヤーのVIP、モデレーター、または管理者権限を剥奪します。\n\n/eg, /endgame\n現在のゲームを終了します。\n/em, /endmeeting\n現在の会議を終了します。\n/s, /start\nゲーム開始のカウントダウンを始めます。\n\n/t {template}\nAUR-DATA/templates.txt内の指定されたテンプレートを送信します。\n\n/col, /color, /colour\nあなたのカラーを設定します(制限のバイパスに使用可能)。", + + "translationReloaded": "ファイルが正常にリセットされました。\nすべての変更を適用するには、ゲームを再起動してください。", + + "templateWelcome": "# このファイルでは、簡単にコピー&ペーストできるテンプレートを追加できます。\n# 新しいテンプレートを作成するには、改行して下のテスト用テンプレートと同じ形式を使用してください。\n# テンプレートの長さは120文字を超えることはできず、特殊文字も含められません。超えた場合は部屋からキックされます。\n\ntest: これはテンプレートの例です。「/t test」と入力すると表示されます。\n\nwelcome: ようこそ!このロビーはMV制作の Among Us Revamped {ModVersion} を使用しています。お楽しみください!", + "moderatorWelcome": "# このファイルでは、フレンドコードを使ってモデレーターを追加できます。\n# 追加されると、ゲーム内での名前が紫色になります。\n# ゲーム内の「システム設定」からモデレーター権限をカスタマイズしてください。以下はフレンドコードの例です。\n\nfriendcode#0000", + "vipWelcome": "# このファイルでは、フレンドコードを使ってVIPを追加できます。\n# 追加されると、ゲーム内での名前が黄色になります。\n# ゲーム内の「システム設定」からVIP権限をカスタマイズしてください。以下はフレンドコードの例です。\n\nfriendcode#0000\n", + "adminWelcome": "# このファイルでは、フレンドコードを使って管理職(Admin)を追加できます。\n# 追加されると、ゲーム内での名前が赤色になります。\n# ゲーム内の「システム設定」から管理者権限をカスタマイズしてください。以下はフレンドコードの例です。\n\nfriendcode#0000\n", + "banlistWelcome": "# このファイルでは、フレンドコードを使ってロビーからプレイヤーをBANできます。\n# ゲーム内で誰かをBANすると、自動的にここにも同期されます。以下はフレンドコードの例です。\n\nfriendcode#0000\n", + "banwordWelcome": "# このファイルでは、NGワードを設定できます。ここでリストされた単語をゲーム内で送信したプレイヤーは自動的にキックされます。\n# 単語ごとに必ず改行して区切ってください。", + "bannameWelcome": "# このファイルでは、NG名前を設定できます。ここでリストされた名前をゲーム内で使用しているプレイヤーは自動的にキックされます。\n# 名前ごとに必ず改行して区切ってください。", + + "noGameEndWarning": "警告:「ゲームが絶対に終了しない」が有効になっています", + + "tooLongTemplate": "テンプレートが120文字を超えているため、送信するとキックされます。長さを短くしてください。", + + "vipAdd": "{0} を VIP として登録しました。", + "moderatorAdd": "{0} を モデレーター として登録しました。", + "adminAdd": "{0} を 管理者 として登録しました。", + "vipRemove": "{0} の VIP 権限を削除しました。", + "moderatorRemove": "{0} の モデレーター 権限を削除しました。", + "adminRemove": "{0} の 管理者 権限を削除しました。", + "permFail": "ユーザー '{0}' が見つかりません。スペルが正しいか確認してください。", + + "helpDesc": "すべてのコマンドとその機能を表示します。", + "snsDesc": "シフト&シーク (Shift and Seek) ゲームモードの紹介を送信します。", + "0kcDesc": "キルクールダウン0秒 (0 Kill Cooldown) ゲームモードの紹介を送信します。", + "SrDesc": "タイムアタック (Speedrun) ゲームモード의 紹介を送信します。", + "egDesc": "現在のゲームを終了します。", + "emDesc": "現在の会議を終了します。", + "aurDesc": "Among Us RevampedのSNSリンクを送信します。", + "sDesc": "ゲーム開始のカウントダウンを始めます。", + "rDesc": "/r はアクティブなスキルまたは現在のモードを送信します。", + "rolesDesc": "すべてのスキル・ゲームモードの概要を送信します。", + "kickDesc": "名前を指定してプレイヤーをキックします。", + "ckickDesc": "色を指定してプレイヤーをキックします。", + "banDesc": "名前を指定してプレイヤーをBANします。", + "cbanDesc": "色を指定してプレイヤーをBANします。", + "dumpDesc": "LogOutput(ログ出力)を独立したファイルにコピーします。", + "colDesc": "あなたのカラーを設定します。", + "reloadDesc": "言語ファイルを再読み込みします。", + "vipDesc": "ユーザーを VIP に追加します。", + "moderatorDesc": "ユーザーを モデレーター に追加します。", + "adminDesc": "ユーザーを 管理者 に追加します。", + "cremoveVipDesc": "ユーザーの VIP 権限を削除します。", + "removeModeratorDesc": "ユーザーの モデレーター 権限を削除します。", + "removeAdminDesc": "ユーザーの 管理者 権限を削除します。", + "lastgameDesc": "前回のゲーム情報を送信します。", + "templateDesc": "AUR-DATA/templates.txtで指定されたテンプレートを送信します。", + + "banWordKick": "{0} はNGワードを送信したためキックされました(累計回数:{1} 回)", + + "pluginWarning": "警告:\n2つ以上のプラグインが有効化されていることを検出しました。\nAmong Us RevampedはほとんどのModと互換性がありません。\n不具合が発生した場合、競合が原因である可能性が非常に高いです。" +} diff --git a/Resources/Language/Russian.json b/Resources/Language/Russian.json new file mode 100644 index 0000000..2db6565 --- /dev/null +++ b/Resources/Language/Russian.json @@ -0,0 +1,287 @@ +{ + "LanguageID": "5", + + "gameMaster": "Наблюдатель", + "showFPS": "Показать FPS", + "autoStart": "Авто Старт", + "enableDarkTheme": "Включить Тёмную Тему", + "enableLobbyMusic": "Музыка Лобби", + "disableInfoWhenDead": "Скрывать Информацию После Смерти", + "disableCommandHelper": "Выключить Командного Помощника", + "disableCompatibilityWarning": "Выключить Предупреждение Совместимости", + + "gameMasterWarning":"Вы будете наблюдать игры пока включён режим спектатора. ВНИМАНИЕ: Сообщения со способностями не будут отправлены и назначение ролей может быть неправильным если эта настройка включена.", + + "cancelStartCountdown": "Отсчет до старта отменён", + + "invalidFriendCodeKick": "{0} был кикнут из-за неправильного Кода друга", + "invalidFriendCodeBan": "{0} был забанен из-за неправильного Кода друга", + "language": "Язык (Нужен Перезапуск)", + "gamemode": "Режим", + "tabGroupMain": "Модерация", + "kickLowLevelPlayer": "Кикать Игроков Ниже Уровня", + "tempBanLowLevelPlayer": "Банить вместо кика", + "dontKickLevelOnes": "Не кикать Игроков Ур.1 В Глитчнутых Лобби", + "kickInvalidFriendCodes": "Кикать Неправильные (Пустые) Коды друзей", + "tempBanInvalidFriendCodes": "Банить вместо кика", + "deniedWordsToKick": "Отправленных Запрещённых Слов Чтобы Кикнуть Игрока", + "moderatorCanUseCommand": "Модераторы Могут Использовать Команды", + "autoKickStart": "Кикать Игроков Которые Говорят Start", + "autoKickStartAsBan": "Банить вместо кика", + "autoKickStartTimes": "Start сообщений нужно для кика", + "autoKickStartStrength": "Режим строго обнаружения", + "tabGroupAutomation": "Автоматизация", + "autoSendGameInfo": "Автоматически отправлять информацию о победителе", + "autoRejoinLobby": "Автоматически перезаходить в лобби", + "autoStartTimer": "Отсчет Для Авто Старта", + "waitAutoStart": "Авто Старт После", + "playerAutoStart": "Игроков Нужно Для Авто Старта", + "enableJoinMessages": "Включить Сообщение С Приветствиями", + "messagePerPlayerNum": "Сообщение Каждое Количество Заходов", + "tabGroupMisc": "Разное", + "startCountdown": "Отсчет Для Старта По Умолчанию", + "colorCommandLevel": "Кто Может использовать Команды Цветов", + "allowFortegreen": "Разрешить Фортезелёный Цвет", + "noGameEnd": "Без Конца Игры", + + "tabGroupAccess": "Уровни Доступа", + "slashColorCmd": "Кто Может Использовать /color", + "slashRolesAndGamemodeCmd": "Кто Может Использовать /r & Templates", + "slashLastGameCmd": "Кто Может Использовать /l & /aur", + "slashKickCmd": "Кто Может Использовать /kick & /ckick", + "slashBanCmd": "Кто Может Использовать /ban & /cban", + "slashEndMeetingCmd": "Кто Может Использовать /endmeeting", + "slashStartAndEndGameCmd": "Кто Может Использовать /startgame & /endgame", + + "tabGroupCrewmate": "Роли Экипажа", + "tabGroupNeutral": "Роли Нейтралов", + "tabGroupImpostor": "Роли Предателей", + + "tabGroupStandard": "Стандарт", + + "tabGroupHNS": "Прятки", + "numSeekers": "# Искателей", + "tabGroup0Kcd": "0 Перезарядка Убийств", + "noKcdSettingsOverride": "Автоматически Обновлять Настройки", + "tabGroupSNS": "Клон", + "snsChatInGame": "Чат во время игры (экспериментальное)", + "snsSettingsOverride": "Автоматически Обновлять Настройки", + "cantKillTime": "После Осечки Нельзя Убивать В Течение", + "misfiresToSuicide": "Самоубийство После Количества Осечек", + "crewAutoWinsGameAfter": "Экипаж Автоматически Побеждает После", + "snsDisableSabotage": "Выключить Критические Сабботажи в Режиме Клона", + "snsDisableReactor": "Выключить Сабботаж Реактора", + "snsDisableOxygen": "Выключить Сабботаж O2", + "snsDisableLights": "Выключить Сабботаж Света", + "snsDisableComms": "Выключить Сабботаж Связи", + "snsDisableHeli": "Выключить Сабботаж Столкновения", + "snsDisableMushroomMixup": "Выключить Сабботаж Грибного Переполоха", + "snsDisableCloseDoor": "Выключить Сабботаж Дверей в Режиме Клона", + "tabGroupSpeedrun": "Спидран", + "speedrunSettingsOverride": "Автоматически Обновлять Настройки", + "gameAutoEndsAfter": "Игра автоматически заканчивается после", + "engineerMode": "Все Инженеры", + + "tabGroupSabotages": "Сабботажи", + "deadImpostorsCanSabotage": "Умершие Предатели Могут Сабботировать", + "disableSabotage": "Выключить Критические Сабботажи", + "disableReactor": "Выключить Сабботаж Реактора", + "disableOxygen": "Выключить Сабботаж O2", + "disableLights": "Выключить Сабботаж Света", + "disableComms": "Выключить Сабботаж Связи", + "disableHeli": "Выключить Сабботаж Столкновения", + "disableMushroomMixup": "Выключить Сабботаж Грибного Переполоха", + "disableCloseDoor": "Выключить Сабботаж Дверей", + + "tabGroupGameplayGeneral": "Основное", + "disableAnnoyingMeetingCalls": "В первые 30 секунд нельзя созывать собрания", + "disableReport": "Выключить Репорты Трупов", + "changeDecontaminationTime": "Изменить Время Обеззараживания (Только Стандартный Режим)", + "decontaminationTimeOnMiraHQ": "Время обеззараживания на Mira HQ", + "decontaminationDoorOpenTimeOnMiraHQ": "Время открытия дверей на Mira HQ", + "decontaminationTimeOnPolus": "Время обеззараживания на Polus", + "decontaminationDoorOpenTimeOnPolus": "Время открытия дверей на Polus", + "disableSporeTrigger": "Выключить споры на Fungle", + + "disableDevices": "Выключить Девайсы", + "disableSkeldDevices": "Выключить Девайсы на Skeld", + "disableSkeldAdmin": "Выключить Админ на Skeld", + "disableSkeldCamera": "Выключить Камеры на Skeld", + "disableMiraHQDevices": "Выключить Девайсы на Mira HQ", + "disableMiraHQAdmin": "Выключить Админ на Mira HQ", + "disableMiraHQDoorLog": "Выключить Журнал на Mira HQ", + "disablePolusDevices": "Выключить Девайсы на Polus", + "disablePolusAdmin": "Выключить Админ на Polus", + "disablePolusCamera": "Выключить Камеры на Polus", + "disablePolusVital": "Выключить Пульс на Polus", + "disableAirshipDevices": "Выключить Девайсы на Airship", + "disableAirshipCockpitAdmin": "Выключить Админ в Кабине на Airship", + "disableAirshipRecordsAdmin": "Выключить Админ в Архиве на Airship", + "disableAirshipCamera": "Выключить Камеры на Airship", + "disableAirshipVital": "Выключить Пульс на Airship", + "disableFungleDevices": "Выключить Девайсы на Fungle", + "disableFungleVital": "Выключить Пульс на Fungle", + + "tabGroupTasks": "Задания", + "allPlayersSameTasks": "Одинаковые задания для всех", + "overrideTaskSettings": "Отключить задания", + "taskPercentNeededToWin": "% Выполненных заданий для победы экипажа", + + "disableMiraTasks": "Выключить Задания на Mira HQ", + "disableBuyBeverage": "Выключить Купить Напиток", + "disableMeasureWeather": "Выключить Изучить Погодные Условия", + "disableProcessData": "Выключить Обработать Данные", + "disableRunDiagnostics": "Выключить Провести Диагностику", + "disableSortSamples": "Выключить Разобрать Образцы", + + "disablePolusTasks": "Выключить Задания на Polus", + "disableActivateWeatherNodes": "Выключить Починить Узел", + "disableAlignTelescope": "Выключить Навести Телескоп", + "disableFillCanisters": "Выключить Наполнить Баллоны", + "disableInsertKeys": "Выключить Вставить Ключи", + "disableOpenWaterways": "Выключить Открыть Водопровод", + "disableRebootWifi": "Выключить Перезагрузить Wi-Fi", + "disableRepairDrill": "Выключить Починить Бур", + "disableScanBoardingPass": "Выключить Проверить Посадочный Талон", + + "disableAirshipTasks": "Выключить Задания на Airship", + "disableCleanToilet": "Выключить Помыть Туалет", + "disableDecontaminate": "Выключить Пройти Обработку", + "disableDevelopPhotos": "Выключить Проявить Фото", + "disableDressMannequin": "Выключить Одеть Манекен", + "disableFixShower": "Выключить Починить Душ", + "disableMakeBurger": "Выключить Сделать Бургер", + "disablePickUpTowels": "Выключить Поднять Полотенца", + "disablePolishRuby": "Выключить Полировать рубин", + "disablePutAwayPistols": "Выключить Убрать Пистолеты", + "disablePutAwayRifles": "Выключить Убрать Ружья", + "disableRewindTapes": "Выключить Перемотать Кассеты", + "disableResetBreaker": "Выключить Перезапуск Пробок", + "disableSortRecords": "Выключить Разобрать Записи", + "disableStartFans": "Выключить Запустить Вентилятор", + "disableUnlockSafe": "Выключить Открыть Сейф", + + "disableFungleTasks": "Выключить Задания на Fungle", + "disableBuildSandcastle": "Выключить Построить Песчаный Замок", + "disableCatchFish": "Выключить Поймать Рыбу", + "disableCollectSamples": "Выключить Собрать Образцы", + "disableCollectShells": "Выключить Собрать Ракушки", + "disableCollectVegetables": "Выключить Собрать Овощи", + "disableCrankGenerator": "Выключить Завести Генератор", + "disableExtractFuel": "Выключить Извлечь Топливо", + "disableFixAntenna": "Выключить Починить Антенну", + "disableHelpCritter": "Выключить Помочь Животному", + "disableHoistSupplies": "Выключить Поднять Припасы", + "disableLiftWeights": "Выключить Поднять Грузы", + "disableMineOres": "Выключить Добыть Руду", + "disablePlayVideoGame": "Выключить Играть в Видеоигру", + "disablePolishGem": "Выключить Отполировать Драгоценный Камень", + "disableReplaceParts": "Выключить Заменить Детали", + "disableRoastMarshmallow": "Выключить Поджарить Зефирки", + "disableThrowFisbee": "Выключить Играть с Фрисби", + "disableFindSignal": "Выключить Найти Сигнал", + + "disableMiscCommonTasks": "Выключить Общие Задания", + "disableEnterIdCode": "Выключить Ввести Код Доступа", + "disableFixWiring": "Выключить Починить Проводку", + "disableSwipeCard": "Выключить Провести Картой", + + "disableMiscShortTasks": "Выключить Короткие Задания", + "disableAssembleArtifact": "Выключить Собрать Артефакт", + "disableChartCourse": "Выключить Выровнять Курс", + "disableCleanO2Filter": "Выключить Очистить Фильтр O2", + "disableCleanVent": "Выключить Прочистить Люк", + "disableMonitorMushroom": "Выключить Наблюдать За Грибом", + "disableMonitorTree": "Выключить Проверить Дерево", + "disablePrimeShields": "Выключить Запустить Щиты", + "disableRecordTemperature": "Выключить Записать Температуру", + "disableStabilizeSteering": "Выключить Выровнять Курс", + "disableStoreArtifacts": "Выключить Сложить Артефакты", + "disableUnlockManifolds": "Выключить Открыть Коллекторы", + + "disableMiscLongTasks": "Выключить Длинные Задания", + "disableAlignEngineOutput": "Выключить Выровнять Отдачу Моторов", + "disableClearAsteroids": "Выключить Разрушить Астероиды", + "disableEmptyChute": "Выключить Очистить Мусоросборник", + "disableInspectSample": "Выключить Исследовать Образец", + "disableReplaceWaterJug": "Выключить Заменить Кулер", + "disableStartReactor": "Выключить Запустить Реактор", + "disableWaterPlants": "Выключить Полить Растения", + + "disableMiscMixedTasks": "Выключить Смешанные Задания", + "disableCalibrateDistributor": "Выключить Откалибровать Распределитель", + "disableDivertPower": "Выключить Подать Энергию", + "disableEmptyGarbage": "Выключить Выбросить Мусор", + "disableFuelEngines": "Выключить Заправить Моторы", + "disableSubmitScan": "Выключить Пройти Скан", + "disableUploadData": "Выключить Загрузить Данные", + + "allCommandsFull": "ВСЕ КОМАНДЫ:\n\n/help\nПоказать это сообщение.\n/aur, /socials\nОтправляет ссылки Among Us Revamped.\n\n/r, /gm\nОтправляет описание текущего режима или списка способностей.\n/l, /lastgame\nОтправляет информацию о последнем победителе.\n\n/0kc, /0killcooldown\nОтправляет описание режима 0 Перезарядки Убийств.\n/sns, /shiftandseek\nОтправляет описание режима Клона.\n/sp, /speedrun\nОтправляет описание режима Спидрана.\n\n/kick, /ban\nКикает или банит игрока по нику.\n/ckick, /cban\nКикает или банит игрока по цвету.\n\n/vip /moderator /admin\nДобавляет игрока как VIP, Модератора или Админа.\n/removevip, /removemoderator, /removeadmin\nУбирает VIP, Модератора или Админа у игрока.\n\n/eg, /endgame\nЗаканчивает текущую игру.\n/em, /endmeeting\nЗаканчивает текущее собрание.\n/s, /start\nНачинает отсчет для старта.\n\n/t {template}\nОтправляет шаблон из AUR-DATA/templates.txt.\n\n/col, /color, /colour\nМеняет ваш цвет, может быть использована чтобы обойти ограничения по цветам.", + + "translationReloaded": "Ваш языковой файл был успешно сброшен.\nЧтобы применить все изменения, перезапустите вашу игру.", + + "templateWelcome": "# В этом файле вы можете создавать шаблоны, которые могут служить как простая альтернатива копировать-вставить.\n# Чтобы создать шаблон, напишите новую линию с таким же форматированием как и у тестового шаблона снизу.\n# Шаблоны не могут быть длиннее чем 120 символов и не могут содержать специальные символы. В противном вас будет кикать.\n\ntest: это пример шаблона. Напишите '/t test' чтобы увидеть его.\n\nwelcome: Добро Пожаловать! Это Лобби Использует Among Us Revamped {ModVersion} от MV. Наслаждайтесь!", + "moderatorWelcome": "# В этом файле вы можете добавлять Модераторов по Коду друга.\n# Если вы добавите кого то, они получат фиолетовый ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия Модераторов. Снизу приведен пример Кода друга.\n\nfriendcode#0000", + "vipWelcome": "# В этом файле вы можете добавлять VIP по Коду друга.\n# Если вы добавите кого то, они получат желтый ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия VIP. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n", + "adminWelcome": "# В этом файле вы можете добавлять Админов по Коду друга.\n# Если вы добавите кого то, они получат красный ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия Админов. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n", + "banlistWelcome": "# В этом файле вы можете банить игроков из ваших лобби по Коду друга.\n# Если вы забаните кого-то в игре они автоматически добавятся в этот файл. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n", + "banwordWelcome": "# В этом файле вы можете создавать запрещенные слова, автоматически кикает тех кто сказали эти слова которые написаны здесь.\n# Обратите внимание чтобы разделять слова надо при помощи новых строк.", + "bannameWelcome": "# В этом файле вы можете создавать запрещенные имена, автоматически кикает тех кто использует имена которые написаны здесь.\n# Обратите внимание чтобы разделять имена надо при помощи новых строк.", + "languageWelcome": "# In this file you can set your Among Us Revamped language.\n# To set the language, type one of the supported languages in a new line. The default is English.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian\n\nEnglish", + + "noGameEndWarning": "ВНИМАНИЕ: Настройка 'Без Конца Игры' Включена", + + "tooLongTemplate": "Ваш шаблон длиннее чем 120 символов и будет вас кик если он будет отправлен. Пожалуйста уменьшите длину.", + + "vipAdd": "Успешно добавлен {0} как VIP.", + "moderatorAdd": "Успешно добавлен {0} как Модератор.", + "adminAdd": "Успешно добавлен {0} as Админ.", + "vipRemove": "Успешно убран VIP у {0}.", + "moderatorRemove": "Успешно убран Модератор у {0}.", + "adminRemove": "Успешно убран Админ у {0}.", + "permFail": "Не удалось найти игрока '{0}'. Убедитесь что вы написали ник корректно", + + "helpDesc": "Показывает все Команды и что они делают.", + "snsDesc": "Отправляет описание режима Клона.", + "0kcDesc": "Отправляет описание режима 0 Перезарядки Убийств.", + "SrDesc": "Отправляет описание режима Спидрана.", + "egDesc": "Заканчивает текущую игру.", + "emDesc": "Заканчивает текущее собрание.", + "aurDesc": "Отправляет Ссылки Us Revamped.", + "sDesc": "Начинает отсчет для старта.", + "rDesc": "/r Отправляет включеные способности или текущий режим.", + "rolesDesc": "Отправляет обзор всех способностей/режимов.", + "kickDesc": "Кикает игрока по нику.", + "ckickDesc": "Кикает игрока по цвету.", + "banDesc": "Банит игрока по нику.", + "cbanDesc": "Банит игрока по цвету.", + "dumpDesc": "Копирует LogOutput в отдельный файл.", + "colDesc": "Меняет ваш цвет.", + "reloadDesc": "Перезагружает языковой файл.", + "vipDesc": "Добавляет игрока как VIP.", + "moderatorDesc": "Добавляет игрока как Модератор.", + "adminDesc": "Добавляет игрока как Админ.", + "cremoveVipDesc": "Убирает VIP у игрока.", + "removeModeratorDesc": "Убирает Модератора у игрока.", + "removeAdminDesc": "Убирает Админа у игрока.", + "lastgameDesc": "Отправляет информацию о последней игре.", + "templateDesc": "Отправляет определённый шаблон из AUR-DATA/templates.txt.", + + "banWordKick": "{0} был кикнут потому что они отправили запрещенное слово {1} раз(а)", + + "pluginWarning": "ВНИМАНИЕ:\nУ вас обнаружено 2 или более активных плагинов.\nAmong Us Revamped не совместим с большинством модов.\nЕсли у вас будут баги, они наверняка происходят из-за несовместимости.", + + "systemSettings": "Системные Настройки", + "gameplaySettings": "Игровые Настройки", + "gamemodeSettings": "Настройки Режима", + + "systemSettingsDesc": "Системные Настройки Для Повышения Комфорта и Упрощения Тестирования.", + "gameplaySettingsDesc": "Игровые Настройки Для Улучшения Игрового Процесса.", + "gamemodeSettingsDesc": "Дополнительные Настройки Для Определённых Игровых Режимов.", + + "everyone": "Все", + "vipAndAbove": "VIP И Выше", + "moderatorAndAbove": "Модератор И Выше", + "admin": "Админ", + "onlyYou": "Только Вы" +} diff --git a/Resources/Language/SimplifiedChinese.json b/Resources/Language/SimplifiedChinese.json index bd33930..877aa56 100644 --- a/Resources/Language/SimplifiedChinese.json +++ b/Resources/Language/SimplifiedChinese.json @@ -216,35 +216,10 @@ "disableSubmitScan": "禁用“提交扫描”", "disableUploadData": "禁用“上传数据”", - "allCommandsFull": "所有命令:\n\n/help\n显示此帮助信息。\n/aur, /socials\n发送 Among Us Revamped 的社交链接。\n\n/r, /gm\n发送当前模式介绍或技能列表。\n/r {ability}\n发送指定技能的详细信息。\n/l, /lastgame\n发送上一局获胜者的信息。\n\n/0kc, /0killcooldown\n发送 0秒击杀冷却 模式介绍。\n/sns, /shiftandseek\n发送 变形与搜寻 模式介绍。\n/sp, /speedrun\n发送 速通 模式介绍。\n\n/kick, /ban\n通过名字踢出或封禁玩家。\n/ckick, /cban\n通过颜色踢出或封禁玩家。\n\n/vip /moderator /admin\n将玩家设为 VIP、管理员(Moderator) 或 超级管理员(Admin)。\n/removevip, /removemoderator, /removeadmin\n移除玩家的 VIP、管理员 或 超级管理员权限。\n\n/eg, /endgame\n结束当前游戏。\n/em, /endmeeting\n结束当前会议。\n/s, /start\n开始游戏开局倒计时。\n\n/t {template}\n发送 AUR-DATA/templates.txt 中的指定模板。\n\n/col, /color, /colour\n设置您的颜色,可用于绕过限制。", + "allCommandsFull": "所有命令:\n\n/help\n显示此帮助信息。\n/aur, /socials\n发送 Among Us Revamped 的社交链接。\n\n/r, /gm\n发送当前模式介绍或技能列表。\n/l, /lastgame\n发送上一局获胜者的信息。\n\n/0kc, /0killcooldown\n发送 0秒击杀冷却 模式介绍。\n/sns, /shiftandseek\n发送 变形与搜寻 模式介绍。\n/sp, /speedrun\n发送 速通 模式介绍。\n\n/kick, /ban\n通过名字踢出或封禁玩家。\n/ckick, /cban\n通过颜色踢出或封禁玩家。\n\n/vip /moderator /admin\n将玩家设为 VIP、管理员(Moderator) 或 超级管理员(Admin)。\n/removevip, /removemoderator, /removeadmin\n移除玩家的 VIP、管理员 或 超级管理员权限。\n\n/eg, /endgame\n结束当前游戏。\n/em, /endmeeting\n结束当前会议。\n/s, /start\n开始游戏开局倒计时。\n\n/t {template}\n发送 AUR-DATA/templates.txt 中的指定模板。\n\n/col, /color, /colour\n设置您的颜色,可用于绕过限制。", "translationReloaded": "您的文件已成功重置。\n要应用所有更改,请重启游戏。", - "tabGroupCrewmateAbilities": "船员技能设置", - "crewmateAbility": "船员(职业)技能", - "scientistAbility": "科学家技能", - "engineerAbility": "工程师技能", - "noisemakerAbility": "噪音制造者技能", - "trackerAbility": "追踪者技能", - "detectiveAbility": "侦探技能", - - "extraVotesCrewmate": "市长额外票数", - "extraVotesPerTask": "老黄牛每项任务获得的额外票数", - "speedrunnerShortTasks": "任务达人的短任务", - "speedrunnerLongTasks": "任务达人的长任务", - - "tabGroupImpostorAbilities": "内鬼技能设置", - "impostorAbility": "内鬼(职业)技能", - "shapeshifterAbility": "伪装者技能", - "phantomAbility": "魔魂技能", - "viperAbility": "蝰蛇技能", - - "extraVotesImpostor": "暴君额外票数", - "extraVotesPerKill": "小偷每击杀获得的额外票数", - "killsNeededForJuggernaut": "主宰所需的击杀数", - - "ability": "技能", - "templateWelcome": "# 在此文件中,您可以添加模板,以便快捷复制粘贴。\n# 要创建新模板,请另起一行并使用与下方测试模板相同的格式。\n# 请注意,模板长度不能超过 120 个字符,且不能包含特殊字符,否则您会被踢出房间。\n\ntest: 这是一个示例模板。输入 '/t test' 即可查看。\n\nwelcome: 欢迎!本大厅使用的是由 MV 制作的 Among Us Revamped {ModVersion}。祝您玩得开心!", "moderatorWelcome": "# 在此文件中,您可以通过好友代码添加管理员 (Moderator)。\n# 添加后,他们在游戏内的名字将变为紫色。\n# 请前往游戏内的“系统设置”自定义管理员权限。下方为好友代码示例。\n\nfriendcode#0000", "vipWelcome": "# 在此文件中,您可以通过好友代码添加 VIP。\n# 添加后,他们在游戏内的名字将变为黄色。\n# 请前往游戏内的“系统设置”自定义 VIP 权限。下方为好友代码示例。\n\nfriendcode#0000\n", @@ -273,7 +248,7 @@ "emDesc": "结束当前会议。", "aurDesc": "发送 Among Us Revamped 社交链接。", "sDesc": "开始游戏倒计时。", - "rDesc": "/r 发送活跃技能或当前模式。/r {ability} 发送特定技能信息", + "rDesc": "/r 发送活跃技能或当前模式。", "rolesDesc": "发送所有技能/游戏模式总览。", "kickDesc": "通过名字踢出玩家。", "ckickDesc": "通过颜色踢出玩家。", @@ -296,12 +271,10 @@ "pluginWarning": "警告:\n检测到您启用了 2 个或更多插件。\nAmong Us Revamped 与大多数模组不兼容。\n如果遇到 Bug,极有可能是因为冲突所致。", "systemSettings": "系统设置", - "abilitySettings": "能力设置", "gameplaySettings": "游戏设置", "gamemodeSettings": "模式设置", "systemSettingsDesc": "用于提升舒适度与测试的画质/系统设置。", - "abilitySettingsDesc": "用于增强原版角色能力的设置。", "gameplaySettingsDesc": "用于改善游戏内体验的设置。", "gamemodeSettingsDesc": "适用于特定游戏模式的情境设置。", diff --git a/Resources/Language/Spanish.json b/Resources/Language/Spanish.json index 27b4a70..38f7e68 100644 --- a/Resources/Language/Spanish.json +++ b/Resources/Language/Spanish.json @@ -195,28 +195,8 @@ "disableFuelEngines": "Desactivar Tarea Recargar Motores", "disableSubmitScan": "Desactivar Tarea Enviar Escaneo", "disableUploadData": "Desactivar Tarea Subir Datos", - "allCommandsFull": "TODOS LOS COMANDOS:\n\n/help\nMuestra este mensaje.\n/aur, /socials\nEnviar los enlaces sociales de Among Us Revamped.\n\n/r, /gm\nEnviar la descripción del modo actual o la lista de habilidades.\n/r {ability}\nEnviar información sobre una habilidad específica.\n/l, /lastgame\nEnviar la información del ganador anterior.\n\n/0kc, /0killcooldown\nEnviar la descripción del modo 0 de enfriamiento para matar.\n/sns, /shiftandseek\nEnviar la descripción del modo Shift and Seek.\n/sp, /speedrun\nEnviar la descripción del modo Speedrun.\n\n/kick, /ban\nExpulsa o bloquea a un jugador por nombre.\n/ckick, /cban\nExpulsa o bloquea a un jugador por color.\n\n/vip /moderator /admin\nAgrega a un jugador como VIP, moderador o administrador.\n/removevip, /removemoderator, /removeadmin\nElimina VIP, moderador o administrador de un jugador.\n\n/eg, /endgame\nTermina la partida actual.\n/em, /endmeeting\nTermina la reunión actual.\n/s, /start\nInicia la cuenta regresiva de la partida.\n\n/t {template}\nEnviar una plantilla de AUR-DATA/templates.txt.\n\n/col, /color, /colour\nCambia tu color; puede usarse para evitar límites.", + "allCommandsFull": "TODOS LOS COMANDOS:\n\n/help\nMuestra este mensaje.\n/aur, /socials\nEnviar los enlaces sociales de Among Us Revamped.\n\n/r, /gm\nEnviar la descripción del modo actual o la lista de habilidades.\n/l, /lastgame\nEnviar la información del ganador anterior.\n\n/0kc, /0killcooldown\nEnviar la descripción del modo 0 de enfriamiento para matar.\n/sns, /shiftandseek\nEnviar la descripción del modo Shift and Seek.\n/sp, /speedrun\nEnviar la descripción del modo Speedrun.\n\n/kick, /ban\nExpulsa o bloquea a un jugador por nombre.\n/ckick, /cban\nExpulsa o bloquea a un jugador por color.\n\n/vip /moderator /admin\nAgrega a un jugador como VIP, moderador o administrador.\n/removevip, /removemoderator, /removeadmin\nElimina VIP, moderador o administrador de un jugador.\n\n/eg, /endgame\nTermina la partida actual.\n/em, /endmeeting\nTermina la reunión actual.\n/s, /start\nInicia la cuenta regresiva de la partida.\n\n/t {template}\nEnviar una plantilla de AUR-DATA/templates.txt.\n\n/col, /color, /colour\nCambia tu color; puede usarse para evitar límites.", "translationReloaded": "Tu archivo se reinició correctamente.\nPara aplicar todos los cambios, reinicia el juego.", - "tabGroupCrewmateAbilities": "Configuración de habilidades de tripulante", - "crewmateAbility": "Habilidad de tripulante (rol)", - "scientistAbility": "Habilidad de científico", - "engineerAbility": "Habilidad de ingeniero", - "noisemakerAbility": "Habilidad de alertador", - "trackerAbility": "Habilidad de rastreador", - "detectiveAbility": "Habilidad de detective", - "extraVotesCrewmate": "Votos extra para el alcalde", - "extraVotesPerTask": "Votos extra por tarea para el trabajador", - "speedrunnerShortTasks": "Tareas cortas para el trabajador", - "speedrunnerLongTasks": "Tareas largas para el trabajador", - "tabGroupImpostorAbilities": "Configuración de habilidades de impostor", - "impostorAbility": "Habilidad de impostor (rol)", - "shapeshifterAbility": "Habilidad de cambiaformas", - "phantomAbility": "Habilidad de fantasma", - "viperAbility": "Habilidad de víbora", - "extraVotesImpostor": "Votos extra para el tirano", - "extraVotesPerKill": "Votos extra por asesinato para el ladrón", - "killsNeededForJuggernaut": "Muertes necesarias para el Juggernauta", - "ability": "Habilidad", "templateWelcome": "# En este archivo puedes agregar plantillas, que sirven como alternativas fáciles de copiar y pegar.\n# Para crear una plantilla, escribe una nueva línea con el mismo formato que la plantilla de prueba de abajo.\n# Ten en cuenta que las plantillas no pueden tener más de 120 caracteres ni contener caracteres especiales. Si los tienen, te expulsarán.\n\ntest: esta es una plantilla de ejemplo. Escribe '/t test' para verla.\n\nwelcome: ¡Bienvenido! Esta sala usa Among Us Revamped {ModVersion} por MV. ¡Diviértete!", "moderatorWelcome": "# En este archivo puedes agregar moderadores por código de amigo.\n# Si agregas a alguien, tendrá un nombre morado dentro del juego.\n# Ve a \"Configuración del sistema\" dentro del juego para personalizar los permisos de moderador. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000", "vipWelcome": "# En este archivo puedes agregar VIPs por código de amigo.\n# Si agregas a alguien, tendrá un nombre amarillo dentro del juego.\n# Ve a \"Configuración del sistema\" dentro del juego para personalizar los permisos de VIP. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n", @@ -241,7 +221,7 @@ "emDesc": "Termina la reunión actual.", "aurDesc": "Envía los enlaces sociales de Among Us Revamped.", "sDesc": "Inicia la cuenta regresiva de la partida.", - "rDesc": "/r envía las habilidades activas o el modo de juego actual. /r {ability} envía información de una habilidad específica", + "rDesc": "/r envía las habilidades activas o el modo de juego actual.", "rolesDesc": "Enviar el resumen de todas las habilidades/modo de juego.", "kickDesc": "Expulsa a un jugador por nombre.", "ckickDesc": "Expulsa a un jugador por color.", @@ -262,12 +242,10 @@ "pluginWarning": "ADVERTENCIA:\nSe han detectado 2 o más plugins.\nAmong Us Revamped no es compatible con la mayoría de mods.\nSi encuentras errores, probablemente se deban a incompatibilidad.", "systemSettings": "Configuración del sistema", - "abilitySettings": "Configuración de habilidades", "gameplaySettings": "Configuración de la partida", "gamemodeSettings": "Configuración del modo de juego", "systemSettingsDesc": "Ajustes de calidad para mejorar la comodidad y facilitar las pruebas.", - "abilitySettingsDesc": "Ajustes de habilidades para mejorar los roles originales.", "gameplaySettingsDesc": "Ajustes de la partida para mejorar la experiencia de juego.", "gamemodeSettingsDesc": "Ajustes específicos para determinados modos de juego.", diff --git a/build.cake b/build.cake deleted file mode 100644 index b3dc40b..0000000 --- a/build.cake +++ /dev/null @@ -1,28 +0,0 @@ -var target = Argument("target", "Build"); - -var workflow = BuildSystem.GitHubActions.Environment.Workflow; -var buildId = workflow.RunNumber; -var tag = workflow.RefType == GitHubActionsRefType.Tag ? workflow.RefName : null; - -Task("Build") - .Does(() => -{ - var settings = new DotNetBuildSettings - { - Configuration = "Release", - MSBuildSettings = new DotNetMSBuildSettings() - }; - - if (tag != null) - { - settings.MSBuildSettings.Version = tag; - } - else if (buildId != 0) - { - settings.MSBuildSettings.VersionSuffix = "ci." + buildId; - } - - DotNetBuild(".", settings); -}); - -RunTarget(target);