Compare commits

...
19 Commits
Author SHA1 Message Date
Ape cde461c4a4 UI try not to be the dumbest thing ever (impossible challenge) 2026-08-26 14:33:04 +02:00
Ape 62d66e170b v2.0.3 II 2026-08-26 14:31:15 +02:00
Ape c201211afb v2.0.3 2026-08-26 14:26:42 +02:00
MV cc1950f543 Idiot can get GitHub working 2026-08-26 14:18:10 +02:00
MV 2764e073af Idiot can't get GitHub working 2026-08-26 14:14:59 +02:00
Ape 6f53cacb32 Fix hopefully 2026-08-26 14:09:54 +02:00
Ape f4d9d8101f Setting fallbacks, GitHub templates, GM fix 2026-08-26 14:02:31 +02:00
Ape f18dc3fa31 v2.0.2 2026-08-21 18:44:45 +02:00
Ape 0d55683088 v2.0.1 readme 2026-08-20 13:32:52 +02:00
Ape 9572c8ca53 v2.0.1 2026-08-20 13:32:10 +02:00
Ape 2e66fb54f9 v2.0.0 2026-08-18 21:00:42 +02:00
Ape f9c9e1a2b6 v1.9.5 2026-08-12 15:22:31 +02:00
Ape e5c1e183cd Merge branch 'main' of https://github.com/ApeMV/AmongUsRevamped 2026-08-11 22:48:47 +02:00
Ape 037c3ce902 Pray this works simulator (v1.9.4) 2026-08-11 22:48:45 +02:00
MV 37300e87d7 yes 2026-08-07 13:11:38 +02:00
Ape 69c13b2fba Merge branch 'main' of https://github.com/ApeMV/AmongUsRevamped 2026-08-05 21:41:35 +02:00
Ape 4404464459 Last thing I promise (I don't) 2026-08-05 21:41:23 +02:00
MV 059dbac2e4 Download Statistics
Added download badges for total and latest downloads.
2026-08-05 21:27:05 +02:00
Ape 95a203b711 v1.9.3 2026-08-05 21:21:23 +02:00
33 changed files with 1781 additions and 497 deletions

No files matched your search

+26
View File
@@ -0,0 +1,26 @@
---
name: General Issue
about: Report a bug, suggest an idea, or get support
title: ""
labels: ""
assignees: ""
---
### REQUIRED
* [ ] I confirm this Issue is relevant to Among Us Revamped
* [ ] I confirm this Issue is not a duplicate
* [ ] I have read the main GitHub page for potential answers to my Issue
### INFO
Please tick all the boxes above by typing "x" between them.
If your Issue does not match these requirements, please do not post it.
Issues ignoring or falsifying these requirements will be closed without warning.
Support based questions are preferred to be asked on Discord, but not prohibited.
### ISSUE TYPE (tick 1)
* [ ] Bug Report
* [ ] Suggestion
* [ ] Support
* [ ] other
### WRITE YOUR ISSUE BELOW:
+17
View File
@@ -0,0 +1,17 @@
### REQUIRED
* [ ] I confirm this PR was not fully made by AI
* [ ] I confirm this PR is fitting for Among Us Revamped
* [ ] I confirm this PR has been tested and properly functions
### INFO
Please tick all the boxes above by typing "x" between them.
If your Pull Request does not match these requirements, please do not post it.
Pull Requests ignoring or falsifying these requirements will be closed without warning.
### PR TYPE
* [ ] Bug Fix
* [ ] New Feature
* [ ] Refactor/Optimization
* [ ] Documentation Update
### WRITE YOUR PULL REQUEST BELOW:
+4 -3
View File
@@ -38,15 +38,16 @@ public partial class Main : BasePlugin
public static ConfigEntry<bool> DisableCommandHelper { get; private set; }
public static ConfigEntry<bool> DisableCompatibilityWarning { get; private set; }
public static NormalGameOptionsV10 NormalOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentNormalGameOptions : null;
public static HideNSeekGameOptionsV10 HideNSeekOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentHideNSeekGameOptions : null;
public static NormalGameOptionsV11 NormalOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentNormalGameOptions : null;
public static HideNSeekGameOptionsV11 HideNSeekOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentHideNSeekGameOptions : null;
public static MapNames CurrentMap => (MapNames)NormalOptions.MapId;
public static bool HasArgumentException;
public static string CredentialsText;
public const string ModVersion = "v1.9.2";
public const string ModVersion = "v2.0.3";
public static float GameTimer;
public static float AfkTimer;
public static readonly Dictionary<int, int> SayStartTimes = [];
public static readonly Dictionary<int, int> SayDeniedWordTimes = [];
+2 -2
View File
@@ -18,8 +18,8 @@
<ItemGroup>
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" ExcludeAssets="runtime;native" />
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2026.6.5" PrivateAssets="all" Condition="'$(Configuration)' == 'Release'"/>
<PackageReference Include="AmongUs.GameLibs.Android" Version="2025.10.14" PrivateAssets="all" Condition="'$(Configuration)' == 'Android'"/>
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2026.8.18" PrivateAssets="all" Condition="'$(Configuration)' == 'Release'"/>
<PackageReference Include="AmongUs.GameLibs.Android" Version="2026.8.18" PrivateAssets="all" Condition="'$(Configuration)' == 'Android'"/>
<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.1.0-rc.1" PrivateAssets="all" ExcludeAssets="runtime" />
+4 -12
View File
@@ -29,7 +29,6 @@ public static class BanManager
private static string TemplatePath = $"{DataPath}/AUR-DATA/Templates.txt";
private static string StartWordsPath = $"{DataPath}/AUR-DATA/Startwords.txt";
public static Dictionary<string, string> Templates = new();
public static List<string> TempBanWhiteList = [];
public static void Init()
{
try
@@ -81,7 +80,7 @@ public static class BanManager
public static void AddBanPlayer(ClientData player)
{
if (!AmongUsClient.Instance.AmHost || player == null) return;
if (!CheckBanList(player?.FriendCode, player?.GetHashedPuid()) && !TempBanWhiteList.Contains(player?.GetHashedPuid()))
if (!CheckBanList(player?.FriendCode, player?.GetHashedPuid()))
{
if (player?.GetHashedPuid() != "" && player?.GetHashedPuid() != null && player?.GetHashedPuid() != "e3b0cb855")
{
@@ -106,13 +105,6 @@ public static class BanManager
Logger.Info($"{player.PlayerName} was in the BanList and has been banned", "BanListBan");
return;
}
if (TempBanWhiteList.Contains(player?.GetHashedPuid()))
{
AmongUsClient.Instance.KickPlayer(player.Id, true);
//This should not happen
Logger.Info($"{player.PlayerName} was in the Temporary BanList", "TempBan");
return;
}
}
public static bool CheckBanList(string code, string hashedpuid = "")
{
@@ -206,7 +198,7 @@ public static class BanManager
public static bool IsStartWord(PlayerControl player, string input)
{
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0 || !Options.AutoKickStart.GetBool()) return false;
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0 || !Options.AutoKickStart.GetBool() || !Utils.IsLobby) return false;
int clientId = player.Data.ClientId;
var startWords = File.ReadAllLines(StartWordsPath).Where(x => !x.StartsWith("#"));
@@ -225,12 +217,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");
}
+7 -1
View File
@@ -26,6 +26,7 @@ internal static class CommandHelper
new Cmd { Name = new[] { "/sns" }, Prompt = "/sns", Description = Translator.Get("snsDesc"), HasVariable = false },
new Cmd { Name = new[] { "/shiftandseek" }, Prompt = "/shiftandseek", Description = Translator.Get("snsDesc"), HasVariable = false },
new Cmd { Name = new[] { "/sns2" }, Prompt = "/sns2", Description = Translator.Get("snsTwoDesc"), HasVariable = false },
new Cmd { Name = new[] { "/0kc" }, Prompt = "/0kc", Description = Translator.Get("0kcDesc"), HasVariable = false },
new Cmd { Name = new[] { "/0killcooldown" }, Prompt = "/0killcooldown", Description = Translator.Get("0kcDesc"), HasVariable = false },
@@ -33,6 +34,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 },
@@ -79,7 +83,8 @@ internal static class CommandHelper
new Cmd { Name = new[] { "/clearseeker" }, Prompt = "/clearseeker", Description = Translator.Get("clearSeekerDesc"), HasVariable = false },
new Cmd { Name = new[] { "/mapvote" }, Prompt = "/mapvote", Description = Translator.Get("mapVoteDesc"), HasVariable = false },
new Cmd { Name = new[] { "/allmapvote" }, Prompt = "/allmapvote", Description = Translator.Get("allMapVoteDesc"), HasVariable = false }
new Cmd { Name = new[] { "/allmapvote" }, Prompt = "/allmapvote", Description = Translator.Get("allMapVoteDesc"), HasVariable = false },
new Cmd { Name = new[] { "/gmvote" }, Prompt = "/gmvote", Description = Translator.Get("modeVoteDesc"), HasVariable = false }
};
[HarmonyPostfix]
@@ -100,6 +105,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;
+134 -33
View File
@@ -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 =
@@ -56,15 +56,13 @@ namespace AmongUsRevamped
Translator.Get("everyone"), Translator.Get("vipAndAbove"), Translator.Get("moderatorAndAbove"), Translator.Get("admin"), Translator.Get("onlyYou")
};
public static readonly string[] crewmateAbilities =
public static readonly string[] afkPenalties =
{
"Mayor", "Workhorse", "Jester", "Tasker", "None"
};
public static readonly string[] impostorAbilities =
{
"Tyrant", "Stealer", "Juggernaut", "None"
Translator.Get("kick"), Translator.Get("ban"), Translator.Get("notifyMe")
};
//System
public static OptionItem Language;
@@ -77,6 +75,9 @@ namespace AmongUsRevamped
public static OptionItem KickLowLevelPlayer;
public static OptionItem DontKickLevelOnes;
public static OptionItem TempBanLowLevelPlayer;
public static OptionItem EnableKickHighLevelPlayer;
public static OptionItem KickHighLevelPlayer;
public static OptionItem TempBanHighLevelPlayer;
public static OptionItem TabGroupKickInvalidFriendCodes;
public static OptionItem KickInvalidFriendCodes;
@@ -99,6 +100,12 @@ namespace AmongUsRevamped
public static OptionItem AutoRejoinLobby;
public static OptionItem EnableJoinMessages;
public static OptionItem MessagePerPlayerNum;
public static OptionItem AutomaticMapPoll;
public static OptionItem TimeBeforeMapPoll;
public static OptionItem AutomaticAllMapPoll;
public static OptionItem TimeBeforeAllMapPoll;
public static OptionItem AutomaticModePoll;
public static OptionItem TimeBeforeModePoll;
public static OptionItem TabGroupAutostart;
public static OptionItem AutoStartTimer;
@@ -107,8 +114,16 @@ namespace AmongUsRevamped
public static OptionItem Rehost;
public static OptionItem Public;
public static OptionItem TabGroupAfk;
public static OptionItem EnableAfkDetection;
public static OptionItem AfkTimer;
public static OptionItem AfkPenalty;
public static OptionItem OnlyDetectSpawn;
public static OptionItem TabGroupMisc;
public static OptionItem MapVoteDuration;
public static OptionItem ModeVoteDuration;
public static OptionItem StartCountdown;
public static OptionItem ColorCommandLevel;
public static OptionItem AllowFortegreen;
@@ -137,8 +152,9 @@ namespace AmongUsRevamped
public static OptionItem DisableCloseDoor;
public static OptionItem TabGroupGameplayGeneral;
public static OptionItem ShieldFirstDeath;
public static OptionItem ShieldFirstDeathDuration;
public static OptionItem DisableAnnoyingMeetingCalls;
public static OptionItem ChangeDecontaminationTime;
public static OptionItem DecontaminationTimeOnMiraHQ;
public static OptionItem DecontaminationDoorOpenTimeOnMiraHQ;
@@ -280,12 +296,11 @@ 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 SNSChatInGameExtend2;
public static OptionItem SNSChatInGameFast;
public static OptionItem CrewAutoWinsGameAfter;
public static OptionItem CantKillTime;
public static OptionItem MisfiresToSuicide;
public static OptionItem SNSDisableSabotage;
public static OptionItem SNSDisableReactor;
public static OptionItem SNSDisableOxygen;
@@ -294,12 +309,28 @@ 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 PNSChatInGameFast;
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()
@@ -324,6 +355,12 @@ namespace AmongUsRevamped
.SetParent(EnableKickLowLevelPlayer);
DontKickLevelOnes = BooleanOptionItem.Create(60052, Translator.Get("dontKickLevelOnes"), false, TabGroup.ModerationSettings, false)
.SetParent(EnableKickLowLevelPlayer);
EnableKickHighLevelPlayer = BooleanOptionItem.Create(60053, Translator.Get("enableKickHighLevelPlayer"), false, TabGroup.ModerationSettings, false);
KickHighLevelPlayer = IntegerOptionItem.Create(60054, Translator.Get("kickHighLevelPlayer"), new(100, 5000, 50), 1000, TabGroup.ModerationSettings, false)
.SetParent(EnableKickHighLevelPlayer)
.SetValueFormat(OptionFormat.Level);
TempBanHighLevelPlayer = BooleanOptionItem.Create(60055, Translator.Get("tempBanLowLevelPlayer"), false, TabGroup.ModerationSettings, false)
.SetParent(EnableKickHighLevelPlayer);
TabGroupKickInvalidFriendCodes = TextOptionItem.Create(60079, Translator.Get("tabGroupKickInvalidFriendCodes"), TabGroup.ModerationSettings)
.SetColor(Color.red);
@@ -371,6 +408,18 @@ namespace AmongUsRevamped
EnableJoinMessages = BooleanOptionItem.Create(60152, Translator.Get("enableJoinMessages"), true, TabGroup.SystemSettings, false);
MessagePerPlayerNum = IntegerOptionItem.Create(60153, Translator.Get("messagePerPlayerNum"), new(1, 15, 1), 5, TabGroup.SystemSettings, false)
.SetParent(EnableJoinMessages);
AutomaticMapPoll = BooleanOptionItem.Create(60154, Translator.Get("automaticMapPoll"), false, TabGroup.SystemSettings, false);
TimeBeforeMapPoll = IntegerOptionItem.Create(60155, Translator.Get("timeBeforeMapPoll"), new(10, 300, 5), 10, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(AutomaticMapPoll);
AutomaticAllMapPoll = BooleanOptionItem.Create(60156, Translator.Get("automaticAllMapPoll"), false, TabGroup.SystemSettings, false);
TimeBeforeAllMapPoll = IntegerOptionItem.Create(60157, Translator.Get("timeBeforeMapPoll"), new(10, 300, 5), 10, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(AutomaticAllMapPoll);
AutomaticModePoll = BooleanOptionItem.Create(60158, Translator.Get("automaticModePoll"), false, TabGroup.SystemSettings, false);
TimeBeforeModePoll = IntegerOptionItem.Create(60159, Translator.Get("timeBeforeMapPoll"), new(10, 300, 5), 20, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(AutomaticModePoll);
TabGroupAutostart = TextOptionItem.Create(64425, Translator.Get("tabGroupAutostart"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
@@ -383,13 +432,26 @@ namespace AmongUsRevamped
Public = BooleanOptionItem.Create(64430, Translator.Get("public"), false, TabGroup.SystemSettings, false)
.SetParent(Rehost);
TabGroupAfk = TextOptionItem.Create(60370, Translator.Get("tabGroupAfk"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
EnableAfkDetection = BooleanOptionItem.Create(60371, Translator.Get("enableAfkDetection"), false, TabGroup.SystemSettings, false);
AfkTimer = IntegerOptionItem.Create(60372, Translator.Get("afkTimer"), new(15, 120, 5), 30, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(EnableAfkDetection);
AfkPenalty = StringOptionItem.Create(60373, Translator.Get("afkPenalty"), afkPenalties, 0, TabGroup.SystemSettings, false)
.SetParent(EnableAfkDetection);
OnlyDetectSpawn = BooleanOptionItem.Create(60374, Translator.Get("onlyDetectSpawn"), true, TabGroup.SystemSettings, false)
.SetParent(EnableAfkDetection);
TabGroupMisc = TextOptionItem.Create(60378, Translator.Get("tabGroupMisc"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
MapVoteDuration = IntegerOptionItem.Create(60379, Translator.Get("mapVoteDuration"), new(5, 60, 5), 20, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(Color.red);
StartCountdown = IntegerOptionItem.Create(60380, Translator.Get("startCountdown"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
ModeVoteDuration = IntegerOptionItem.Create(60380, Translator.Get("modeVoteDuration"), new(5, 60, 5), 20, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(Color.red);
StartCountdown = IntegerOptionItem.Create(60381, Translator.Get("startCountdown"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(Color.red);
AllowFortegreen = BooleanOptionItem.Create(60382, Translator.Get("allowFortegreen"), false, TabGroup.SystemSettings, false)
@@ -406,45 +468,80 @@ 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)
SNSChatInGame = BooleanOptionItem.Create(70051, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false);
SNSChatInGameExtend = BooleanOptionItem.Create(70052, Translator.Get("snsChatInGameExtend"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSChatInGame);
CantKillTime = IntegerOptionItem.Create(70053, Translator.Get("cantKillTime"), new(0, 60, 5), 20, TabGroup.GamemodeSettings, false)
SNSChatInGameExtend2 = BooleanOptionItem.Create(70053, Translator.Get("snsChatInGameExtendTwo"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSChatInGame);
SNSChatInGameFast = BooleanOptionItem.Create(70054, Translator.Get("snsChatInGameFast"), false, TabGroup.GamemodeSettings, false)
.SetParent(SNSChatInGame);
CrewAutoWinsGameAfter = IntegerOptionItem.Create(70056, Translator.Get("crewAutoWinsGameAfter"), new(60, 600, 10), 300, 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)
.SetValueFormat(OptionFormat.Seconds);
SNSDisableSabotage = BooleanOptionItem.Create(70055, Translator.Get("snsDisableSabotage"), true, TabGroup.GamemodeSettings, false)
SNSDisableSabotage = BooleanOptionItem.Create(70057, Translator.Get("snsDisableSabotage"), true, TabGroup.GamemodeSettings, false)
.SetColor(Color.red);
SNSDisableReactor = BooleanOptionItem.Create(70056, Translator.Get("snsDisableReactor"), true, TabGroup.GamemodeSettings, false)
SNSDisableReactor = BooleanOptionItem.Create(70058, Translator.Get("snsDisableReactor"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSDisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
SNSDisableOxygen = BooleanOptionItem.Create(70057, Translator.Get("snsDisableOxygen"), true, TabGroup.GamemodeSettings, false)
SNSDisableOxygen = BooleanOptionItem.Create(70059, Translator.Get("snsDisableOxygen"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSDisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
SNSDisableLights = BooleanOptionItem.Create(70058, Translator.Get("snsDisableLights"), true, TabGroup.GamemodeSettings, false)
SNSDisableLights = BooleanOptionItem.Create(70060, Translator.Get("snsDisableLights"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSDisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
SNSDisableComms = BooleanOptionItem.Create(70059, Translator.Get("snsDisableComms"), true, TabGroup.GamemodeSettings, false)
SNSDisableComms = BooleanOptionItem.Create(70061, Translator.Get("snsDisableComms"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSDisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
SNSDisableHeli = BooleanOptionItem.Create(70060, Translator.Get("snsDisableHeli"), true, TabGroup.GamemodeSettings, false)
SNSDisableHeli = BooleanOptionItem.Create(70062, Translator.Get("snsDisableHeli"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSDisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
SNSDisableMushroomMixup = BooleanOptionItem.Create(70061, Translator.Get("snsDisableMushroomMixup"), true, TabGroup.GamemodeSettings, false)
SNSDisableMushroomMixup = BooleanOptionItem.Create(70063, Translator.Get("snsDisableMushroomMixup"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSDisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
SNSDisableCloseDoor = BooleanOptionItem.Create(70062, Translator.Get("snsDisableCloseDoor"), true, TabGroup.GamemodeSettings, false)
SNSDisableCloseDoor = BooleanOptionItem.Create(70064, Translator.Get("snsDisableCloseDoor"), true, TabGroup.GamemodeSettings, false)
.SetColor(Color.red);
SNSImpostorsCanVent = BooleanOptionItem.Create(70065, Translator.Get("snsImpostorCanVent"), true, TabGroup.GamemodeSettings, false);
TabGroupSpeedrun = TextOptionItem.Create(70075, Translator.Get("tabGroupSpeedrun"), TabGroup.GamemodeSettings)
TabGroupSpeedrun = TextOptionItem.Create(70076, 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(70101, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false);
PNSChatInGameExtend = BooleanOptionItem.Create(70102, Translator.Get("snsChatInGameExtend"), false, TabGroup.GamemodeSettings, false)
.SetParent(PNSChatInGame);
PNSChatInGameFast = BooleanOptionItem.Create(70103, Translator.Get("snsChatInGameFast"), 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);
@@ -470,12 +567,16 @@ namespace AmongUsRevamped
DisableMushroomMixup = BooleanOptionItem.Create(60462, Translator.Get("disableMushroomMixup"), false, TabGroup.ModSettings, false)
.SetParent(DisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableCloseDoor = BooleanOptionItem.Create(60566, Translator.Get("disableCloseDoor"), false, TabGroup.ModSettings, false)
DisableCloseDoor = BooleanOptionItem.Create(60463, Translator.Get("disableCloseDoor"), false, TabGroup.ModSettings, false)
.SetColor(Color.red);
TabGroupGameplayGeneral = TextOptionItem.Create(60564, Translator.Get("tabGroupGameplayGeneral"), TabGroup.ModSettings)
.SetColor(Color.blue);
DisableAnnoyingMeetingCalls = BooleanOptionItem.Create(60565, Translator.Get("disableAnnoyingMeetingCalls"), false, TabGroup.ModSettings, false);
ShieldFirstDeath = BooleanOptionItem.Create(60565, Translator.Get("shieldFirstDeath"), false, TabGroup.ModSettings, false);
ShieldFirstDeathDuration = IntegerOptionItem.Create(60566, Translator.Get("shieldFirstDeathDuration"), new(10, 120, 5), 30, TabGroup.ModSettings, false)
.SetParent(ShieldFirstDeath)
.SetValueFormat(OptionFormat.Seconds);
DisableAnnoyingMeetingCalls = BooleanOptionItem.Create(60567, Translator.Get("disableAnnoyingMeetingCalls"), false, TabGroup.ModSettings, false);
ChangeDecontaminationTime = BooleanOptionItem.Create(60550, Translator.Get("changeDecontaminationTime"), false, TabGroup.ModSettings, false);
DecontaminationTimeOnMiraHQ = FloatOptionItem.Create(60551, Translator.Get("decontaminationTimeOnMiraHQ"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
+1 -1
View File
@@ -184,7 +184,7 @@ internal class EACR
goto YesCheat;
}
if (Utils.IsMeeting && MeetingHud.Instance.state != MeetingHud.VoteStates.Animating)
if (Utils.IsMeeting && MeetingHud.Instance.state != MeetingHud.MeetingStates.Animating)
{
Logger.SendInGame($"{player.Data.PlayerName} might have called an invalid sabotage (cheating)");
Logger.Info($" {player.Data.PlayerName} might have called an invalid sabotage (cheating)", "EACR");
+164 -7
View File
@@ -1,3 +1,4 @@
using AmongUs.GameOptions;
using Hazel;
using System;
using System.Runtime.CompilerServices;
@@ -9,11 +10,28 @@ namespace AmongUsRevamped;
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.FixedUpdate))]
public static class FixedUpdate
{
public static Dictionary<byte, float> BadMovementTimer = new Dictionary<byte, float>();
public static readonly Dictionary<string, Vector2> SpawnRange = new()
{
["Skeld"] = new(-0.8f, 1.2f),
["Mira"] = new(-4.4f, 2.4f),
["MiraMeeting"] = new(23.9f, 2.6f),
["Polus"] = new(16.6f, -1.1f),
["PolusMeeting"] = new(19.5f, -16.9f),
["AirshipMeeting"] = new(11f, 15.3f),
["Fungle"] = new(-9.8f, 1.8f),
["FungleMeetings"] = new(-3.1f, -1.3f)
};
public static float Range = 4f;
public static Dictionary<byte, Vector2> Position = new Dictionary<byte, Vector2>();
public static void Postfix()
{
if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance)
{
Main.GameTimer += Time.fixedDeltaTime;
Main.AfkTimer += Time.fixedDeltaTime;
}
GameObject n = GameObject.Find("NewRequestInactive");
@@ -30,6 +48,114 @@ public static class FixedUpdate
if (!AmongUsClient.Instance.AmHost) return;
DisableDevice.FixedUpdate();
if (Main.AfkTimer >= Options.AfkTimer.GetInt())
{
Main.AfkTimer = 0;
if (!Options.EnableAfkDetection.GetBool()) return;
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data == null || p == PlayerControl.LocalPlayer || p.Data.IsDead) continue;
Vector2 newPos = p.GetTruePosition();
if (Options.OnlyDetectSpawn.GetBool() && !IsSpawn(newPos))
{
Position[p.PlayerId] = newPos;
continue;
}
if (Position.TryGetValue(p.PlayerId, out Vector2 oldPos))
{
if (Vector2.Distance(oldPos, newPos) < 0.05f)
{
switch (Options.AfkPenalty.GetValue())
{
case 0:
AmongUsClient.Instance.KickPlayer(p.Data.ClientId, false);
Logger.Info(Translator.Get("afkKick", p.Data.PlayerName, Options.AfkTimer.GetInt()), "AfkManagement");
Logger.SendInGame(Translator.Get("afkKick", p.Data.PlayerName, Options.AfkTimer.GetInt()));
break;
case 1:
AmongUsClient.Instance.KickPlayer(p.Data.ClientId, true);
Logger.Info(Translator.Get("afkBan", p.Data.PlayerName, Options.AfkTimer.GetInt()), "AfkManagement");
Logger.SendInGame(Translator.Get("afkBan", p.Data.PlayerName, Options.AfkTimer.GetInt()));
break;
case 2:
Logger.Info(Translator.Get("afkNotify", p.Data.PlayerName, Options.AfkTimer.GetInt()), "AfkManagement");
Logger.SendInGame(Translator.Get("afkNotify", p.Data.PlayerName, Options.AfkTimer.GetInt()));
break;
}
}
}
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");
}
}
}
}
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && !Utils.IsLobby)
{
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data == null || p.Data.IsDead || p.Data.RoleType == RoleTypes.Shapeshifter) continue;
if (p.protectedByGuardianId == -1)
{
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
}
p.Data.MarkDirty();
}
}
}
private static bool IsSpawn(Vector2 pos)
{
switch (Utils.GetActiveMapId())
{
case 0:
return Vector2.Distance(pos, SpawnRange["Skeld"]) <= Range;
case 1:
return Vector2.Distance(pos, SpawnRange["Mira"]) <= Range || Vector2.Distance(pos, SpawnRange["MiraMeeting"]) <= Range;
case 2:
return Vector2.Distance(pos, SpawnRange["Polus"]) <= Range || Vector2.Distance(pos, SpawnRange["PolusMeeting"]) <= Range;
case 4:
return Vector2.Distance(pos, SpawnRange["AirshipMeeting"]) <= Range;
case 5:
return Vector2.Distance(pos, SpawnRange["Fungle"]) <= Range || Vector2.Distance(pos, SpawnRange["FungleMeetings"]) <= Range;
default:
return true;
}
}
}
@@ -43,7 +169,7 @@ class FixedUpdateInGamePatch
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;
@@ -72,22 +198,41 @@ 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)
{
if (Main.NormalOptions.KillCooldown != 2.5f)
{
Main.NormalOptions.KillCooldown = 2.5f;
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Shapeshifter, 3, 100);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Phantom, 0, 0);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Viper, 0, 0);
}
}
break;
case 2: // Speedrun
break;
case 3: // PnS
if (!Utils.InGame)
{
if (Main.NormalOptions.KillCooldown != 1f)
{
Main.NormalOptions.KillCooldown = 1f;
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Shapeshifter, 0, 0);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Phantom, 3, 100);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Viper, 0, 0);
}
}
break;
}
if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance)
if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance && Main.GameTimer > 6)
{
// 1 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
@@ -113,6 +258,18 @@ class FixedUpdateInGamePatch
NormalGameEndChecker.CheckWinnerText("NoOneWinsSpeedrun");
}
}
// 3 = Poof and Seek
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek && !Options.NoGameEnd.GetBool())
{
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");
}
}
}
}
}
+48
View File
@@ -0,0 +1,48 @@
using AmongUs.GameOptions;
using Hazel;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using System;
namespace AmongUsRevamped;
public static class OptionManager
{
private static float OldKillCooldown;
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<LogicOptions>();
if (logicOptions != null)
{
logicOptions.SetGameOptions(options);
}
}
}
public static void CacheOptions()
{
if (!AmongUsClient.Instance.AmHost) return;
OldKillCooldown = Main.NormalOptions.KillCooldown;
}
public static void RestoreOptions()
{
if (!AmongUsClient.Instance.AmHost) return;
if (Main.NormalOptions.KillCooldown != OldKillCooldown)
{
Main.NormalOptions.KillCooldown = OldKillCooldown;
Logger.Info("Force overrided Kill Cooldown back to original", "RestoreOptions");
}
SyncGameOptions();
}
}
+6
View File
@@ -13,6 +13,12 @@ namespace AmongUsRevamped
{
Logger.Info($" Disconnected due to {reason}/{stringReason}, ping:{__instance.Ping})", "DisconnectManager");
if (!EOSManager.Instance.loginFlowFinished || EOSManager.Instance.authExpiredCallbackTriggered)
{
Logger.Info("Attempted to log in using EOS", "DisconnectManager");
EOSManager.Instance.AdultPermissionsFlow();
}
if (!Options.Rehost.GetBool() || reason == DisconnectReasons.NewConnection || reason == DisconnectReasons.ConnectionLimit || reason == DisconnectReasons.ExitGame) return;
_ = new LateTask(() =>
+117 -3
View File
@@ -38,10 +38,10 @@ public static class Utils
public static bool IsFreePlay => AmongUsClient.Instance.NetworkMode == NetworkModes.FreePlay;
public static bool IsMeeting => InGame && (MeetingHud.Instance);
public static bool GamePastRoleSelection => Main.GameTimer > 10f;
public static bool HandlingGameEnd;
public static byte CustomGameOverReason;
public static bool CanCallMeetings;
public static bool HasMurdered;
public static string ColorString(Color32 color, string str) => $"<#{color.r:x2}{color.g:x2}{color.b:x2}{color.a:x2}>{str}</color>";
public static string ColorToHex(Color32 color) => $"#{color.r:x2}{color.g:x2}{color.b:x2}{color.a:x2}";
@@ -200,19 +200,24 @@ public static class Utils
public static void ClearLeftoverData()
{
Logger.Info(" Cleared Leftover Data", "Utils");
RpcSetTasksPatch.GlobalTaskIds = null;
HandlingGameEnd = false;
OnGameJoinedPatch.AutoStartCheck = false;
Main.GameTimer = 0f;
Main.AfkTimer = 0f;
FixedUpdate.Position.Clear();
NormalGameEndChecker.canUpdateWinnerText = true;
MurderPlayerPatch.misfireCount.Clear();
MurderPlayerPatch.killCount.Clear();
HasMurdered = false;
LateTask.Tasks.RemoveAll(x => x.name != "RehostManager");
NormalGameEndChecker.ImpCheckComplete = false;
CreateOptionsPickerPatch.SetDleks2 = false;
CanCallMeetings = true;
PlayerControlSetRolePatch.FirstAssign = true;
PlayerControlCompleteTaskPatch.playerTasksCompleted.Clear();
PlayerControlCompleteTaskPatch.tasksPerPlayer.Clear();
@@ -222,11 +227,30 @@ public static class Utils
OnPlayerJoinedPatch.JoinNum = 0;
PlayerControlSetRolePatch.ProcessedPlayers.Clear();
PlayerControlSetRolePatch.Seekers.Clear();
PlayerControlSetRolePatch.FirstAssign = true;
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;
standardVotes = 0;
noKillCooldownVotes = 0;
speedrunVotes = 0;
shiftAndSeekVotes = 0;
poofAndSeekVotes = 0;
ModeVoteActive = false;
}
public static PlayerControl[] AllAlivePlayerControls
@@ -585,7 +609,7 @@ public static class Utils
public static readonly List<byte> HasVoted = [];
public static void MapVote(bool dleks, bool moderator)
{
if (MapVoteActive) return;
if (MapVoteActive || ModeVoteActive) return;
DleksEnabled = dleks;
MapVoteActive = true;
@@ -663,4 +687,94 @@ public static class Utils
MapVoteActive = false;
}, Options.MapVoteDuration.GetInt(), "MapPoll");
}
public static int standardVotes;
public static int noKillCooldownVotes;
public static int speedrunVotes;
public static int shiftAndSeekVotes;
public static int poofAndSeekVotes;
public static bool ModeVoteActive;
public static readonly List<byte> HasModeVoted = [];
public static void ModeVote(bool moderator)
{
if (ModeVoteActive || MapVoteActive) return;
ModeVoteActive = true;
if (moderator) Utils.ModeratorChatCommand("A Gamemode vote is active!\n\nA: None\nB: No Kill Cooldown\nC: Speedrun\nD: SnS\nE: PnS\n\nType /vote 'letter' to vote.", "", false);
else Utils.ChatCommand(DestroyableSingleton<HudManager>.Instance.Chat, "A Gamemode vote is active!\n\nA: None\nB: No Kill Cooldown\nC: Speedrun\nD: SnS\nE: PnS\n\nType /vote 'letter' to vote.", "", false);
new LateTask(() =>
{
int highest = standardVotes;
string winner = "None";
byte modeId = 0;
bool tie = false;
void Check(int votes, string name, byte id)
{
if (votes > highest)
{
highest = votes;
winner = name;
modeId = id;
tie = false;
}
else if (votes == highest)
{
tie = true;
}
}
Check(noKillCooldownVotes, "0 Kill Cooldown", 0);
Check(speedrunVotes, "Speedrun", 2);
Check(shiftAndSeekVotes, "Shift and Seek", 1);
Check(poofAndSeekVotes, "Poof and Seek", 3);
string voteResults = $"Standard: {standardVotes}\n" + $"No Kill Cooldown: {noKillCooldownVotes}\n" + $"Speedrun: {speedrunVotes}\n" + $"Shift and Seek: {shiftAndSeekVotes}\n" + $"Poof and Seek: {poofAndSeekVotes}";
if (highest == 0)
{
ModeratorChatCommand("We have a winner! Just kidding. No one voted.", "", false);
}
else if (tie)
{
ModeratorChatCommand($"Gamemode vote tied. No new mode selected.\n\n{voteResults}", "", false);
}
else
{
ModeratorChatCommand(SendChatPatch.ConvertNum($"Winner: {winner} ({highest})\n\n{voteResults}"), "", false);
Options.Gamemode.SetValue(modeId);
if (winner == "0 Kill Cooldown")
{
Main.NormalOptions.KillCooldown = 0.01f;
}
}
standardVotes = 0;
noKillCooldownVotes = 0;
speedrunVotes = 0;
shiftAndSeekVotes = 0;
poofAndSeekVotes = 0;
HasVoted.Clear();
ModeVoteActive = false;
}, Options.ModeVoteDuration.GetInt(), "ModePoll");
}
// As of v2026.8.18, Innersloth bans the host for hacking if the start game button is pressed when any player is not Serialized (or something similar).
// CheckValidData serves as an emergency blockage to prevent this and stop host from being kicked.
public static bool CheckValidData()
{
if (!AmongUsClient.Instance.AmHost) return true;
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p == null || !p.hasBeenSerialized)
{
return false;
}
}
return true;
}
}
+210 -50
View File
@@ -420,12 +420,92 @@ internal static class SendChatPatch
}
}
if (text == "/vote a" && Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) {Utils.skeldVotes++; Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);}
if (text == "/vote b" && Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) {Utils.miraVotes++; Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);}
if (text == "/vote c" && Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) {Utils.polusVotes++; Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);}
if (text == "/vote d" && Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) {Utils.airshipVotes++; Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);}
if (text == "/vote e" && Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) {Utils.fungleVotes++; Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);}
if (text == "/vote f" && Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId) && Utils.DleksEnabled) {Utils.dleksVotes++; Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);}
if (text == "/gmvote")
{
if (Utils.IsLobby)
{
Utils.ModeVote(false);
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
}
if (text == "/vote a")
{
if (Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) return true;
if (Utils.MapVoteActive && !Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId))
{
Utils.skeldVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.standardVotes++;
}
Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);
}
if (text == "/vote b")
{
if (Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) return true;
if (Utils.MapVoteActive)
{
Utils.miraVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.noKillCooldownVotes++;
}
Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);
}
if (text == "/vote c")
{
if (Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) return true;
if (Utils.MapVoteActive)
{
Utils.polusVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.speedrunVotes++;
}
Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);
}
if (text == "/vote d")
{
if (Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) return true;
if (Utils.MapVoteActive)
{
Utils.airshipVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.shiftAndSeekVotes++;
}
Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);
}
if (text == "/vote e")
{
if (Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) return true;
if (Utils.MapVoteActive)
{
Utils.fungleVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.poofAndSeekVotes++;
}
Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);
}
if (text == "/vote f")
{
if (Utils.HasVoted.Contains(PlayerControl.LocalPlayer.Data.PlayerId)) return true;
if (Utils.MapVoteActive && Utils.DleksEnabled)
{
Utils.dleksVotes++;
}
Utils.HasVoted.Add(PlayerControl.LocalPlayer.Data.PlayerId);
}
if (text == "/l" || text == "/lastgame")
{
@@ -445,20 +525,18 @@ internal static class SendChatPatch
if (text == "/0kc" || text == "/0killcooldown")
{
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
return false;
}
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 tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing\nWrong kills are blocked. Kill animations are off", true);
return false;
}
if (text == "/sns2" || text == "/shiftandseek2")
{
Utils.ChatCommand(__instance, "Correctly killing a target will directly turn them into a ghost and leave no dead body", "", false);
return false;
}
@@ -468,6 +546,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())
@@ -475,25 +559,21 @@ internal static class SendChatPatch
case 0:
if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)
{
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
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 tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing\nWrong kills are blocked. Kill animations are off", 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 +583,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))
@@ -774,13 +856,90 @@ public static class RPCHandlerPatch
Utils.MapVote(true, true);
}
}
if (text == "/gmvote")
{
if (Utils.IsLobby)
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashMapAndSeekerCmd.GetValue()) return;
Utils.ModeVote(true);
}
}
if (text == "/vote a" && Utils.MapVoteActive && !Utils.HasVoted.Contains(__instance.Data.PlayerId)) {Utils.skeldVotes++; Utils.HasVoted.Add(__instance.Data.PlayerId);}
if (text == "/vote b" && Utils.MapVoteActive && !Utils.HasVoted.Contains(__instance.Data.PlayerId)) {Utils.miraVotes++; Utils.HasVoted.Add(__instance.Data.PlayerId);}
if (text == "/vote c" && Utils.MapVoteActive && !Utils.HasVoted.Contains(__instance.Data.PlayerId)) {Utils.polusVotes++; Utils.HasVoted.Add(__instance.Data.PlayerId);}
if (text == "/vote d" && Utils.MapVoteActive && !Utils.HasVoted.Contains(__instance.Data.PlayerId)) {Utils.airshipVotes++; Utils.HasVoted.Add(__instance.Data.PlayerId);}
if (text == "/vote e" && Utils.MapVoteActive && !Utils.HasVoted.Contains(__instance.Data.PlayerId)) {Utils.fungleVotes++; Utils.HasVoted.Add(__instance.Data.PlayerId);}
if (text == "/vote f" && Utils.MapVoteActive && !Utils.HasVoted.Contains(__instance.Data.PlayerId) && Utils.DleksEnabled) {Utils.dleksVotes++; Utils.HasVoted.Add(__instance.Data.PlayerId);}
if (text == "/vote a")
{
if (Utils.HasVoted.Contains(__instance.Data.PlayerId)) return;
if (Utils.MapVoteActive)
{
Utils.skeldVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.standardVotes++;
}
Utils.HasVoted.Add(__instance.Data.PlayerId);
}
if (text == "/vote b")
{
if (Utils.HasVoted.Contains(__instance.Data.PlayerId)) return;
if (Utils.MapVoteActive)
{
Utils.miraVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.noKillCooldownVotes++;
}
Utils.HasVoted.Add(__instance.Data.PlayerId);
}
if (text == "/vote c")
{
if (Utils.HasVoted.Contains(__instance.Data.PlayerId)) return;
if (Utils.MapVoteActive)
{
Utils.polusVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.speedrunVotes++;
}
Utils.HasVoted.Add(__instance.Data.PlayerId);
}
if (text == "/vote d")
{
if (Utils.HasVoted.Contains(__instance.Data.PlayerId)) return;
if (Utils.MapVoteActive)
{
Utils.airshipVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.shiftAndSeekVotes++;
}
Utils.HasVoted.Add(__instance.Data.PlayerId);
}
if (text == "/vote e")
{
if (Utils.HasVoted.Contains(__instance.Data.PlayerId)) return;
if (Utils.MapVoteActive)
{
Utils.fungleVotes++;
}
if (Utils.ModeVoteActive)
{
Utils.poofAndSeekVotes++;
}
Utils.HasVoted.Add(__instance.Data.PlayerId);
}
if (text == "/vote f")
{
if (Utils.HasVoted.Contains(__instance.Data.PlayerId)) return;
if (Utils.MapVoteActive && Utils.DleksEnabled)
{
Utils.dleksVotes++;
}
Utils.HasVoted.Add(__instance.Data.PlayerId);
}
if (text == "/l" || text == "/lastgame")
{
@@ -798,21 +957,17 @@ public static class RPCHandlerPatch
if (text == "/0kc" || text == "/0killcooldown")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
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 tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing\nWrong kills are blocked. Kill animations are off", true);
}
if (text == "/sns2" || text == "/shiftandseek2")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
Utils.ModeratorChatCommand("Correctly killing a target will directly turn them into a ghost and leave no dead body", "", false);
}
if (text == "/sr" || text == "/speedrun")
@@ -821,6 +976,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;
@@ -829,25 +990,22 @@ public static class RPCHandlerPatch
case 0:
if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)
{
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
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 tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing\nWrong kills are blocked. Kill animations are off", 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 +1013,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))
+1 -1
View File
@@ -49,7 +49,7 @@ internal static class DisableDevice
public static void FixedUpdate()
{
if (!AmongUsClient.Instance.AmHost || ShipStatus.Instance == null || !Utils.GamePastRoleSelection) return;
if (!AmongUsClient.Instance.AmHost || ShipStatus.Instance == null || !OnGameStartPatch.PastStartScreen) return;
frame = frame == 5 ? 0 : ++frame;
if (frame != 0) return;
+17 -7
View File
@@ -11,8 +11,10 @@ public static class EndGameManagerPatch
public static void Postfix(EndGameManager __instance)
{
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();
@@ -25,10 +27,11 @@ class NormalGameEndChecker
public static bool ImpCheckComplete;
public static string LastWinReason = "";
public static List<PlayerControl> imps = new List<PlayerControl>();
public static string firstDeath;
public static string firstDeathString => firstDeath != null ? $"\n\nFirst death: {firstDeath}" : "";
public static bool Prefix()
{
if (Options.NoGameEnd.GetBool() || Options.Gamemode.GetValue() == 2 || Utils.HandlingGameEnd) return false;
var allPlayers = PlayerControl.AllPlayerControls.ToArray();
@@ -53,7 +56,14 @@ class NormalGameEndChecker
if (Winner == "SnSTimer")
{
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList;
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
return;
}
if (Winner == "PnSTimer")
{
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
return;
}
@@ -67,22 +77,22 @@ class NormalGameEndChecker
if ((Options.Gamemode.GetValue() != 2 && Utils.AliveImpostors == 0) || Winner == "Crewmate")
{
LastWinReason = "Crewmates Win!\n\nImpostors: " + impostorList;
LastWinReason = "Crewmates Win!\n\nImpostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
}
else if ((Options.Gamemode.GetValue() != 2 && Utils.AliveImpostors >= Utils.AliveCrewmates) || Winner == "Impostor")
{
LastWinReason = "Impostors Win!\n\nImpostors: " + impostorList;
LastWinReason = "Impostors Win!\n\nImpostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
}
else if (GameData.Instance != null && GameData.Instance.TotalTasks > 0 && GameData.Instance.CompletedTasks >= GameData.Instance.TotalTasks || Winner == "CrewmateTasks")
{
LastWinReason = $"Crewmates Win! ({Options.TaskPercentNeededToWin.GetInt()}% tasks completed)\n\nImpostors: " + impostorList;
LastWinReason = $"Crewmates Win! ({Options.TaskPercentNeededToWin.GetInt()}% tasks completed)\n\nImpostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
}
else if (Options.Gamemode.GetValue() < 1 || Winner == "ImpostorSabotage")
{
LastWinReason = "Impostors Win! (Sabotage)\n\n Impostors: " + impostorList;
LastWinReason = "Impostors Win! (Sabotage)\n\n Impostors: " + impostorList + firstDeathString;
}
}
}
+12
View File
@@ -1,3 +1,4 @@
using AmongUs.GameOptions;
using System.Reflection;
using Il2CppInterop.Runtime.InteropTypes;
@@ -19,6 +20,17 @@ class ExileControllerWrapUpPatch
public static void AfterExile(NetworkedPlayerInfo ejectedPlayer)
{
if (!AmongUsClient.Instance.AmHost) return;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
if (Main.GM.Value && !Utils.IsDead)
{
Logger.Info($" Game Master Successful", "StartGame");
PlayerControl.LocalPlayer.Exiled();
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
}
}
if (ejectedPlayer == null) return;
PlayerControl pc = null;
+10
View File
@@ -20,12 +20,22 @@ public static class GameStartManagerUpdatePatch
__instance.MinPlayers = 1;
if (!Utils.CheckValidData())
{
__instance.StartButton.gameObject.SetActive(false);
}
else if (__instance.startState != GameStartManager.StartingStates.Countdown)
{
__instance.StartButton.gameObject.SetActive(true);
}
if (Main.AutoStart.Value && OnGameJoinedPatch.AutoStartCheck && GameStartManager.InstanceExists && __instance.startState != GameStartManager.StartingStates.Countdown && GameData.Instance?.PlayerCount >= Options.PlayerAutoStart.GetInt())
{
__instance.startState = GameStartManager.StartingStates.Countdown;
__instance.countDownTimer = Options.AutoStartTimer.GetFloat();
__instance.StartButton.gameObject.SetActive(false);
Autostarting = true;
return;
}
if (__instance.startState == GameStartManager.StartingStates.Countdown)
+94 -8
View File
@@ -14,9 +14,35 @@ internal static class CoShowIntroPatch
Logger.Info(" Intro initiated", "CoShowIntro");
if (!AmongUsClient.Instance.AmHost) return;
OptionManager.CacheOptions();
foreach (var p in PlayerControl.AllPlayerControls)
{
p.protectedByGuardianId = -1;
if (NormalGameEndChecker.firstDeath != null && NormalGameEndChecker.firstDeath == p.Data.PlayerName && Options.ShieldFirstDeath.GetBool() && Options.Gamemode.GetValue() != 1)
{
if (Main.NormalOptions.roleOptions.TryGetRoleOptions<GuardianAngelRoleOptionsV11>(RoleTypes.GuardianAngel, out var GuardianAngelOptions))
{
var oldGA = GuardianAngelOptions.ImpostorsCanSeeProtect;
var oldGAProt = GuardianAngelOptions.ProtectionDurationSeconds;
GuardianAngelOptions.ProtectionDurationSeconds = Options.ShieldFirstDeathDuration.GetFloat();
GuardianAngelOptions.ImpostorsCanSeeProtect = true;
_ = new LateTask(() =>
{ GuardianAngelOptions.ImpostorsCanSeeProtect = oldGA;
GuardianAngelOptions.ProtectionDurationSeconds = oldGAProt + 6;
OptionManager.SyncGameOptions();
}, Options.ShieldFirstDeathDuration.GetFloat(), "RevertGAProtTime");
}
OptionManager.SyncGameOptions();
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
p.Data.MarkDirty();
Logger.Info($" {p.Data.PlayerName} has been granted a shield for {Options.ShieldFirstDeathDuration.GetInt()}s", "RoleInfo");
}
p.cosmetics.nameText.text = p.Data.PlayerName;
MurderPlayerPatch.killCount[p.PlayerId] = 0;
@@ -33,21 +59,81 @@ internal static class CoShowIntroPatch
_ = new LateTask(() =>
{
Utils.CanCallMeetings = true;
}, 33f, "MeetingEnabled");
}, 34f, "MeetingEnabled");
}
if (Options.Gamemode.GetValue() == 1 && Options.SNSChatInGameExtend.GetBool())
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
if (Main.NormalOptions.roleOptions.TryGetRoleOptions<GuardianAngelRoleOptionsV11>(RoleTypes.GuardianAngel, out var GuardianAngelOptions))
{
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);
GuardianAngelOptions.ProtectionDurationSeconds = 254f;
}
OptionManager.SyncGameOptions();
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data == null || p.Data.IsDead || p.Data.RoleType == RoleTypes.Shapeshifter) continue;
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
p.Data.MarkDirty();
}
if (Options.SNSChatInGameExtend.GetBool())
{
Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nMeetings & Reports = Off", $"Crewmates win by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing\nWrong kills are blocked. Kill animations are off", true);
}
if (Options.SNSChatInGameExtend2.GetBool())
{
_ = new LateTask(() =>
{
Utils.ChatCommand(DestroyableSingleton<HudManager>.Instance.Chat, "Correctly killing a target will directly turn them into a ghost and leave no dead body", "", false);
}, 6.6f, "SNSChatInGameExtend2");
}
}
if ((GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f))
{
Main.NormalOptions.KillCooldown = 5f;
OptionManager.SyncGameOptions();
_ = new LateTask(() =>
{
Main.NormalOptions.KillCooldown = 0.01f;
OptionManager.SyncGameOptions();
}, 13f, "NoKcdEnabled");
}
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek)
{
if (Options.PNSChatInGame.GetBool())
{
Main.NormalOptions.KillCooldown = 5f;
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);
}
NormalGameEndChecker.firstDeath = "";
}
}
+81 -4
View File
@@ -14,7 +14,7 @@ internal static class OnGameJoinedPatch
public static bool AutoStartCheck;
public static void Postfix()
{
Logger.Info(" -------- JOINED GAME --------", "OnGameJoined");
Logger.Info(" -------- GAME JOINED --------", "OnGameJoined");
if (!AmongUsClient.Instance.AmHost) return;
@@ -46,6 +46,28 @@ internal static class OnGameJoinedPatch
}, 5.2f, "AutoSendGameInfo2");
}
if (Options.AutomaticMapPoll.GetBool())
{
new LateTask(() =>
{
Utils.MapVote(false, true);
}, Options.TimeBeforeMapPoll.GetInt(), "AutoMapPoll");
}
if (Options.AutomaticAllMapPoll.GetBool())
{
new LateTask(() =>
{
Utils.MapVote(true, true);
}, Options.TimeBeforeAllMapPoll.GetInt(), "AutoMapPoll");
}
if (Options.AutomaticModePoll.GetBool())
{
new LateTask(() =>
{
Utils.ModeVote(true);
}, Options.TimeBeforeModePoll.GetInt(), "AutoModePoll");
}
if (Options.Public.GetBool() && DisconnectManager.Rehosting)
{
AmongUsClient.Instance.ChangeGamePublic(true);
@@ -78,7 +100,6 @@ class OnPlayerJoinedPatch
return false;
}
static void Postfix([HarmonyArgument(0)] ClientData Client)
{
Logger.Info($" {Client.PlayerName} / {Client.FriendCode} / {Client.PlatformData.Platform}", "Joined The Game");
@@ -99,7 +120,6 @@ class OnPlayerJoinedPatch
}
else
{
if (!BanManager.TempBanWhiteList.Contains(Client.GetHashedPuid())) BanManager.TempBanWhiteList.Add(Client.GetHashedPuid());
AmongUsClient.Instance.KickPlayer(Client.Id, true);
Logger.Info(Translator.Get("invalidFriendCodeBan", Client.PlayerName), "BanInvalidFriendCode");
Logger.SendInGame(Translator.Get("invalidFriendCodeBan", Client.PlayerName));
@@ -109,6 +129,8 @@ class OnPlayerJoinedPatch
if (Options.EnableJoinMessages.GetBool())
{
JoinNum++;
BanManager.LoadTemplates();
BanManager.Templates.TryGetValue("welcome", out string msg);
if (JoinNum >= Options.MessagePerPlayerNum.GetInt())
@@ -158,7 +180,26 @@ public static class SetLevelPatch
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
}
HandledLevelKicks.Add(__instance);
}
}
if (AmongUsClient.Instance.AmHost && level > Options.KickHighLevelPlayer.GetInt() - 1 && __instance.Data.ClientId != AmongUsClient.Instance.HostId && Options.EnableKickHighLevelPlayer.GetBool())
{
if (HandledLevelKicks.Contains(__instance)) return;
if (!Options.TempBanHighLevelPlayer.GetBool() && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
{
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being above level {Options.KickHighLevelPlayer.GetInt()}", "KickHighLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being above level {Options.KickHighLevelPlayer.GetInt()}");
}
else if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
{
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being above level {Options.KickHighLevelPlayer.GetInt()} ", "BanHighLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being above level {Options.KickHighLevelPlayer.GetInt()}");
}
HandledLevelKicks.Add(__instance);
}
}
}
@@ -169,6 +210,42 @@ public static class ShowLobbyTimer_GameStartManager_Start_Postfix
{
if (__instance == null || !GameData.Instance || !AmongUsClient.Instance || AmongUsClient.Instance.NetworkMode == NetworkModes.LocalGame || !AmongUsClient.Instance.AmHost) return;
// Toes who nose
//Main.NormalOptions.MaxPlayers = 100;
//OptionManager.SyncGameOptions();
HudManager.Instance.ShowLobbyTimer(600);
}
}
[HarmonyPatch(typeof(GameData), nameof(GameData.ShowNotification))]
public static class ShowNotificationPatch
{
static bool Prefix(string playerName, DisconnectReasons reason)
{
switch (reason)
{
case DisconnectReasons.ExitGame:
Logger.Info($" {playerName} left the game. ({reason})", "ShowNotificationPatch");
Logger.SendInGame($" {playerName} left the game. ({reason})");
return false;
case DisconnectReasons.Sanctions:
case DisconnectReasons.Hacking:
case DisconnectReasons.Banned:
Logger.Info($" {playerName} was banned from the game. ({reason})", "ShowNotificationPatch");
Logger.SendInGame($" {playerName} was banned from the game. ({reason})");
return false;
case DisconnectReasons.DuplicateConnectionDetected:
case DisconnectReasons.ClientTimeout:
case DisconnectReasons.Kicked:
Logger.Info($" {playerName} was kicked from the game. ({reason})", "ShowNotificationPatch");
Logger.SendInGame($" {playerName} was kicked from the game. ({reason})");
return false;
default:
Logger.Info($" {playerName} disconnected from the game. ({reason})", "ShowNotificationPatch");
return true;
}
}
}
+2 -2
View File
@@ -70,7 +70,7 @@ class MeetingHudStartPatch
PlayerControl player = null;
foreach (var pc in PlayerControl.AllPlayerControls)
{
if (pc.PlayerId == playerState.TargetPlayerId)
if (pc.PlayerId == playerState.PlayerId)
{
player = pc;
break;
@@ -89,7 +89,7 @@ class MeetingHudStartPatch
taskTextMeeting.text = taskText;
taskTextMeeting.gameObject.name = "TaskTextMeeting";
taskTextMeeting.enableWordWrapping = false;
taskTextMeeting.enabled = player.AmOwner || player.PlayerId == playerState.TargetPlayerId;
taskTextMeeting.enabled = player.AmOwner || player.PlayerId == playerState.PlayerId;
}
}
+5
View File
@@ -126,6 +126,11 @@ public static class NumberOption_Initialize
__instance.Increment = 0.05f;
break;
case StringNames.JudgeTaskRequirement:
__instance.Increment = 1f;
__instance.ValidRange = new FloatRange(0f, 100f);
break;
default:
__instance.Increment = 1f;
break;
+134 -14
View File
@@ -1,4 +1,5 @@
using AmongUs.GameOptions;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using System;
using InnerNet;
using UnityEngine;
@@ -32,7 +33,7 @@ internal class CoStartGamePatch
class PlayerControlSetRolePatch
{
public static bool FirstAssign;
private static readonly HashSet<byte> ProcessedPlayers = new();
public static readonly HashSet<byte> ProcessedPlayers = new();
public static HashSet<byte> Seekers = new();
public static HashSet<byte> manualSeekers = new();
private static readonly System.Random rand = new System.Random();
@@ -83,7 +84,7 @@ class PlayerControlSetRolePatch
foreach (var p in candidates)
{
if (Seekers.Count >= seekersCount) break;
Seekers.Add(p.PlayerId);
}
}
@@ -100,16 +101,10 @@ class PlayerControlSetRolePatch
else roleType = RoleTypes.Crewmate;
}
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
if (roleType == RoleTypes.Impostor || roleType == RoleTypes.Phantom || roleType == RoleTypes.Viper) roleType = RoleTypes.Shapeshifter;
}
if (ProcessedPlayers.Count >= PlayerControl.AllPlayerControls.Count)
{
Seekers.Clear();
ProcessedPlayers.Clear();
FirstAssign = false;
Logger.Info(" PCSRP successful", "RoleManaging");
}
@@ -123,17 +118,16 @@ 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)
{
Logger.Info($" Game Master Successful", "StartGame");
PlayerControl.LocalPlayer.Exiled();
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
PlayerControl.LocalPlayer.CmdReportDeadBody(null);
if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
}
foreach (var p in PlayerControl.AllPlayerControls)
@@ -142,5 +136,131 @@ internal static class OnGameStartPatch
}
PastStartScreen = true;
if (AmongUsClient.Instance.AmHost && Main.GM.Value)
{
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3)) return;
Logger.Info($" Game Master Successful", "StartGame");
PlayerControl.LocalPlayer.Exiled();
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
}
}
// All Patches below are for the speeded up Chat In Game.
// We force the complete intro to skip using 2 patches.
// Some PlayerData related things return null when you do this, so we have to set those all as well.
[HarmonyPatch(typeof(ShhhBehaviour), nameof(ShhhBehaviour.PlayAnimation))]
public static class ShhhBehaviourPlayAnimationPatch
{
static bool Prefix()
{
if (!AmongUsClient.Instance.AmHost) return true;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
HudManager.Instance.shhhEmblem.gameObject.SetActive(false);
return false;
}
else return true;
}
}
[HarmonyPatch(typeof(IntroCutscene), nameof(IntroCutscene.CoBegin))]
public static class IntroCutsceneCoBeginPatch
{
public static void Postfix(IntroCutscene __instance, ref Il2CppSystem.Collections.IEnumerator __result)
{
if (!AmongUsClient.Instance.AmHost) return;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
__result = SkipIntro(__instance, __result).WrapToIl2Cpp();
}
}
private static System.Collections.IEnumerator SkipIntro(IntroCutscene i, Il2CppSystem.Collections.IEnumerator k)
{
int steps = 0;
while (k.MoveNext() && steps++ < 1024) {}
if (steps >= 1024)
{
if (i != null && i.gameObject != null) i.gameObject.SetActive(false);
}
yield break;
}
}
private static NamePlateViewData meetingNameplate;
[HarmonyPatch(typeof(CosmeticsCache), nameof(CosmeticsCache.GetNameplate))]
public static class CosmeticsCacheGetNameplatePatch
{
public static bool Prefix(ref NamePlateViewData __result)
{
if (!AmongUsClient.Instance.AmHost) return true;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
if (MeetingHud.Instance == null) return true;
if (meetingNameplate == null)
{
meetingNameplate = ScriptableObject.CreateInstance<NamePlateViewData>();
meetingNameplate.Image = null;
}
__result = meetingNameplate;
return false;
}
else return true;
}
}
[HarmonyPatch(typeof(CosmeticsCache), nameof(CosmeticsCache.Destroy))]
public static class CosmeticsCacheDestroyPatch
{
public static void Postfix()
{
if (!AmongUsClient.Instance.AmHost) return;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
if (meetingNameplate != null) Object.Destroy(meetingNameplate);
meetingNameplate = null;
}
}
}
[HarmonyPatch(typeof(ShapeshifterPanel), nameof(ShapeshifterPanel.SetPlayer))]
public static class ShapeshifterPanelSetPlayerPatch
{
public static bool Prefix(ShapeshifterPanel __instance, int index, NetworkedPlayerInfo playerInfo, Il2CppSystem.Action onShift)
{
if (__instance == null || playerInfo == null || !AmongUsClient.Instance.AmHost) return true;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
__instance.shapeshift = onShift;
__instance.PlayerIcon.SetFlipX(false);
__instance.PlayerIcon.ToggleName(false);
SpriteRenderer[] componentsInChildren = __instance.GetComponentsInChildren<SpriteRenderer>();
foreach (var spriteRenderer in componentsInChildren)
{
spriteRenderer.material.SetInt(PlayerMaterial.MaskLayer, index + 2);
}
__instance.PlayerIcon.SetMaskLayer(index + 2);
__instance.PlayerIcon.UpdateFromEitherPlayerDataOrCache(playerInfo, PlayerOutfitType.Default, PlayerMaterial.MaskType.ComplexUI, false, null);
__instance.NameText.text = playerInfo.PlayerName;
__instance.LevelNumberText.text = ProgressionManager.FormatVisualLevel(playerInfo.PlayerLevel);
return false;
}
else return true;
}
}
}
+44 -50
View File
@@ -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,9 +49,9 @@ internal static class MurderPlayerPatch
public static readonly Dictionary<byte, int> misfireCount = new();
public static readonly Dictionary<byte, int> 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;
if (!AmongUsClient.Instance.AmHost) return;
byte playerId = __instance.Data.PlayerId;
@@ -60,74 +60,67 @@ internal static class MurderPlayerPatch
killCount[playerId] = 0;
}
if (!__instance.isNew)
if (resultFlags.HasFlag(MurderResultFlags.Succeeded))
{
killCount[playerId]++;
Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer");
if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value)
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
foreach (var p in PlayerControl.AllPlayerControls)
if (target.Data.PlayerId == __instance.shapeshiftTargetPlayerId) return;
Logger.Info($" {__instance.Data.PlayerName} directly killed {target.Data.PlayerName} in SnS, forcing suicide. (Are they hacking?)", "MurderPlayer");
__instance.RpcSetRole(RoleTypes.ImpostorGhost);
}
else
{
killCount[playerId]++;
Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer");
if (string.IsNullOrEmpty(NormalGameEndChecker.firstDeath))
{
if (p.Data.Role.IsImpostor)
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({killCount[p.Data.PlayerId]}†)</color> - {Utils.StoredRoleText[p.PlayerId]}";
}
else
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})</color> - {Utils.StoredRoleText[p.PlayerId]}";
}
NormalGameEndChecker.firstDeath = target.Data.PlayerName;
Utils.HasMurdered = true;
}
}
}
//2 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value && resultFlags.HasFlag(MurderResultFlags.Succeeded))
{
if (!resultFlags.HasFlag(MurderResultFlags.Succeeded))
return;
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data.Role.IsImpostor)
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({killCount[p.Data.PlayerId]}†)</color> - {Utils.StoredRoleText[p.PlayerId]}";
}
else
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})</color> - {Utils.StoredRoleText[p.PlayerId]}";
}
}
}
//1 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && !resultFlags.HasFlag(MurderResultFlags.Succeeded))
{
if (target.Data.PlayerId == __instance.shapeshiftTargetPlayerId)
{
killCount[playerId]++;
Logger.Info($" {__instance.Data.PlayerName} correctly killed {target.Data.PlayerName} ", "SNSKillManager");
target.RpcSetRole(RoleTypes.CrewmateGhost);
if (string.IsNullOrEmpty(NormalGameEndChecker.firstDeath))
{
NormalGameEndChecker.firstDeath = target.Data.PlayerName;
Utils.HasMurdered = true;
}
}
else
{
if (!misfireCount.ContainsKey(playerId))
misfireCount[playerId] = 0;
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");
}
Logger.Info($" {__instance.Data.PlayerName} misfired trying to kill {target.Data.PlayerName}. Blocking kill", "SNSKillManager");
}
}
}
}
/*
[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;
@@ -142,6 +135,7 @@ internal static class CheckShapeshiftPatch
else return true;
}
}
*/
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CompleteTask))]
class PlayerControlCompleteTaskPatch
@@ -156,7 +150,7 @@ class PlayerControlCompleteTaskPatch
public static void Postfix(PlayerControl __instance, uint idx)
{
if (!AmongUsClient.Instance.AmHost) return;
foreach (var p in PlayerControl.AllPlayerControls)
{
@@ -205,7 +199,7 @@ class PlayerControlCompleteTaskPatch
public static void CalculateTaskWin()
{
if (!Utils.GamePastRoleSelection || Utils.isHideNSeek || Options.NoGameEnd.GetBool() || !OnGameStartPatch.PastStartScreen) return;
if (!OnGameStartPatch.PastStartScreen || Utils.isHideNSeek || Options.NoGameEnd.GetBool() || !OnGameStartPatch.PastStartScreen) return;
//Logger.Info($" Checking if {GameData.Instance.CompletedTasks} - {ignoredCompletedTasks} >= ({GameData.Instance.TotalTasks} - {ignoredTasks}) * 0.01 * {Options.TaskPercentNeededToWin.GetInt()}", "TaskPatch");
+18 -1
View File
@@ -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;
+11 -1
View File
@@ -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");
}
}
}
}
+2 -2
View File
@@ -19,8 +19,8 @@ internal static class AddVotePatch
{
Logger.Info($" Kicked {target.Data.PlayerName}, {target.Data.FriendCode}", "KickPatch");
}
return true;
return false;
}
}
+31 -21
View File
@@ -1,16 +1,23 @@
# Welcome to Among Us Revamped!
<h1 align="center">Welcome to Among Us Revamped!</h1>
<br>
</p>
<p align="center">
<a href="https://discord.gg/83Zhzhyhya" target="_blank">
<img src="https://img.shields.io/badge/Discord%20-%231DA1F2.svg?&style=for-the-badge&logo=discord&logoColor=white&color=5662f6"/>
</a>
<a href="https://ko-fi.com/apemv">
<img src="https://img.shields.io/badge/Donate%20on-Ko--fi-ff5f5f?style=for-the-badge&logo=ko-fi&logoColor=white">
</a>
</p>
<center>
<a href="https://discord.gg/83Zhzhyhya" target="_blank"><img src="https://img.shields.io/badge/Discord%20-%231DA1F2.svg?&style=for-the-badge&logo=discord&logoColor=white&color=5662f6"/></a>
<a href="https://github.com/apemv/AmongUsRevamped/releases/latest" target="_blank"><img src="https://img.shields.io/badge/Latest Version%20-%231DA1F2.svg?&style=for-the-badge&logo=github&logoColor=white&color=181717"/></a>
</center>
<p align="center">
<a href="https://github.com/ApeMV/AmongUsRevamped/releases">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/total?style=for-the-badge&color=red"/>
</a>
<a href="https://github.com/ApeMV/AmongUsRevamped/releases/latest">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/latest/total?style=for-the-badge"/>
</a>
</p>
# 💡 How To Install:
@@ -29,29 +36,31 @@
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
‎
# 🎮 Features (v1.9.2):
# 🎮 Features (v2.0.3):
## <b>♠️ Client Side settings:</b>
- Game Master (Spectator)
- Show FPS
- Dark Theme
- Toggle Game Master (Spectator)
- Toggle Show FPS
- Toggle Dark Theme
- Toggle Lobby Music
- Show/Hide Info When Dead
- Toggle Info When Dead
- Toggle Command Helper
## <b>⚙️ Technical settings:</b>
- Kick/Ban players under a certain level
- Kick/Ban invalid FriendCodes
- Advanced AFK Detection system
- Kick/Ban players under/above a certain level
- Kick/Ban invalid (Empty) Friendcodes
- Kick/Ban players who say "start"
- Denyword system
- Banlist system
- Denyname system
- Denyword and Denyname system
- Advanced Moderator system
- To add Admins, Moderators and VIP's, type the user's Friendcode in the designated files located in AUR-DATA
- To add Admins/Moderators/VIP's, type the user's Friendcode in the designated files located in AUR-DATA
- Enable No Game End
- Custom starting countdown
## <b>♻️ Automation settings:</b>
- Full Autohost and Rehost support
- Automatically rejoin lobby
- Automatically send winner info
- Automatically Send Map Votes
- Enable (configurable) Welcome Messages from Templates.txt
## <b>🔧 Gameplay Settings:</b>
- Dead impostors can sabotage
@@ -64,10 +73,12 @@
- % Tasks completed for Crewmates to win
- Enable/Disable any task
- All players have same tasks
- Shield player who died first
- Hide and Seek: Custom Seeker count
## <b>🏆 Custom Gamemodes:</b>
- 0 Kill Cooldown -> Set Kill Cooldown to 0.01
- Shift and Seek
- Poof and Seek
- Speedrun
## <b>👾 Custom Anticheat:</b>
- Detect invalid sabotages
@@ -76,23 +87,21 @@
- Detect Invalid animations
- Detect Invalid task completions
- Detect immortality cheats
- Block attempted votekicks
- These are all enabled by default
## <b>❓ Other Improvements:</b>
- Lanuage support: English, Italian, Japanese, Russian, Simplified Chinese, Spanish
- Select a language in Language/YourLanguage.txt
- Preset system for mod settings
- Command Helper
- Creatable and customizable Templates
- Eht Dleks (Reverse Skeld) Map
- Ability to cancel starting countdown
- Improved main menu
- Faster startup time
- Zoom out in lobby or when dead
- See player kill/task count and Role when dead
- Higher and more accurate Option ranges
- Always visible lobby timer
- Access experimental animation test scene
- Manually set multiple Seekers in HnS
- <b>🎉 And this all works in public lobbies!</b>
### Hotkeys
@@ -131,6 +140,7 @@
| /clearseekers | Clears manual Seeker list in HnS |
| /mapvote | Starts a vote for the map. Default maps only |
| /allmapvote | Starts a vote for the map. Includes Eht Dleks |
| /gmvote | Starts a vote for the gamemode |
‎
**Credit to these mods and their developers for their code:**
+38 -3
View File
@@ -23,6 +23,8 @@
"enableKickLowLevelPlayer": "Kick Low Level Players",
"kickLowLevelPlayer": "Kick Players Under Level",
"tempBanLowLevelPlayer": "Ban Instead Of Kick",
"enableKickHighLevelPlayer": "Kick High Level Players",
"kickHighLevelPlayer": "Kick Players Above Level",
"dontKickLevelOnes": "Don't Kick Lv.1 Players For Glitched Lobbies",
"tabGroupKickInvalidFriendCodes": "Invalid Friendcodes",
"kickInvalidFriendCodes": "Kick Invalid (Empty) Friendcodes",
@@ -54,6 +56,7 @@
"allowFortegreen": "Allow Fortegreen Color",
"noGameEnd": "No Game End",
"mapVoteDuration": "Map Vote Duration",
"modeVoteDuration": "Gamemode Vote Duration",
"tabGroupDeniedWords": "Denied Words",
"enableDeniedWords": "Kick Players Who Say Denied Words",
@@ -62,7 +65,7 @@
"slashColorCmd": "Who Can Use /color",
"slashRolesAndGamemodeCmd": "Who Can Use /r & Templates",
"slashLastGameCmd": "Who Can Use /l & /aur",
"slashMapAndSeekerCmd": "Who Can Use /seeker & /mapvote",
"slashMapAndSeekerCmd": "Who Can Use /seeker & Create Votes",
"slashKickCmd": "Who Can Use /kick & /ckick",
"slashBanCmd": "Who Can Use /ban & /cban",
"slashEndMeetingCmd": "Who Can Use /endmeeting",
@@ -81,6 +84,8 @@
"tabGroupSNS": "Shift and Seek",
"snsChatInGame": "Chat during gameplay (experimental)",
"snsChatInGameExtend": "Send gamemode info after game start",
"snsChatInGameExtendTwo": "Send extended info after game start",
"snsChatInGameFast": "Faster Meeting (experimental+)",
"snsSettingsOverride": "Auto Update Settings",
"cantKillTime": "After Misfiring, Can't kill for",
"misfiresToSuicide": "Suicide After Amount Of Misfires",
@@ -110,6 +115,8 @@
"disableCloseDoor": "Disable Door Sabotages",
"tabGroupGameplayGeneral": "General",
"shieldFirstDeath": "Shield Player Who Died First",
"shieldFirstDeathDuration": "Shield Duration",
"disableAnnoyingMeetingCalls": "Disable Meeting Calls First 30s",
"disableReport": "Disable Body Reports",
"changeDecontaminationTime": "Override Decontamination Time (Standard Only)",
@@ -232,7 +239,7 @@
"disableSubmitScan": "Disable Submit Scan",
"disableUploadData": "Disable Upload Data",
"allCommandsFull": "<b>ALL COMMANDS:</b>\n\n<b>/help</b>\nShow this message.\n<b>/aur, /socials</b>\nSend Among Us Revamped social links.\n\n<b>/r, /gm</b>\nSend current mode description.\n<b>/l, /lastgame</b>\nSend last winner info.\n\n<b>/0kc, /0killcooldown</b>\nSend 0 Kill Cooldown mode description.\n<b>/sns, /shiftandseek</b>\nSend Shift and Seek mode description.\n<b>/sp, /speedrun</b>\nSend Speedrun mode description.\n\n/<b>kick, /ban</b>\nKick or ban a player by name.\n<b>/ckick, /cban</b>\nKick or ban a player by color.\n\n<b>/vip /moderator /admin</b>\nAdd a player as VIP, Moderator, or Admin.\n<b>/removevip, /removemoderator, /removeadmin</b>\nRemove VIP, Moderator, or Admin from a player.\n\n<b>/eg, /endgame</b>\nEnd the current game.\n<b>/em, /endmeeting</b>\nEnd the current meeting.\n<b>/s, /start</b>\nBegin the game starting countdown.\n\n<b>/t {template}</b>\nSend a template from AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nSet your color, can be used to bypass limits.",
"allCommandsFull": "<b>ALL COMMANDS:</b>\n\n<b>/help</b>\nShow this message.\n<b>/aur, /socials</b>\nSend Among Us Revamped social links.\n\n<b>/r, /gm</b>\nSend current mode description.\n<b>/l, /lastgame</b>\nSend last winner info.\n\n<b>/0kc, /0killcooldown</b>\nSend 0 Kill Cooldown mode description.\n<b>/sns, /shiftandseek</b>\nSend Shift and Seek mode description.\n<b>/sns2</b>\nSend extended Shift and Seek mode description\n<b>/pns, /poofandseek</b>\nSend Poof and Seek mode description.\n<b>/sp, /speedrun</b>\nSend Speedrun mode description.\n\n/<b>kick, /ban</b>\nKick or ban a player by name.\n<b>/ckick, /cban</b>\nKick or ban a player by color.\n\n<b>/vip /moderator /admin</b>\nAdd a player as VIP, Moderator, or Admin.\n<b>/removevip, /removemoderator, /removeadmin</b>\nRemove VIP, Moderator, or Admin from a player.\n\n<b>/eg, /endgame</b>\nEnd the current game.\n<b>/em, /endmeeting</b>\nEnd the current meeting.\n<b>/s, /start</b>\nBegin the game starting countdown.\n\n<b>/t {template}</b>\nSend a template from AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nSet your color, can be used to bypass limits.\n\n<b>/seeker {name}</b>\nForce someone as Seeker in HnS.\n<b>/seekers</b>\nShow forced seeker list.\n<b>/clearseeker</b>\nClear forced seeker list.\n\n<b>/mapvote</b>\nStarts a map vote containing default maps.\n<b>/allmapvote</b>\nStarts a map vote that includes Eht Dleks.\n<b>/gmvote</b>\nStarts a gamemode vote.",
"translationReloaded": "Your file has successfully been reset.\nTo apply all changes, restart your game.",
@@ -260,8 +267,10 @@
"helpDesc": "Show all commands and what they do.",
"snsDesc": "Send Shift and Seek gamemode Description.",
"snsTwoDesc": "Send Shift and Seek extended 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.",
@@ -288,6 +297,7 @@
"clearSeekerDesc": "Clears the manual Seeker list.",
"mapVoteDesc": "Starts a vote between the 5 core maps.",
"allMapVoteDesc": "Starts a vote between all 6 maps, including Eht Dleks.",
"modeVoteDesc": "Starts a vote between all gamemodes.",
"banWordKick": "{0} was kicked because they sent a word in DeniedWords.txt {1} time(s)",
"startWordKick": "{0} was kicked because they sent a word in StartWords.txt {1} time(s)",
@@ -315,5 +325,30 @@
"seekers": "Seekers: ",
"clearedSeekers": "Successfully cleared the manual Seeker list.",
"rehostSuccess": "Successfully rehosted a lobby"
"rehostSuccess": "Successfully rehosted a lobby",
"kick": "Kick",
"ban": "Ban",
"notifyMe": "Notify Me",
"tabGroupAfk": "AFK Detection",
"enableAfkDetection": "Enable AFK Detection",
"afkTimer": "Detection Threshold",
"afkPenalty": "AFK Penalty",
"onlyDetectSpawn": "Only Detect Players At Spawn",
"afkNotify": "{0} has been AFK for {1}s",
"afkKick": "{0} has been AFK for {1}s, kicking user",
"afkBan": "{0} has been AFK for {1}s, banning user",
"automaticMapPoll": "Automatic /mapvote After Rejoining",
"automaticAllMapPoll": "Automatic /allmapvote After Rejoining",
"timeBeforeMapPoll": "Time Before Vote Starts",
"automaticModePoll": "Automatic /gmvote After Rejoining",
"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"
}
+294 -235
View File
@@ -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": "<b>TUTTI I COMANDI:</b>\n\n<b>/help</b>\nMostra questo messaggio.\n<b>/aur, /socials</b>\nInvia i link social di Among Us Revamped.\n\n<b>/r, /gm</b>\nInvia la descrizione della modalità corrente o l'elenco delle abilità.\n<b>/l, /lastgame</b>\nInvia le informazioni sull'ultimo vincitore.\n\n<b>/0kc, /0killcooldown</b>\nInvia la descrizione della modalità Ricarica uccisione a 0.\n<b>/sns, /shiftandseek</b>\nInvia la descrizione della modalità Mutaforma e cerca.\n<b>/sp, /speedrun</b>\nInvia la descrizione della modalità Speedrun.\n\n/<b>kick, /ban</b>\nEspelli o banna un giocatore per nome.\n<b>/ckick, /cban</b>\nEspelli o banna un giocatore per colore.\n\n<b>/vip /moderator /admin</b>\nAggiungi un giocatore come VIP, Moderatore o Admin.\n<b>/removevip, /removemoderator, /removeadmin</b>\nRimuovi VIP, Moderatore o Admin da un giocatore.\n\n<b>/eg, /endgame</b>\nTermina la partita corrente.\n<b>/em, /endmeeting</b>\nTermina la riunione corrente.\n<b>/s, /start</b>\nAvvia il conto alla rovescia di inizio partita.\n\n<b>/t {template}</b>\nInvia un template da AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nImposta il tuo colore, può essere usato per aggirare i limiti.",
"allCommandsFull": "<b>TUTTI I COMANDI:</b>\n\n<b>/help</b>\nMostra questo messaggio.\n<b>/aur, /socials</b>\nInvia i link di Among Us Revamped.\n\n<b>/r, /gm</b>\nInvia la descrizione della modalità attuale o la lista delle abilità.\n<b>/l, /lastgame</b>\nInvia le informazioni sull'ultimo vincitore.\n\n<b>/0kc, /0killcooldown</b>\nInvia la descrizione della modalità 0 Cooldown Uccisione.\n<b>/sns, /shiftandseek</b>\nInvia la descrizione della modalità Clone.\n<b>/sp, /speedrun</b>\nInvia la descrizione della modalità Speedrun.\n\n/<b>kick, /ban</b>\nKicka o banna un giocatore tramite nome.\n<b>/ckick, /cban</b>\nKicka o banna un giocatore tramite colore.\n\n<b>/vip /moderator /admin</b>\nAggiunge un giocatore come VIP, Moderatore o Admin.\n<b>/removevip, /removemoderator, /removeadmin</b>\nRimuove lo stato di VIP, Moderatore o Admin a un giocatore.\n\n<b>/eg, /endgame</b>\nTermina la partita attuale.\n<b>/em, /endmeeting</b>\nTermina la riunione attuale.\n<b>/s, /start</b>\nInizia il conto alla rovescia per l'avvio.\n\n<b>/t {template}</b>\nInvia un template da AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\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": "<color=red><size=5><b>AVVISO:</color></b></size>\n<size=3><b>Hai 2 o più Plugin rilevati.</size></b>\nAmong Us Revamped non è compatibile con la maggior parte delle mod.\nSe riscontri dei bug, molto probabilmente sono dovuti all'incompatibilità.",
"pluginWarning": "<color=red><size=5><b>ATTENZIONE:</color></b></size>\n<size=3><b>Hai 2 o più plugin attivi rilevati.</size></b>\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": "<color=yellow>VIP</color> e superiori",
"moderatorAndAbove": "<color=purple>Moderatori</color> e superiori",
"vipAndAbove": "<color=yellow>VIP</color> E Superiori",
"moderatorAndAbove": "<color=purple>Moderatore</color> E Superiori",
"admin": "<color=red>Admin</color>",
"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"
}
+68 -10
View File
@@ -28,7 +28,6 @@
"moderatorCanUseCommand": "モデレーターのコマンド使用を許可",
"autoKickStart": "「Start/開始」と発言したプレイヤーをキック",
"autoKickStartAsBan": "キックの代わりにBAN",
"autoKickStartTimes": "キックに必要な催促メッセージ回数",
"autoKickStartStrength": "厳格検出モード",
"tabGroupAutomation": "自動化",
"autoSendGameInfo": "勝者情報を自動送信",
@@ -38,7 +37,7 @@
"playerAutoStart": "自動スタートに必要な人数",
"enableJoinMessages": "参加歓迎メッセージを有効化",
"messagePerPlayerNum": "指定参加人数ごとの通知",
"tabGroupMisc": "その他",
"tabGroupMisc": "実験的",
"startCountdown": "デフォルトのカウントダウン",
"colorCommandLevel": "カラーコマンドの使用権限",
"allowFortegreen": "フォルテグリーン色を許可",
@@ -227,10 +226,7 @@
"banlistWelcome": "# このファイルにフレンドコードを記述することでプレイヤーをBANリストに追加できます。\n# ゲーム内でBANしたプレイヤーも自動的にここへ追加されます。以下は記述例です。\n\nfriendcode#0000\n",
"banwordWelcome": "# このファイルではNGワードを設定できます。リスト内の単語を発言したプレイヤーは自動的にキックされます。\n# 単語ごとに改行して区切ってください。",
"bannameWelcome": "# このファイルではNGネームを設定できます。リスト内の名前を使用しているプレイヤーは自動的にキックされます。\n# 名前ごとに改行して区切ってください。",
"startWordsWelcome": "# このファイルでは「『Start』と発言したプレイヤーをキック」に使用する判定単語を設定できます。\n# 「厳格検出モード」OFF = 完全一致で判定。「厳格検出モード」ON = 部分一致で判定。\n# ロビー内でのみ検知したい無関係な単語を入れることも可能です。\n\nstart\nbegin\ncommence",
"noGameEndWarning": "警告: 「ゲーム終了なし」が有効になっています",
"gameMasterWarningTwo": "警告: 「ゲームマスター」が有効になっています",
"tooLongTemplate": "テンプレートが120文字を超えているため、送信するとキックされます。文字数を減らしてください。",
@@ -268,11 +264,8 @@
"lastgameDesc": "前回のゲーム情報を送信します。",
"templateDesc": "AUR-DATA/templates.txt から指定のテンプレートを送信します。",
"seekerDesc": "かくれんぼでプレイヤーを鬼(Seeker)に指定します。",
"seekersDesc": "手動選択された鬼のリストを表示します。",
"clearSeekerDesc": "手動選択された鬼のリストをクリアします。",
"banWordKick": "{0} は DeniedWords.txt に登録されたNGワードを {1} 回送信したためキックされました",
"startWordKick": "{0} は StartWords.txt に登録された単語を {1} 回送信したためキックされました",
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>複数のプラグイン(Mod)が検出されました。</size></b>\nAmong Us Revamped は他の多くのMODと互換性がありません。\nバグが発生する場合、そのほとんどはMod間の競合によるものです。",
@@ -289,7 +282,72 @@
"moderatorAndAbove": "<color=purple>モデレーター</color> 以上",
"admin": "<color=red>管理人</color>",
"onlyYou": "あなたのみ",
"seekersDesc": "手動で選択されたシーカーをすべて表示します。",
"clearSeekerDesc": "手動シーカーリストをクリアします。",
"startWordsWelcome": "# このファイルでは、「Start」と発言したプレイヤーをキックする機能で検出する単語を設定できます。\n# 「厳格検出モード」OFF = メッセージが単語と完全に一致する必要があります。\n# 「厳格検出モード」ON = メッセージに単語が含まれているだけで検出されます。\n# ロビー内でのみ検出したい無関係な単語を追加することもできます。\n\nstart\nbegin\ncommence",
"gameMasterWarningTwo": "警告:ゲームマスターが有効になっています",
"startWordKick": "{0} は StartWords.txt に設定された単語を送信したためキックされました(回数:{1}回)",
"seekers": "シーカー:",
"clearedSeekers": "手動シーカーリストを正常にクリアしました。",
"autoKickStartTimes": "StartWordsを送信した回数でキック",
"seekers": "鬼(Seeker): ",
"clearedSeekers": "手動選択された鬼のリストを正常にクリアしました。"
"tabGroupLevelKick": "レベル管理",
"enableKickLowLevelPlayer": "低レベルのプレイヤーをキック",
"tabGroupKickInvalidFriendCodes": "無効なフレンドコード",
"tabGroupAutoKickStart": "StartWords",
"tabGroupAutostart": "自動ホスト",
"rehost": "切断時にロビーを自動で再作成",
"public": "新しいロビーを自動で公開",
"mapVoteDuration": "マップ投票時間",
"tabGroupDeniedWords": "禁止ワード",
"enableDeniedWords": "禁止ワードを送信したプレイヤーをキック",
"slashMapAndSeekerCmd": "/seeker と /mapvote を使用できる人",
"snsChatInGameExtend": "ゲーム開始後にゲームモード情報を送信",
"mapVoteDesc": "5つの通常マップで投票を開始します。",
"allMapVoteDesc": "Eht Dleks を含む全6マップで投票を開始します。",
"banWordBan": "{0} は DeniedWords.txt の単語を {1} 回送信したためBANされました",
"startWordBan": "{0} は StartWords.txt の単語を {1} 回送信したためBANされました",
"moderationSettings": "モデレーション設定",
"moderationSettingsDesc": "荒らしや迷惑行為を防止するための設定です。",
"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": "投票開始までの待機時間",
"pnsDesc": "Poof and Seekゲームモードの説明を送信します。",
"pnsDisableSabotage": "PnSの重大なサボタージュを無効にする",
"pnsDisableCloseDoor": "PnSのドア閉鎖サボタージュを無効にする",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "幻象師が明らかに移動した後、自殺するまでの時間",
"snsImpostorCanVent": "インポスターはベントを使用できる",
"modeVoteDuration": "ゲームモード投票時間",
"snsChatInGameExtendTwo": "ゲーム開始後に拡張情報を送信",
"snsChatInGameFast": "高速会議(実験的+)",
"shieldFirstDeath": "最初に死亡したプレイヤーをシールドで保護",
"shieldFirstDeathDuration": "シールド持続時間",
"snsTwoDesc": "Shift and Seekの拡張説明を送信。",
"modeVoteDesc": "すべてのゲームモードから投票を開始します。",
"automaticModePoll": "再参加後に自動で /gmvote を実行"
}
+56 -3
View File
@@ -26,7 +26,6 @@
"moderatorCanUseCommand": "Модераторы Могут Использовать Команды",
"autoKickStart": "Кикать Игроков Которые Говорят Start",
"autoKickStartAsBan": "Банить вместо кика",
"autoKickStartTimes": "Start сообщений нужно для кика",
"autoKickStartStrength": "Режим строгого обнаружения",
"tabGroupAutomation": "Автоматизация",
"autoSendGameInfo": "Автоматически отправлять информацию о победителях",
@@ -36,7 +35,7 @@
"playerAutoStart": "Игроков Нужно Для Авто Старта",
"enableJoinMessages": "Включить Сообщение С Приветствиями",
"messagePerPlayerNum": "Сообщение Каждые # Заходов",
"tabGroupMisc": "Разное",
"tabGroupMisc": "Экспериментальное",
"startCountdown": "Отсчёт Для Старта По Умолчанию",
"colorCommandLevel": "Кто Может использовать Команды Цветов",
"allowFortegreen": "Разрешить Фортезелёный Цвет",
@@ -297,5 +296,59 @@
"startWordKick": "{0} Был кикнут так как они отправили слово которое было в StartWords.txt {1} раз(а)",
"seekers": "Искателей: ",
"clearedSeekers": "Успешно очищен список вручную выбранных искателей."
"clearedSeekers": "Успешно очищен список вручную выбранных искателей.",
"tabGroupLevelKick": "Уровневая Модерация",
"enableKickLowLevelPlayer": "Кикать Игроков С Низким Уровнем",
"tabGroupKickInvalidFriendCodes": "Неправильные Коды Друзей",
"tabGroupAutoKickStart": "Старт Слова",
"autoKickStartTimes": "Отправленных Cтарт сообщений нужно для кика",
"tabGroupAutostart": "АвтоХост",
"rehost": "Автоматически Пересоздавать Лобби При Вылете",
"public": "Автоматически Делать Новое Лобби Публичным",
"mapVoteDuration": "Продолжительность Голосования За Карты",
"tabGroupDeniedWords": "Запрещенные Слова",
"enableDeniedWords": "Кикать Игроков Которые Говорят Запрещенные Слова",
"slashMapAndSeekerCmd": "Кто Может Использовать /seeker & /mapvote",
"snsChatInGameExtend": "Отправлять информацию о режиме после начала игры",
"mapVoteDesc": "Начинает голосование между 5 основными картами.",
"allMapVoteDesc": "Начинает голосование между всеми 6 картами, включая Eht Dleks.",
"banWordBan": "{0} Были забанены потому что они отправили слово из DeniedWords.txt {1} раз(а)",
"startWordBan": "{0} Были забанены потому что они отправили слово из StartWords.txt {1} раз(а)",
"moderationSettings": "Настройки Модерации",
"moderationSettingsDesc": "Настройки Модерации чтобы бороться с токсичностью и плохим поведением.",
"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": "Выключить Критические Саботажи В Режиме Фантомные Прятки",
"pnsDisableCloseDoor": "Выключить Саботажи Дверей В Режиме Фантомные Прятки",
"tabGroupPNS": "Фантомные Прятки",
"badMoveTimeToSuicide": "Файнтомы Самоубиваются После Видимого Движения После",
"snsImpostorCanVent": "Предатели Могут Уходить в Люк",
"pnsDesc": "Отправляет Информацию о Режиме Фантомных Прятках.",
"modeVoteDuration": "Врямя Голосования За Режим",
"snsChatInGameExtendTwo": "Отправить увеличенную инфо после начала игры",
"snsChatInGameFast": "Быстрые Собрания (экспериментальное+)",
"shieldFirstDeath": "Защищать Игрока Который Умер Первым",
"shieldFirstDeathDuration": "Длительность Щита",
"snsTwoDesc": "Отправить Увеличенное Описание Клона.",
"modeVoteDesc": "Начать Голосование между всеми режимами.",
"automaticModePoll": "Автоматический /gmvote После Перезахода"
}
+55 -8
View File
@@ -28,7 +28,6 @@
"moderatorCanUseCommand": "管理人员可以使用命令",
"autoKickStart": "自动踢出发送“Start”的玩家",
"autoKickStartAsBan": "改为封禁而非踢出",
"autoKickStartTimes": "踢出所需的“Start”消息次数",
"autoKickStartStrength": "严格检测模式",
"tabGroupAutomation": "自动化",
"autoSendGameInfo": "自动发送获胜者信息",
@@ -38,7 +37,7 @@
"playerAutoStart": "自动开始所需人数",
"enableJoinMessages": "启用欢迎消息",
"messagePerPlayerNum": "每达到指定加入人数发送消息",
"tabGroupMisc": "杂项设置",
"tabGroupMisc": "实验性",
"startCountdown": "默认开始倒计时",
"colorCommandLevel": "谁可以使用颜色命令",
"allowFortegreen": "允许军绿色",
@@ -239,7 +238,6 @@
"moderatorRemove": "已成功移除 {0} 的管理员 (Moderator) 权限。",
"adminRemove": "已成功移除 {0} 的超级管理员 (Admin) 权限。",
"permFail": "找不到用户 '{0}'。请检查拼写是否正确?",
"helpDesc": "显示所有命令及其功能。",
"snsDesc": "发送 变形与搜寻 (Shift and Seek) 游戏模式介绍。",
"0kcDesc": "发送 0秒击杀冷却 (0 Kill Cooldown) 游戏模式介绍。",
@@ -265,15 +263,11 @@
"removeAdminDesc": "移除用户的超级管理员 (Admin) 权限。",
"lastgameDesc": "发送上一局游戏信息。",
"templateDesc": "发送 AUR-DATA/templates.txt 中指定的模板。",
"banWordKick": "{0} 因发送违禁词被踢出,累计次数:{1} 次",
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>检测到您启用了 2 个或更多插件。</size></b>\nAmong Us Revamped 与大多数模组不兼容。\n如果遇到 Bug,极有可能是因为冲突所致。",
"systemSettings": "系统设置",
"gameplaySettings": "游戏设置",
"gamemodeSettings": "模式设置",
"systemSettingsDesc": "用于提升舒适度与测试的画质/系统设置。",
"gameplaySettingsDesc": "用于改善游戏内体验的设置。",
"gamemodeSettingsDesc": "适用于特定游戏模式的情境设置。",
@@ -289,5 +283,58 @@
"gameMasterWarningTwo": "警告:游戏主管已启用",
"startWordKick": "{0} 因发送 StartWords.txt 中的关键词被踢出,累计次数:{1} 次",
"seekers": "搜寻者:",
"clearedSeekers": "已成功清除手动搜寻者列表。"
"clearedSeekers": "已成功清除手动搜寻者列表。",
"autoKickStartTimes": "发送 StartWords 文本关键词并在达到某个次数时踢出该玩家",
"tabGroupLevelKick": "等级管理",
"enableKickLowLevelPlayer": "启用低等级玩家踢出",
"tabGroupKickInvalidFriendCodes": "无效好友代码",
"tabGroupAutoKickStart": "StartWords",
"tabGroupAutostart": "自动开房",
"rehost": "断线后自动重新创建大厅",
"public": "自动将新大厅设为公开",
"mapVoteDuration": "地图投票持续时间",
"tabGroupDeniedWords": "违禁词",
"enableDeniedWords": "踢出发送违禁词的玩家",
"slashMapAndSeekerCmd": "谁可以使用 /seeker 与 /mapvote",
"snsChatInGameExtend": "游戏开始后发送游戏模式介绍",
"mapVoteDesc": "发起包含 5 张官方地图的地图投票。",
"allMapVoteDesc": "发起包含全部 6 张地图(包括 Eht Dleks)的地图投票。",
"banWordBan": "{0} 因发送了 DeniedWords.txt 中的关键词,第 {1} 次违规,已被封禁。",
"startWordBan": "{0} 因发送了 StartWords.txt 中的关键词,第 {1} 次违规,已被封禁。",
"moderationSettings": "管理设置",
"moderationSettingsDesc": "用于防止恶意行为和不当行为的管理设置。",
"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": "投票开始前等待時間",
"pnsDesc": "发送 Poof and Seek 幻象与躲藏 游戏模式说明。",
"pnsDisableSabotage": "禁用 PnS 紧急破坏。",
"pnsDisableCloseDoor": "禁用 PnS 关门破坏。",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "幻象师在明显移动后自杀的时间。",
"snsImpostorCanVent": "内鬼可以使用通风管。",
"modeVoteDuration": "游戏模式投票时长",
"snsChatInGameExtendTwo": "游戏开始后发送扩展信息",
"snsChatInGameFast": "快速会议(实验性+)",
"shieldFirstDeath": "护盾保护第一个死亡的玩家",
"shieldFirstDeathDuration": "护盾持续时间",
"snsTwoDesc": "发送 Shift and Seek 扩展说明。",
"modeVoteDesc": "在所有游戏模式之间发起投票。",
"automaticModePoll": "重新加入后自动执行 /gmvote"
}
+68 -15
View File
@@ -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": "<b>TODOS LOS COMANDOS:</b>\n\n<b>/help</b>\nMuestra este mensaje.\n<b>/aur, /socials</b>\nEnviar los enlaces sociales de Among Us Revamped.\n\n<b>/r, /gm</b>\nEnviar la descripción del modo actual o la lista de habilidades.\n<b>/l, /lastgame</b>\nEnviar la información del ganador anterior.\n\n<b>/0kc, /0killcooldown</b>\nEnviar la descripción del modo 0 de enfriamiento para matar.\n<b>/sns, /shiftandseek</b>\nEnviar la descripción del modo Shift and Seek.\n<b>/sp, /speedrun</b>\nEnviar la descripción del modo Speedrun.\n\n/<b>kick, /ban</b>\nExpulsa o bloquea a un jugador por nombre.\n<b>/ckick, /cban</b>\nExpulsa o bloquea a un jugador por color.\n\n<b>/vip /moderator /admin</b>\nAgrega a un jugador como VIP, moderador o administrador.\n<b>/removevip, /removemoderator, /removeadmin</b>\nElimina VIP, moderador o administrador de un jugador.\n\n<b>/eg, /endgame</b>\nTermina la partida actual.\n<b>/em, /endmeeting</b>\nTermina la reunión actual.\n<b>/s, /start</b>\nInicia la cuenta regresiva de la partida.\n\n<b>/t {template}</b>\nEnviar una plantilla de AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nCambia tu color; puede usarse para evitar límites.",
"allCommandsFull": "<b>TODOS LOS COMANDOS:</b>\n\n<b>/help</b>\nMuestra este mensaje.\n<b>/aur, /socials</b>\nEnviar los enlaces sociales de Among Us Revamped.\n\n<b>/r, /gm</b>\nEnviar la descripción del modo actual o la lista de habilidades.\n<b>/l, /lastgame</b>\nEnviar la información del ganador anterior.\n\n<b>/0kc, /0killcooldown</b>\nEnviar la descripción del modo 0 de enfriamiento para matar.\n<b>/sns, /shiftandseek</b>\nEnviar la descripción del modo Shift and Seek.\n<b>/sp, /speedrun</b>\nEnviar la descripción del modo Speedrun.\n\n/<b>kick, /ban</b>\nExpulsa o banea a un jugador por nombre.\n<b>/ckick, /cban</b>\nExpulsa o banea a un jugador por color.\n\n<b>/vip /moderator /admin</b>\nAgrega a un jugador como VIP, moderador o administrador.\n<b>/removevip, /removemoderator, /removeadmin</b>\nElimina VIP, moderador o administrador de un jugador.\n\n<b>/eg, /endgame</b>\nTermina la partida actual.\n<b>/em, /endmeeting</b>\nTermina la reunión actual.\n<b>/s, /start</b>\nInicia la cuenta regresiva de la partida.\n\n<b>/t {template}</b>\nEnviar una plantilla de AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\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,41 @@
"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": "<color=red><size=5><b>ADVERTENCIA:</color></b></size>\n<size=3><b>Se han detectado 2 o más plugins.</size></b>\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": "<color=yellow>VIP</color> o superior",
"moderatorAndAbove": "<color=purple>Moderador</color> o superior",
"admin": "<color=red>Administrador</color>",
"onlyYou": "Solo tú"
"onlyYou": "Solo tú",
"pnsDisableSabotage": "Desactivar sabotajes críticos de PnS",
"pnsDisableCloseDoor": "Desactivar sabotajes de puertas de PnS",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "El Fantasma se suicida después de moverse visiblemente durante",
"snsImpostorCanVent": "Los impostores pueden usar conductos",
"modeVoteDuration": "Duración de la votación de modo de juego",
"snsChatInGameExtendTwo": "Enviar información ampliada al iniciar la partida",
"snsChatInGameFast": "Reunión más rápida (experimental+)",
"shieldFirstDeath": " Proteger al primer jugador que murió",
"shieldFirstDeathDuration": "Duración de la protección",
"snsTwoDesc": "Enviar la descripción ampliada de Shift and Seek.",
"modeVoteDesc": "Inicia una votación entre todos los modos de juego.",
"automaticModePoll": "/gmvote automático al volver a la sala"
}