diff --git a/AmongUsRevamped.cs b/AmongUsRevamped.cs index 24fa01a..c0cf987 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.9.3"; + public const string ModVersion = "v1.9.4"; public static float GameTimer; public static float AfkTimer; diff --git a/Modules/BanManager.cs b/Modules/BanManager.cs index 9e78cbd..dcb262c 100644 --- a/Modules/BanManager.cs +++ b/Modules/BanManager.cs @@ -225,12 +225,12 @@ public static class BanManager if (Options.AutoKickStartAsBan.GetBool()) { AmongUsClient.Instance.KickPlayer(clientId, true); - Logger.SendInGame(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt())); + Logger.SendInGame(Translator.Get("startWordBan", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt())); } else { AmongUsClient.Instance.KickPlayer(clientId, false); - Logger.SendInGame(Translator.Get("startWordBan", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt())); + Logger.SendInGame(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt())); } Logger.Info(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()), "StartWordKick"); } diff --git a/Modules/CommandHelper.cs b/Modules/CommandHelper.cs index 80fd550..b45924d 100644 --- a/Modules/CommandHelper.cs +++ b/Modules/CommandHelper.cs @@ -33,6 +33,9 @@ internal static class CommandHelper new Cmd { Name = new[] { "/sr" }, Prompt = "/sr", Description = Translator.Get("SrDesc"), HasVariable = false }, new Cmd { Name = new[] { "/speedrun" }, Prompt = "/speedrun", Description = Translator.Get("SrDesc"), HasVariable = false }, + new Cmd { Name = new[] { "/pns" }, Prompt = "/pns", Description = Translator.Get("pnsDesc"), HasVariable = false }, + new Cmd { Name = new[] { "/poofandseek" }, Prompt = "/poofandseek", Description = Translator.Get("pnsDesc"), HasVariable = false }, + new Cmd { Name = new[] { "/eg" }, Prompt = "/eg", Description = Translator.Get("egDesc"), HasVariable = false }, new Cmd { Name = new[] { "/endgame" }, Prompt = "/endgame", Description = Translator.Get("egDesc"), HasVariable = false }, @@ -100,6 +103,7 @@ internal static class CommandHelper HelperText.color = new Color(0.7f, 0.7f, 0.7f, 0.7f); HelperText.transform.localPosition = __instance.outputText.transform.localPosition; HelperText.enabled = false; + HelperText.fontSharedMaterial = new Material(__instance.outputText.fontSharedMaterial); } string t = __instance.text; diff --git a/Modules/CustomOptionsHolder.cs b/Modules/CustomOptionsHolder.cs index 56c9ca0..b884639 100644 --- a/Modules/CustomOptionsHolder.cs +++ b/Modules/CustomOptionsHolder.cs @@ -48,7 +48,7 @@ namespace AmongUsRevamped public static readonly string[] gameModes = { - "Standard", "Shift And Seek", "Speedrun" + "Standard", "Shift And Seek", "Speedrun", "Poof And Seek" }; public static readonly string[] accessLevels = @@ -292,11 +292,9 @@ namespace AmongUsRevamped public static OptionItem NumSeekers; public static OptionItem TabGroupSNS; - public static OptionItem SNSSettingsOverride; public static OptionItem SNSChatInGame; public static OptionItem SNSChatInGameExtend; public static OptionItem CrewAutoWinsGameAfter; - public static OptionItem CantKillTime; public static OptionItem MisfiresToSuicide; public static OptionItem SNSDisableSabotage; public static OptionItem SNSDisableReactor; @@ -306,12 +304,27 @@ namespace AmongUsRevamped public static OptionItem SNSDisableHeli; public static OptionItem SNSDisableMushroomMixup; public static OptionItem SNSDisableCloseDoor; + public static OptionItem SNSImpostorsCanVent; public static OptionItem TabGroupSpeedrun; - public static OptionItem SpeedrunSettingsOverride; public static OptionItem GameAutoEndsAfter; public static OptionItem EngineerMode; + public static OptionItem TabGroupPNS; + public static OptionItem PNSChatInGame; + public static OptionItem PNSChatInGameExtend; + public static OptionItem PNSCrewAutoWinsGameAfter; + public static OptionItem BadMoveTimeToSuicide; + public static OptionItem PNSDisableSabotage; + public static OptionItem PNSDisableReactor; + public static OptionItem PNSDisableOxygen; + public static OptionItem PNSDisableLights; + public static OptionItem PNSDisableComms; + public static OptionItem PNSDisableHeli; + public static OptionItem PNSDisableMushroomMixup; + public static OptionItem PNSDisableCloseDoor; + public static OptionItem PNSImpostorsCanVent; + public static bool IsLoaded = false; public static void Load() @@ -442,14 +455,11 @@ namespace AmongUsRevamped TabGroupSNS = TextOptionItem.Create(70050, Translator.Get("tabGroupSNS"), TabGroup.GamemodeSettings) .SetColor(Color.green); - SNSSettingsOverride = BooleanOptionItem.Create(70051, Translator.Get("snsSettingsOverride"), true, TabGroup.GamemodeSettings, false); SNSChatInGame = BooleanOptionItem.Create(70063, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false); SNSChatInGameExtend = BooleanOptionItem.Create(70064, Translator.Get("snsChatInGameExtend"), false, TabGroup.GamemodeSettings, false) .SetParent(SNSChatInGame); - CantKillTime = IntegerOptionItem.Create(70053, Translator.Get("cantKillTime"), new(0, 60, 5), 20, TabGroup.GamemodeSettings, false) - .SetValueFormat(OptionFormat.Seconds); - MisfiresToSuicide = IntegerOptionItem.Create(70052, Translator.Get("misfiresToSuicide"), new(1, 10, 1), 2, TabGroup.GamemodeSettings, false); - CrewAutoWinsGameAfter = IntegerOptionItem.Create(70054, Translator.Get("crewAutoWinsGameAfter"), new(0, 600, 10), 300, TabGroup.GamemodeSettings, false) + MisfiresToSuicide = IntegerOptionItem.Create(70052, Translator.Get("misfiresToSuicide"), new(1, 10, 1), 1, TabGroup.GamemodeSettings, false); + CrewAutoWinsGameAfter = IntegerOptionItem.Create(70054, Translator.Get("crewAutoWinsGameAfter"), new(60, 600, 10), 300, TabGroup.GamemodeSettings, false) .SetValueFormat(OptionFormat.Seconds); SNSDisableSabotage = BooleanOptionItem.Create(70055, Translator.Get("snsDisableSabotage"), true, TabGroup.GamemodeSettings, false) .SetColor(Color.red); @@ -473,14 +483,47 @@ namespace AmongUsRevamped .SetColor(new Color32(255, 153, 153, byte.MaxValue)); SNSDisableCloseDoor = BooleanOptionItem.Create(70062, Translator.Get("snsDisableCloseDoor"), true, TabGroup.GamemodeSettings, false) .SetColor(Color.red); + SNSImpostorsCanVent = BooleanOptionItem.Create(70063, Translator.Get("snsImpostorCanVent"), true, TabGroup.GamemodeSettings, false); TabGroupSpeedrun = TextOptionItem.Create(70075, Translator.Get("tabGroupSpeedrun"), TabGroup.GamemodeSettings) .SetColor(Color.green); - SpeedrunSettingsOverride = BooleanOptionItem.Create(70076, Translator.Get("speedrunSettingsOverride"), true, TabGroup.GamemodeSettings, false); GameAutoEndsAfter = IntegerOptionItem.Create(70077, Translator.Get("gameAutoEndsAfter"), new(0, 600, 10), 300, TabGroup.GamemodeSettings, false) .SetValueFormat(OptionFormat.Seconds); EngineerMode = BooleanOptionItem.Create(70078, Translator.Get("engineerMode"), false, TabGroup.GamemodeSettings, false); + TabGroupPNS = TextOptionItem.Create(70100, Translator.Get("tabGroupPNS"), TabGroup.GamemodeSettings) + .SetColor(Color.green); + PNSChatInGame = BooleanOptionItem.Create(70102, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false); + PNSChatInGameExtend = BooleanOptionItem.Create(70103, Translator.Get("snsChatInGameExtend"), false, TabGroup.GamemodeSettings, false) + .SetParent(PNSChatInGame); + BadMoveTimeToSuicide = IntegerOptionItem.Create(70104, Translator.Get("badMoveTimeToSuicide"), new(1, 30, 1), 3, TabGroup.GamemodeSettings, false) + .SetValueFormat(OptionFormat.Seconds); + PNSCrewAutoWinsGameAfter = IntegerOptionItem.Create(70105, Translator.Get("crewAutoWinsGameAfter"), new(60, 600, 10), 300, TabGroup.GamemodeSettings, false) + .SetValueFormat(OptionFormat.Seconds); + PNSDisableSabotage = BooleanOptionItem.Create(70106, Translator.Get("pnsDisableSabotage"), true, TabGroup.GamemodeSettings, false) + .SetColor(Color.red); + PNSDisableReactor = BooleanOptionItem.Create(70107, Translator.Get("snsDisableReactor"), true, TabGroup.GamemodeSettings, false) + .SetParent(PNSDisableSabotage) + .SetColor(new Color32(255, 153, 153, byte.MaxValue)); + PNSDisableOxygen = BooleanOptionItem.Create(70108, Translator.Get("snsDisableOxygen"), true, TabGroup.GamemodeSettings, false) + .SetParent(PNSDisableSabotage) + .SetColor(new Color32(255, 153, 153, byte.MaxValue)); + PNSDisableLights = BooleanOptionItem.Create(70109, Translator.Get("snsDisableLights"), true, TabGroup.GamemodeSettings, false) + .SetParent(PNSDisableSabotage) + .SetColor(new Color32(255, 153, 153, byte.MaxValue)); + PNSDisableComms = BooleanOptionItem.Create(70110, Translator.Get("snsDisableComms"), true, TabGroup.GamemodeSettings, false) + .SetParent(PNSDisableSabotage) + .SetColor(new Color32(255, 153, 153, byte.MaxValue)); + PNSDisableHeli = BooleanOptionItem.Create(70111, Translator.Get("snsDisableHeli"), true, TabGroup.GamemodeSettings, false) + .SetParent(PNSDisableSabotage) + .SetColor(new Color32(255, 153, 153, byte.MaxValue)); + PNSDisableMushroomMixup = BooleanOptionItem.Create(70112, Translator.Get("snsDisableMushroomMixup"), true, TabGroup.GamemodeSettings, false) + .SetParent(PNSDisableSabotage) + .SetColor(new Color32(255, 153, 153, byte.MaxValue)); + PNSDisableCloseDoor = BooleanOptionItem.Create(70113, Translator.Get("pnsDisableCloseDoor"), true, TabGroup.GamemodeSettings, false) + .SetColor(Color.red); + PNSImpostorsCanVent = BooleanOptionItem.Create(70114, Translator.Get("snsImpostorCanVent"), true, TabGroup.GamemodeSettings, false); + // Gameplay Settings TabGroupSabotages = TextOptionItem.Create(60450, Translator.Get("tabGroupSabotages"), TabGroup.ModSettings) .SetColor(Color.blue); diff --git a/Modules/FixedUpdate.cs b/Modules/FixedUpdate.cs index 1b1d171..5e03674 100644 --- a/Modules/FixedUpdate.cs +++ b/Modules/FixedUpdate.cs @@ -1,3 +1,4 @@ +using AmongUs.GameOptions; using Hazel; using System; using System.Runtime.CompilerServices; @@ -9,6 +10,7 @@ namespace AmongUsRevamped; [HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.FixedUpdate))] public static class FixedUpdate { + public static Dictionary BadMovementTimer = new Dictionary(); public static readonly Dictionary SpawnRange = new() { ["Skeld"] = new(-0.8f, 1.2f), @@ -93,6 +95,79 @@ public static class FixedUpdate Position[p.PlayerId] = p.GetTruePosition(); } } + + if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek) + { + foreach (var p in PlayerControl.AllPlayerControls) + { + if (p.Data.RoleType == RoleTypes.Phantom && !p.PhantomFadeActive && !p.Data.IsDead && p.MyPhysics.GetVelocity() != new Vector2(0, 0) && OnGameStartPatch.PastStartScreen) + { + if (!BadMovementTimer.ContainsKey(p.Data.PlayerId)) + { + BadMovementTimer[p.Data.PlayerId] = 0f; + } + + BadMovementTimer[p.Data.PlayerId] += Time.fixedDeltaTime; + + if (BadMovementTimer[p.Data.PlayerId] > Options.BadMoveTimeToSuicide.GetInt()) + { + p.RpcSetRole(RoleTypes.ImpostorGhost); + Logger.Info($" {p.Data.PlayerName} wrongfully moved for {Options.BadMoveTimeToSuicide.GetInt()}s and suicided", "SNSKillManager"); + Logger.SendInGame($" {p.Data.PlayerName} wrongfully moved for {Options.BadMoveTimeToSuicide.GetInt()}s and suicided"); + } + } + } + } + + // We check if any SnS Shapshifter is currently nearby their correct target. + // If so, the global Kill Cooldown is set to 1 and all killing actions may proceed. + // If not, the global Kill Cooldown is set to 0. + // While this value is 0, the game stops the kill cooldown from decreasing. + // If the Kill Cooldown value is 0 by default (which it will be at the start of a match), Among Us does not allow kills at all. + // This means most of the time, we can successfully prevent invalid kills. + // The only problem is that if one Shapeshifter is nearby their correct target, while another is not, the second Shapeshifter can kill too. + if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && !Utils.IsLobby) + { + bool shapeshifterNearTarget = false; + + foreach (var p in PlayerControl.AllPlayerControls) + { + if (p.Data == null || p.Data.IsDead || p.shapeshiftTargetPlayerId == byte.MaxValue) continue; + + PlayerControl shapeshiftTarget = null; + + foreach (var t in PlayerControl.AllPlayerControls) + { + if (t.Data == null || t.Data.IsDead) continue; + + if (t.Data.PlayerId == p.shapeshiftTargetPlayerId) + { + shapeshiftTarget = t; + break; + } + } + + if (shapeshiftTarget == null) continue; + + float distance = Vector2.Distance(p.GetTruePosition(), shapeshiftTarget.GetTruePosition()); + + if (distance <= 3f) + { + shapeshifterNearTarget = true; + break; + } + } + + + float newCooldown = shapeshifterNearTarget ? 1f : 0f; + + if (Main.NormalOptions.KillCooldown != newCooldown) + { + Main.NormalOptions.KillCooldown = newCooldown; + OptionManager.SyncGameOptions(); + } + + } } private static bool IsSpawn(Vector2 pos) @@ -127,10 +202,16 @@ class FixedUpdateInGamePatch private static float t; private static GameObject settingsLabel; + public static bool CanUseKillButton(PlayerControl pc) + { + pc.Data.Role.CanUseKillButton = false; + return false; + } + public static void Postfix(PlayerControl __instance) { if (__instance == null || __instance.PlayerId == 255 || !AmongUsClient.Instance.AmHost) return; - + t += Time.deltaTime; if (t < 0.2f) return; t = 0f; @@ -159,19 +240,22 @@ class FixedUpdateInGamePatch switch (gamemode) { + case 0: break; case 1: // SnS - if (Main.NormalOptions.KillCooldown != 2.5f) - Main.NormalOptions.KillCooldown = 2.5f; - - if (Options.SNSSettingsOverride.GetBool() && settingsLabel == null) - Main.NormalOptions.TaskBarMode = 0; + if (Utils.InGame) return; + if (Main.NormalOptions.KillCooldown != 1f) Main.NormalOptions.KillCooldown = 1f; break; case 2: // Speedrun break; + + case 3: // PnS + if (Utils.InGame) return; + if (Main.NormalOptions.KillCooldown != 1f) Main.NormalOptions.KillCooldown = 1f; + break; } if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance) @@ -200,6 +284,18 @@ class FixedUpdateInGamePatch NormalGameEndChecker.CheckWinnerText("NoOneWinsSpeedrun"); } } + // 3 = Poof and Seek + if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek) + { + if (Main.GameTimer > Options.PNSCrewAutoWinsGameAfter.GetInt()) + { + Main.GameTimer = 0f; + + Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote); + Logger.Info($" Crewmates won because the game took longer than {Options.PNSCrewAutoWinsGameAfter.GetInt()}s", "PNSManager"); + NormalGameEndChecker.CheckWinnerText("PnSTimer"); + } + } } } } \ No newline at end of file diff --git a/Modules/OptionManager.cs b/Modules/OptionManager.cs new file mode 100644 index 0000000..e2f31d4 --- /dev/null +++ b/Modules/OptionManager.cs @@ -0,0 +1,45 @@ +using AmongUs.GameOptions; +using Hazel; +using Il2CppInterop.Runtime.InteropTypes.Arrays; +using System; + +namespace AmongUsRevamped; + +public static class OptionManager +{ + private static OptionBackupData CachedOptions; + public static void SyncGameOptions() + { + if (!AmongUsClient.Instance.AmHost) return; + + var options = GameOptionsManager.Instance.CurrentGameOptions; + + foreach (var component in GameManager.Instance.LogicComponents) + { + var logicOptions = component.TryCast(); + + if (logicOptions != null) + { + logicOptions.SetGameOptions(options); + } + } + } + + public static void CacheOptions() + { + if (!AmongUsClient.Instance.AmHost) return; + + CachedOptions = new OptionBackupData(GameOptionsManager.Instance.CurrentGameOptions); + } + + public static void RestoreOptions() + { + if (!AmongUsClient.Instance.AmHost || CachedOptions == null) return; + + var restored = CachedOptions.Restore(GameOptionsManager.Instance.CurrentGameOptions); + + GameOptionsManager.Instance.CurrentGameOptions = restored; + + SyncGameOptions(); + } +} \ No newline at end of file diff --git a/Modules/Utils.cs b/Modules/Utils.cs index 1c5fec9..ea0ed64 100644 --- a/Modules/Utils.cs +++ b/Modules/Utils.cs @@ -229,6 +229,17 @@ public static class Utils PlayerControlSetRolePatch.manualSeekers.Clear(); OnGameStartPatch.PastStartScreen = false; + + FixedUpdate.BadMovementTimer.Clear(); + + skeldVotes = 0; + miraVotes = 0; + polusVotes = 0; + airshipVotes = 0; + fungleVotes = 0; + dleksVotes = 0; + HasVoted.Clear(); + MapVoteActive = false; } public static PlayerControl[] AllAlivePlayerControls diff --git a/Patches/ChatPatches.cs b/Patches/ChatPatches.cs index 8f3c23c..47997d4 100644 --- a/Patches/ChatPatches.cs +++ b/Patches/ChatPatches.cs @@ -451,14 +451,7 @@ internal static class SendChatPatch if (text == "/sns" || text == "/shiftandseek") { - 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", 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); - } + Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nMeetings & Reports = 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); return false; } @@ -468,6 +461,12 @@ internal static class SendChatPatch return false; } + if (text == "/pns" || text == "/poofandseek") + { + Utils.ChatCommand(__instance, $"Poof and Seek:\n\nImpostors can only move while vanished\n Meetings & Reports = Off\nVisibly moving {Options.BadMoveTimeToSuicide.GetInt()}s as Phantom = Suicide", $"Crewmates win by doing tasks or surviving {Options.PNSCrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone", true); + return false; + } + if (text == "/r" || text == "/roles") { switch (Options.Gamemode.GetValue()) @@ -480,20 +479,16 @@ internal static class SendChatPatch break; case 1: - 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", 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); - } + Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nMeetings & Reports = 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); break; 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; + case 3: + Utils.ChatCommand(__instance, $"Poof and Seek:\n\nImpostors can only move while vanished\n Meetings & Reports = Off\nVisibly moving {Options.BadMoveTimeToSuicide.GetInt()}s as Phantom = Suicide", $"Crewmates win by doing tasks or surviving {Options.PNSCrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone", true); + break; } __instance.timeSinceLastMessage = 0.8f; __instance.freeChatField.textArea.Clear(); @@ -503,6 +498,8 @@ internal static class SendChatPatch if (text.StartsWith("/t ")) { + BanManager.LoadTemplates(); + string templateName = text[3..].Trim().ToLower(); if (BanManager.Templates.TryGetValue(templateName, out string templateMessage)) @@ -803,16 +800,7 @@ public static class RPCHandlerPatch if (text == "/sns" || text == "/shiftandseek") { if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return; - - 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", 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); - } + Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nMeetings & Reports = 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); } if (text == "/sr" || text == "/speedrun") @@ -821,6 +809,12 @@ public static class RPCHandlerPatch 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); } + if (text == "/pns" || text == "/poofandseek") + { + if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return; + Utils.ModeratorChatCommand($"Poof and Seek:\n\nImpostors can only move while vanished\n Meetings & Reports = Off\nVisibly moving {Options.BadMoveTimeToSuicide.GetInt()}s as Phantom = Suicide", $"Crewmates win by doing tasks or surviving {Options.PNSCrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone", true); + } + if (text == "/r" || text == "/roles") { if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return; @@ -834,20 +828,17 @@ public static class RPCHandlerPatch break; case 1: - 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", 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); - } + Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nMeetings & Reports = 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); break; 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; + case 3: + Utils.ModeratorChatCommand($"Poof and Seek:\n\nImpostors can only move while vanished\n Meetings & Reports = Off\nVisibly moving {Options.BadMoveTimeToSuicide.GetInt()}s as Phantom = Suicide", $"Crewmates win by doing tasks or surviving {Options.PNSCrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone", true); + break; + } } @@ -855,6 +846,8 @@ public static class RPCHandlerPatch if (text.StartsWith("/t ")) { + BanManager.LoadTemplates(); + string templateName = text[3..].Trim().ToLower(); if (BanManager.Templates.TryGetValue(templateName, out string templateMessage)) diff --git a/Patches/EndGamePatches.cs b/Patches/EndGamePatches.cs index faf6886..1d2ca9b 100644 --- a/Patches/EndGamePatches.cs +++ b/Patches/EndGamePatches.cs @@ -12,7 +12,9 @@ public static class EndGameManagerPatch { Logger.Info(" -------- GAME ENDED --------", "EndGame"); Utils.ClearLeftoverData(); - + + //OptionManager.RestoreOptions(); + EndGameNavigation navigation = __instance.Navigation; if (!AmongUsClient.Instance.AmHost || __instance == null || navigation == null || !Options.AutoRejoinLobby.GetBool()) return; navigation.NextGame(); @@ -58,6 +60,13 @@ class NormalGameEndChecker return; } + if (Winner == "PnSTimer") + { + LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList; + canUpdateWinnerText = false; + return; + } + if (Winner == "NoOneWinsSpeedrun") { LastWinReason = $"No one wins. ({Options.GameAutoEndsAfter.GetInt()}s Timer)"; diff --git a/Patches/ExilePatch.cs b/Patches/ExilePatch.cs index 21c6c00..c308a84 100644 --- a/Patches/ExilePatch.cs +++ b/Patches/ExilePatch.cs @@ -1,3 +1,4 @@ +using AmongUs.GameOptions; using System.Reflection; using Il2CppInterop.Runtime.InteropTypes; diff --git a/Patches/IntroPatch.cs b/Patches/IntroPatch.cs index 4e0a56e..bc28352 100644 --- a/Patches/IntroPatch.cs +++ b/Patches/IntroPatch.cs @@ -14,7 +14,9 @@ internal static class CoShowIntroPatch Logger.Info(" Intro initiated", "CoShowIntro"); if (!AmongUsClient.Instance.AmHost) return; - + + //OptionManager.CacheOptions(); + foreach (var p in PlayerControl.AllPlayerControls) { p.cosmetics.nameText.text = p.Data.PlayerName; @@ -36,17 +38,52 @@ internal static class CoShowIntroPatch }, 33f, "MeetingEnabled"); } - if (Options.Gamemode.GetValue() == 1 && Options.SNSChatInGameExtend.GetBool()) + if (Options.Gamemode.GetValue() == 1 && Options.SNSChatInGameExtend.GetBool() && !Utils.isHideNSeek) { - if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0) + Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nMeetings & Reports = 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); + } + + if ((GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)) + { + Main.NormalOptions.KillCooldown = 8f; + OptionManager.SyncGameOptions(); + + _ = new LateTask(() => + { + Main.NormalOptions.KillCooldown = 0.01f; + OptionManager.SyncGameOptions(); + }, 13f, "NoKcdEnabled"); + } + + if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek) + { + if (Options.PNSChatInGame.GetBool()) { - 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); + Main.NormalOptions.KillCooldown = 13f; + OptionManager.SyncGameOptions(); + + _ = new LateTask(() => + { + Main.NormalOptions.KillCooldown = 0.01f; + OptionManager.SyncGameOptions(); + }, 18f, "NoKcdEnabled"); } else { - - 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); - } + Main.NormalOptions.KillCooldown = 8f; + OptionManager.SyncGameOptions(); + + _ = new LateTask(() => + { + Main.NormalOptions.KillCooldown = 0.01f; + OptionManager.SyncGameOptions(); + }, 13f, "NoKcdEnabled"); + } + } + + if (Options.Gamemode.GetValue() == 3 && Options.PNSChatInGameExtend.GetBool() && !Utils.isHideNSeek) + { + Utils.ModeratorChatCommand($"Poof and Seek:\n\nImpostors can only move while vanished\n Meetings & Reports = Off\nVisibly moving {Options.BadMoveTimeToSuicide.GetInt()}s as Phantom = Suicide", $"Crewmates win by doing tasks or surviving {Options.PNSCrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone", true); } } } diff --git a/Patches/JoinAndLeavePatches.cs b/Patches/JoinAndLeavePatches.cs index e012c58..e82006c 100644 --- a/Patches/JoinAndLeavePatches.cs +++ b/Patches/JoinAndLeavePatches.cs @@ -124,6 +124,8 @@ class OnPlayerJoinedPatch if (Options.EnableJoinMessages.GetBool()) { JoinNum++; + + BanManager.LoadTemplates(); BanManager.Templates.TryGetValue("welcome", out string msg); if (JoinNum >= Options.MessagePerPlayerNum.GetInt()) diff --git a/Patches/OnGameStartedPatch.cs b/Patches/OnGameStartedPatch.cs index 8b912b0..fa62007 100644 --- a/Patches/OnGameStartedPatch.cs +++ b/Patches/OnGameStartedPatch.cs @@ -83,7 +83,7 @@ class PlayerControlSetRolePatch foreach (var p in candidates) { if (Seekers.Count >= seekersCount) break; - + Seekers.Add(p.PlayerId); } } @@ -123,13 +123,19 @@ internal static class OnGameStartPatch public static bool PastStartScreen; public static void Postfix() { - if (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 1 && Options.SNSChatInGame.GetBool()) + if (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 1 && Options.SNSChatInGame.GetBool() && !Utils.isHideNSeek) { PlayerControl.LocalPlayer.CmdReportDeadBody(null); if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose(); } - if (Main.GM.Value) + if (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 3 && Options.PNSChatInGame.GetBool() && !Utils.isHideNSeek) + { + PlayerControl.LocalPlayer.CmdReportDeadBody(null); + if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose(); + } + + if (AmongUsClient.Instance.AmHost && Main.GM.Value) { Logger.Info($" Game Master Successful", "StartGame"); PlayerControl.LocalPlayer.Exiled(); diff --git a/Patches/PlayerControlPatches.cs b/Patches/PlayerControlPatches.cs index 08a3b3a..3eaa125 100644 --- a/Patches/PlayerControlPatches.cs +++ b/Patches/PlayerControlPatches.cs @@ -25,7 +25,7 @@ class ReportDeadBodyPatch // target == null means meeting - if (Options.Gamemode.GetValue() == 1 || Options.Gamemode.GetValue() == 2) + if (Options.Gamemode.GetValue() == 1 || Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3) { if (target != null) { @@ -49,7 +49,7 @@ internal static class MurderPlayerPatch public static readonly Dictionary misfireCount = new(); public static readonly Dictionary killCount = new(); - public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target, [HarmonyArgument(1)] MurderResultFlags resultFlags, ref bool __state) + public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target, [HarmonyArgument(1)] MurderResultFlags resultFlags, ref bool __state) { if (!AmongUsClient.Instance.AmHost || !resultFlags.HasFlag(MurderResultFlags.Succeeded)) return; @@ -60,32 +60,29 @@ internal static class MurderPlayerPatch killCount[playerId] = 0; } - if (!__instance.isNew) - { - killCount[playerId]++; - Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer"); - if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value) + killCount[playerId]++; + Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer"); + + if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value) + { + foreach (var p in PlayerControl.AllPlayerControls) { - foreach (var p in PlayerControl.AllPlayerControls) + if (p.Data.Role.IsImpostor) { - if (p.Data.Role.IsImpostor) - { - p.cosmetics.nameText.text = $"{p.Data.PlayerName}({killCount[p.Data.PlayerId]}†) - {Utils.StoredRoleText[p.PlayerId]}"; - } - else - { - p.cosmetics.nameText.text = $"{p.Data.PlayerName}({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]}) - {Utils.StoredRoleText[p.PlayerId]}"; - } + p.cosmetics.nameText.text = $"{p.Data.PlayerName}({killCount[p.Data.PlayerId]}†) - {Utils.StoredRoleText[p.PlayerId]}"; + } + else + { + p.cosmetics.nameText.text = $"{p.Data.PlayerName}({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]}) - {Utils.StoredRoleText[p.PlayerId]}"; } } } - //2 = Shift and Seek + //1 = Shift and Seek if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek) { - if (!resultFlags.HasFlag(MurderResultFlags.Succeeded)) - return; + if (!resultFlags.HasFlag(MurderResultFlags.Succeeded)) return; if (target.Data.PlayerId == __instance.shapeshiftTargetPlayerId) { @@ -98,27 +95,12 @@ internal static class MurderPlayerPatch misfireCount[playerId]++; - if (misfireCount[__instance.Data.PlayerId] < Options.MisfiresToSuicide.GetFloat()) - { - __instance.RpcSetRole(RoleTypes.Crewmate); - __instance.isNew = true; - Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName} incorrectly and can't kill for {Options.CantKillTime.GetInt()}s", "SNSKillManager"); - Logger.SendInGame($" {__instance.Data.PlayerName} killed {target.Data.PlayerName} incorrectly and can't kill for {Options.CantKillTime.GetInt()}s"); - - new LateTask(() => - { - __instance.isNew = false; - if (!__instance.Data.IsDead && __instance != null) {__instance.RpcSetRole(RoleTypes.Shapeshifter, false);} - }, Options.CantKillTime.GetInt(), "SNSResetRole"); - } - if (misfireCount[__instance.Data.PlayerId] >= Options.MisfiresToSuicide.GetFloat()) { __instance.RpcSetRole(RoleTypes.ImpostorGhost); Logger.Info($" {__instance.Data.PlayerName} misfired {misfireCount[playerId]} time(s) and suicided", "SNSKillManager"); Logger.SendInGame($" {__instance.Data.PlayerName} misfired {misfireCount[playerId]} time(s) and suicided"); } - } } } @@ -127,7 +109,6 @@ internal static class MurderPlayerPatch [HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CheckShapeshift))] internal static class CheckShapeshiftPatch { - public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target) { if (!AmongUsClient.Instance.AmHost) return true; @@ -156,7 +137,7 @@ class PlayerControlCompleteTaskPatch public static void Postfix(PlayerControl __instance, uint idx) { if (!AmongUsClient.Instance.AmHost) return; - + foreach (var p in PlayerControl.AllPlayerControls) { diff --git a/Patches/SabotagePatches.cs b/Patches/SabotagePatches.cs index 40283a4..13359bd 100644 --- a/Patches/SabotagePatches.cs +++ b/Patches/SabotagePatches.cs @@ -51,6 +51,23 @@ public static class SabotageSystemTypeRepairDamagePatch } return true; } + + if (Options.Gamemode.GetValue() == 3) + { + if (Sabo == SystemTypes.LifeSupp && Options.PNSDisableOxygen.GetBool() || + Sabo == SystemTypes.Reactor && Options.PNSDisableReactor.GetBool() || + Sabo == SystemTypes.Electrical && Options.PNSDisableLights.GetBool() || + Sabo == SystemTypes.Comms && Options.PNSDisableComms.GetBool() || + Sabo == SystemTypes.HeliSabotage && Options.PNSDisableHeli.GetBool() || + Sabo == SystemTypes.MushroomMixupSabotage && Options.PNSDisableMushroomMixup.GetBool() || + Sabo == SystemTypes.Laboratory && Options.PNSDisableReactor.GetBool() && msgReader != null || + player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool()) + { + Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SnSSabotageCheck"); + return false; + } + return true; + } else return true; } } @@ -64,7 +81,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.SNSDisableCloseDoor.GetBool())) + if ((Options.DisableCloseDoor.GetBool() && Options.Gamemode.GetValue() == 0) || (Options.Gamemode.GetValue() == 1 && Options.SNSDisableCloseDoor.GetBool()) || (Options.Gamemode.GetValue() == 3 && Options.PNSDisableCloseDoor.GetBool())) { Logger.Info($" Door sabotage in: {room} was blocked", "DoorCheck"); return false; diff --git a/Patches/VentPatches.cs b/Patches/VentPatches.cs index a7b3e8a..9d6b15a 100644 --- a/Patches/VentPatches.cs +++ b/Patches/VentPatches.cs @@ -7,7 +7,7 @@ class EnterVentPatch { public static void Postfix(Vent __instance, [HarmonyArgument(0)] PlayerControl pc) { - if (!AmongUsClient.Instance.AmHost) return; + if (!AmongUsClient.Instance.AmHost || pc == null || __instance == null || pc.Data == null) return; if (pc.Data.RoleType != RoleTypes.Impostor && pc.Data.RoleType != RoleTypes.Shapeshifter && @@ -23,5 +23,15 @@ class EnterVentPatch { EACR.VentCheat(pc, __instance); } + + if ((Options.Gamemode.GetValue() == 1 && !Options.SNSImpostorsCanVent.GetBool()) || (Options.Gamemode.GetValue() == 3 && !Options.PNSImpostorsCanVent.GetBool())) + { + if (pc.Data.RoleType == RoleTypes.Impostor || pc.Data.RoleType == RoleTypes.Shapeshifter || pc.Data.RoleType == RoleTypes.Phantom || pc.Data.RoleType == RoleTypes.Viper) + { + pc.MyPhysics.RpcBootFromVent(__instance.Id); + Logger.SendInGame($"{pc.Data.PlayerName} tried to vent as Impostor, but got blocked"); + Logger.Info($" {pc.Data.PlayerName} tried to vent as Impostor, but got blocked", "VentManager"); + } + } } } \ No newline at end of file diff --git a/README.md b/README.md index b9d9ffa..30329f3 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ **** ‎ -# 🎮 Features (v1.9.3): +# 🎮 Features (v1.9.4): ## ♠️ Client Side settings: - Game Master (Spectator) @@ -77,6 +77,7 @@ ## 🏆 Custom Gamemodes: - 0 Kill Cooldown -> Set Kill Cooldown to 0.01 - Shift and Seek +- Poof and Seek - Speedrun ## 👾 Custom Anticheat: - Detect invalid sabotages diff --git a/Resources/Language/English.json b/Resources/Language/English.json index 7e128f4..ba30611 100644 --- a/Resources/Language/English.json +++ b/Resources/Language/English.json @@ -234,7 +234,7 @@ "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.\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/pns, /poofandseek\nSend Poof 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.\n\n/seeker {name}\nForce someone as Seeker in HnS.\n/seekers\nShow forced seeker list.\n/clearseeker\nClear forced seeker list.\n\n/mapvote\nStarts a map vote containing default maps.\n\n/allmapvote\nStarts a map vote that includes Eht Dleks.", "translationReloaded": "Your file has successfully been reset.\nTo apply all changes, restart your game.", @@ -264,6 +264,7 @@ "snsDesc": "Send Shift and Seek gamemode Description.", "0kcDesc": "Send 0 Kill Cooldown gamemode Description.", "SrDesc": "Send Speedrun gamemode Description.", + "pnsDesc": "Send Poof and Seek gamemode Description.", "egDesc": "End the current game.", "emDesc": "End the current meeting.", "aurDesc": "Send Among Us Revamped social links.", @@ -335,5 +336,11 @@ "automaticMapPoll": "Automatic /mapvote After Rejoining", "automaticAllMapPoll": "Automatic /allmapvote After Rejoining", - "timeBeforeMapPoll": "Time Before Poll Starts" + "timeBeforeMapPoll": "Time Before Poll Starts", + + "pnsDisableSabotage": "Disable PnS Critical Sabotages", + "pnsDisableCloseDoor": "Disable PnS Door Sabotages", + "tabGroupPNS": "Poof and Seek", + "badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For", + "snsImpostorCanVent": "Impostors can vent" } diff --git a/Resources/Language/Italian.json b/Resources/Language/Italian.json index 8ee9f0c..3a4b3e6 100644 --- a/Resources/Language/Italian.json +++ b/Resources/Language/Italian.json @@ -3,284 +3,343 @@ "gameMaster": "Spettatore", "showFPS": "Mostra FPS", - "autoStart": "Auto Start", - "enableDarkTheme": "Abilità Tema Scuro", - "enableLobbyMusic": "Musica Lobby", - "disableInfoWhenDead": "Nascondi Info da Morto", - "disableCommandHelper": "Disabilita Command Helper", - "disableCompatibilityWarning": "Disattiva avviso di compatibilità", + "autoStart": "Avvio Automatico", + "enableDarkTheme": "Abilita Tema Scuro", + "enableLobbyMusic": "Musica della Lobby", + "disableInfoWhenDead": "Nascondi Informazioni Dopo la Morte", + "disableCommandHelper": "Disabilita Aiutante Comandi", + "disableCompatibilityWarning": "Disabilita Avviso di Compatibilità", - "gameMasterWarning":"Assisterai alle partite come spettatore finché la modalità Spettatore non viene disattivata.AVVISO:I messaggi delle abilità non verranno inviati e l'assegnazione dei ruoli potrebbe non essere accurata se questa impostazione è attiva.", - - "cancelStartCountdown": "Conto alla rovescia di inizio annullato", + "cancelStartCountdown": "Conto alla rovescia annullato", - "invalidFriendCodeKick": "{0} è stato espulso per avere un codice amico non valido", - "invalidFriendCodeBan": "{0} è stato bannato per avere un codice amico non valido", - "language": "Lingua (Richiede il riavvio)", - "gamemode": "Modalità di gioco", + "invalidFriendCodeKick": "{0} è stato kickato per un Codice Amico non valido", + "invalidFriendCodeBan": "{0} è stato bannato per un Codice Amico non valido", + "language": "Lingua (Richiede Riavvio)", + "gamemode": "Modalità", "tabGroupMain": "Moderazione", - "kickLowLevelPlayer": "Espelli giocatori sotto il livello", - "tempBanLowLevelPlayer": "Banna invece di espellere", - "dontKickLevelOnes": "Non espellere i giocatori di livello 1 per lobby glitched", - "kickInvalidFriendCodes": "Espelli codici amico non validi (vuoti)", - "tempBanInvalidFriendCodes": "Banna invece di espellere", - "deniedWordsToKick": "Inviate parole proibite per espellere il giocatore", - "moderatorCanUseCommand": "I moderatori possono usare i comandi", - "autoKickStart": "Espelli i giocatori che dicono Start", - "autoKickStartAsBan": "Banna invece di espellere", - "autoKickStartTimes": "Messaggi di Start necessari per l'espulsione", + "kickLowLevelPlayer": "Kicka Giocatori Sotto il Livello", + "tempBanLowLevelPlayer": "Banna invece di kickare", + "dontKickLevelOnes": "Non kickare Giocatori Liv.1 Nelle Lobby Glitchate", + "kickInvalidFriendCodes": "Kicka Codici Amico Non Validi (Vuoti)", + "tempBanInvalidFriendCodes": "Banna invece di kickare", + "deniedWordsToKick": "Parole Vietate Inviate Per Kickare il Giocatore", + "moderatorCanUseCommand": "I Moderatori Possono Usare i Comandi", + "autoKickStart": "Kicka Giocatori Che Dicono Start", + "autoKickStartAsBan": "Banna invece di kickare", "autoKickStartStrength": "Modalità di rilevamento rigorosa", "tabGroupAutomation": "Automazione", - "autoSendGameInfo": "Invia automaticamente le informazioni sul vincitore", + "autoSendGameInfo": "Invia automaticamente informazioni sui vincitori", "autoRejoinLobby": "Rientra automaticamente nella lobby", - "autoStartTimer": "Conto alla rovescia per l'Auto Start", - "waitAutoStart": "Auto Start dopo", - "playerAutoStart": "Giocatori necessari per l'Auto Start", - "enableJoinMessages": "Abilita i messaggi di benvenuto", - "messagePerPlayerNum": "Messaggio in base al numero di accessi", - "tabGroupMisc": "Varie", - "startCountdown": "Conto alla rovescia di inizio predefinito", - "colorCommandLevel": "Chi può usare i comandi colore", - "allowFortegreen": "Consenti il colore Verde Forte", - "noGameEnd": "Nessuna fine del gioco", + "autoStartTimer": "Conto alla rovescia Avvio Automatico", + "waitAutoStart": "Avvio Automatico Dopo", + "playerAutoStart": "Giocatori Necessari Per Avvio Automatico", + "enableJoinMessages": "Abilita Messaggio di Benvenuto", + "messagePerPlayerNum": "Messaggio Ogni # Ingressi", + "tabGroupMisc": "Sperimentale", + "startCountdown": "Conto alla rovescia Predefinito", + "colorCommandLevel": "Chi Può Usare i Comandi Colore", + "allowFortegreen": "Consenti Colore Fortegreen", + "noGameEnd": "Nessuna Fine Partita", - "tabGroupAccess": "Livelli di accesso", - "slashColorCmd": "Chi può usare /color", - "slashRolesAndGamemodeCmd": "Chi può usare /r e i template", - "slashLastGameCmd": "Chi può usare /l e /aur", - "slashKickCmd": "Chi può usare /kick e /ckick", - "slashBanCmd": "Chi può usare /ban e /cban", - "slashEndMeetingCmd": "Chi può usare /endmeeting", - "slashStartAndEndGameCmd": "Chi può usare /startgame e /endgame", + "tabGroupAccess": "Livelli di Accesso", + "slashColorCmd": "Chi Può Usare /color", + "slashRolesAndGamemodeCmd": "Chi Può Usare /r & Templates", + "slashLastGameCmd": "Chi Può Usare /l & /aur", + "slashKickCmd": "Chi Può Usare /kick & /ckick", + "slashBanCmd": "Chi Può Usare /ban & /cban", + "slashStartAndEndGameCmd": "Chi Può Usare /startgame & /endgame", - "tabGroupCrewmate": "Ruoli degli astronauti", - "tabGroupNeutral": "Ruoli dei neutrali", - "tabGroupImpostor": "Ruoli degli impostori", + "tabGroupCrewmate": "Ruoli Astronauti", + "tabGroupNeutral": "Ruoli Neutrali", + "tabGroupImpostor": "Ruoli Impostori", "tabGroupStandard": "Standard", "tabGroupHNS": "Nascondino", "numSeekers": "# Cercatori", - "tabGroup0Kcd": "Ricarica uccisione a 0", - "noKcdSettingsOverride": "Aggiorna automaticamente le impostazioni", - "tabGroupSNS": "Mutaforma e cerca", - "snsChatInGame": "Chat durante il gioco (sperimentale)", - "snsSettingsOverride": "Aggiorna automaticamente le impostazioni", - "cantKillTime": "Dopo un errore, non può uccidere per", - "misfiresToSuicide": "Suicidio dopo un numero di errori", - "crewAutoWinsGameAfter": "Gli astronauti vincono automaticamente dopo", - "snsDisableSabotage": "Disabilita i sabotaggi critici SnS", - "snsDisableReactor": "Disabilita il sabotaggio del reattore", - "snsDisableOxygen": "Disabilita il sabotaggio dell'ossigeno", - "snsDisableLights": "Disabilita il sabotaggio delle luci", - "snsDisableComms": "Disabilita il sabotaggio delle comunicazioni", - "snsDisableHeli": "Disabilita il sabotaggio della rotta di collisione", - "snsDisableMushroomMixup": "Disabilita il sabotaggio della miscela di funghi", - "snsDisableCloseDoor": "Disabilita i sabotaggi delle porte SnS", + "tabGroup0Kcd": "0 Cooldown Uccisione", + "noKcdSettingsOverride": "Aggiorna Automaticamente Impostazioni", + "tabGroupSNS": "Clone", + "snsChatInGame": "Chat in gioco (sperimentale)", + "snsSettingsOverride": "Aggiorna Automaticamente Impostazioni", + "cantKillTime": "Dopo un Mancato Bersaglio Non Puoi Uccidere Per", + "misfiresToSuicide": "Suicidio Dopo Numero di Mancati Bersagli", + "crewAutoWinsGameAfter": "Gli Astronauti Vincono Automaticamente Dopo", + "snsDisableSabotage": "Disabilita Sabotaggi Critici in Modalità Clone", + "snsDisableReactor": "Disabilita Sabotaggio Reattore", + "snsDisableOxygen": "Disabilita Sabotaggio O2", + "snsDisableLights": "Disabilita Sabotaggio Luci", + "snsDisableComms": "Disabilita Sabotaggio Comunicazioni", + "snsDisableHeli": "Disabilita Sabotaggio Collisione", + "snsDisableMushroomMixup": "Disabilita Sabotaggio Caos dei Funghi", + "snsDisableCloseDoor": "Disabilita Sabotaggio Porte in Modalità Clone", "tabGroupSpeedrun": "Speedrun", - "speedrunSettingsOverride": "Aggiorna automaticamente le impostazioni", - "gameAutoEndsAfter": "Il gioco termina automaticamente dopo", - "engineerMode": "Tutti sono ingegneri", + "speedrunSettingsOverride": "Aggiorna Automaticamente Impostazioni", + "gameAutoEndsAfter": "La partita finisce automaticamente dopo", + "engineerMode": "Tutti Ingegneri", "tabGroupSabotages": "Sabotaggi", - "deadImpostorsCanSabotage": "Gli impostori morti possono sabotare", - "disableSabotage": "Disabilita i sabotaggi critici", - "disableReactor": "Disabilita il sabotaggio del reattore", - "disableOxygen": "Disabilita il sabotaggio dell'ossigeno", - "disableLights": "Disabilita il sabotaggio delle luci", - "disableComms": "Disabilita il sabotaggio delle comunicazioni", - "disableHeli": "Disabilita il sabotaggio della rotta di collisione", - "disableMushroomMixup": "Disabilita il sabotaggio della miscela di funghi", - "disableCloseDoor": "Disabilita i sabotaggi delle porte", + "deadImpostorsCanSabotage": "Gli Impostori Morti Possono Sabotare", + "disableSabotage": "Disabilita Sabotaggi Critici", + "disableReactor": "Disabilita Sabotaggio Reattore", + "disableOxygen": "Disabilita Sabotaggio O2", + "disableLights": "Disabilita Sabotaggio Luci", + "disableComms": "Disabilita Sabotaggio Comunicazioni", + "disableHeli": "Disabilita Sabotaggio Collisione", + "disableMushroomMixup": "Disabilita Sabotaggio Caos dei Funghi", + "disableCloseDoor": "Disabilita Sabotaggio Porte", "tabGroupGameplayGeneral": "Generale", - "disableAnnoyingMeetingCalls": "Disabilita le chiamate di riunione nei primi 30s", - "disableReport": "Disabilita le segnalazioni dei corpi", - "changeDecontaminationTime": "Ignora il tempo di decontaminazione (Solo standard)", - "decontaminationTimeOnMiraHQ": "Durata decontaminazione Mira HQ", - "decontaminationDoorOpenTimeOnMiraHQ": "Durata apertura porte decontaminazione Mira HQ", - "decontaminationTimeOnPolus": "Durata decontaminazione Polus", - "decontaminationDoorOpenTimeOnPolus": "Durata apertura porte decontaminazione Polus", - "disableSporeTrigger": "Disabilita le spore su The Fungle", + "disableAnnoyingMeetingCalls": "Nei primi 30 secondi non si possono chiamare riunioni", + "disableReport": "Disabilita Report dei Cadaveri", + "changeDecontaminationTime": "Cambia Tempo di Decontaminazione (Solo Modalità Standard)", + "decontaminationTimeOnMiraHQ": "Tempo di decontaminazione su Mira HQ", + "decontaminationDoorOpenTimeOnMiraHQ": "Tempo di apertura porte su Mira HQ", + "decontaminationTimeOnPolus": "Tempo di decontaminazione su Polus", + "decontaminationDoorOpenTimeOnPolus": "Tempo di apertura porte su Polus", + "disableSporeTrigger": "Disabilita spore su Fungle", - "disableDevices": "Disabilita i dispositivi", - "disableSkeldDevices": "Disabilita i dispositivi di The Skeld", - "disableSkeldAdmin": "Disabilita l'amministrazione di The Skeld", - "disableSkeldCamera": "Disabilita le telecamere di The Skeld", - "disableMiraHQDevices": "Disabilita i dispositivi di Mira HQ", - "disableMiraHQAdmin": "Disabilita l'amministrazione di Mira HQ", - "disableMiraHQDoorLog": "Disabilita il registro delle porte di Mira HQ", - "disablePolusDevices": "Disabilita i dispositivi di Polus", - "disablePolusAdmin": "Disabilita l'amministrazione di Polus", - "disablePolusCamera": "Disabilita le telecamere di Polus", - "disablePolusVital": "Disabilita i parametri vitali di Polus", - "disableAirshipDevices": "Disabilita i dispositivi di Airship", - "disableAirshipCockpitAdmin": "Disabilita l'amministrazione della cabina di pilotaggio di Airship", - "disableAirshipRecordsAdmin": "Disabilita l'amministrazione degli archivi di Airship", - "disableAirshipCamera": "Disabilita le telecamere di Airship", - "disableAirshipVital": "Disabilita i parametri vitali di Airship", - "disableFungleDevices": "Disabilita i dispositivi di The Fungle", - "disableFungleVital": "Disabilita i parametri vitali di The Fungle", + "disableDevices": "Disabilita Dispositivi", + "disableSkeldDevices": "Disabilita Dispositivi su Skeld", + "disableSkeldAdmin": "Disabilita Admin su Skeld", + "disableSkeldCamera": "Disabilita Telecamere su Skeld", + "disableMiraHQDevices": "Disabilita Dispositivi su Mira HQ", + "disableMiraHQAdmin": "Disabilita Admin su Mira HQ", + "disableMiraHQDoorLog": "Disabilita Registri Porte su Mira HQ", + "disablePolusDevices": "Disabilita Dispositivi su Polus", + "disablePolusAdmin": "Disabilita Admin su Polus", + "disablePolusCamera": "Disabilita Telecamere su Polus", + "disablePolusVital": "Disabilita Segni Vitali su Polus", + "disableAirshipDevices": "Disabilita Dispositivi su Airship", + "disableAirshipCockpitAdmin": "Disabilita Admin nella Cabina su Airship", + "disableAirshipRecordsAdmin": "Disabilita Admin nell'Archivio su Airship", + "disableAirshipCamera": "Disabilita Telecamere su Airship", + "disableAirshipVital": "Disabilita Segni Vitali su Airship", + "disableFungleDevices": "Disabilita Dispositivi su Fungle", + "disableFungleVital": "Disabilita Segni Vitali su Fungle", "tabGroupTasks": "Incarichi", - "allPlayersSameTasks": "Tutti hanno gli stessi incarichi", - "overrideTaskSettings": "Disabilita gli incarichi", - "taskPercentNeededToWin": "% Incarichi completati per la vittoria degli astronauti", + "allPlayersSameTasks": "Stessi incarichi per tutti", + "overrideTaskSettings": "Disabilita incarichi", + "taskPercentNeededToWin": "% di Incarichi completati per la vittoria degli astronauti", - "disableMiraTasks": "Disabilita gli incarichi di Mira HQ", - "disableBuyBeverage": "Disabilita Acquista bevanda", - "disableMeasureWeather": "Disabilita Misura il tempo", - "disableProcessData": "Disabilita Elabora dati", - "disableRunDiagnostics": "Disabilita Esegui diagnostica", - "disableSortSamples": "Disabilita Ordina i campioni", + "disableMiraTasks": "Disabilita Incarichi su Mira HQ", + "disableBuyBeverage": "Disabilita Compra Bevanda", + "disableMeasureWeather": "Disabilita Misura Condizioni Meteo", + "disableProcessData": "Disabilita Elabora Dati", + "disableRunDiagnostics": "Disabilita Esegui Diagnostica", + "disableSortSamples": "Disabilita Smista Campioni", - "disablePolusTasks": "Disabilita gli incarichi di Polus", - "disableActivateWeatherNodes": "Disabilita Attiva i nodi meteo", - "disableAlignTelescope": "Disabilita Allinea il telescopio", - "disableFillCanisters": "Disabilita Riempi le bombole", - "disableInsertKeys": "Disabilita Inserisci le chiavi", - "disableOpenWaterways": "Disabilita Apri i canali dell'acqua", - "disableRebootWifi": "Disabilita Riavvia il Wi-Fi", - "disableRepairDrill": "Disabilita Ripara il trapano", - "disableScanBoardingPass": "Disabilita Scansiona la carta d'imbarco", + "disablePolusTasks": "Disabilita Incarichi su Polus", + "disableActivateWeatherNodes": "Disabilita Ripara Nodo Atmosferico", + "disableAlignTelescope": "Disabilita Allinea Telescopio", + "disableFillCanisters": "Disabilita Riempi Bombole", + "disableInsertKeys": "Disabilita Inserisci Chiavi", + "disableOpenWaterways": "Disabilita Apri Condotti dell'Acqua", + "disableRebootWifi": "Disabilita Riavvia Wi-Fi", + "disableRepairDrill": "Disabilita Ripara Trivella", + "disableScanBoardingPass": "Disabilita Scansiona Carta d'Imbarco", - "disableAirshipTasks": "Disabilita gli incarichi di Airship", - "disableCleanToilet": "Disabilita Pulisci il bagno", + "disableAirshipTasks": "Disabilita Incarichi su Airship", + "disableCleanToilet": "Disabilita Pulisci Bagno", "disableDecontaminate": "Disabilita Decontamina", - "disableDevelopPhotos": "Disabilita Sviluppa le foto", - "disableDressMannequin": "Disabilita Vesti il manichino", - "disableFixShower": "Disabilita Ripara la doccia", - "disableMakeBurger": "Disabilita Prepara un hamburger", - "disablePickUpTowels": "Disabilita Raccogli gli asciugamani", - "disablePolishRuby": "Disabilita Lucida il rubino", - "disablePutAwayPistols": "Disabilita Metti via le pistole", - "disablePutAwayRifles": "Disabilita Metti via i fucili", - "disableRewindTapes": "Disabilita Riavvolgi i nastri", - "disableResetBreaker": "Disabilita Ripristina gli interruttori", - "disableSortRecords": "Disabilita Ordina i record", - "disableStartFans": "Disabilita Avvia i ventilatori", - "disableUnlockSafe": "Disabilita Sblocca la cassaforte", + "disableDevelopPhotos": "Disabilita Sviluppa Foto", + "disableDressMannequin": "Disabilita Vesti Manichino", + "disableFixShower": "Disabilita Ripara Doccia", + "disableMakeBurger": "Disabilita Prepara Burger", + "disablePickUpTowels": "Disabilita Raccogli Asciugamani", + "disablePolishRuby": "Disabilita Lucida Rubino", + "disablePutAwayPistols": "Disabilita Metti a Posto Pistole", + "disablePutAwayRifles": "Disabilita Metti a Posto Fucili", + "disableRewindTapes": "Disabilita Riavvolgi Nastri", + "disableResetBreaker": "Disabilita Resetta Interruttore", + "disableSortRecords": "Disabilita Smista Documenti", + "disableStartFans": "Disabilita Avvia Ventilatori", + "disableUnlockSafe": "Disabilita Apri Cassaforte", - "disableFungleTasks": "Disabilita gli incarichi di The Fungle", - "disableBuildSandcastle": "Disabilita Costruisci il castello di sabbia", - "disableCatchFish": "Disabilita Pesca i pesci", - "disableCollectSamples": "Disabilita Raccogli i campioni", - "disableCollectShells": "Disabilita Raccogli le conchiglie", - "disableCollectVegetables": "Disabilita Raccogli le verdure", - "disableCrankGenerator": "Disabilita Gira la manovella del generatore", - "disableExtractFuel": "Disabilita Estrai il carburante", - "disableFixAntenna": "Disabilita Ripara l'antenna", - "disableHelpCritter": "Disabilita Aiuta la creatura", - "disableHoistSupplies": "Disabilita Solleva le provviste", - "disableLiftWeights": "Disabilita Solleva i pesi", - "disableMineOres": "Disabilita Estrai i minerali", - "disablePlayVideoGame": "Disabilita Gioca al videogioco", - "disablePolishGem": "Disabilita Lucida la gemma", - "disableReplaceParts": "Disabilita Sostituisci le parti", - "disableRoastMarshmallow": "Disabilita Arrostisci il marshmallow", - "disableThrowFisbee": "Disabilita Lancia il frisbee", - "disableFindSignal": "Disabilita Trova il segnale", + "disableFungleTasks": "Disabilita Incarichi su Fungle", + "disableBuildSandcastle": "Disabilita Costruisci Castello di Sabbia", + "disableCatchFish": "Disabilita Pesca", + "disableCollectSamples": "Disabilita Raccogli Campioni", + "disableCollectShells": "Disabilita Raccogli Conchiglie", + "disableCollectVegetables": "Disabilita Raccogli Verdure", + "disableCrankGenerator": "Disabilita Avvia Generatore a Manovella", + "disableExtractFuel": "Disabilita Estrai Carburante", + "disableFixAntenna": "Disabilita Ripara Antenna", + "disableHelpCritter": "Disabilita Aiuta la Creatura", + "disableHoistSupplies": "Disabilita Solleva Provviste", + "disableLiftWeights": "Disabilita Solleva Pesi", + "disableMineOres": "Disabilita Estrai Minerali", + "disablePlayVideoGame": "Disabilita Gioca ai Videogiochi", + "disablePolishGem": "Disabilita Lucida Gemma", + "disableReplaceParts": "Disabilita Sostituisci Parti", + "disableRoastMarshmallow": "Disabilita Arrostisci Marshmallow", + "disableThrowFisbee": "Disabilita Lancia Frisbee", + "disableFindSignal": "Disabilita Trova Segnale", - "disableMiscCommonTasks": "Disabilita gli incarichi comuni globali", - "disableEnterIdCode": "Disabilita Inserisci il codice ID", - "disableFixWiring": "Disabilita Ripara i cavi elettrici", - "disableSwipeCard": "Disabilita Striscia la tessera", + "disableMiscCommonTasks": "Disabilita Incarichi Comuni", + "disableEnterIdCode": "Disabilita Inserisci Codice ID", + "disableFixWiring": "Disabilita Ripara Cavi", + "disableSwipeCard": "Disabilita Passa la Carta", - "disableMiscShortTasks": "Disabilita gli incarichi brevi globali", - "disableAssembleArtifact": "Disabilita Assembla l'artefatto", - "disableChartCourse": "Disabilita Traccia la rotta", - "disableCleanO2Filter": "Disabilita Pulisci il filtro dell'O2", - "disableCleanVent": "Disabilita Pulisci il condotto", - "disableMonitorMushroom": "Disabilita Monitora il fungo", - "disableMonitorTree": "Disabilita Monitora l'albero", - "disablePrimeShields": "Disabilita Attiva gli scudi", - "disableRecordTemperature": "Disabilita Registra la temperatura", - "disableStabilizeSteering": "Disabilita Stabilizza la guida", - "disableStoreArtifacts": "Disabilita Conserva gli artefatti", - "disableUnlockManifolds": "Disabilita Sblocca i collettori", + "disableMiscShortTasks": "Disabilita Incarichi Corti", + "disableAssembleArtifact": "Disabilita Assembla Manufatto", + "disableChartCourse": "Disabilita Traccia la Rotta", + "disableCleanO2Filter": "Disabilita Pulisci Filtro O2", + "disableCleanVent": "Disabilita Pulisci Condotto", + "disableMonitorMushroom": "Disabilita Monitora Fungo", + "disableMonitorTree": "Disabilita Controlla Albero", + "disablePrimeShields": "Disabilita Innesca Scudi", + "disableRecordTemperature": "Disabilita Registra Temperatura", + "disableStabilizeSteering": "Disabilita Stabilizza Rotta", + "disableStoreArtifacts": "Disabilita Conserva Manufatti", + "disableUnlockManifolds": "Disabilita Sblocca Collettori", - "disableMiscLongTasks": "Disabilita gli incarichi lunghi globali", - "disableAlignEngineOutput": "Disabilita Allinea l'uscita del motore", - "disableClearAsteroids": "Disabilita Distruggi gli asteroidi", - "disableEmptyChute": "Disabilita Svuota lo scivolo", - "disableInspectSample": "Disabilita Ispeziona il campione", - "disableReplaceWaterJug": "Disabilita Sostituisci il boccione dell'acqua", - "disableStartReactor": "Disabilita Avvia il reattore", - "disableWaterPlants": "Disabilita Annaffia le piante", + "disableMiscLongTasks": "Disabilita Incarichi Lunghi", + "disableAlignEngineOutput": "Disabilita Allinea Uscita Motore", + "disableClearAsteroids": "Disabilita Distruggi Asteroidi", + "disableEmptyChute": "Disabilita Svuota Scivolo", + "disableInspectSample": "Disabilita Ispeziona Campione", + "disableReplaceWaterJug": "Disabilita Sostituisci Boccione d'Acqua", + "disableStartReactor": "Disabilita Avvia Reattore", + "disableWaterPlants": "Disabilita Innaffia Piante", - "disableMiscMixedTasks": "Disabilita gli incarichi misti globali", - "disableCalibrateDistributor": "Disabilita Calibra il distributore", - "disableDivertPower": "Disabilita Devia l'energia", - "disableEmptyGarbage": "Disabilita Svuota la spazzatura", - "disableFuelEngines": "Disabilita Rifornisci i motori", - "disableSubmitScan": "Disabilita Invia la scansione", - "disableUploadData": "Disabilita Carica i dati", + "disableMiscMixedTasks": "Disabilita Incarichi Misti", + "disableCalibrateDistributor": "Disabilita Calibra Distributore", + "disableDivertPower": "Disabilita Devia Energia", + "disableEmptyGarbage": "Disabilita Svuota Spazzatura", + "disableFuelEngines": "Disabilita Fai Rifornimento Motori", + "disableSubmitScan": "Disabilita Esegui Scansione", + "disableUploadData": "Disabilita Carica 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/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 di Among Us Revamped.\n\n/r, /gm\nInvia la descrizione della modalità attuale o la lista delle abilità.\n/l, /lastgame\nInvia le informazioni sull'ultimo vincitore.\n\n/0kc, /0killcooldown\nInvia la descrizione della modalità 0 Cooldown Uccisione.\n/sns, /shiftandseek\nInvia la descrizione della modalità Clone.\n/sp, /speedrun\nInvia la descrizione della modalità Speedrun.\n\n/kick, /ban\nKicka o banna un giocatore tramite nome.\n/ckick, /cban\nKicka o banna un giocatore tramite colore.\n\n/vip /moderator /admin\nAggiunge un giocatore come VIP, Moderatore o Admin.\n/removevip, /removemoderator, /removeadmin\nRimuove lo stato di VIP, Moderatore o Admin a un giocatore.\n\n/eg, /endgame\nTermina la partita attuale.\n/em, /endmeeting\nTermina la riunione attuale.\n/s, /start\nInizia il conto alla rovescia per l'avvio.\n\n/t {template}\nInvia un template da AUR-DATA/templates.txt.\n\n/col, /color, /colour\nCambia il tuo colore, può essere usato per aggirare le restrizioni sui colori.", - "translationReloaded": "Il tuo file è stato ripristinato con successo.\nPer applicare tutte le modifiche, riavvia il gioco.", + "translationReloaded": "Il tuo file di lingua è stato ricaricato con successo.\nPer applicare tutte le modifiche, riavvia il gioco.", - "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", - "adminWelcome": "# In questo file puoi aggiungere gli Admin tramite Codice Amico.\n# Se aggiungi qualcuno, otterrà un nome rosso all'interno del gioco.\n# Vai su 'Impostazioni di sistema' nel gioco per personalizzare i permessi degli Admin. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n", - "banlistWelcome": "# In questo file puoi bannare i giocatori dalla tua lobby tramite Codice Amico.\n# Bannare qualcuno nel gioco lo aggiungerà automaticamente anche qui. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n", - "banwordWelcome": "# In questo file puoi impostare le parole proibite, espellendo automaticamente chiunque invii nel gioco le parole elencate qui.\n# Assicurati di separare le parole usando le nuove righe.", - "bannameWelcome": "# In questo file puoi impostare i nomi proibiti, espellendo automaticamente chiunque utilizzi nel gioco i nomi elencati qui.\n# Assicurati di separare i nomi usando le nuove righe.", + "templateWelcome": "# In questo file puoi creare dei template che fungono da semplice alternativa al copia-incolla.\n# Per creare un template, scrivi una nuova riga con la stessa formattazione del template di prova qui sotto.\n# I template non possono essere più lunghi di 120 caratteri e non possono contenere caratteri speciali. In caso contrario verrai kickato.\n\ntest: questo è un esempio di template. Scrivi '/t test' per vederlo.\n\nwelcome: Benvenuti! Questa Lobby Utilizza Among Us Revamped {ModVersion} di MV. Buon divertimento!", + "moderatorWelcome": "# In questo file puoi aggiungere Moderatori tramite il Codice Amico.\n# Se aggiungi qualcuno, riceverà un nome viola in gioco.\n# Vai nelle 'Impostazioni di Sistema' nel gioco per modificare i permessi dei Moderatori. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000", + "vipWelcome": "# In questo file puoi aggiungere VIP tramite il Codice Amico.\n# Se aggiungi qualcuno, riceverà un nome giallo in gioco.\n# Vai nelle 'Impostazioni di Sistema' nel gioco per modificare i permessi dei VIP. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n", + "adminWelcome": "# In questo file puoi aggiungere Admin tramite il Codice Amico.\n# Se aggiungi qualcuno, riceverà un nome rosso in gioco.\n# Vai nelle 'Impostazioni di Sistema' nel gioco per modificare i permessi degli Admin. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n", + "banlistWelcome": "# In questo file puoi bannare i giocatori dalle tue lobby tramite il Codice Amico.\n# Se banni qualcuno in gioco, verrà aggiunto automaticamente a questo file. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n", + "banwordWelcome": "# In questo file puoi impostare le parole vietate, kickando automaticamente chi pronuncia le parole scritte qui.\n# Nota bene: per separare le parole devi usare nuove righe.", + "bannameWelcome": "# In questo file puoi impostare i nomi vietati, kickando automaticamente chi utilizza i nomi scritti qui.\n# Nota bene: per separare i nomi devi usare nuove righe.", + "languageWelcome": "# In questo file puoi impostare la tua lingua per Among Us Revamped.\n# Per impostare la lingua, scrivi una delle lingue supportate in una nuova riga. Quella predefinita è English.\n# Lingue supportate: English, Spanish, SimplifiedChinese, Italian\n\nItalian", - "noGameEndWarning": "AVVISO: La modalità Nessuna fine del gioco è attiva", + "noGameEndWarning": "ATTENZIONE: L'impostazione 'Nessuna Fine Partita' è Abilitata", - "tooLongTemplate": "Il tuo Template supera i 120 caratteri e comporterebbe la tua espulsione al momento dell'invio. Per favore, riducine la lunghezza.", + "tooLongTemplate": "Il tuo template supera i 120 caratteri e verrai kickato se viene inviato. Per favore, riducine la lunghezza.", - "vipAdd": "Aggiunto con successo {0} come VIP.", - "moderatorAdd": "Aggiunto con successo {0} come Moderatore.", - "adminAdd": "Aggiunto con successo {0} come Admin.", - "vipRemove": "Rimosso con successo VIP da {0}.", - "moderatorRemove": "Rimosso con successo Moderatore da {0}.", - "adminRemove": "Rimosso con successo Admin da {0}.", - "permFail": "Impossibile trovare l'utente '{0}'. Lo hai scritto correttamente?", + "vipAdd": "{0} aggiunto con successo come VIP.", + "moderatorAdd": "{0} aggiunto con successo come Moderatore.", + "adminAdd": "{0} aggiunto con successo come Admin.", + "vipRemove": "VIP rimosso con successo a {0}.", + "moderatorRemove": "Moderatore rimosso con successo a {0}.", + "adminRemove": "Admin rimosso con successo a {0}.", + "permFail": "Impossibile trovare il giocatore '{0}'. Assicurati di aver scritto il nome correttamente", - "helpDesc": "Mostra tutti i comandi e la loro funzione.", - "snsDesc": "Invia la descrizione della modalità di gioco Mutaforma e cerca.", - "0kcDesc": "Invia la descrizione della modalità di gioco Ricarica uccisione a 0.", - "SrDesc": "Invia la descrizione della modalità di gioco Speedrun.", - "egDesc": "Termina la partita corrente.", - "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.", - "rolesDesc": "Invia una panoramica di tutte le abilità/modalità di gioco.", - "kickDesc": "Espelli un giocatore per nome.", - "ckickDesc": "Espelli un giocatore per colore.", - "banDesc": "Banna un giocatore per nome.", - "cbanDesc": "Banna un giocatore per colore.", + "helpDesc": "Mostra tutti i Comandi e cosa fanno.", + "snsDesc": "Invia la descrizione della modalità Clone.", + "0kcDesc": "Invia la descrizione della modalità 0 Cooldown Uccisione.", + "SrDesc": "Invia la descrizione della modalità Speedrun.", + "egDesc": "Termina la partita attuale.", + "emDesc": "Termina la riunione attuale.", + "aurDesc": "Invia i Link di Among Us Revamped.", + "sDesc": "Inizia il Conto alla rovescia per l'avvio.", + "rDesc": "/r Invia le abilità abilitate o la modalità attuale.", + "rolesDesc": "Invia una panoramica di tutte le abilità/modalità.", + "kickDesc": "Kicka un giocatore tramite nome.", + "ckickDesc": "Kicka un giocatore tramite colore.", + "banDesc": "Banna un giocatore tramite nome.", + "cbanDesc": "Banna un giocatore tramite colore.", "dumpDesc": "Copia il LogOutput in un file separato.", - "colDesc": "Imposta il tuo colore.", - "reloadDesc": "Ricarica il file della lingua.", - "vipDesc": "Aggiungi utente come VIP.", - "moderatorDesc": "Aggiungi utente come Moderatore.", - "adminDesc": "Aggiungi utente come admin.", - "cremoveVipDesc": "Rimuovi VIP dall'utente.", - "removeModeratorDesc": "Rimuovi Moderatore dall'utente.", - "removeAdminDesc": "Rimuovi Admin dall'utente.", - "lastgameDesc": "Invia le informazioni dell'ultima partita.", - "templateDesc": "Invia un template specificato da AUR-DATA/templates.txt.", + "colDesc": "Cambia il tuo colore.", + "reloadDesc": "Ricarica il file di lingua.", + "vipDesc": "Aggiunge un giocatore come VIP.", + "moderatorDesc": "Aggiunge un giocatore come Moderatore.", + "adminDesc": "Aggiunge un giocatore come Admin.", + "cremoveVipDesc": "Rimuove lo stato VIP a un giocatore.", + "removeModeratorDesc": "Rimuove lo stato di Moderatore a un giocatore.", + "removeAdminDesc": "Rimuove lo stato di Admin a un giocatore.", + "lastgameDesc": "Invia le informazioni sull'ultima partita.", + "templateDesc": "Invia un template specifico da AUR-DATA/templates.txt.", - "banWordKick": "{0} è stato espulso perché ha inviato una parola proibita {1} volta/e", + "banWordKick": "{0} è stato kickato per aver inviato una parola vietata {1} volta/e", - "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à.", + "pluginWarning": "ATTENZIONE:\nHai 2 o più plugin attivi rilevati.\nAmong Us Revamped non è compatibile con la maggior parte delle mod.\nSe riscontri dei bug, molto probabilmente sono dovuti a incompatibilità.", - "systemSettings": "Impostazioni di sistema", - "gameplaySettings": "Impostazioni di gioco", - "gamemodeSettings": "Impostazioni modalità di gioco", + "systemSettings": "Impostazioni di Sistema", + "gameplaySettings": "Impostazioni di Gioco", + "gamemodeSettings": "Impostazioni Modalità", - "systemSettingsDesc": "Impostazioni di qualità per migliorare il comfort e i test.", - "gameplaySettingsDesc": "Impostazioni di gioco per migliorare l'esperienza in partita.", - "gamemodeSettingsDesc": "Impostazioni situazionali da applicare per specifiche modalità di gioco.", + "systemSettingsDesc": "Impostazioni di Sistema Per Migliorare il Comfort e Semplificare i Test.", + "gameplaySettingsDesc": "Impostazioni di Gioco Per Migliorare l'Esperienza di Gioco.", + "gamemodeSettingsDesc": "Impostazioni Aggiuntive Per Specifiche Modalità di Gioco.", "everyone": "Tutti", - "vipAndAbove": "VIP e superiori", - "moderatorAndAbove": "Moderatori e superiori", + "vipAndAbove": "VIP E Superiori", + "moderatorAndAbove": "Moderatore E Superiori", "admin": "Admin", - "onlyYou": "Solo tu" + "onlyYou": "Solo Tu", + + "seekerDesc": "Aggiunge un giocatore come cercatore a nascondino", + "seekersDesc": "Mostra tutti i cercatori scelti manualmente.", + "clearSeekerDesc": "Pulisce la lista di tutti i cercatori scelti manualmente", + + "slashEndMeetingCmd": "Chi Può Usare /endmeeting & /seeker", + + "gameMasterWarning":"Osserverai le partite finché la modalità spettatore è attiva. ATTENZIONE: L'assegnazione dei ruoli potrebbe essere errata se questa impostazione è abilitata.", + + "startWordsWelcome": "# In questo file puoi impostare le parole per 'Kicka Giocatori Che Dicono Start'.\n# 'Modalità di rilevamento rigorosa' OFF = I messaggi devono coincidere perfettamente con le parole impostate. 'Modalità di rilevamento rigorosa' ON = I messaggi necessitano solo di contenere le parole impostate.\n# Puoi anche aggiungere parole non correlate, che verranno rilevate solo nella lobby..\n\nstart\nbegin\ncommence\ninizia\nstartate\n", + + "gameMasterWarningTwo": "ATTENZIONE: Modalità Spettatore Attivata", + + "startWordKick": "{0} è stato kickato per aver inviato una parola presente in StartWords.txt {1} volta/e", + + "seekers": "Cercatori: ", + "clearedSeekers": "Lista dei cercatori scelti manualmente pulita con successo.", + "tabGroupLevelKick": "Moderazione Livelli", + "enableKickLowLevelPlayer": "Kicka Giocatori di Basso Livello", + "tabGroupKickInvalidFriendCodes": "Codici Amico Non Validi", + "tabGroupAutoKickStart": "Parole di Start", + "autoKickStartTimes": "Messaggi di Start inviati necessari per il kick", + "tabGroupAutostart": "AutoHost", + "rehost": "Ricrea Automaticamente Lobby In Caso di Crash", + "public": "Rendi Automaticamente la Nuova Lobby Pubblica", + "mapVoteDuration": "Durata della Votazione per le Mappe", + "tabGroupDeniedWords": "Parole Vietate", + "enableDeniedWords": "Kicka Giocatori Che Pronunciano Parole Vietate", + "slashMapAndSeekerCmd": "Chi Può Usare /seeker & /mapvote", + "snsChatInGameExtend": "Invia informazioni sulla modalità dopo l'inizio del gioco", + "mapVoteDesc": "Inizia una votazione tra le 5 mappe principali.", + "allMapVoteDesc": "Inizia una votazione tra tutte e 6 le mappe, inclusa Eht Dleks.", + "banWordBan": "{0} è stato bannato per aver inviato una parola di DeniedWords.txt {1} volta/e", + "startWordBan": "{0} è stato bannato per aver inviato una parola di StartWords.txt {1} volta/e", + "moderationSettings": "Impostazioni di Moderazione", + "moderationSettingsDesc": "Impostazioni di Moderazione per combattere tossicità e cattivo comportamento.", + "rehostSuccess": "La Lobby è Stata Ricreata Con Successo", + "enableKickHighLevelPlayer": "Kicka Giocatori di Alto Livello", + "kickHighLevelPlayer": "Kicka Giocatori Sopra il Livello", + "kick": "Kick", + "ban": "Ban", + "notifyMe": "Notificami", + + "tabGroupAfk": "Rilevamento AFK", + "enableAfkDetection": "Abilita Rilevamento AFK", + "afkTimer": "Soglia di Rilevamento", + "afkPenalty": "Penalità Per AFK", + "onlyDetectSpawn": "Rileva Solo i Giocatori allo Spawn", + + "afkNotify": "{0} è stato AFK {1}sec", + "afkKick": "{0} è stato AFK {1}sec, kickiamo il giocatore", + "afkBan": "{0} è stato AFK {1}sec, banniamo il giocatore", + + "automaticMapPoll": "/mapvote Automatico Dopo il Rientro", + "automaticAllMapPoll": "/allmapvote Automatico Dopo il Rientro", + "timeBeforeMapPoll": "Tempo Prima Inizio Votazione Mappe", + + "pnsDisableSabotage": "Disable PnS Critical Sabotages", + "pnsDisableCloseDoor": "Disable PnS Door Sabotages", + "tabGroupPNS": "Poof and Seek", + "badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For", + "snsImpostorCanVent": "Impostors can vent" } \ No newline at end of file diff --git a/Resources/Language/Japanese.json b/Resources/Language/Japanese.json index 79d3436..3bf42e9 100644 --- a/Resources/Language/Japanese.json +++ b/Resources/Language/Japanese.json @@ -37,7 +37,7 @@ "playerAutoStart": "自動スタートに必要な人数", "enableJoinMessages": "参加歓迎メッセージを有効化", "messagePerPlayerNum": "指定参加人数ごとの通知", - "tabGroupMisc": "その他", + "tabGroupMisc": "実験的", "startCountdown": "デフォルトのカウントダウン", "colorCommandLevel": "カラーコマンドの使用権限", "allowFortegreen": "フォルテグリーン色を許可", @@ -316,5 +316,30 @@ "moderationSettings": "モデレーション設定", "moderationSettingsDesc": "荒らしや迷惑行為を防止するための設定です。", - "rehostSuccess": "ロビーの再作成に成功しました" + "rehostSuccess": "ロビーの再作成に成功しました", + "enableKickHighLevelPlayer": "高レベルプレイヤーのキックを有効化", + "kickHighLevelPlayer": "指定レベル以上のプレイヤーをキック", + "kick": "キック", + "ban": "BAN", + "notifyMe": "通知する", + + "tabGroupAfk": "AFK検知", + "enableAfkDetection": "AFK検知を有効化", + "afkTimer": "検知までの時間", + "afkPenalty": "AFK時のペナルティ", + "onlyDetectSpawn": "スポーン地点のプレイヤーのみ検知", + + "afkNotify": "{0} は {1}秒間AFKです", + "afkKick": "{0} は {1}秒間AFKのため、キックします", + "afkBan": "{0} は {1}秒間AFKのため、BANします", + + "automaticMapPoll": "再参加後に /mapvote を自動実行", + "automaticAllMapPoll": "再参加後に /allmapvote を自動実行", + "timeBeforeMapPoll": "投票開始までの待機時間", + + "pnsDisableSabotage": "Disable PnS Critical Sabotages", + "pnsDisableCloseDoor": "Disable PnS Door Sabotages", + "tabGroupPNS": "Poof and Seek", + "badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For", + "snsImpostorCanVent": "Impostors can vent" } diff --git a/Resources/Language/Russian.json b/Resources/Language/Russian.json index 2228b4a..d54e2e3 100644 --- a/Resources/Language/Russian.json +++ b/Resources/Language/Russian.json @@ -316,6 +316,31 @@ "startWordBan": "{0} Были забанены потому что они отправили слово из StartWords.txt {1} раз(а)", "moderationSettings": "Настройки Модерации", "moderationSettingsDesc": "Настройки Модерации чтобы бороться с токсичностью и плохим поведением.", - "rehostSuccess": "Лобби Было Успешно Пересоздано" + "rehostSuccess": "Лобби Было Успешно Пересоздано", + "enableKickHighLevelPlayer": "Кикать Игроков С Высоким Уровнем", + "kickHighLevelPlayer": "Кикать Игроков Больше Уровня", + "kick": "Кик", + "ban": "Бан", + "notifyMe": "Уведомить Меня", + + "tabGroupAfk": "АФК Обнаружение", + "enableAfkDetection": "Включить АФК Обнаружение", + "afkTimer": "Порог Обнаружения", + "afkPenalty": "Наказание За АФК", + "onlyDetectSpawn": "Только Обнаруживать Игроков На Спавне", + + "afkNotify": "{0} Был АФК {1}сек", + "afkKick": "{0} Был АФК {1}сек, кикаем игрока", + "afkBan": "{0} Был АФК {1}сек, баним игрока", + + "automaticMapPoll": "Автоматический /mapvote После Перезахода", + "automaticAllMapPoll": "Автоматический /allmapvote После Перезахода", + "timeBeforeMapPoll": "Время До Начала Голосования За Карты", + + "pnsDisableSabotage": "Disable PnS Critical Sabotages", + "pnsDisableCloseDoor": "Disable PnS Door Sabotages", + "tabGroupPNS": "Poof and Seek", + "badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For", + "snsImpostorCanVent": "Impostors can vent" } diff --git a/Resources/Language/SimplifiedChinese.json b/Resources/Language/SimplifiedChinese.json index 1edf8c2..15debe9 100644 --- a/Resources/Language/SimplifiedChinese.json +++ b/Resources/Language/SimplifiedChinese.json @@ -37,7 +37,7 @@ "playerAutoStart": "自动开始所需人数", "enableJoinMessages": "启用欢迎消息", "messagePerPlayerNum": "每达到指定加入人数发送消息", - "tabGroupMisc": "杂项设置", + "tabGroupMisc": "实验性", "startCountdown": "默认开始倒计时", "colorCommandLevel": "谁可以使用颜色命令", "allowFortegreen": "允许军绿色", @@ -284,7 +284,7 @@ "startWordKick": "{0} 因发送 StartWords.txt 中的关键词被踢出,累计次数:{1} 次", "seekers": "搜寻者:", "clearedSeekers": "已成功清除手动搜寻者列表。", - "autoKickStartTimes": "发送 StartWords 关键词达到此次数时踢出玩家", + "autoKickStartTimes": "发送 StartWords 文本关键词并在达到某个次数时踢出该玩家", "tabGroupLevelKick": "等级管理", "enableKickLowLevelPlayer": "启用低等级玩家踢出", "tabGroupKickInvalidFriendCodes": "无效好友代码", @@ -303,5 +303,30 @@ "startWordBan": "{0} 因发送了 StartWords.txt 中的关键词,第 {1} 次违规,已被封禁。", "moderationSettings": "管理设置", "moderationSettingsDesc": "用于防止恶意行为和不当行为的管理设置。", - "rehostSuccess": "已成功重新创建大厅。" + "rehostSuccess": "已成功重新创建大厅。", + "enableKickHighLevelPlayer": "启用踢出高等級玩家", +"kickHighLevelPlayer": "踢出高于指定等級的玩家", +"kick": "踢出", +"ban": "封锁", +"notifyMe": "通知我", + +"tabGroupAfk": "AFK 侦测", +"enableAfkDetection": "启用 AFK 侦测", +"afkTimer": "检测门槛", +"afkPenalty": "AFK 处罚", +"onlyDetectSpawn": "仅侦测出生点玩家", + +"afkNotify": "{0} 已 AFK {1} 秒", +"afkKick": "{0} 已 AFK {1} 秒,正在踢出玩家", +"afkBan": "{0} 已 AFK {1} 秒,正在封锁玩家", + +"automaticMapPoll": "重新加入后自发起起 /mapvote", +"automaticAllMapPoll": "重新加入后自动发起 /allmapvote", +"timeBeforeMapPoll": "投票开始前等待時間", + + "pnsDisableSabotage": "Disable PnS Critical Sabotages", + "pnsDisableCloseDoor": "Disable PnS Door Sabotages", + "tabGroupPNS": "Poof and Seek", + "badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For", + "snsImpostorCanVent": "Impostors can vent" } diff --git a/Resources/Language/Spanish.json b/Resources/Language/Spanish.json index 38f7e68..0f9c79d 100644 --- a/Resources/Language/Spanish.json +++ b/Resources/Language/Spanish.json @@ -9,29 +9,50 @@ "disableCommandHelper": "Desactivar ayuda para comandos", "disableCompatibilityWarning": "Desactivar advertencia de compatibilidad", "gameMasterWarning": "Ahora observarás las partidas hasta que se desactive el Maestro del Juego. ADVERTENCIA: No se enviarán mensajes de habilidades y la asignación de roles podría ser inexacta si esta opción está activada.", + "gameMasterWarningTwo": "ADVERTENCIA: El Maestro del Juego está activado", "cancelStartCountdown": "La cuenta regresiva de inicio fue cancelada", "invalidFriendCodeKick": "{0} fue expulsado por tener un código de amigo no válido", - "invalidFriendCodeBan": "{0} fue bloqueado por tener un código de amigo no válido", + "invalidFriendCodeBan": "{0} fue baneado por tener un código de amigo no válido", "language": "Idioma (requiere reiniciar)", "gamemode": "Modo de juego", "tabGroupMain": "Moderación", + "tabGroupLevelKick": "Moderación por nivel", + "enableKickLowLevelPlayer": "Expulsar jugadores de nivel bajo", "kickLowLevelPlayer": "Expulsar jugadores cuyo nivel sea menor que", - "tempBanLowLevelPlayer": "Bloquear en lugar de expulsar", + "tempBanLowLevelPlayer": "Banear en lugar de expulsar", + "enableKickHighLevelPlayer": "Expulsar jugadores de nivel alto", + "kickHighLevelPlayer": "Expulsar jugadores por encima del nivel", "dontKickLevelOnes": "No expulsar jugadores Nv.1 por salas bugueadas", + "tabGroupKickInvalidFriendCodes": "Códigos de amigo no válidos", "kickInvalidFriendCodes": "Expulsar códigos de amigo no válidos (vacíos)", - "tempBanInvalidFriendCodes": "Bloquear en lugar de expulsar", + "tempBanInvalidFriendCodes": "Banear en lugar de expulsar", + "tabGroupDeniedWords": "Palabras prohibidas", + "enableDeniedWords": "Expulsar jugadores que digan palabras prohibidas", "deniedWordsToKick": "Palabras prohibidas para expulsar jugadores", "moderatorCanUseCommand": "Los moderadores pueden usar comandos", + "tabGroupAutoKickStart": "Palabras de start", "autoKickStart": "Expulsar jugadores que digan \"start\"", - "autoKickStartAsBan": "Bloquear en lugar de expulsar", + "autoKickStartAsBan": "Banear en lugar de expulsar", "autoKickStartTimes": "Mensajes de \"start\" necesarios para expulsar", "autoKickStartStrength": "Modo de detección estricto", + "tabGroupAfk": "Detección AFK", + "enableAfkDetection": "Detectar AFK", + "afkTimer": "Tiempo para marcar AFK", + "afkPenalty": "Castigo por AFK", + "onlyDetectSpawn": "Detectar solo jugadores en spawn", "tabGroupAutomation": "Automatización", + "tabGroupAutostart": "Autohost", + "rehost": "Recrear la sala automáticamente al desconectarse", + "public": "Poner la sala nueva en público automáticamente", "autoSendGameInfo": "Enviar automáticamente información del ganador", "autoRejoinLobby": "Volver automáticamente a la sala", + "automaticMapPoll": "/mapvote automático al volver a la sala", + "automaticAllMapPoll": "/allmapvote automático al volver a la sala", + "timeBeforeMapPoll": "Tiempo antes de iniciar la votación", "autoStartTimer": "Cuenta regresiva para inicio automático", "waitAutoStart": "Inicio automático después de", "playerAutoStart": "Jugadores mínimos para inicio automático", + "mapVoteDuration": "Duración de la votación de mapa", "enableJoinMessages": "Activar mensajes de bienvenida", "messagePerPlayerNum": "Mensaje cada X jugadores que entren", "tabGroupMisc": "Varios", @@ -45,7 +66,8 @@ "slashLastGameCmd": "Quién puede usar /l y /aur", "slashKickCmd": "Quién puede usar /kick y /ckick", "slashBanCmd": "Quién puede usar /ban y /cban", - "slashEndMeetingCmd": "Quién puede usar /endmeeting", + "slashEndMeetingCmd": "Quién puede usar /endmeeting y /seeker", + "slashMapAndSeekerCmd": "Quién puede usar /seeker y /mapvote", "slashStartAndEndGameCmd": "Quién puede usar /startgame y /endgame", "tabGroupCrewmate": "Roles de tripulante", "tabGroupNeutral": "Roles neutrales", @@ -53,10 +75,13 @@ "tabGroupStandard": "Estándar", "tabGroupHNS": "Escondite", "numSeekers": "# Buscadores", + "seekers": "Buscadores: ", + "clearedSeekers": "Lista manual de buscadores borrada correctamente.", "tabGroup0Kcd": "0 de enfriamiento para matar", "noKcdSettingsOverride": "Actualizar configuración automáticamente", "tabGroupSNS": "Shift and Seek", "snsChatInGame": "Chat durante la partida (experimental)", + "snsChatInGameExtend": "Enviar info del modo al empezar la partida", "snsSettingsOverride": "Actualizar configuración automáticamente", "cantKillTime": "Después de fallar, no puede matar durante", "misfiresToSuicide": "Suicidarse después de cierta cantidad de fallos", @@ -149,7 +174,7 @@ "disableBuildSandcastle": "Desactivar Construir Castillo de Arena", "disableCatchFish": "Desactivar Atrapar Peces", "disableCollectSamples": "Desactivar Recolectar Muestras", - "disableCollectShells": "Desactivar Recolectar Caracoles", + "disableCollectShells": "Desactivar Recolectar conchas", "disableCollectVegetables": "Desactivar Recolectar Vegetales", "disableCrankGenerator": "Desactivar Activar Generador", "disableExtractFuel": "Desactivar Extraer Combustible", @@ -173,7 +198,7 @@ "disableChartCourse": "Desactivar Tarea Trazar Ruta", "disableCleanO2Filter": "Desactivar Tarea Limpiar Filtro de O2", "disableCleanVent": "Desactivar Tarea Limpiar Ventila", - "disableMonitorMushroom": "Desactivar monitorear hongo", + "disableMonitorMushroom": "Desactivar Tarea Monitorear Hongos", "disableMonitorTree": "Desactivar Tarea Monitorizar Árbol", "disablePrimeShields": "Desactivar Tarea Preparar Escudos", "disableRecordTemperature": "Desactivar Tarea Registrar Temperatura", @@ -195,15 +220,16 @@ "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/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 banea a un jugador por nombre.\n/ckick, /cban\nExpulsa o banea 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.", "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", "adminWelcome": "# En este archivo puedes agregar administradores por código de amigo.\n# Si agregas a alguien, tendrá un nombre rojo dentro del juego.\n# Ve a \"Configuración del sistema\" dentro del juego para personalizar los permisos de administrador. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n", - "banlistWelcome": "# En este archivo puedes bloquear a jugadores en tu sala por código de amigo.\n# Bloquear a alguien dentro del juego también lo agregará aquí automáticamente. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n", + "banlistWelcome": "# En este archivo puedes banear jugadores de tu sala por código de amigo.\n# Banear a alguien dentro del juego también lo agregará aquí automáticamente. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n", "banwordWelcome": "# En este archivo puedes establecer palabras prohibidas para expulsar automáticamente a cualquiera que las envíe dentro del juego.\n# Asegúrate de separar las palabras usando líneas nuevas.", "bannameWelcome": "# En este archivo puedes establecer nombres prohibidos para expulsar automáticamente a cualquiera que los use dentro del juego.\n# Asegúrate de separar los nombres usando líneas nuevas.", + "startWordsWelcome": "# En este archivo puedes configurar las palabras detectadas para 'Expulsar jugadores que digan start'.\n# 'Modo de detección estricto' DESACTIVADO = los mensajes deben coincidir exactamente con las palabras.\n# 'Modo de detección estricto' ACTIVADO = los mensajes solo deben contener las palabras.\n# También puedes agregar palabras no relacionadas para detectarlas solo en la sala.\n\nstart\nbegin\ncommence", "noGameEndWarning": "ADVERTENCIA: Sin fin de partida está activado", "tooLongTemplate": "Tu plantilla tiene más de 120 caracteres y te expulsaría al enviarla. Reduce su longitud.", "vipAdd": "Se agregó correctamente a {0} como VIP.", @@ -219,14 +245,19 @@ "SrDesc": "Enviar la descripción del modo de juego Speedrun.", "egDesc": "Termina la partida actual.", "emDesc": "Termina la reunión actual.", + "seekerDesc": "Marca al jugador como buscador en HnS.", + "seekersDesc": "Muestra los buscadores elegidos manualmente.", + "clearSeekerDesc": "Borra la lista manual de buscadores.", + "mapVoteDesc": "Inicia una votación entre los 5 mapas principales.", + "allMapVoteDesc": "Inicia una votación entre los 6 mapas, incluido Eht Dleks.", "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.", "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.", - "banDesc": "Bloquea a un jugador por nombre.", - "cbanDesc": "Bloquea a un jugador por color.", + "banDesc": "Banea a un jugador por nombre.", + "cbanDesc": "Banea a un jugador por color.", "dumpDesc": "Copia LogOutput en un archivo separado.", "colDesc": "Cambia tu color.", "reloadDesc": "Recarga el archivo de idioma.", @@ -239,19 +270,34 @@ "lastgameDesc": "Enviar información de la última partida.", "templateDesc": "Enviar una plantilla especificada de AUR-DATA/templates.txt.", "banWordKick": "{0} fue expulsado porque envió una palabra prohibida {1} veces", + "banWordBan": "{0} fue baneado por escribir una palabra de DeniedWords.txt {1} veces", + "startWordKick": "{0} fue expulsado por escribir una palabra de StartWords.txt {1} veces", + "startWordBan": "{0} fue baneado por escribir una palabra de StartWords.txt {1} veces", + "afkNotify": "{0} lleva {1}s AFK", + "afkKick": "{0} lleva {1}s AFK, expulsando", + "afkBan": "{0} lleva {1}s AFK, baneando", + "rehostSuccess": "Sala recreada correctamente", + "kick": "Expulsar", + "ban": "Banear", + "notifyMe": "Avisarme", "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", "gameplaySettings": "Configuración de la partida", "gamemodeSettings": "Configuración del modo de juego", - + "moderationSettings": "Moderación", "systemSettingsDesc": "Ajustes de calidad para mejorar la comodidad y facilitar las pruebas.", "gameplaySettingsDesc": "Ajustes de la partida para mejorar la experiencia de juego.", "gamemodeSettingsDesc": "Ajustes específicos para determinados modos de juego.", - + "moderationSettingsDesc": "Ajustes para controlar toxicidad y mal comportamiento en la sala.", "everyone": "Todos", "vipAndAbove": "VIP o superior", "moderatorAndAbove": "Moderador o superior", "admin": "Administrador", - "onlyYou": "Solo tú" + "onlyYou": "Solo tú", + + "pnsDisableSabotage": "Disable PnS Critical Sabotages", + "pnsDisableCloseDoor": "Disable PnS Door Sabotages", + "tabGroupPNS": "Poof and Seek", + "badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For", + "snsImpostorCanVent": "Impostors can vent" }