Compare commits

...
26 Commits
Author SHA1 Message Date
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
Ape 9c1d8a2943 v1.9.2 BE 2026-08-03 20:02:59 +02:00
Ape 90f0224d54 Whatever 2026-08-01 11:03:12 +02:00
Ape a74f7872e9 1.9.0 2026-08-01 00:10:52 +02:00
Ape 48228cfdb7 1.8.4 2026-06-25 14:22:49 +02:00
Ape 0866aba752 Audio fix 2026-06-24 14:56:22 +02:00
Ape 8ad59ca207 1.8.3 2026-06-24 14:45:13 +02:00
Ape cbc66948c0 1.8.2 2026-06-15 15:51:36 +02:00
Ape f456eb63d5 1.8.1 2026-06-12 11:51:57 +02:00
Ape 8e013830b6 1.8.0 2026-06-07 13:52:31 +02:00
Ape 5e74dd1f84 1.7.7 2026-06-05 12:56:13 +02:00
Ape ca39da4d64 fix (3) 2026-06-04 15:35:43 +02:00
Ape 5558350749 fix (2) 2026-06-04 15:34:20 +02:00
Ape 9a0b38c276 Fix 2026-06-04 15:31:03 +02:00
Ape 0f2516fdf5 Mostly bug fixes, some changes 2026-06-04 15:17:19 +02:00
41 changed files with 3862 additions and 845 deletions

No files matched your search

+8 -5
View File
@@ -36,18 +36,21 @@ public partial class Main : BasePlugin
public static ConfigEntry<bool> LobbyMusic { get; private set; }
public static ConfigEntry<bool> DisableInfoWhenDead { get; private set; }
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.7.6";
public const string ModVersion = "v2.0.2";
public static float GameTimer;
public static float AfkTimer;
public static readonly Dictionary<int, int> SayStartTimes = [];
public static readonly Dictionary<int, int> SayDeniedWordTimes = [];
public static PlayerControl[] AllPlayerControls
{
@@ -92,11 +95,12 @@ public partial class Main : BasePlugin
LobbyMusic = Config.Bind("Client Options", "Lobby Music", false);
DisableInfoWhenDead = Config.Bind("Client Options", "Disable Task/Kill View", false);
DisableCommandHelper = Config.Bind("Client Options", "Disable Command Helper", false);
DisableCompatibilityWarning = Config.Bind("Client Options", "Disable Compatibility Warning", false);
Translator.Init();
Translator.Reload();
BanManager.Init();
Harmony.PatchAll();
ConsoleManager.DetachConsole();
@@ -107,7 +111,6 @@ public partial class Main : BasePlugin
{
public static void Prefix(ModManager __instance)
{
__instance.ShowModStamp();
LateTask.Update(Time.deltaTime);
}
}
+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.3.31" 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" />
+66 -15
View File
@@ -27,8 +27,8 @@ public static class BanManager
public static string ModeratorListPath = $"{DataPath}/AUR-DATA/Moderator.txt";
public static string AdminListPath = $"{DataPath}/AUR-DATA/Admin.txt";
private static string TemplatePath = $"{DataPath}/AUR-DATA/Templates.txt";
private static string StartWordsPath = $"{DataPath}/AUR-DATA/Startwords.txt";
public static Dictionary<string, string> Templates = new();
public static List<string> TempBanWhiteList = [];
public static void Init()
{
try
@@ -42,6 +42,7 @@ public static class BanManager
CheckFile(ModeratorListPath, Translator.Get("moderatorWelcome"), "Moderator.txt");
CheckFile(AdminListPath, Translator.Get("adminWelcome"), "Admin.txt");
CheckFile(TemplatePath, Translator.Get("templateWelcome"), "Templates.txt");
CheckFile(StartWordsPath, Translator.Get("startWordsWelcome"), "StartWords.txt");
LoadTemplates();
@@ -79,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")
{
@@ -104,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 = "")
{
@@ -168,19 +162,73 @@ public static class BanManager
public static bool IsWordBanned(PlayerControl player, string input)
{
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0) return false;
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0 || !Options.EnableDeniedWords.GetBool()) return false;
int clientId = player.Data.ClientId;
var bannedWords = File.ReadAllLines(BanWordPath).Where(x => !x.StartsWith("#"));
if (bannedWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase)))
if ((Options.DeniedWordsStrength.GetBool() && bannedWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase))) || (!Options.DeniedWordsStrength.GetBool() && bannedWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Equals(code, StringComparison.OrdinalIgnoreCase))))
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, false);
Logger.Info($" {player.Data.PlayerName} was kicked because they sent a banned word", "Kick");
Logger.SendInGame($"{player.Data.PlayerName} was kicked because they sent a banned word");
if (!Main.SayDeniedWordTimes.ContainsKey(clientId))
{
Main.SayDeniedWordTimes.Add(clientId, 0);
}
Main.SayDeniedWordTimes[clientId]++;
if (Main.SayDeniedWordTimes[clientId] >= Options.DeniedWordsToKick.GetInt())
{
if (Options.DeniedWordsAsBan.GetBool())
{
AmongUsClient.Instance.KickPlayer(clientId, true);
Logger.SendInGame(Translator.Get("banWordBan", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()));
}
else
{
AmongUsClient.Instance.KickPlayer(clientId, false);
Logger.SendInGame(Translator.Get("banWordKick", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()));
}
Logger.Info(Translator.Get("banWordKick", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()), "DeniedWordKick");
}
return true;
}
else return false;
}
public static bool IsStartWord(PlayerControl player, string input)
{
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("#"));
if ((Options.AutoKickStartStrength.GetBool() && startWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase))) || (!Options.AutoKickStartStrength.GetBool() && startWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Equals(code, StringComparison.OrdinalIgnoreCase))))
{
if (!Main.SayStartTimes.ContainsKey(clientId))
{
Main.SayStartTimes.Add(clientId, 0);
}
Main.SayStartTimes[clientId]++;
if (Main.SayStartTimes[clientId] >= Options.AutoKickStartTimes.GetInt())
{
if (Options.AutoKickStartAsBan.GetBool())
{
AmongUsClient.Instance.KickPlayer(clientId, true);
Logger.SendInGame(Translator.Get("startWordBan", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()));
}
else
{
AmongUsClient.Instance.KickPlayer(clientId, false);
Logger.SendInGame(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()));
}
Logger.Info(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()), "StartWordKick");
}
return true;
}
else return false;
}
[HarmonyPatch(typeof(BanMenu), nameof(BanMenu.Select))]
@@ -238,7 +286,8 @@ public static class BanManager
{
Dictionary<string, string> variables = new()
{
{ "ModVersion", Main.ModVersion }
{ "ModVersion", Main.ModVersion },
{ "\\n", Environment.NewLine }
};
foreach (var kvp in variables)
@@ -246,6 +295,8 @@ public static class BanManager
text = text.Replace($"{{{kvp.Key}}}", kvp.Value);
}
text = text.Replace("\\n", Environment.NewLine);
return text;
}
}
+18 -5
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 },
@@ -45,7 +49,7 @@ internal static class CommandHelper
new Cmd { Name = new[] { "/s" }, Prompt = "/s", Description = Translator.Get("sDesc"), HasVariable = false },
new Cmd { Name = new[] { "/start" }, Prompt = "/start", Description = Translator.Get("sDesc"), HasVariable = false },
new Cmd { Name = new[] { "/r" }, Prompt = "/r {role}", Description = Translator.Get("rDesc"), HasVariable = true },
new Cmd { Name = new[] { "/r" }, Prompt = "/r", Description = Translator.Get("rDesc"), HasVariable = false },
new Cmd { Name = new[] { "/roles" }, Prompt = "/roles", Description = Translator.Get("rolesDesc"), HasVariable = false },
new Cmd { Name = new[] { "/kick" }, Prompt = "/kick {name}", Description = Translator.Get("kickDesc"), HasVariable = true },
@@ -72,17 +76,25 @@ internal static class CommandHelper
new Cmd { Name = new[] { "/lastgame" }, Prompt = "/lastgame", Description = Translator.Get("lastgameDesc"), HasVariable = false },
new Cmd { Name = new[] { "/t" }, Prompt = "/t {template}", Description = Translator.Get("templateDesc"), HasVariable = true }
new Cmd { Name = new[] { "/t" }, Prompt = "/t {template}", Description = Translator.Get("templateDesc"), HasVariable = true },
new Cmd { Name = new[] { "/seeker" }, Prompt = "/seeker {name}", Description = Translator.Get("seekerDesc"), HasVariable = true },
new Cmd { Name = new[] { "/seekers" }, Prompt = "/seekers", Description = Translator.Get("seekersDesc"), HasVariable = false },
new Cmd { Name = new[] { "/clearseeker" }, Prompt = "/clearseeker", Description = Translator.Get("clearSeekerDesc"), HasVariable = false },
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[] { "/gmvote" }, Prompt = "/gmvote", Description = Translator.Get("modeVoteDesc"), HasVariable = false }
};
[HarmonyPostfix]
public static void Postfix(TextBoxTMP __instance)
{
if (!HudManager.InstanceExists || HudManager.Instance.Chat == null || HudManager.Instance.Chat.freeChatField == null || __instance != HudManager.Instance.Chat.freeChatField.textArea) return;
if (!HudManager.InstanceExists || HudManager.Instance.Chat == null || HudManager.Instance.Chat.freeChatField == null || HudManager.Instance.Chat.freeChatField.textArea == null || __instance != HudManager.Instance.Chat.freeChatField.textArea) return;
if (Main.DisableCommandHelper.Value)
if (Main.DisableCommandHelper.Value || !AmongUsClient.Instance.AmHost)
{
HelperText.enabled = false;
if (HelperText != null) HelperText.enabled = false;
return;
}
@@ -93,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;
+246 -239
View File
@@ -48,52 +48,82 @@ namespace AmongUsRevamped
public static readonly string[] gameModes =
{
"Standard", "0 Kill Cooldown", "Shift And Seek", "Speedrun"
"Standard", "Shift And Seek", "Speedrun", "Poof And Seek"
};
public static readonly string[] accessLevels =
{
"Everyone", "<color=yellow>VIP</color> And Above", "<color=purple>Moderator</color> And Above", "<color=red>Admin</color>", "Only You"
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;
public static OptionItem Gamemode;
public static OptionItem TabGroupMain;
public static OptionItem TabGroupLevelKick;
public static OptionItem EnableKickLowLevelPlayer;
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;
public static OptionItem TempBanInvalidFriendCodes;
public static OptionItem TabGroupDeniedWords;
public static OptionItem EnableDeniedWords;
public static OptionItem DeniedWordsToKick;
public static OptionItem DeniedWordsAsBan;
public static OptionItem DeniedWordsStrength;
public static OptionItem TabGroupAutoKickStart;
public static OptionItem AutoKickStart;
public static OptionItem AutoKickStartAsBan;
public static OptionItem AutoKickStartTimes;
public static OptionItem AutoKickStartStrength;
public static OptionItem TabGroupAutomation;
public static OptionItem AutoSendGameInfo;
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;
public static OptionItem WaitAutoStart;
public static OptionItem PlayerAutoStart;
public static OptionItem EnableJoinMessages;
public static OptionItem MessagePerPlayerNum;
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;
@@ -103,7 +133,7 @@ namespace AmongUsRevamped
public static OptionItem SlashColorCmd;
public static OptionItem SlashRolesAndGamemodeCmd;
public static OptionItem SlashLastGameCmd;
public static OptionItem SlashHelpAndAurCmd;
public static OptionItem SlashMapAndSeekerCmd;
public static OptionItem SlashKickCmd;
public static OptionItem SlashBanCmd;
public static OptionItem SlashEndMeetingCmd;
@@ -122,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;
@@ -264,15 +295,12 @@ namespace AmongUsRevamped
public static OptionItem TabGroupHNS;
public static OptionItem NumSeekers;
public static OptionItem TabGroup0Kcd;
public static OptionItem NoKcdSettingsOverride;
public static OptionItem TabGroupSNS;
public static OptionItem SNSSettingsOverride;
public static OptionItem SNSChatInGame;
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;
@@ -281,57 +309,27 @@ namespace AmongUsRevamped
public static OptionItem SNSDisableHeli;
public static OptionItem SNSDisableMushroomMixup;
public static OptionItem SNSDisableCloseDoor;
public static OptionItem SNSImpostorsCanVent;
public static OptionItem TabGroupSpeedrun;
public static OptionItem SpeedrunSettingsOverride;
public static OptionItem GameAutoEndsAfter;
public static OptionItem EngineerMode;
// Abilities
public static OptionItem TabGroupCrewmate;
public static OptionItem OverrideCrewmate;
public static OptionItem CrewmateAbility;
public static OptionItem OverrideScientist;
public static OptionItem ScientistAbility;
public static OptionItem OverrideEngineer;
public static OptionItem EngineerAbility;
public static OptionItem OverrideNoisemaker;
public static OptionItem NoisemakerAbility;
public static OptionItem OverrideTracker;
public static OptionItem TrackerAbility;
public static OptionItem OverrideDetective;
public static OptionItem DetectiveAbility;
public static OptionItem TabGroupCrewmateAbilities;
public static OptionItem ExtraVotesCrewmate;
public static OptionItem ExtraVotesPerTask;
public static OptionItem SpeedrunnerShortTasks;
public static OptionItem SpeedrunnerLongTasks;
public static OptionItem TabGroupImpostor;
public static OptionItem OverrideImpostor;
public static OptionItem ImpostorAbility;
public static OptionItem OverrideShapeshifter;
public static OptionItem ShapeshifterAbility;
public static OptionItem OverridePhantom;
public static OptionItem PhantomAbility;
public static OptionItem OverrideViper;
public static OptionItem ViperAbility;
public static OptionItem TabGroupImpostorAbilities;
public static OptionItem ExtraVotesImpostor;
public static OptionItem ExtraVotesPerKill;
public static OptionItem KillsNeededForJuggernaut;
public static 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;
@@ -340,128 +338,127 @@ namespace AmongUsRevamped
if (IsLoaded) return;
_ = PresetOptionItem.Create(0, TabGroup.SystemSettings)
.SetColor(new Color32(204, 204, 0, 255))
.SetColor(Color.yellow)
.SetHeader(true);
Gamemode = StringOptionItem.Create(1, Translator.Get("gamemode"), gameModes, 0, TabGroup.SystemSettings, false)
.SetColor(Color.green)
.SetColor(Color.yellow)
.SetHeader(true);
TabGroupMain = TextOptionItem.Create(60000, Translator.Get("tabGroupMain"), TabGroup.SystemSettings)
.SetColor(Color.blue);
KickLowLevelPlayer = IntegerOptionItem.Create(60050, Translator.Get("kickLowLevelPlayer"), new(0, 100, 1), 0, TabGroup.SystemSettings, false)
TabGroupLevelKick = TextOptionItem.Create(60048, Translator.Get("tabGroupLevelKick"), TabGroup.ModerationSettings)
.SetColor(Color.red);
EnableKickLowLevelPlayer = BooleanOptionItem.Create(60049, Translator.Get("enableKickLowLevelPlayer"), false, TabGroup.ModerationSettings, false);
KickLowLevelPlayer = IntegerOptionItem.Create(60050, Translator.Get("kickLowLevelPlayer"), new(0, 100, 1), 0, TabGroup.ModerationSettings, false)
.SetParent(EnableKickLowLevelPlayer)
.SetValueFormat(OptionFormat.Level);
TempBanLowLevelPlayer = BooleanOptionItem.Create(60051, Translator.Get("tempBanLowLevelPlayer"), false, TabGroup.SystemSettings, false)
.SetParent(KickLowLevelPlayer);
DontKickLevelOnes = BooleanOptionItem.Create(60052, Translator.Get("dontKickLevelOnes"), false, TabGroup.SystemSettings, false)
.SetParent(KickLowLevelPlayer);
TempBanLowLevelPlayer = BooleanOptionItem.Create(60051, Translator.Get("tempBanLowLevelPlayer"), false, TabGroup.ModerationSettings, false)
.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);
KickInvalidFriendCodes = BooleanOptionItem.Create(60080, Translator.Get("kickInvalidFriendCodes"), true, TabGroup.SystemSettings, false);
TempBanInvalidFriendCodes = BooleanOptionItem.Create(60081, Translator.Get("tempBanInvalidFriendCodes"), false, TabGroup.SystemSettings, false)
TabGroupKickInvalidFriendCodes = TextOptionItem.Create(60079, Translator.Get("tabGroupKickInvalidFriendCodes"), TabGroup.ModerationSettings)
.SetColor(Color.red);
KickInvalidFriendCodes = BooleanOptionItem.Create(60080, Translator.Get("kickInvalidFriendCodes"), true, TabGroup.ModerationSettings, false);
TempBanInvalidFriendCodes = BooleanOptionItem.Create(60081, Translator.Get("tempBanInvalidFriendCodes"), false, TabGroup.ModerationSettings, false)
.SetParent(KickInvalidFriendCodes);
AutoKickStart = BooleanOptionItem.Create(60123, Translator.Get("autoKickStart"), false, TabGroup.SystemSettings, false);
AutoKickStartAsBan = BooleanOptionItem.Create(60124, Translator.Get("autoKickStartAsBan"), false, TabGroup.SystemSettings, false)
TabGroupDeniedWords = TextOptionItem.Create(60082, Translator.Get("tabGroupDeniedWords"), TabGroup.ModerationSettings)
.SetColor(Color.red);
EnableDeniedWords = BooleanOptionItem.Create(60083, Translator.Get("enableDeniedWords"), false, TabGroup.ModerationSettings, false);
DeniedWordsAsBan = BooleanOptionItem.Create(60084, Translator.Get("autoKickStartAsBan"), false, TabGroup.ModerationSettings, false)
.SetParent(EnableDeniedWords);
DeniedWordsToKick = IntegerOptionItem.Create(60085, Translator.Get("deniedWordsToKick"), new(1, 5, 1), 1, TabGroup.ModerationSettings, false)
.SetParent(EnableDeniedWords)
.SetValueFormat(OptionFormat.Level);
DeniedWordsStrength = BooleanOptionItem.Create(60086, Translator.Get("autoKickStartStrength"), false, TabGroup.ModerationSettings, false)
.SetParent(EnableDeniedWords);
TabGroupAutoKickStart = TextOptionItem.Create(600122, Translator.Get("tabGroupAutoKickStart"), TabGroup.ModerationSettings)
.SetColor(Color.red);
AutoKickStart = BooleanOptionItem.Create(60123, Translator.Get("autoKickStart"), false, TabGroup.ModerationSettings, false);
AutoKickStartAsBan = BooleanOptionItem.Create(60124, Translator.Get("autoKickStartAsBan"), false, TabGroup.ModerationSettings, false)
.SetParent(AutoKickStart);
AutoKickStartTimes = IntegerOptionItem.Create(60125, Translator.Get("autoKickStartTimes"), new(1, 10, 1), 1, TabGroup.SystemSettings, false)
AutoKickStartTimes = IntegerOptionItem.Create(60125, Translator.Get("autoKickStartTimes"), new(1, 10, 1), 1, TabGroup.ModerationSettings, false)
.SetParent(AutoKickStart)
.SetValueFormat(OptionFormat.Times);
AutoKickStartStrength = BooleanOptionItem.Create(60126, Translator.Get("autoKickStartStrength"), false, TabGroup.SystemSettings, false)
AutoKickStartStrength = BooleanOptionItem.Create(60126, Translator.Get("autoKickStartStrength"), false, TabGroup.ModerationSettings, false)
.SetParent(AutoKickStart);
TabGroupAccess = TextOptionItem.Create(60127, Translator.Get("tabGroupAccess"), TabGroup.ModerationSettings)
.SetColor(Color.red);
SlashColorCmd = StringOptionItem.Create(60128, Translator.Get("slashColorCmd"), accessLevels, 1, TabGroup.ModerationSettings, false);
SlashRolesAndGamemodeCmd = StringOptionItem.Create(60129, Translator.Get("slashRolesAndGamemodeCmd"), accessLevels, 1, TabGroup.ModerationSettings, false);
SlashLastGameCmd = StringOptionItem.Create(60130, Translator.Get("slashLastGameCmd"), accessLevels, 1, TabGroup.ModerationSettings, false);
SlashMapAndSeekerCmd = StringOptionItem.Create(60131, Translator.Get("slashMapAndSeekerCmd"), accessLevels, 1, TabGroup.ModerationSettings, false);
SlashKickCmd = StringOptionItem.Create(60132, Translator.Get("slashKickCmd"), accessLevels, 2, TabGroup.ModerationSettings, false);
SlashBanCmd = StringOptionItem.Create(60133, Translator.Get("slashBanCmd"), accessLevels, 2, TabGroup.ModerationSettings, false);
SlashEndMeetingCmd = StringOptionItem.Create(60134, Translator.Get("slashEndMeetingCmd"), accessLevels, 3, TabGroup.ModerationSettings, false);
SlashStartAndEndGameCmd = StringOptionItem.Create(60135, Translator.Get("slashStartAndEndGameCmd"), accessLevels, 3, TabGroup.ModerationSettings, false);
TabGroupAutomation = TextOptionItem.Create(60149, Translator.Get("tabGroupAutomation"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
AutoSendGameInfo = BooleanOptionItem.Create(60150, Translator.Get("autoSendGameInfo"), true, TabGroup.SystemSettings, false);
AutoRejoinLobby = BooleanOptionItem.Create(60210, Translator.Get("autoRejoinLobby"), false, TabGroup.SystemSettings, false);
AutoStartTimer = IntegerOptionItem.Create(64420, Translator.Get("autoStartTimer"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds);
WaitAutoStart = IntegerOptionItem.Create(64421, Translator.Get("waitAutoStart"), new(10, 600, 10), 300, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds);
PlayerAutoStart = IntegerOptionItem.Create(64422, Translator.Get("playerAutoStart"), new(1, 15, 1), 1, TabGroup.SystemSettings, false);
EnableJoinMessages = BooleanOptionItem.Create(64423, Translator.Get("enableJoinMessages"), true, TabGroup.SystemSettings, false);
MessagePerPlayerNum = IntegerOptionItem.Create(64424, Translator.Get("messagePerPlayerNum"), new(1, 15, 1), 5, TabGroup.SystemSettings, false)
AutoRejoinLobby = BooleanOptionItem.Create(60151, Translator.Get("autoRejoinLobby"), false, TabGroup.SystemSettings, false);
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);
TabGroupMisc = TextOptionItem.Create(60379, Translator.Get("tabGroupMisc"), TabGroup.SystemSettings)
.SetColor(Color.green);
StartCountdown = IntegerOptionItem.Create(60380, Translator.Get("startCountdown"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
TabGroupAutostart = TextOptionItem.Create(64425, Translator.Get("tabGroupAutostart"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
AutoStartTimer = IntegerOptionItem.Create(64426, Translator.Get("autoStartTimer"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds);
AllowFortegreen = BooleanOptionItem.Create(60382, Translator.Get("allowFortegreen"), false, TabGroup.SystemSettings, false);
WaitAutoStart = IntegerOptionItem.Create(64427, Translator.Get("waitAutoStart"), new(10, 600, 10), 300, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds);
PlayerAutoStart = IntegerOptionItem.Create(64428, Translator.Get("playerAutoStart"), new(1, 15, 1), 1, TabGroup.SystemSettings, false);
Rehost = BooleanOptionItem.Create(64429, Translator.Get("rehost"), false, TabGroup.SystemSettings, false);
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);
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)
.SetColor(Color.red);
NoGameEnd = BooleanOptionItem.Create(60383, Translator.Get("noGameEnd"), false, TabGroup.SystemSettings, false)
.SetColor(Color.red);
TabGroupAccess = TextOptionItem.Create(60400, Translator.Get("tabGroupAccess"), TabGroup.SystemSettings)
.SetColor(Color.red);
SlashColorCmd = StringOptionItem.Create(60401, Translator.Get("slashColorCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashRolesAndGamemodeCmd = StringOptionItem.Create(60402, Translator.Get("slashRolesAndGamemodeCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashLastGameCmd = StringOptionItem.Create(60403, Translator.Get("slashLastGameCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashHelpAndAurCmd = StringOptionItem.Create(60404, Translator.Get("slashHelpAndAurCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashKickCmd = StringOptionItem.Create(60405, Translator.Get("slashKickCmd"), accessLevels, 2, TabGroup.SystemSettings, false);
SlashBanCmd = StringOptionItem.Create(60406, Translator.Get("slashBanCmd"), accessLevels, 2, TabGroup.SystemSettings, false);
SlashEndMeetingCmd = StringOptionItem.Create(60407, Translator.Get("slashEndMeetingCmd"), accessLevels, 3, TabGroup.SystemSettings, false);
SlashStartAndEndGameCmd = StringOptionItem.Create(60408, Translator.Get("slashStartAndEndGameCmd"), accessLevels, 3, TabGroup.SystemSettings, false);
// Ability settings
TabGroupCrewmate = TextOptionItem.Create(100000, Translator.Get("tabGroupCrewmate"), TabGroup.AbilitySettings)
.SetColor(CL.Hex("#8cffff"));
CrewmateAbility = StringOptionItem.Create(100001, Translator.Get("crewmateAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#8cffff"));
ScientistAbility = StringOptionItem.Create(100101, Translator.Get("scientistAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#8cffff"));
EngineerAbility = StringOptionItem.Create(100201, Translator.Get("engineerAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#8cffff"));
NoisemakerAbility = StringOptionItem.Create(100301, Translator.Get("noisemakerAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#8cffff"));
TrackerAbility = StringOptionItem.Create(100401, Translator.Get("trackerAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#8cffff"));
DetectiveAbility = StringOptionItem.Create(100501, Translator.Get("detectiveAbility"), crewmateAbilities, 4, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#8cffff"));
TabGroupCrewmateAbilities = TextOptionItem.Create(101000, Translator.Get("tabGroupCrewmateAbilities"), TabGroup.AbilitySettings)
.SetColor(CL.Hex("#8cffff"));
ExtraVotesCrewmate = IntegerOptionItem.Create(101001, Translator.Get("extraVotesCrewmate"), new(1, 15, 1), 1, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
ExtraVotesPerTask = FloatOptionItem.Create(101002, Translator.Get("extraVotesPerTask"), new(0.25f, 3f, 0.25f), 0.5f, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
SpeedrunnerShortTasks = IntegerOptionItem.Create(101003, Translator.Get("speedrunnerShortTasks"), new(0, 15, 1), 4, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
SpeedrunnerLongTasks = IntegerOptionItem.Create(101004, Translator.Get("speedrunnerLongTasks"), new(0, 15, 1), 3, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
TabGroupImpostor = TextOptionItem.Create(102000, Translator.Get("tabGroupImpostor"), TabGroup.AbilitySettings)
.SetColor(CL.Hex("#ff1919"));
ImpostorAbility = StringOptionItem.Create(100002, Translator.Get("impostorAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#ff1919"));
ShapeshifterAbility = StringOptionItem.Create(102101, Translator.Get("shapeshifterAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#ff1919"));
PhantomAbility = StringOptionItem.Create(102201, Translator.Get("phantomAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#ff1919"));
ViperAbility = StringOptionItem.Create(102301, Translator.Get("viperAbility"), impostorAbilities, 3, TabGroup.AbilitySettings, false)
.SetColor(CL.Hex("#ff1919"));
TabGroupImpostorAbilities = TextOptionItem.Create(103000, Translator.Get("tabGroupImpostorAbilities"), TabGroup.AbilitySettings)
.SetColor(CL.Hex("#ff1919"));
ExtraVotesImpostor = IntegerOptionItem.Create(103001, Translator.Get("extraVotesImpostor"), new(1, 15, 1), 1, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
ExtraVotesPerKill = FloatOptionItem.Create(103002, Translator.Get("extraVotesPerKill"), new(0.25f, 3f, 0.25f), 0.5f, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
KillsNeededForJuggernaut = IntegerOptionItem.Create(103003, Translator.Get("killsNeededForJuggernaut"), new(3, 15, 1), 7, TabGroup.AbilitySettings, false)
.SetValueFormat(OptionFormat.Level);
// Gamemode Settings
TabGroupHNS = TextOptionItem.Create(70000, Translator.Get("tabGroupHNS"), TabGroup.GamemodeSettings)
@@ -469,52 +466,85 @@ namespace AmongUsRevamped
NumSeekers = IntegerOptionItem.Create(70001, Translator.Get("numSeekers"), new(1, 15, 1), 1, TabGroup.GamemodeSettings, false)
.SetValueFormat(OptionFormat.Level);
TabGroup0Kcd = TextOptionItem.Create(70025, Translator.Get("tabGroup0Kcd"), TabGroup.GamemodeSettings)
.SetColor(Color.red);
NoKcdSettingsOverride = BooleanOptionItem.Create(70026, Translator.Get("noKcdSettingsOverride"), true, TabGroup.GamemodeSettings, false);
TabGroupSNS = TextOptionItem.Create(70050, Translator.Get("tabGroupSNS"), TabGroup.GamemodeSettings)
.SetColor(Color.yellow);
SNSSettingsOverride = BooleanOptionItem.Create(70051, Translator.Get("snsSettingsOverride"), true, TabGroup.GamemodeSettings, false);
SNSChatInGame = BooleanOptionItem.Create(70063, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false);
CantKillTime = IntegerOptionItem.Create(70053, Translator.Get("cantKillTime"), new(0, 60, 5), 20, TabGroup.GamemodeSettings, false)
.SetColor(Color.green);
SNSChatInGame = BooleanOptionItem.Create(70051, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false);
SNSChatInGameExtend = BooleanOptionItem.Create(70052, Translator.Get("snsChatInGameExtend"), true, TabGroup.GamemodeSettings, false)
.SetParent(SNSChatInGame);
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)
.SetColor(Color.blue);
SpeedrunSettingsOverride = BooleanOptionItem.Create(70076, Translator.Get("speedrunSettingsOverride"), true, TabGroup.GamemodeSettings, false);
TabGroupSpeedrun = TextOptionItem.Create(70076, Translator.Get("tabGroupSpeedrun"), TabGroup.GamemodeSettings)
.SetColor(Color.green);
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.red);
.SetColor(Color.blue);
DeadImpostorsCanSabotage = BooleanOptionItem.Create(60455, Translator.Get("deadImpostorsCanSabotage"), true, TabGroup.ModSettings, false)
.SetColor(Color.red);
DisableSabotage = BooleanOptionItem.Create(60456, Translator.Get("disableSabotage"), false, TabGroup.ModSettings, false)
@@ -537,109 +567,86 @@ 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)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
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)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
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)
.SetParent(ChangeDecontaminationTime)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
.SetValueFormat(OptionFormat.Seconds);
DecontaminationDoorOpenTimeOnMiraHQ = FloatOptionItem.Create(60552, Translator.Get("decontaminationDoorOpenTimeOnMiraHQ"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
.SetParent(ChangeDecontaminationTime)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
.SetValueFormat(OptionFormat.Seconds);
DecontaminationTimeOnPolus = FloatOptionItem.Create(60553, Translator.Get("decontaminationTimeOnPolus"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
.SetParent(ChangeDecontaminationTime)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
.SetValueFormat(OptionFormat.Seconds);
DecontaminationDoorOpenTimeOnPolus = FloatOptionItem.Create(60554, Translator.Get("decontaminationDoorOpenTimeOnPolus"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
.SetParent(ChangeDecontaminationTime)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
.SetValueFormat(OptionFormat.Seconds);
DisableSporeTrigger = BooleanOptionItem.Create(60558, Translator.Get("disableSporeTrigger"), false, TabGroup.ModSettings, false)
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
DisableSporeTrigger = BooleanOptionItem.Create(60558, Translator.Get("disableSporeTrigger"), false, TabGroup.ModSettings, false);
DisableDevices = BooleanOptionItem.Create(22900, Translator.Get("disableDevices"), false, TabGroup.ModSettings, false)
.SetColor(Color.red);
DisableDevices = BooleanOptionItem.Create(22900, Translator.Get("disableDevices"), false, TabGroup.ModSettings, false);
DisableSkeldDevices = BooleanOptionItem.Create(22905, Translator.Get("disableSkeldDevices"), false, TabGroup.ModSettings, false)
.SetParent(DisableDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableSkeldAdmin = BooleanOptionItem.Create(22906, Translator.Get("disableSkeldAdmin"), false, TabGroup.ModSettings, false)
.SetParent(DisableSkeldDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableSkeldDevices);
DisableSkeldCamera = BooleanOptionItem.Create(22907, Translator.Get("disableSkeldCamera"), false, TabGroup.ModSettings, false)
.SetParent(DisableSkeldDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableSkeldDevices);
DisableMiraHQDevices = BooleanOptionItem.Create(22908, Translator.Get("disableMiraHQDevices"), false, TabGroup.ModSettings, false)
.SetParent(DisableDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableMiraHQAdmin = BooleanOptionItem.Create(22909, Translator.Get("disableMiraHQAdmin"), false, TabGroup.ModSettings, false)
.SetParent(DisableMiraHQDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableMiraHQDevices);
DisableMiraHQDoorLog = BooleanOptionItem.Create(22910, Translator.Get("disableMiraHQDoorLog"), false, TabGroup.ModSettings, false)
.SetParent(DisableMiraHQDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableMiraHQDevices);
DisablePolusDevices = BooleanOptionItem.Create(22911, Translator.Get("disablePolusDevices"), false, TabGroup.ModSettings, false)
.SetParent(DisableDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisablePolusAdmin = BooleanOptionItem.Create(22912, Translator.Get("disablePolusAdmin"), false, TabGroup.ModSettings, false)
.SetParent(DisablePolusDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisablePolusDevices);
DisablePolusCamera = BooleanOptionItem.Create(22913, Translator.Get("disablePolusCamera"), false, TabGroup.ModSettings, false)
.SetParent(DisablePolusDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisablePolusDevices);
DisablePolusVital = BooleanOptionItem.Create(22914, Translator.Get("disablePolusVital"), false, TabGroup.ModSettings, false)
.SetParent(DisablePolusDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisablePolusDevices);
DisableAirshipDevices = BooleanOptionItem.Create(22915, Translator.Get("disableAirshipDevices"), false, TabGroup.ModSettings, false)
.SetParent(DisableDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableAirshipCockpitAdmin = BooleanOptionItem.Create(22916, Translator.Get("disableAirshipCockpitAdmin"), false, TabGroup.ModSettings, false)
.SetParent(DisableAirshipDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableAirshipDevices);
DisableAirshipRecordsAdmin = BooleanOptionItem.Create(22917, Translator.Get("disableAirshipRecordsAdmin"), false, TabGroup.ModSettings, false)
.SetParent(DisableAirshipDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableAirshipDevices);
DisableAirshipCamera = BooleanOptionItem.Create(22918, Translator.Get("disableAirshipCamera"), false, TabGroup.ModSettings, false)
.SetParent(DisableAirshipDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableAirshipDevices);
DisableAirshipVital = BooleanOptionItem.Create(22919, Translator.Get("disableAirshipVital"), false, TabGroup.ModSettings, false)
.SetParent(DisableAirshipDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableAirshipDevices);
DisableFungleDevices = BooleanOptionItem.Create(22925, Translator.Get("disableFungleDevices"), false, TabGroup.ModSettings, false)
.SetParent(DisableDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableFungleCamera = BooleanOptionItem.Create(22926, Translator.Get("disableFungleCamera"), false, TabGroup.ModSettings, false)
.SetParent(DisableFungleDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableFungleVital = BooleanOptionItem.Create(22927, Translator.Get("disableFungleVital"), false, TabGroup.ModSettings, false)
.SetParent(DisableFungleDevices)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
.SetParent(DisableFungleDevices);
TabGroupTasks = TextOptionItem.Create(22995, Translator.Get("tabGroupTasks"), TabGroup.ModSettings)
.SetColor(Color.yellow);
.SetColor(Color.blue);
TaskPercentNeededToWin = IntegerOptionItem.Create(22996, Translator.Get("taskPercentNeededToWin"), new(30, 100, 5), 100, TabGroup.ModSettings, false)
.SetColor(new Color32(255, 255, 153, byte.MaxValue))
.SetValueFormat(OptionFormat.Percent);
AllPlayersSameTasks = BooleanOptionItem.Create(22998, Translator.Get("allPlayersSameTasks"), false, TabGroup.ModSettings, false)
.SetColor(new Color32(255, 255, 153, byte.MaxValue));
OverrideTaskSettings = BooleanOptionItem.Create(22999, Translator.Get("overrideTaskSettings"), false, TabGroup.ModSettings, false)
.SetColor(new Color32(255, 255, 153, byte.MaxValue));
AllPlayersSameTasks = BooleanOptionItem.Create(22998, Translator.Get("allPlayersSameTasks"), false, TabGroup.ModSettings, false);
OverrideTaskSettings = BooleanOptionItem.Create(22999, Translator.Get("overrideTaskSettings"), false, TabGroup.ModSettings, false);
DisableMiraTasks = BooleanOptionItem.Create(23000, Translator.Get("disableMiraTasks"), false, TabGroup.ModSettings, false)
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
+17 -53
View File
@@ -7,9 +7,11 @@ using UnityEngine;
namespace AmongUsRevamped;
// It was a fun ride, but this won't last.
// Edit: WE ARE SO BACK
// Edit 2: Hello old friend. It's time to go again.
public static class AbilityManagement
{
/*
public static bool IsMayor(PlayerControl player)
{
if (player.Data.RoleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 0 ||
@@ -148,76 +150,38 @@ public static class AbilityManagement
else Utils.ChatCommand(c, first, second, true);
}
public static string RoleInfoString(PlayerControl player)
{
if (!AmongUsClient.Instance.AmHost) return "";
if (IsMayor(player)) return Translator.Get("youAreMayor", Options.ExtraVotesCrewmate.GetInt());
if (IsWorkhorse(player)) return Translator.Get("youAreWorkhorse", Options.ExtraVotesPerTask.GetFloat());
if (IsJester(player)) return Translator.Get("youAreJester");
if (IsSpeedrunner(player)) return Translator.Get("youAreSpeedrunner");
if (IsTyrant(player)) return Translator.Get("youAreTyrant", Options.ExtraVotesImpostor.GetInt());
if (IsStealer(player)) return Translator.Get("youAreStealer", Options.ExtraVotesPerKill.GetFloat());
if (IsJuggernaut(player)) return Translator.Get("youAreJuggernaut", Options.KillsNeededForJuggernaut.GetInt());
else return "";
}
public static bool HandlingRoleMessages = false;
private static int PendingRoleMessages = 0;
public static void SendRoleMessages()
{
if (!AmongUsClient.Instance.AmHost) return;
if (!AmongUsClient.Instance.AmHost || Options.Gamemode.GetValue() > 1 || Utils.isHideNSeek) return;
if (string.IsNullOrEmpty(RoleList()) || PlayerControl.LocalPlayer.Data.IsDead)
{
HandlingRoleMessages = false;
PendingRoleMessages = 0;
return;
}
var players = PlayerControl.AllPlayerControls.ToArray().ToList();
float delay = 4.4f;
PendingRoleMessages = 0;
HandlingRoleMessages = true;
SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), false);
SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), true);
foreach (var player in players)
new LateTask(() =>
{
if (string.IsNullOrEmpty(RoleInfoString(player))) continue;
PendingRoleMessages++;
new LateTask(() =>
if (Utils.InGame)
{
if (Utils.InGame)
{
Utils.SendPrivateMessage(player, RoleInfoString(player));
}
else
{
Logger.Info("Role sending was forcefully canceled. This should not happen.", "SendRoleMessages");
}
Utils.ChatCommand(DestroyableSingleton<HudManager>.Instance.Chat, "Custom Abilities are on!\n\nIf you have one of the roles above, you also have the Ability next to it.", "", false);
}
else
{
Logger.Info("Role sending was forcefully canceled. This should not happen.", "SendRoleMessages");
}
PendingRoleMessages--;
if (PendingRoleMessages <= 0)
{
PendingRoleMessages = 0;
HandlingRoleMessages = false;
}
}, delay, "SendRoleMessage");
delay += 2.2f;
}
if (PendingRoleMessages == 0)
{
HandlingRoleMessages = false;
}
}, 6.6f, "SendRoleMessage");
}
}
/*
public static class CustomRoleManagement
{
public static Dictionary<byte, string> PlayerRoles = new Dictionary<byte, string>();
@@ -418,5 +382,5 @@ public static class CustomRoleManagement
}
return string.Join("\n", lines);
}
}
*/
*/
}
+22 -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");
@@ -201,4 +201,25 @@ internal class EACR
return true;
}
}
public static void VentCheat(PlayerControl player, Vent __instance)
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, true);
Logger.SendInGame($"{player.Data.PlayerName} was banned for invalid venting (cheating)");
Logger.Info($" {player.Data.PlayerName} was banned for invalid venting", "EACR");
}
public static void PlayAnimationCheat(PlayerControl player)
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, true);
Logger.SendInGame($"{player.Data.PlayerName} was banned for an invalid animation (cheating)");
Logger.Info($" {player.Data.PlayerName} was banned for an invalid animation", "EACR");
}
public static void TaskCheat(PlayerControl player)
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, true);
Logger.SendInGame($"{player.Data.PlayerName} was banned for invalidly completing a task (cheating)");
Logger.Info($" {player.Data.PlayerName} was banned for invalidly completing a task", "EACR");
}
}
+180 -26
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,38 +198,44 @@ class FixedUpdateInGamePatch
switch (gamemode)
{
case 1: // 0Kc
if (Main.NormalOptions.KillCooldown != 0.01f)
Main.NormalOptions.KillCooldown = 0.01f;
if (Options.NoKcdSettingsOverride.GetBool() && settingsLabel == null)
case 0:
break;
case 1: // SnS
if (!Utils.InGame)
{
Main.NormalOptions.EmergencyCooldown = 0;
Main.NormalOptions.TaskBarMode = 0;
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: // SnS
if (Main.NormalOptions.KillCooldown != 2.5f)
Main.NormalOptions.KillCooldown = 2.5f;
if (Options.SNSSettingsOverride.GetBool() && settingsLabel == null)
Main.NormalOptions.TaskBarMode = 0;
case 2: // Speedrun
break;
case 3: // Speedrun
break;
case 0: // Reset
if (Main.NormalOptions.KillCooldown <= 0.01f)
Main.NormalOptions.KillCooldown = 25f;
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)
{
// 2 = Shift and Seek
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
// 1 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
{
if (Main.GameTimer > Options.CrewAutoWinsGameAfter.GetInt())
{
@@ -111,11 +243,11 @@ class FixedUpdateInGamePatch
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
Logger.Info($" Crewmates won because the game took longer than {Options.CrewAutoWinsGameAfter.GetInt()}s", "SNSManager");
NormalGameEndChecker.LastWinReason = $"Crewmates win! (Timer)\n\nImpostors:\n" + string.Join("\n", NormalGameEndChecker.imps.Select(p => p.Data.PlayerName));
NormalGameEndChecker.CheckWinnerText("SnSTimer");
}
}
// 3 = Speedrun
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek && Options.GameAutoEndsAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
// 2 = Speedrun
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Options.GameAutoEndsAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
{
if (Main.GameTimer > Options.GameAutoEndsAfter.GetInt())
{
@@ -123,7 +255,29 @@ class FixedUpdateInGamePatch
Utils.CustomWinnerEndGame(PlayerControl.LocalPlayer, 0);
Logger.Info($" No one won because the game took longer than {Options.GameAutoEndsAfter.GetInt()}s", "SpeedrunManager");
NormalGameEndChecker.LastWinReason = $"No one wins! (Timer)";
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");
}
}
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);
}
}
}
+1 -1
View File
@@ -214,8 +214,8 @@ namespace AmongUsRevamped
public enum TabGroup
{
SystemSettings,
ModerationSettings,
//CustomRoleSettings,
AbilitySettings,
ModSettings,
GamemodeSettings,
+45
View File
@@ -0,0 +1,45 @@
using AmongUs.GameOptions;
using Hazel;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using System;
namespace AmongUsRevamped;
public static class OptionManager
{
private static OptionBackupData CachedOptions;
public static void SyncGameOptions()
{
if (!AmongUsClient.Instance.AmHost) return;
var options = GameOptionsManager.Instance.CurrentGameOptions;
foreach (var component in GameManager.Instance.LogicComponents)
{
var logicOptions = component.TryCast<LogicOptions>();
if (logicOptions != null)
{
logicOptions.SetGameOptions(options);
}
}
}
public static void CacheOptions()
{
if (!AmongUsClient.Instance.AmHost) return;
CachedOptions = new OptionBackupData(GameOptionsManager.Instance.CurrentGameOptions);
}
public static void RestoreOptions()
{
if (!AmongUsClient.Instance.AmHost || CachedOptions == null) return;
var restored = CachedOptions.Restore(GameOptionsManager.Instance.CurrentGameOptions);
GameOptionsManager.Instance.CurrentGameOptions = restored;
SyncGameOptions();
}
}
+33
View File
@@ -0,0 +1,33 @@
using InnerNet;
using UnityEngine;
using System;
using AmongUs.GameOptions;
namespace AmongUsRevamped
{
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.DisconnectInternal))]
public static class DisconnectManager
{
public static bool Rehosting;
public static void Prefix(InnerNetClient __instance, DisconnectReasons reason, string stringReason)
{
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(() =>
{
Rehosting = true;
PSManager.Instance.CreateGame(GameModes.Normal);
Logger.Info(Translator.Get("rehostSuccess"), "DisconnectManager");
}, 5f, "RehostManager");
}
}
}
+35 -2
View File
@@ -10,15 +10,48 @@ public static class Translator
{
public enum SupportedLangs
{
English
English,
Italian,
SimplifiedChinese,
Spanish,
Japanese,
Russian
}
private static readonly Dictionary<SupportedLangs, Dictionary<string, string>> _languages = new();
private static SupportedLangs _currentLang = SupportedLangs.English;
public static SupportedLangs _currentLang;
private static string LanguageFolder => $"{BanManager.DataPath}/Language";
public static void Init()
{
Logger.Info($" Among Us Revamped {Main.ModVersion}", "Init");
_currentLang = SupportedLangs.English;
if (!Directory.Exists(LanguageFolder)) Directory.CreateDirectory(LanguageFolder);
try
{
string path = Path.Combine(LanguageFolder, "YourLanguage.txt");
if (!File.Exists(path))
{
Logger.Warn($" Creating a new language file", "Translator");
File.WriteAllText(path, "# In this file you can set your Among Us Revamped language.\n# To set the language, replace the 'English' text below with the language you want to select.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian, Japanese, Russian\n\nEnglish");
}
string l = File.ReadAllLines(path).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x) && !x.StartsWith("#"))?.Trim() ?? "English";
if (Enum.TryParse(l, true, out SupportedLangs lang)) _currentLang = lang;
}
catch (IOException ex)
{
Logger.Exception(ex, "BanManager");
}
catch (UnauthorizedAccessException ex)
{
Logger.Exception(ex, "BanManager");
}
CheckLanguageFile(_currentLang);
LoadLanguage(_currentLang);
}
+219 -28
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}";
@@ -72,17 +72,13 @@ public static class Utils
switch (tab)
{
case TabGroup.SystemSettings:
return "System Settings";
/*
case TabGroup.CustomRoleSettings:
return "Custom Roles";
*/
case TabGroup.AbilitySettings:
return "Ability Settings";
return Translator.Get("systemSettings");
case TabGroup.ModerationSettings:
return Translator.Get("moderationSettings");
case TabGroup.ModSettings:
return "Gameplay Settings";
return Translator.Get("gameplaySettings");
case TabGroup.GamemodeSettings:
return "Gamemode Settings";
return Translator.Get("gamemodeSettings");
default:
return "";
}
@@ -204,21 +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.Clear();
LateTask.Tasks.RemoveAll(x => x.name != "RehostManager");
NormalGameEndChecker.ImpCheckComplete = false;
CreateOptionsPickerPatch.SetDleks2 = false;
CanCallMeetings = true;
AbilityManagement.HandlingRoleMessages = false;
PlayerControlSetRolePatch.FirstAssign = true;
PlayerControlSetRolePatch.Jesters.Clear();
PlayerControlCompleteTaskPatch.playerTasksCompleted.Clear();
PlayerControlCompleteTaskPatch.tasksPerPlayer.Clear();
@@ -228,6 +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
@@ -363,19 +386,6 @@ public static class Utils
return false;
}
public static void SendPrivateMessage(PlayerControl target, string message)
{
if (!AmongUsClient.Instance.AmHost || PlayerControl.LocalPlayer == null || target == null || target.Data.ClientId == 255) return;
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, 13, SendOption.Reliable, target.Data.ClientId);
writer.Write(message);
writer.Write(PlayerControl.LocalPlayer.PlayerId);
AmongUsClient.Instance.FinishRpcImmediately(writer);
}
public static void ChatCommand(ChatController __instance, string msg, string msg2, bool multi)
{
if (OnGameJoinedPatch.WaitingForChat) return;
@@ -572,10 +582,11 @@ public static class Utils
return null;
}
Logger.Info($"Found {methodName}.MoveNext", "GetStateMachineMoveNext");
// Logger.Info($"Found {methodName}.MoveNext", "GetStateMachineMoveNext");
return moveNext;
}
public static readonly Dictionary<byte, string> StoredRoleText = new();
public static string GetRoleText(PlayerControl p)
{
if (p == null) return "";
@@ -586,4 +597,184 @@ public static class Utils
}
else return $"<color=#8cffff>{p.Data.RoleType}</color>";
}
public static int skeldVotes;
public static int miraVotes;
public static int polusVotes;
public static int airshipVotes;
public static int fungleVotes;
public static int dleksVotes;
public static bool MapVoteActive;
public static bool DleksEnabled;
public static readonly List<byte> HasVoted = [];
public static void MapVote(bool dleks, bool moderator)
{
if (MapVoteActive || ModeVoteActive) return;
DleksEnabled = dleks;
MapVoteActive = true;
if (dleks && moderator) Utils.ModeratorChatCommand("A map vote is active!\n\nA: Skeld\nB: Mira\nC: Polus\nD: Airship\nE: Fungle\nF: Eht Dleks\n\nType /vote 'letter' to vote.", "", false);
else if (moderator) Utils.ModeratorChatCommand("A map vote is active!\n\nA: The Skeld\nB: Mira HQ\nC: Polus\nD: The Airship\nE: The Fungle\n\nType /vote 'letter' to vote.", "", false);
if (dleks && !moderator) Utils.ChatCommand(DestroyableSingleton<HudManager>.Instance.Chat, "A map vote is active!\n\nA: Skeld\nB: Mira\nC: Polus\nD: Airship\nE: Fungle\nF: Eht Dleks\n\nType /vote 'letter' to vote.", "", false);
else if (!moderator) Utils.ChatCommand(DestroyableSingleton<HudManager>.Instance.Chat, "A map vote is active!\n\nA: The Skeld\nB: Mira HQ\nC: Polus\nD: The Airship\nE: The Fungle\n\nType /vote 'letter' to vote.", "", false);
new LateTask(() =>
{
int highest = skeldVotes;
string winner = "Skeld";
byte mapId = 0;
bool tie = false;
void Check(int votes, string name, byte id)
{
if (votes > highest)
{
highest = votes;
winner = name;
mapId = id;
tie = false;
}
else if (votes == highest)
{
tie = true;
}
}
Check(miraVotes, "Mira HQ", 1);
Check(polusVotes, "Polus", 2);
Check(airshipVotes, "Airship", 4);
Check(fungleVotes, "The Fungle", 5);
if (DleksEnabled) Check(dleksVotes, "Eht Dleks", 3);
string voteResults = $"Skeld: {skeldVotes}\n" + $"Mira: {miraVotes}\n" + $"Polus: {polusVotes}\n" + $"Airship: {airshipVotes}\n" + $"Fungle: {fungleVotes}";
if (DleksEnabled) voteResults += $"\nEht Dleks: {dleksVotes}";
if (highest == 0)
{
ModeratorChatCommand("Lol, no one voted. Hooray for democracy?", "", false);
}
else if (tie)
{
ModeratorChatCommand($"Map vote tied. No new map selected.\n\n{voteResults}", "", false);
}
else
{
ModeratorChatCommand(SendChatPatch.ConvertNum($"Winner: {winner} ({highest})\n\n{voteResults}"), "", false);
if (winner == "Eht Dleks")
{
CreateOptionsPickerPatch.ApplyDleks(Utils.isHideNSeek);
}
else
{
CreateOptionsPickerPatch.ClearDleks();
if (!Utils.isHideNSeek) Main.NormalOptions.MapId = mapId;
else Main.HideNSeekOptions.MapId = mapId;
}
}
skeldVotes = 0;
miraVotes = 0;
polusVotes = 0;
airshipVotes = 0;
fungleVotes = 0;
dleksVotes = 0;
HasVoted.Clear();
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;
}
}
+388 -95
View File
@@ -1,4 +1,5 @@
using Hazel;
using AmongUs.GameOptions;
using Hazel;
using InnerNet;
using System;
using System.IO;
@@ -323,63 +324,231 @@ internal static class SendChatPatch
return false;
}
if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat || AbilityManagement.HandlingRoleMessages) return false;
if (text.StartsWith("/seeker "))
{
if (!Utils.IsLobby || !Utils.isHideNSeek)
{
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
string argSeeker = text.Substring(8).Trim();
bool found = false;
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
{
if (p.Data == null) continue;
if (p.Data.PlayerName.Equals(argSeeker, StringComparison.OrdinalIgnoreCase))
{
found = true;
PlayerControlSetRolePatch.manualSeekers.Add(p.PlayerId);
break;
}
}
if (found)
{
List<string> names = new();
foreach (PlayerControl pl in PlayerControl.AllPlayerControls)
{
if (PlayerControlSetRolePatch.manualSeekers.Contains(pl.PlayerId)) names.Add(pl.Data.PlayerName);
}
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", names));
}
if (!found)
{
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Player '{argSeeker}' not found.");
}
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
if (text == "/clearseeker")
{
PlayerControlSetRolePatch.manualSeekers.Clear();
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("clearedSeekers"));
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
if (text == "/seekers")
{
List<string> n = new();
foreach (PlayerControl pc in PlayerControl.AllPlayerControls)
{
if (PlayerControlSetRolePatch.manualSeekers.Contains(pc.PlayerId)) n.Add(pc.Data.PlayerName);
}
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", n));
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat) return false;
if (text == "/mapvote")
{
if (Utils.IsLobby)
{
Utils.MapVote(false, false);
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
}
if (text == "/allmapvote")
{
if (Utils.IsLobby)
{
Utils.MapVote(true, false);
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
}
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")
{
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return false;
Utils.ChatCommand(__instance, $"{NormalGameEndChecker.LastWinReason}", "", false);
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
return false;
}
if (text == "/r jester"){
Utils.ChatCommand(__instance, Translator.Get("jesterPublic"), "", false);
return false;}
if (text == "/r mayor"){
Utils.ChatCommand(__instance, Translator.Get("mayorPublic", Options.ExtraVotesCrewmate.GetInt()), "", false);
return false;}
if (text == "/r tyrant"){
Utils.ChatCommand(__instance, Translator.Get("tyrantPublic", Options.ExtraVotesImpostor.GetInt()), "", false);
return false;}
if (text == "/r workhorse"){
Utils.ChatCommand(__instance, Translator.Get("workhorsePublic", Options.ExtraVotesPerTask.GetFloat()), "", false);
return false;}
if (text == "/r stealer"){
Utils.ChatCommand(__instance, Translator.Get("stealerPublic", Options.ExtraVotesPerKill.GetFloat()), "", false);
return false;}
if (text == "/r juggernaut"){
Utils.ChatCommand(__instance, Translator.Get("juggernautPublic", Options.KillsNeededForJuggernaut.GetInt()), "", false);
return false;}
if (text == "/r tasker"){
Utils.ChatCommand(__instance, Translator.Get("speedrunnerPublic"), "", false);
return false;}
}
if (text == "/aur" || text == "/socials")
{
Utils.ChatCommand(__instance, Translator.Get("socialsAll"), "", false);
Utils.ChatCommand(__instance, "AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c о r d . g g /\n83Zhzhyhya", "", false);
return false;
}
if (text == "/0kc" || text == "/0killcooldown")
{
Utils.ChatCommand(__instance, Translator.Get("noKcdMode"), "", 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")
{
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), 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;
}
if (text == "/sr" || text == "/speedrun")
{
Utils.ChatCommand(__instance, Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
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);
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;
}
@@ -388,21 +557,23 @@ internal static class SendChatPatch
switch (Options.Gamemode.GetValue())
{
case 0:
AbilityManagement.SendRoleList(__instance, AbilityManagement.RoleList(), false);
if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)
{
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
break;
case 1:
Utils.ChatCommand(__instance, Translator.Get("noKcdMode"), "", false);
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, Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
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, Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
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();
@@ -412,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))
@@ -527,38 +700,55 @@ public static class RPCHandlerPatch
string text = msgtext.ToLower();
Logger.Info($" {__instance.Data.PlayerName}: {msgtext}", "SendChat");
string[] keywords = Options.AutoKickStartStrength.GetBool() ? new[] { "start", "begin", "commence" } : new[] { "start", "begin", "commence", "s t a r t", "go" };
bool c = false;
if (Options.AutoKickStartStrength.GetBool())
{
c = keywords.Any(k => text.Contains(k));
}
else
{
c = keywords.Any(k => text == k);
}
if (c && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1 && Options.AutoKickStart.GetBool() && !Utils.InGame)
BanManager.IsStartWord(__instance, text);
BanManager.IsWordBanned(__instance, text);
if (text.StartsWith("/seeker ") && Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashMapAndSeekerCmd.GetValue())
{
int clientId = __instance.Data.ClientId;
if (!Main.SayStartTimes.ContainsKey(clientId))
Main.SayStartTimes.Add(clientId, 0);
Main.SayStartTimes[clientId]++;
if (Main.SayStartTimes[clientId] >= Options.AutoKickStartTimes.GetInt())
if (!Utils.IsLobby || !Utils.isHideNSeek)
{
bool sBan = Options.AutoKickStartAsBan.GetBool();
AmongUsClient.Instance.KickPlayer(clientId, sBan);
Logger.Info($" {__instance.Data.PlayerName} was {(sBan ? "banned" : "kicked")} for saying start", "KickAnnoyingKids");
Logger.SendInGame($" {__instance.Data.PlayerName} was {(sBan ? "banned" : "kicked")} for saying start");
return;
}
string argSeeker = text.Substring(8).Trim();
bool found = false;
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
{
if (p.Data == null) continue;
if (p.Data.PlayerName.Equals(argSeeker, StringComparison.OrdinalIgnoreCase))
{
found = true;
PlayerControlSetRolePatch.manualSeekers.Add(p.PlayerId);
break;
}
}
if (found)
{
List<string> names = new();
foreach (PlayerControl pl in PlayerControl.AllPlayerControls)
{
if (PlayerControlSetRolePatch.manualSeekers.Contains(pl.PlayerId)) names.Add(pl.Data.PlayerName);
}
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", names));
}
if (!found)
{
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Player '{argSeeker}' not found.");
}
}
BanManager.IsWordBanned(__instance, text);
if (text == "/clearseeker")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashMapAndSeekerCmd.GetValue()) return;
PlayerControlSetRolePatch.manualSeekers.Clear();
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("clearedSeekers"));
}
bool col1 = text.StartsWith("/col ");
bool col2 = text.StartsWith("/color ");
@@ -624,8 +814,6 @@ public static class RPCHandlerPatch
}
}
if (AbilityManagement.HandlingRoleMessages || OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return;
if (text == "/eg" || text == "/endgame")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashStartAndEndGameCmd.GetValue()) return;
@@ -649,6 +837,110 @@ public static class RPCHandlerPatch
GameStartManager.Instance.BeginGame();
}
if (OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return;
if (text == "/mapvote")
{
if (Utils.IsLobby)
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashMapAndSeekerCmd.GetValue()) return;
Utils.MapVote(false, true);
}
}
if (text == "/allmapvote")
{
if (Utils.IsLobby)
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashMapAndSeekerCmd.GetValue()) return;
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")
{
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")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
@@ -656,21 +948,38 @@ public static class RPCHandlerPatch
Utils.ModeratorChatCommand($"{NormalGameEndChecker.LastWinReason}", "", false);
}
if (text == "/aur" || text == "/socials")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
Utils.ModeratorChatCommand("AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c о r d . g g /\n83Zhzhyhya", "", false);
}
if (text == "/0kc" || text == "/0killcooldown")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
Utils.ModeratorChatCommand(Translator.Get("noKcdMode"), "", 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;
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), 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")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
Utils.ModeratorChatCommand(Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
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")
@@ -679,49 +988,33 @@ public static class RPCHandlerPatch
switch (Options.Gamemode.GetValue())
{
case 0:
AbilityManagement.SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), true);
if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)
{
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
break;
case 1:
Utils.ModeratorChatCommand(Translator.Get("noKcdMode"), "", false);
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(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
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(Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
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;
}
}
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
if (text == "/r jester"){
Utils.ModeratorChatCommand(Translator.Get("jesterPublic"), "", false);}
if (text == "/r mayor"){
Utils.ModeratorChatCommand(Translator.Get("mayorPublic", Options.ExtraVotesCrewmate.GetInt()), "", false);}
if (text == "/r tyrant"){
Utils.ModeratorChatCommand(Translator.Get("tyrantPublic", Options.ExtraVotesImpostor.GetInt()), "", false);}
if (text == "/r workhorse"){
Utils.ModeratorChatCommand(Translator.Get("workhorsePublic", Options.ExtraVotesPerTask.GetFloat()), "", false);}
if (text == "/r stealer"){
Utils.ModeratorChatCommand(Translator.Get("stealerPublic", Options.ExtraVotesPerKill.GetFloat()), "", false);}
if (text == "/r juggernaut"){
Utils.ModeratorChatCommand(Translator.Get("juggernautPublic", Options.KillsNeededForJuggernaut.GetInt()), "", false);}
if (text == "/r tasker"){
Utils.ModeratorChatCommand(Translator.Get("speedrunnerPublic"), "", false);}
if (text.StartsWith("/t "))
{
BanManager.LoadTemplates();
string templateName = text[3..].Trim().ToLower();
if (BanManager.Templates.TryGetValue(templateName, out string templateMessage))
+7 -2
View File
@@ -16,6 +16,7 @@ namespace AmongUsRevamped
private static ClientOptionItem LobbyMusic;
private static ClientOptionItem DisableInfoWhenDead;
private static ClientOptionItem DisableCommandHelper;
private static ClientOptionItem DisableCompatibilityWarning;
public static void Postfix(OptionsMenuBehaviour __instance)
{
@@ -27,8 +28,7 @@ namespace AmongUsRevamped
static void GMButtonToggle()
{
if (Main.GM.Value)
HudManager.Instance.ShowPopUp(Translator.Get("gameMasterWarning"));
if (Main.GM.Value && Utils.IsLobby) HudManager.Instance.ShowPopUp(Translator.Get("gameMasterWarning"));
}
}
@@ -61,6 +61,9 @@ namespace AmongUsRevamped
if (DisableCommandHelper == null || DisableCommandHelper.ToggleButton == null)
DisableCommandHelper = ClientOptionItem.Create(Translator.Get("disableCommandHelper"), Main.DisableCommandHelper, __instance);
if (DisableCompatibilityWarning == null || DisableCompatibilityWarning.ToggleButton == null)
DisableCompatibilityWarning = ClientOptionItem.Create(Translator.Get("disableCompatibilityWarning"), Main.DisableCompatibilityWarning, __instance);
}
}
@@ -73,11 +76,13 @@ namespace AmongUsRevamped
}
}
// MY MODSTAMP IS FASTER THAN YOURS!!11!!!1
[HarmonyPatch(typeof(SplashManager), nameof(SplashManager.Update))]
internal class SplashLogoAnimatorPatch
{
public static void Prefix(SplashManager __instance)
{
ModManager.Instance.ShowModStamp();
__instance.sceneChanger.AllowFinishLoadingScene();
__instance.startedSceneLoad = true;
}
+58 -2
View File
@@ -1,4 +1,5 @@
using System;
using BepInEx.Unity.IL2CPP;
using System;
using System.Text;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using TMPro;
@@ -180,6 +181,7 @@ namespace AmongUsRevamped
private static PassiveButton template;
private static PassiveButton discordButton;
private static PassiveButton gitHubButton;
private static PassiveButton animationSceneButton;
private static Transform buttonParent;
public static void Postfix(MainMenuManager __instance)
{
@@ -212,6 +214,18 @@ namespace AmongUsRevamped
"GitHub");
}
if (animationSceneButton == null)
{
animationSceneButton = CreateButton(
__instance,
"AnimationTestSceneButton",
new(0f, 2.65f, 1f),
new(139, 0, 0, byte.MaxValue),
new(255, 127, 127, byte.MaxValue),
() => SceneChanger.ChangeScene("AnimationTestScene"),
"Animation Tester");
}
var bg = GameObject.Find("BackgroundTexture");
if (bg != null)
{
@@ -230,6 +244,24 @@ namespace AmongUsRevamped
div.SetActive(false);
}
var logo = GameObject.Find("MainUI/AspectScaler/LeftPanel/Sizer/LOGO-AU");
if (logo != null)
{
logo.SetActive(false);
}
var h1 = GameObject.Find("AccountManager/AccountTab/GameHeader/BarSprite/FriendsButton/Highlight/NewRequestActive/Text_TMP");
if (h1 != null)
{
Object.Destroy(h1);
}
var h2 = GameObject.Find("AccountManager/AccountTab/GameHeader/BarSprite/FriendsButton/Highlight/NewRequestActive/Background");
if (h2 != null)
{
Object.Destroy(h2);
}
Transform tintTrans = __instance.transform.Find("MainUI/Tint");
var tint = tintTrans.gameObject;
@@ -290,7 +322,14 @@ namespace AmongUsRevamped
button.name = name;
button.transform.localPosition = localPosition;
button.transform.localScale = new Vector3(0.8f, 1f, 1f);
if (name == "GitHubButton" || name == "DiscordButton")
{
button.transform.localScale = new Vector3(0.8f, 1f, 1f);
}
else
{
button.transform.localScale = new Vector3(1.8f, 1.6f, 1f);
}
var aspect = button.GetComponent<AspectPosition>();
if (aspect != null)
@@ -317,6 +356,23 @@ namespace AmongUsRevamped
return button;
}
}
[HarmonyPatch(typeof(SignInStatusComponent), nameof(SignInStatusComponent.SetOnline))]
public static class SignInStatusComponentSetOnlinePatch
{
private static void Postfix()
{
int pluginCount = IL2CPPChainloader.Instance.Plugins.Count;
Logger.Info($" {pluginCount} Plugins detected", "PluginCheck");
if (pluginCount > 1 && !Main.DisableCompatibilityWarning.Value)
{
DisconnectPopup.Instance.gameObject.SetActive(true);
DisconnectPopup.Instance._textArea.enableWordWrapping = false;
DisconnectPopup.Instance._textArea.text = Translator.Get("pluginWarning");
}
}
}
}
#if !ANDROID
+2 -5
View File
@@ -27,7 +27,6 @@ internal static class DisableDevice
["AirshipRecordsAdmin"] = new(19.89f, 12.60f),
["AirshipCamera"] = new(8.10f, -9.63f),
["AirshipVital"] = new(25.24f, -7.94f),
["FungleCamera"] = new(6.20f, 0.10f),
["FungleVital"] = new(-2.50f, -9.80f),
["SubmergedVital"] = new(5f, 32.54f),
["SubmergedLeftAdmin"] = new(-9.45f, 10.16f),
@@ -50,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;
@@ -58,7 +57,7 @@ internal static class DisableDevice
foreach (PlayerControl pc in Main.AllPlayerControls)
{
if (pc.Data.IsDead || Main.GM.Value && pc == PlayerControl.LocalPlayer) return;
if (pc.Data.IsDead || (Main.GM.Value && pc == PlayerControl.LocalPlayer)) continue;
try
{
@@ -98,7 +97,6 @@ internal static class DisableDevice
if (Options.DisableAirshipVital.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["AirshipVital"]) <= UsableDistance;
break;
case 5:
if (Options.DisableFungleCamera.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["FungleCamera"]) <= UsableDistance;
if (Options.DisableFungleVital.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["FungleVital"]) <= UsableDistance;
break;
}
@@ -190,7 +188,6 @@ public class RemoveDisableDevicesPatch
if (Options.DisableAirshipVital.GetBool()) consoles.DoIf(x => x.name == "panel_vitals", x => x.gameObject.GetComponent<CircleCollider2D>().enabled = false);
break;
case 5:
if (Options.DisableFungleCamera.GetBool()) consoles.DoIf(x => x.name == "BinocularsSecurityConsole", x => x.gameObject.GetComponent<PolygonCollider2D>().enabled = false);
if (Options.DisableFungleVital.GetBool()) consoles.DoIf(x => x.name == "VitalsConsole", x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
break;
}
+16 -1
View File
@@ -25,7 +25,22 @@ class CreateOptionsPickerPatch
isSkeldFlipped = value;
}
}
public static void ApplyDleks(bool hideNSeek)
{
SetDleks = true;
FlippedSkeld = true;
if (!Utils.isHideNSeek) Main.NormalOptions.MapId = 0;
else Main.HideNSeekOptions.MapId = 0;
}
public static void ClearDleks()
{
SetDleks = false;
FlippedSkeld = false;
}
private static MapSelectButton DleksButton;
[HarmonyPatch]
public static class GameOptionsMapPickerPatch
+20 -17
View File
@@ -12,7 +12,9 @@ public static class EndGameManagerPatch
{
Logger.Info(" -------- GAME ENDED --------", "EndGame");
Utils.ClearLeftoverData();
//OptionManager.RestoreOptions();
EndGameNavigation navigation = __instance.Navigation;
if (!AmongUsClient.Instance.AmHost || __instance == null || navigation == null || !Options.AutoRejoinLobby.GetBool()) return;
navigation.NextGame();
@@ -25,11 +27,12 @@ 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() == 3 || Utils.HandlingGameEnd) return false;
if (Options.NoGameEnd.GetBool() || Options.Gamemode.GetValue() == 2 || Utils.HandlingGameEnd) return false;
var allPlayers = PlayerControl.AllPlayerControls.ToArray();
@@ -50,46 +53,46 @@ class NormalGameEndChecker
var impostorList = string.Join(", ", imps.Select(p => p.Data.PlayerName));
if (!canUpdateWinnerText) return;
if (Winner == "Jester")
if (Winner == "SnSTimer")
{
LastWinReason = Translator.Get("jesterWin") + impostorList;
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
return;
}
if (Winner == "Juggernaut")
if (Winner == "PnSTimer")
{
LastWinReason = Translator.Get("juggernautWin", Options.KillsNeededForJuggernaut.GetInt()) + impostorList;
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
return;
}
if (Winner == "Speedrunner")
if (Winner == "NoOneWinsSpeedrun")
{
LastWinReason = Translator.Get("speedrunnerWin") + impostorList;
LastWinReason = $"No one wins. ({Options.GameAutoEndsAfter.GetInt()}s Timer)";
canUpdateWinnerText = false;
return;
}
if (Utils.AliveImpostors == 0 || Winner == "Crewmate")
if ((Options.Gamemode.GetValue() != 2 && Utils.AliveImpostors == 0) || Winner == "Crewmate")
{
LastWinReason = Translator.Get("crewmateWin") + impostorList;
LastWinReason = "Crewmates Win!\n\nImpostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
}
else if (Utils.AliveImpostors >= Utils.AliveCrewmates || Winner == "Impostor")
else if ((Options.Gamemode.GetValue() != 2 && Utils.AliveImpostors >= Utils.AliveCrewmates) || Winner == "Impostor")
{
LastWinReason = Translator.Get("impostorWin") + 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 = Translator.Get("crewmateWinTasks", Options.TaskPercentNeededToWin.GetInt()) + impostorList;
LastWinReason = $"Crewmates Win! ({Options.TaskPercentNeededToWin.GetInt()}% tasks completed)\n\nImpostors: " + impostorList + firstDeathString;
canUpdateWinnerText = false;
}
else if (Options.Gamemode.GetValue() < 2 || Winner == "ImpostorSabotage")
else if (Options.Gamemode.GetValue() < 1 || Winner == "ImpostorSabotage")
{
LastWinReason = Translator.Get("impostorWinMisc") + impostorList;
LastWinReason = "Impostors Win! (Sabotage)\n\n Impostors: " + impostorList + firstDeathString;
}
}
}
+3 -10
View File
@@ -1,3 +1,4 @@
using AmongUs.GameOptions;
using System.Reflection;
using Il2CppInterop.Runtime.InteropTypes;
@@ -34,7 +35,7 @@ class ExileControllerWrapUpPatch
{
if (p.Data.Role.IsImpostor)
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({MurderPlayerPatch.killCount[p.Data.PlayerId]}†)";
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({MurderPlayerPatch.killCount[p.Data.PlayerId]}† - {Utils.StoredRoleText[p.PlayerId]})";
}
else
{
@@ -42,20 +43,12 @@ class ExileControllerWrapUpPatch
{
PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId] = 0;
}
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})";
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]} - {Utils.StoredRoleText[p.PlayerId]})";
}
}
}
Logger.Info($" {ejectedPlayer.PlayerName} was ejected", "ExileController");
if (PlayerControlSetRolePatch.Jesters.Contains(exiledPlayer))
{
Logger.Info($"Jester {ejectedPlayer.PlayerName} wins", "ExilePatch");
Utils.CustomWinnerEndGame(exiledPlayer, 1);
NormalGameEndChecker.CheckWinnerText("Jester");
return;
}
}
[HarmonyPatch]
+5 -10
View File
@@ -113,21 +113,16 @@ namespace AmongUsRevamped
switch ((TabGroup)(tabNum - 3))
{
case TabGroup.SystemSettings:
__instance.MenuDescriptionText.text = "Quality settings to improve comfort and testing.";
__instance.MenuDescriptionText.text = Translator.Get("systemSettingsDesc");
break;
/*
case TabGroup.CustomRoleSettings:
__instance.MenuDescriptionText.text = "Custom Role enabling and settings.";
break;
*/
case TabGroup.AbilitySettings:
__instance.MenuDescriptionText.text = "Ability settings to enhance vanilla roles.";
case TabGroup.ModerationSettings:
__instance.MenuDescriptionText.text = Translator.Get("moderationSettingsDesc");
break;
case TabGroup.ModSettings:
__instance.MenuDescriptionText.text = "Gameplay settings to improve the in-game experience.";
__instance.MenuDescriptionText.text = Translator.Get("gameplaySettingsDesc");
break;
case TabGroup.GamemodeSettings:
__instance.MenuDescriptionText.text = "Situational settings to apply for specific gamemodes.";
__instance.MenuDescriptionText.text = Translator.Get("gamemodeSettingsDesc");
break;
}
}
+11
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)
@@ -119,6 +129,7 @@ public class GameStartManagerBeginGamePatch
public static void Prefix(GameStartManager __instance)
{
if (Options.NoGameEnd.GetBool()) Logger.SendInGame(Translator.Get("noGameEndWarning"));
if (Main.GM.Value) Logger.SendInGame(Translator.Get("gameMasterWarningTwo"));
}
}
+96 -11
View File
@@ -15,10 +15,34 @@ internal static class CoShowIntroPatch
if (!AmongUsClient.Instance.AmHost) return;
AbilityManagement.SendRoleMessages();
//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;
@@ -29,26 +53,87 @@ internal static class CoShowIntroPatch
Logger.Info($" {p.Data.PlayerName} -> {p.Data.RoleType}", "RoleInfo");
}
Logger.Info($" {AbilityManagement.RoleList()}", "AbilityInfo");
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.isHideNSeek)
{
Utils.CanCallMeetings = false;
_ = new LateTask(() =>
{
Utils.CanCallMeetings = true;
}, 33f, "MeetingEnabled");
}, 34f, "MeetingEnabled");
}
if (Options.Gamemode.GetValue() == 2 && Options.SNSChatInGame.GetBool() /*|| Options.Gamemode.GetValue() == 0 && Options.ChatBeforeFirstMeeting.GetBool()*/)
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
_ = new LateTask(() =>
{
PlayerControl.LocalPlayer.CmdReportDeadBody(null);
if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
if (Main.NormalOptions.roleOptions.TryGetRoleOptions<GuardianAngelRoleOptionsV11>(RoleTypes.GuardianAngel, out var GuardianAngelOptions))
{
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();
}
}, 9f, "SetChatVisible");
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
{
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 = "";
}
}
+109 -14
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;
@@ -45,6 +45,34 @@ internal static class OnGameJoinedPatch
WaitingForChat = false;
}, 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);
DisconnectManager.Rehosting = false;
}
}
}
@@ -72,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");
@@ -88,20 +115,22 @@ class OnPlayerJoinedPatch
if (!Options.TempBanInvalidFriendCodes.GetBool())
{
AmongUsClient.Instance.KickPlayer(Client.Id, false);
Logger.Info($" {Client.PlayerName} Was kicked for having an invalid FriendCode", "KickInvalidFriendCode");
Logger.SendInGame($" {Client.PlayerName} Was kicked for having an invalid FriendCode");
Logger.Info(Translator.Get("invalidFriendCodeKick", Client.PlayerName), "KickInvalidFriendCode");
Logger.SendInGame(Translator.Get("invalidFriendCodeKick", Client.PlayerName));
}
else
{
AmongUsClient.Instance.KickPlayer(Client.Id, true);
Logger.Info($" {Client.PlayerName} Was banned for having an invalid FriendCode", "BanInvalidFriendCode");
Logger.SendInGame($" {Client.PlayerName} Was banned for having an invalid FriendCode");
Logger.Info(Translator.Get("invalidFriendCodeBan", Client.PlayerName), "BanInvalidFriendCode");
Logger.SendInGame(Translator.Get("invalidFriendCodeBan", Client.PlayerName));
}
}
if (Options.EnableJoinMessages.GetBool())
{
JoinNum++;
BanManager.LoadTemplates();
BanManager.Templates.TryGetValue("welcome", out string msg);
if (JoinNum >= Options.MessagePerPlayerNum.GetInt())
@@ -133,24 +162,90 @@ public static class SetLevelPatch
public static List<PlayerControl> HandledLevelKicks = [];
public static void Prefix(PlayerControl __instance, uint level)
{
if (AmongUsClient.Instance.AmHost && level < Options.KickLowLevelPlayer.GetInt() - 1 && __instance.Data.ClientId != AmongUsClient.Instance.HostId)
if (AmongUsClient.Instance.AmHost && level < Options.KickLowLevelPlayer.GetInt() - 1 && __instance.Data.ClientId != AmongUsClient.Instance.HostId && Options.EnableKickLowLevelPlayer.GetBool())
{
if (level == 0 && Options.DontKickLevelOnes.GetBool()) return;
if (HandledLevelKicks.Contains(__instance)) return;
if (!Options.TempBanLowLevelPlayer.GetBool())
if (!Options.TempBanLowLevelPlayer.GetBool() && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
{
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
Logger.Info($" {__instance.Data.PlayerName} (level {level}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}");
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}");
}
else
else if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
{
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
Logger.Info($" {__instance.Data.PlayerName} (level {level}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer");
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);
}
}
}
[HarmonyPatch(typeof(GameStartManager), nameof(GameStartManager.Start))]
public static class ShowLobbyTimer_GameStartManager_Start_Postfix
{
public static void Postfix(GameStartManager __instance)
{
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;
}
}
}
+1 -1
View File
@@ -23,7 +23,7 @@ internal static class LobbyBehaviourUpdatePatch
else
{
if (mapThemeSound != null) return;
SoundManager.Instance.CrossFadeSound("MapTheme", __instance.MapTheme, 0.5f);
SoundManager.Instance.CrossFadeSound("MapTheme", __instance.MapTheme, 0.1f);
}
}
}
+6 -8
View File
@@ -2,6 +2,8 @@
namespace AmongUsRevamped;
// Old patch for roles and abilities. Might use later.
/*
[HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.CheckForEndVoting))]
public static class CheckForEndVotingPatch
{
@@ -36,12 +38,7 @@ public static class CheckForEndVotingPatch
int extraVotesPerTask = (int)(Options.ExtraVotesPerTask.GetFloat()*PlayerControlCompleteTaskPatch.playerTasksCompleted[voterId]+0.1f);
int extraVotesPerKill = (int)(Options.ExtraVotesPerKill.GetFloat()*MurderPlayerPatch.killCount[voterId]+0.1f);
if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0;
if (AbilityManagement.IsMayor(pc)) extraVotes += extraVotesCrewmate;
if (AbilityManagement.IsTyrant(pc)) extraVotes += extraVotesImpostor;
if (AbilityManagement.IsWorkhorse(pc)) extraVotes += extraVotesPerTask;
if (AbilityManagement.IsStealer(pc)) extraVotes += extraVotesPerKill;
if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0;
for (int i = 0; i < extraVotes; i++)
{
@@ -59,6 +56,7 @@ public static class CheckForEndVotingPatch
return false;
}
}
*/
[HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Start))]
class MeetingHudStartPatch
@@ -72,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;
@@ -91,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;
}
}
+17
View File
@@ -17,6 +17,17 @@ public static class NumberOption_Increase
if (Utils.IsLobby)
{
if (__instance.Title == StringNames.GameKillCooldown)
{
if (__instance.Value == 0.01f)
{
__instance.Value = 0.5f;
__instance.UpdateValue();
__instance.OnValueChanged.Invoke(__instance);
return false;
}
}
if (__instance.Value <= __instance.ValidRange.min)
{
return true;
@@ -103,6 +114,7 @@ public static class NumberOption_Initialize
case StringNames.GameKillCooldown:
__instance.Increment = 0.5f;
__instance.ValidRange = new FloatRange(0.01f, 900f);
break;
case StringNames.GamePlayerSpeed:
@@ -114,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;
+194 -39
View File
@@ -1,4 +1,5 @@
using AmongUs.GameOptions;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using System;
using InnerNet;
using UnityEngine;
@@ -13,8 +14,14 @@ internal class CoStartGamePatch
if (!AmongUsClient.Instance.AmHost) return;
Logger.Info(" -------- GAME STARTED --------", "StartGame");
Logger.Info($" Gamemode: {Options.Gamemode.GetValue()}", "StartGame");
Logger.Info($" Gamemode: {Options.Gamemode.GetString()}", "StartGame");
Logger.Info($" Players: {PlayerControl.AllPlayerControls.Count}", "StartGame");
Logger.Info($" Map: {(MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId}", "StartGame");
if (Main.GM.Value)
{
Logger.Info($" Game Master Enabled", "StartGame");
}
NormalGameEndChecker.imps.Clear();
NormalGameEndChecker.LastWinReason = "";
@@ -25,37 +32,48 @@ internal class CoStartGamePatch
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.RpcSetRole))]
class PlayerControlSetRolePatch
{
private static int i;
public static bool FirstAssign;
private static HashSet<byte> Seekers = new();
public static HashSet<PlayerControl> Jesters = 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();
public static bool Prefix(PlayerControl __instance, ref RoleTypes roleType, ref bool canOverrideRole)
{
if (!FirstAssign || !AmongUsClient.Instance.AmHost) return true;
var oldRole = roleType;
if (!ProcessedPlayers.Add(__instance.PlayerId)) return true;
canOverrideRole = false;
// canOverrideRole = false;
if (Main.GM.Value && __instance == PlayerControl.LocalPlayer)
{
roleType = RoleTypes.CrewmateGhost;
return true;
}
if (Utils.isHideNSeek && i == 0)
if (Utils.isHideNSeek && Seekers.Count() == 0 && Options.NumSeekers.GetInt() > 0)
{
int seekersCount = Options.NumSeekers.GetInt();
if (manualSeekers.Count > seekersCount) seekersCount = manualSeekers.Count;
var candidates = new List<PlayerControl>();
foreach (var p in PlayerControl.AllPlayerControls)
{
if (!Main.GM.Value || p != PlayerControl.LocalPlayer) candidates.Add(p);
}
seekersCount = Math.Min(seekersCount, candidates.Count);
if (manualSeekers.Count == 0)
{
seekersCount = Math.Min(seekersCount, candidates.Count);
}
else
{
seekersCount = Math.Min(seekersCount, candidates.Count + manualSeekers.Count);
}
foreach (byte id in manualSeekers)
{
if (Seekers.Count >= seekersCount) break;
Seekers.Add(id);
}
candidates.RemoveAll(p => manualSeekers.Contains(p.PlayerId));
for (int j = candidates.Count - 1; j > 0; j--)
{
@@ -63,49 +81,186 @@ class PlayerControlSetRolePatch
(candidates[j], candidates[k]) = (candidates[k], candidates[j]);
}
for (int j = 0; j < seekersCount; j++)
foreach (var p in candidates)
{
Seekers.Add(candidates[j].PlayerId);
if (Seekers.Count >= seekersCount) break;
Seekers.Add(p.PlayerId);
}
}
if (Utils.isHideNSeek)
if (Utils.isHideNSeek && Options.NumSeekers.GetInt() > 0)
{
if (Seekers.Contains(__instance.PlayerId)) roleType = RoleTypes.Impostor;
else roleType = RoleTypes.Engineer;
}
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek)
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek)
{
if (__instance == PlayerControl.LocalPlayer && Main.GM.Value)
{
PlayerControl.LocalPlayer.myTasks.Clear();
return true;
}
if (Options.EngineerMode.GetBool()) roleType = RoleTypes.Engineer;
else roleType = RoleTypes.Crewmate;
}
i++;
if (i >= PlayerControl.AllPlayerControls.Count)
if (ProcessedPlayers.Count >= PlayerControl.AllPlayerControls.Count)
{
Seekers.Clear();
FirstAssign = false;
i = 0;
Logger.Info("PCSRP successful", "RoleManaging");
Logger.Info(" PCSRP successful", "RoleManaging");
}
if (roleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 2 ||
roleType == RoleTypes.Scientist && Options.ScientistAbility.GetValue() == 2 ||
roleType == RoleTypes.Engineer && Options.EngineerAbility.GetValue() == 2 ||
roleType == RoleTypes.Noisemaker && Options.NoisemakerAbility.GetValue() == 2 ||
roleType == RoleTypes.Tracker && Options.TrackerAbility.GetValue() == 2 ||
roleType == RoleTypes.Detective && Options.DetectiveAbility.GetValue() == 2)
{
Jesters.Add(__instance);
}
return true;
}
}
[HarmonyPatch(typeof(HudManager), nameof(HudManager.OnGameStart))]
internal static class OnGameStartPatch
{
public static bool PastStartScreen;
public static void Postfix()
{
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 (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 3 && Options.PNSChatInGame.GetBool() && !Utils.isHideNSeek)
{
PlayerControl.LocalPlayer.CmdReportDeadBody(null);
if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
}
foreach (var p in PlayerControl.AllPlayerControls)
{
Utils.StoredRoleText[p.PlayerId] = Utils.GetRoleText(p);
}
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;
}
}
}
+128 -82
View File
@@ -15,8 +15,9 @@ class ReportDeadBodyPatch
public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)] NetworkedPlayerInfo target)
{
if (!AmongUsClient.Instance.AmHost || __instance == null) return true;
if (Utils.isHideNSeek) return false;
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings /*&& !Options.ChatBeforeFirstMeeting.GetBool()*/ && target == null)
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings && target == null && Options.Gamemode.GetValue() < 1)
{
Logger.Info($" {__instance.Data.PlayerName} is calling a meeting too fast, attempt blocked", "ReportDeadBodyPatch");
return false;
@@ -24,12 +25,19 @@ class ReportDeadBodyPatch
// target == null means meeting
if (Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3)
if (Options.Gamemode.GetValue() == 1 || Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3)
{
if (target != null) Logger.Info($" Stopped {__instance.Data.PlayerName} reporting the body of {target.PlayerName}", "ReportDeadBodyPatch");
else Logger.Info($" Stopped {__instance.Data.PlayerName} trying to call a meeting", "ReportDeadBodyPatch");
return false;
if (target != null)
{
Logger.Info($" Stopped {__instance.Data.PlayerName} reporting the body of {target.PlayerName}", "ReportDeadBodyPatch");
return false;
}
if (__instance != PlayerControl.LocalPlayer)
{
Logger.Info($" Stopped {__instance.Data.PlayerName} trying to call a meeting", "ReportDeadBodyPatch");
return false;
}
return true;
}
else return true;
}
@@ -41,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;
@@ -52,87 +60,71 @@ 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 (string.IsNullOrEmpty(NormalGameEndChecker.firstDeath))
{
foreach (var p in PlayerControl.AllPlayerControls)
NormalGameEndChecker.firstDeath = target.Data.PlayerName;
Utils.HasMurdered = true;
}
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
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);
}
}
if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value && resultFlags.HasFlag(MurderResultFlags.Succeeded))
{
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data.Role.IsImpostor)
{
if (p.Data.Role.IsImpostor)
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({killCount[p.Data.PlayerId]}†)</color> - {Utils.GetRoleText(p)}";
}
else
{
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})</color> - {Utils.GetRoleText(p)}";
}
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]}";
}
}
}
if (Options.Gamemode.GetValue() < 2 && AbilityManagement.IsJuggernaut(__instance) && killCount[__instance.PlayerId] >= Options.KillsNeededForJuggernaut.GetInt())
//1 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
Logger.Info("Juggernaut win", "MurderPlayer");
Utils.ContinueEndGame((byte)GameOverReason.ImpostorsByVote);
NormalGameEndChecker.CheckWinnerText("Juggernaut");
}
//2 = Shift and Seek
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek)
{
if (!resultFlags.HasFlag(MurderResultFlags.Succeeded))
return;
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.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;
// Canceling a Shapeshift freezes the player until they successfully Shapeshift again. Unavoidable game logic.
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && __instance.isNew)
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && __instance.isNew)
{
Logger.Info($" {__instance.Data.PlayerName} shapeshifted during misfire cooldown, making the game temporarily freeze them.", "SNSShapeshiftManager");
Logger.SendInGame($" {__instance.Data.PlayerName} shapeshifted during misfire cooldown, making the game temporarily freeze them.");
@@ -141,6 +133,7 @@ internal static class CheckShapeshiftPatch
else return true;
}
}
*/
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CompleteTask))]
class PlayerControlCompleteTaskPatch
@@ -155,14 +148,9 @@ class PlayerControlCompleteTaskPatch
public static void Postfix(PlayerControl __instance, uint idx)
{
if (!AmongUsClient.Instance.AmHost) return;
foreach (var p in PlayerControl.AllPlayerControls)
{
if (AbilityManagement.IsJester(p) && !tasksInitiated)
{
ignoredTasks += p.Data.Tasks.Count;
tasksInitiated = true;
}
if (!playerTasksCompleted.ContainsKey(p.PlayerId))
{
@@ -171,28 +159,26 @@ class PlayerControlCompleteTaskPatch
tasksPerPlayer[p.PlayerId] = p.Data.Tasks.Count;
}
if (__instance.Data.RoleType == RoleTypes.Impostor ||
__instance.Data.RoleType == RoleTypes.Shapeshifter ||
__instance.Data.RoleType == RoleTypes.Phantom ||
__instance.Data.RoleType == RoleTypes.Viper)
{
EACR.TaskCheat(__instance);
}
playerTasksCompleted[__instance.PlayerId]++;
if (AbilityManagement.IsJester(__instance))
if (playerTasksCompleted[__instance.PlayerId] > __instance.Data.Tasks.Count)
{
ignoredCompletedTasks = playerTasksCompleted[__instance.PlayerId];
EACR.TaskCheat(__instance);
}
Logger.Info($" {__instance.Data.PlayerName} completed {idx}", "TaskPatch");
if (Options.Gamemode.GetValue() < 2)
{
if (AbilityManagement.IsSpeedrunner(__instance) && !__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count)
{
Logger.Info($"Speedrunner {__instance.Data.PlayerName} won", "TaskPatch");
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
NormalGameEndChecker.CheckWinnerText("Speedrunner");
}
}
if (Options.Gamemode.GetValue() != 2) CalculateTaskWin();
if (Options.Gamemode.GetValue() != 3) CalculateTaskWin();
if (Options.Gamemode.GetValue() == 3)
if (Options.Gamemode.GetValue() == 2)
{
if (!__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count)
{
@@ -205,13 +191,13 @@ class PlayerControlCompleteTaskPatch
if (PlayerControl.LocalPlayer.Data.IsDead && !Main.DisableInfoWhenDead.Value)
{
TMP_Text nameText = __instance.cosmetics.nameText;
nameText.text = $"{__instance.Data.PlayerName}<color=green><size=90%>({playerTasksCompleted[__instance.PlayerId]}/{tasksPerPlayer[__instance.PlayerId]})</color> - {Utils.GetRoleText(__instance)}";
nameText.text = $"{__instance.Data.PlayerName}<color=green><size=90%>({playerTasksCompleted[__instance.PlayerId]}/{tasksPerPlayer[__instance.PlayerId]})</color> - {Utils.StoredRoleText[__instance.PlayerId]}";
}
}
public static void CalculateTaskWin()
{
if (!Utils.GamePastRoleSelection || Utils.isHideNSeek || Options.NoGameEnd.GetBool()) 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");
@@ -234,3 +220,63 @@ public static class PlayerControlCheckSporeTriggerPatch
else return true;
}
}
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.PlayAnimation))]
public static class PlayAnimationPatch
{
public static void Prefix(PlayerControl __instance, byte animType)
{
if (!AmongUsClient.Instance.AmHost || __instance == PlayerControl.LocalPlayer) return;
var task = (TaskTypes)animType;
switch (task)
{
case TaskTypes.PrimeShields:
case TaskTypes.ClearAsteroids:
case TaskTypes.EmptyGarbage:
if (__instance.Data.RoleType == RoleTypes.Impostor ||
__instance.Data.RoleType == RoleTypes.Shapeshifter ||
__instance.Data.RoleType == RoleTypes.Phantom ||
__instance.Data.RoleType == RoleTypes.Viper)
{
EACR.PlayAnimationCheat(__instance);
return;
}
if (!GameManager.Instance.LogicOptions.GetVisualTasks())
{
{
EACR.PlayAnimationCheat(__instance);
return;
}
}
break;
}
}
}
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.SetScanner))]
public static class SetScannerPatch
{
public static void Prefix(PlayerControl __instance)
{
if (!AmongUsClient.Instance.AmHost || __instance == PlayerControl.LocalPlayer) return;
if (__instance.Data.RoleType == RoleTypes.Impostor ||
__instance.Data.RoleType == RoleTypes.Shapeshifter ||
__instance.Data.RoleType == RoleTypes.Phantom ||
__instance.Data.RoleType == RoleTypes.Viper)
{
EACR.PlayAnimationCheat(__instance);
return;
}
if (!GameManager.Instance.LogicOptions.GetVisualTasks() && __instance != PlayerControl.LocalPlayer)
{
{
EACR.PlayAnimationCheat(__instance);
return;
}
}
}
}
+22 -3
View File
@@ -18,7 +18,7 @@ public static class SabotageSystemTypeRepairDamagePatch
var Sabo = (SystemTypes)amount;
Logger.Info($" {player.Data.PlayerName} is trying to sabotage: {Sabo}", "SabotageCheck");
if (Options.Gamemode.GetValue() == 0 || Options.Gamemode.GetValue() == 1)
if (Options.Gamemode.GetValue() == 0)
{
if (Sabo == SystemTypes.LifeSupp && Options.DisableOxygen.GetBool() ||
Sabo == SystemTypes.Reactor && Options.DisableReactor.GetBool() ||
@@ -26,6 +26,7 @@ public static class SabotageSystemTypeRepairDamagePatch
Sabo == SystemTypes.Comms && Options.DisableComms.GetBool() ||
Sabo == SystemTypes.HeliSabotage && Options.DisableHeli.GetBool() ||
Sabo == SystemTypes.MushroomMixupSabotage && Options.DisableMushroomMixup.GetBool() ||
Sabo == SystemTypes.Laboratory && Options.DisableReactor.GetBool() && msgReader != null ||
player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool())
{
Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SabotageCheck");
@@ -34,7 +35,7 @@ public static class SabotageSystemTypeRepairDamagePatch
return true;
}
if (Options.Gamemode.GetValue() == 2)
if (Options.Gamemode.GetValue() == 1)
{
if (Sabo == SystemTypes.LifeSupp && Options.SNSDisableOxygen.GetBool() ||
Sabo == SystemTypes.Reactor && Options.SNSDisableReactor.GetBool() ||
@@ -42,6 +43,24 @@ public static class SabotageSystemTypeRepairDamagePatch
Sabo == SystemTypes.Comms && Options.SNSDisableComms.GetBool() ||
Sabo == SystemTypes.HeliSabotage && Options.SNSDisableHeli.GetBool() ||
Sabo == SystemTypes.MushroomMixupSabotage && Options.SNSDisableMushroomMixup.GetBool() ||
Sabo == SystemTypes.Laboratory && Options.SNSDisableReactor.GetBool() && msgReader != null ||
player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool())
{
Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SnSSabotageCheck");
return false;
}
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");
@@ -62,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.Gamemode.GetValue() == 2 && 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;
-6
View File
@@ -163,12 +163,6 @@ internal static class RpcSetTasksPatch
int numLongTasks = Main.NormalOptions.NumLongTasks;
int numShortTasks = Main.NormalOptions.NumShortTasks;
if (AbilityManagement.IsSpeedrunner(pc))
{
numLongTasks = Options.SpeedrunnerLongTasks.GetInt();
numShortTasks = Options.SpeedrunnerShortTasks.GetInt();
}
if (taskTypeIds.Length == 0) hasCommonTasks = false;
switch (hasCommonTasks)
+26 -9
View File
@@ -1,20 +1,37 @@
namespace AmongUsRevamped;
using AmongUs.GameOptions;
//Old Patch for Mayor
namespace AmongUsRevamped;
/*
[HarmonyPatch(typeof(Vent), nameof(Vent.EnterVent))]
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 (CustomRoleManagement.PlayerRoles.TryGetValue(pc.PlayerId, out var role) && role == "Mayor")
if (pc.Data.RoleType != RoleTypes.Impostor &&
pc.Data.RoleType != RoleTypes.Shapeshifter &&
pc.Data.RoleType != RoleTypes.Phantom &&
pc.Data.RoleType != RoleTypes.Viper &&
pc.Data.RoleType != RoleTypes.Engineer &&
!pc.Data.IsDead)
{
pc.CmdReportDeadBody(null);
Logger.Info($" The Mayor, {pc.Data.PlayerName}, called a meeting by venting", "EnterVent");
EACR.VentCheat(pc, __instance);
}
if (__instance.Id > 15)
{
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;
}
}
+53 -43
View File
@@ -9,6 +9,14 @@
<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>
<a href="../../releases">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/total?style=for-the-badge&color=red">
</a>
<a href="../../releases/latest">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/latest/total?style=for-the-badge">
</a>
</p>
@@ -29,49 +37,32 @@
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
‎
# 🎮 Features (v1.7.6):
## <b> 🌟 Custom Abilities:</b>
- Mayor (Crewmate)
- The Mayor has a configurable amount of extra votes
- Jester (Crewmate)
- The Jester wins alone by getting ejected, can win with Crewmates
- Tasker (Crewmate)
- The Crewmates win if the Tasker completes tasks and is alive
- Workhorse (Crewmate)
- The Workhorse gains additional votes per completed task
- Tyrant (Impostor)
- The Tyrant has a configurable amount of extra votes
- Stealer (Impostor)
- The Stealer gains additional votes per kill
- Juggernaut (Impostor)
- The Impostors win if the Juggernaut gains a set amount of kills
- For the enabled ability list, type /r
- To check ability descriptions, type /r {ability}
# 🎮 Features (v2.0.2):
## <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
- Customizable strings
- 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
- Multi layer moderator system
- To add Admins, Moderators and VIP's, type the user's Friendcode in the designated files located in AUR-DATA
- Denyword and Denyname system
- Advanced Moderator system
- 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>
- Automatically start game
- Full Autohost and Rehost support
- Automatically rejoin lobby
- Automatically send winner info
- Enable (configurable) Welcome Messages
- The Welcome Template is in Templates.txt
- Automatically Send Map Votes
- Enable (configurable) Welcome Messages from Templates.txt
## <b>🔧 Gameplay Settings:</b>
- Dead impostors can sabotage
- Disable critical sabotages (invividual)
@@ -83,22 +74,35 @@
- % 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
- 0 Kill Cooldown -> Set Kill Cooldown to 0.01
- Shift and Seek
- Poof and Seek
- Speedrun
## <b>👾 Custom Anticheat:</b>
- Detect invalid sabotages
- Detect malformed RPC's
- Detect invalid venting
- Detect Invalid animations
- Detect Invalid task completions
- Detect immortality cheats
- Block attempted votekicks
- These are all enabled by default
## <b>❓ Other Improvements:</b>
- Command Helper
- Lanuage support: English, Italian, Japanese, Russian, Simplified Chinese, Spanish
- Select a language in Language/YourLanguage.txt
- Preset system for mod settings
- Creatable and customizable Templates
- Eht Dleks (Reverse Skeld) Map
- Ability to cancel starting countdown
- Improved main menu
- Faster startup time
- Custom anticheat system
- 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
- <b>🎉 And this all works in public lobbies!</b>
### Hotkeys
@@ -118,26 +122,32 @@
| /help | Show command help |
| /l<br>/lastgame | Send last game info |
| /r | Send current gamemode/roles description |
| /r <ability> | Send specific Ability info |
| /0kc<br>/sns</br>/sp | Send respective gamemode description |
| /ban <name> | Ban a player by name |
| /kick <name> | Kick a player by name |
| /cban <color> | Ban a player by color |
| /ckick <color> | Kick a player by color |
| /ban {name} | Ban a player by name |
| /kick {name} | Kick a player by name |
| /cban {color} | Ban a player by color |
| /ckick {color} | Kick a player by color |
| /dump | Copy your LogOutput file |
| /eg<br>/endgame | Instantly end an ongoing game |
| /em<br>/endmeeting | Instantly end an ongoing meeting |
| /aur<br>/socials | Send AUR socials (GitHub, Discord) |
| /col<br>/color | Set color. Can be used to bypass color limit |
| /reload | Reset the *Language*.JSON file to default |
| /s<br/start | Start game countdown |
| /s<br>/start | Start game countdown |
| /vip<br>/moderator<br>/admin | Add a user to respective list by name |
| /t <template> | Send a Template from Templates.txt |
| /t {template} | Send a Template from Templates.txt |
| /seeker {name} | Manually adds someone as Seeker in HnS |
| /seekers | Shows manual Seeker list in HnS |
| /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:**
### :star: [AUnlocker](https://github.com/astra1dev/AUnlocker)
> - Original NumberOptionsPatch
> - Always Show Lobby Timer
### :star: [EHR (Formerly TOHE+)](https://github.com/Gurge44/EndlessHostRoles)
> - Task Patching
### :star: [TOH](https://github.com/tukasa0001/TownOfHost) :
+104 -80
View File
@@ -2,63 +2,80 @@
"LanguageID": "0",
"gameMaster": "Game Master",
"unlockFPS": "Unlock FPS",
"showFPS": "Show FPS",
"autoStart": "Auto Start",
"enableDarkTheme": "Enable Dark Theme",
"enableLobbyMusic": "Lobby Music",
"disableInfoWhenDead": "Hide Info When Dead",
"disableCommandHelper": "Disable Command Helper",
"disableCompatibilityWarning": "Disable Compatibility Warning",
"gameMasterWarning":"You will now spectate games until Game Master is turned off.",
"gameMasterWarning":"You will now spectate games until Game Master is turned off. WARNING: Role assigning might be inaccurate if this setting is enabled.",
"cancelStartCountdown": "Start countdown canceled",
"invalidFriendCodeKick": "{0} was kicked for having an invalid Friendcode",
"invalidFriendCodeBan": "{0} was banned for having an invalid Friendcode",
"language": "Language (Requires Restart)",
"gamemode": "Gamemode",
"tabGroupMain": "Moderation",
"tabGroupLevelKick": "Level Moderation",
"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",
"kickInvalidFriendCodes": "Kick Invalid FriendCodes",
"tabGroupKickInvalidFriendCodes": "Invalid Friendcodes",
"kickInvalidFriendCodes": "Kick Invalid (Empty) Friendcodes",
"tempBanInvalidFriendCodes": "Ban Instead Of Kick",
"applyBanList": "Apply BanList",
"applyDenyNameList": "Apply DenyName List",
"applyModeratorList": "Apply Moderator List",
"deniedWordsToKick": "Sent Denied Words To Kick Player",
"moderatorCanUseCommand": "Moderators can use commands",
"tabGroupAutoKickStart": "Start Words",
"autoKickStart": "Kick Players Who Say Start",
"autoKickStartAsBan": "Ban Instead Of Kick",
"autoKickStartTimes": "Start messages needed to kick",
"autoKickStartTimes": "Sent Start Words To Kick Player",
"autoKickStartStrength": "Strict detection mode",
"tabGroupAutomation": "Automation",
"autoSendGameInfo": "Automatically send winner info",
"autoRejoinLobby": "Auto Rejoin Lobby",
"tabGroupAutostart": "Autohost",
"autoStartTimer": "Countdown For Auto Start",
"waitAutoStart": "Auto Start After",
"playerAutoStart": "Players Needed To Auto Start",
"rehost": "Automatically Recreate Lobby On Disconnect",
"public": "Automatically Publicize New Lobby",
"enableJoinMessages": "Enable Welcome Messages",
"messagePerPlayerNum": "Message Per Amount Of Joins",
"tabGroupMisc": "Miscelleneous",
"tabGroupMisc": "Experimental",
"startCountdown": "Default Starting Countdown",
"colorCommandLevel": "Who Can use Color Commands",
"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",
"tabGroupAccess": "Access Levels",
"slashColorCmd": "Who Can Use /color",
"slashRolesAndGamemodeCmd": "Who Can Use /r And Templates",
"slashLastGameCmd": "Who Can Use /l",
"slashHelpAndAurCmd": "Who Can Use /help And /aur",
"slashKickCmd": "Who Can Use /kick And /ckick",
"slashBanCmd": "Who Can Use /ban And /cban",
"slashRolesAndGamemodeCmd": "Who Can Use /r & Templates",
"slashLastGameCmd": "Who Can Use /l & /aur",
"slashMapAndSeekerCmd": "Who Can Use /seeker & Create Votes",
"slashKickCmd": "Who Can Use /kick & /ckick",
"slashBanCmd": "Who Can Use /ban & /cban",
"slashEndMeetingCmd": "Who Can Use /endmeeting",
"slashStartAndEndGameCmd": "Who Can Use /startgame And /endgame",
"slashStartAndEndGameCmd": "Who Can Use /startgame & /endgame",
"tabGroupCrewmate": "Crewmate Roles",
"tabGroupNeutral": "Neutral Roles",
"tabGroupImpostor": "Impostor Roles",
"tabGroupStandard": "Standard",
"chatBeforeFirstMeeting": "Force chat 1st round to see roles (experimental)",
"tabGroupHNS": "Hide and Seek",
"numSeekers": "# Seekers",
@@ -66,6 +83,9 @@
"noKcdSettingsOverride": "Auto Update Settings",
"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",
@@ -95,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)",
@@ -121,7 +143,6 @@
"disableAirshipCamera": "Disable Airship Camera",
"disableAirshipVital": "Disable Airship Vitals",
"disableFungleDevices": "Disable Fungle Devices",
"disableFungleCamera": "Disable Fungle Camera",
"disableFungleVital": "Disable Fungle Vitals",
"tabGroupTasks": "Tasks",
@@ -218,69 +239,9 @@
"disableSubmitScan": "Disable Submit Scan",
"disableUploadData": "Disable Upload Data",
"noKcdMode": "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!",
"SnSModeOne": "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off",
"SnSModeTwo": "Crew wins by tasks/surviving {0}s\nImp wins by killing\nOne wrong kill = Can't kill for {1}s\n{2} wrong kill(s) = suicide",
"speedrunMode": "Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {0}s",
"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.",
"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 or ability list.\n<b>/r {ability}</b>\nSend specific ability info.\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.",
"socialsAll": "AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c o r d . g g /\n83Zhzhyhya",
"translationReloaded": "Your file has successfully been reset.\nTo apply the changes, restart your game.",
"mayorPublic": "Mayor:\n\nThe Mayor is a Crewmate with {0} additional vote(s). Use them wisely.",
"tyrantPublic": "Tyrant:\n\nThe Tyrant is an Impostor with {0} additional vote(s). Use them wisely.",
"juggernautPublic": "Juggernaut:\n\nThe Impostors instantly win if the Juggernaut gains {0} kills.",
"speedrunnerPublic": "Tasker:\n\nThe Crewmates win if the Tasker completes tasks and is alive. The Tasker has more tasks.",
"stealerPublic": "Stealer:\n\nThe Stealer gains {0} additional vote(s) per killed player. Votes are rounded down.",
"workhorsePublic": "Workhorse:\n\nThe Workhorse gains {0} additional vote(s) per completed task. Votes are rounded down.",
"jesterPublic": "Jester:\n\nThe Jester is a Crewmate who can also win alone by getting voted.",
"customRoleAnnouncement": "Custom Roles are enabled!\n\nIf you have a Custom Role, it will show in a message below this one.",
"tabGroupCrewmateAbilities": "Crewmate Ability Settings",
"crewmateAbility": "Crewmate (Role) Ability",
"scientistAbility": "Scientist Ability",
"engineerAbility": "Engineer Ability",
"noisemakerAbility": "Noisemaker Ability",
"trackerAbility": "Tracker Ability",
"detectiveAbility": "Detective Ability",
"extraVotesCrewmate": "Extra Votes For Mayor",
"extraVotesPerTask": "Extra Votes Per Task For Workhorse",
"speedrunnerShortTasks": "Short Tasks For Tasker",
"speedrunnerLongTasks": "Long Tasks For Tasker",
"tabGroupImpostorAbilities": "Impostor Ability Settings",
"impostorAbility": "Impostor (Role) Ability",
"shapeshifterAbility": "Shapeshifter Ability",
"phantomAbility": "Phantom Ability",
"viperAbility": "Viper Ability",
"extraVotesImpostor": "Extra Votes For Tyrant",
"extraVotesPerKill": "Extra Votes Per Kill For Stealer",
"killsNeededForJuggernaut": "Kills Needed For Juggernaut",
"youAreMayor": "Your Ability: Mayor\n\nYou are a Crewmate with {0} additional vote(s). Use them wisely.",
"youAreJester": "Your Ability: Jester\n\nYou can optionally win alone by getting voted, you are still a Crewmate.",
"youAreSpeedrunner": "Your Ability: Tasker\n\nThe Crewmates win if you complete tasks while being alive. You have more tasks.",
"youAreTyrant": "Your Ability: Tyrant\n\nYou are an Impostor with {0} additional vote(s). Use them wisely.",
"youAreStealer": "Your Ability: Stealer\n\nYou gain {0} additional vote(s) per killed player. Votes are rounded down.",
"youAreWorkhorse": "Your Ability: Workhorse\n\nYou gain {0} additional vote(s) per completed task. Votes are rounded down.",
"youAreJuggernaut": "Your Ability: Juggernaut\n\nThe Impostor team instantly wins if you gain {0} kills.",
"jesterWin": "Jester wins! (voted)\n\nImpostors: ",
"speedrunnerWin": "Crewmates win! (Tasker finished tasks)\n\nImpostors: ",
"juggernautWin": "Impostors win! (Juggernaut killed {0} players)\n\nImpostors: ",
"crewmateWin": "Crewmates Win!\n\nImpostors: ",
"impostorWin": "Impostors Win!\n\nImpostors: ",
"crewmateWinTasks": "Crewmates Win! ({0}% tasks completed)\n\nImpostors: ",
"impostorWinMisc": "Impostors Win! (Sabotage)\n\n Impostors: ",
"ability": "Ability",
"translationReloaded": "Your file has successfully been reset.\nTo apply all changes, restart your game.",
"templateWelcome": "# In this file you can add Templates, which serve as easy copy-paste alternatives.\n# To create a template, write a new line with the same formatting as the test Template below.\n# Note that Templates can't be longer than 120 characters and can't contain special characters. Having so will kick you.\n\ntest: this is an example template. Type '/t test' to see it.\n\nwelcome: Welcome! This lobby uses Among Us Revamped {ModVersion} by MV. Enjoy!",
"moderatorWelcome": "# In this file you can add Moderators by Friendcode.\n# If you add someone, they will gain a purple name in-game.\n# Go to 'System Settings' in-game to customize Moderator permissions. Below is a Friendcode example.\n\nfriendcode#0000",
@@ -289,8 +250,10 @@
"banlistWelcome": "# In this file you can ban players from your lobby by Friendcode.\n# Banning someone in-game will automatically add them here as well. Below is a Friendcode example.\n\nfriendcode#0000\n",
"banwordWelcome": "# In this file you can set denied words, automatically kicking anyone in-game who sends words listed here.\n# Make sure to separate words by using new lines.",
"bannameWelcome": "# In this file you can set denied names, automatically kicking anyone in-game who uses names listed here.\n# Make sure to separate names by using new lines.",
"startWordsWelcome": "# In this file you can set the detected words for 'Kick Players Who Say Start'.\n# 'Strict Detection Mode' OFF = Messages have to exactly match words. 'Strict Detection Mode' ON = Messages only have to contain words.\n# You can put unrelated words in as well in order to detect them only in lobby.\n\nstart\nbegin\ncommence",
"noGameEndWarning": "WARNING: No Game End is enabled",
"gameMasterWarningTwo": "WARNING: Game Master is enabled",
"tooLongTemplate": "Your Template is longer than 120 characters and would kick you upon sending. Please reduce the length.",
@@ -304,13 +267,15 @@
"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.",
"sDesc": "Start the game countdown.",
"rDesc": "/r send active abilities or current gamemode. /r {ability} send specific ability info",
"rDesc": "Sends current gamemode description.",
"rolesDesc": "Send all abilities/gamemode overview.",
"kickDesc": "Kick a player by name.",
"ckickDesc": "Kick a player by color.",
@@ -326,5 +291,64 @@
"removeModeratorDesc": "Remove Moderator from user.",
"removeAdminDesc": "Remove Admin from user.",
"lastgameDesc": "Send last game info.",
"templateDesc": "Send a specified template from AUR-DATA/templates.txt."
"templateDesc": "Send a specified template from AUR-DATA/templates.txt.",
"seekerDesc": "Adds player as Seeker in HnS.",
"seekersDesc": "Shows all manually selected Seekers.",
"clearSeekerDesc": "Clears the manual Seeker list.",
"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)",
"banWordBan": "{0} was banned because they sent a word in DeniedWords.txt {1} time(s)",
"startWordBan": "{0} was banned because they sent a word in StartWords.txt {1} time(s)",
"pluginWarning": "<color=red><size=5><b>WARNING:</color></b></size>\n<size=3><b>You have 2 or more detected Plugins.</size></b>\nAmong Us Revamped is not compatible with most mods.\nIf you find bugs, they are most likely due to incompatibility.",
"systemSettings": "System Settings",
"moderationSettings": "Moderation Settings",
"gameplaySettings": "Gameplay Settings",
"gamemodeSettings": "Gamemode Settings",
"systemSettingsDesc": "Quality settings to improve comfort and testing.",
"moderationSettingsDesc": "Moderation settings to combat toxicity and misconduct.",
"gameplaySettingsDesc": "Gameplay settings to improve the in-game experience.",
"gamemodeSettingsDesc": "Situational settings to apply for specific gamemodes.",
"everyone": "Everyone",
"vipAndAbove": "<color=yellow>VIP</color> And Above",
"moderatorAndAbove": "<color=purple>Moderator</color> And Above",
"admin": "<color=red>Admin</color>",
"onlyYou": "Only You",
"seekers": "Seekers: ",
"clearedSeekers": "Successfully cleared the manual Seeker list.",
"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"
}
+345
View File
@@ -0,0 +1,345 @@
{
"LanguageID": "1",
"gameMaster": "Spettatore",
"showFPS": "Mostra FPS",
"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à",
"cancelStartCountdown": "Conto alla rovescia annullato",
"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": "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 informazioni sui vincitori",
"autoRejoinLobby": "Rientra automaticamente nella lobby",
"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 & 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 Astronauti",
"tabGroupNeutral": "Ruoli Neutrali",
"tabGroupImpostor": "Ruoli Impostori",
"tabGroupStandard": "Standard",
"tabGroupHNS": "Nascondino",
"numSeekers": "# Cercatori",
"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 Impostazioni",
"gameAutoEndsAfter": "La partita finisce automaticamente dopo",
"engineerMode": "Tutti Ingegneri",
"tabGroupSabotages": "Sabotaggi",
"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": "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 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": "Stessi incarichi per tutti",
"overrideTaskSettings": "Disabilita incarichi",
"taskPercentNeededToWin": "% di Incarichi completati per la vittoria degli astronauti",
"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 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 Incarichi su Airship",
"disableCleanToilet": "Disabilita Pulisci Bagno",
"disableDecontaminate": "Disabilita Decontamina",
"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 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 Incarichi Comuni",
"disableEnterIdCode": "Disabilita Inserisci Codice ID",
"disableFixWiring": "Disabilita Ripara Cavi",
"disableSwipeCard": "Disabilita Passa la Carta",
"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 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 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 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 di lingua è stato ricaricato con successo.\nPer applicare tutte le modifiche, riavvia il gioco.",
"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": "ATTENZIONE: L'impostazione 'Nessuna Fine Partita' è Abilitata",
"tooLongTemplate": "Il tuo template supera i 120 caratteri e verrai kickato se viene inviato. Per favore, riducine la lunghezza.",
"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 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": "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 kickato per aver inviato una parola vietata {1} volta/e",
"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à",
"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>Moderatore</color> E Superiori",
"admin": "<color=red>Admin</color>",
"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"
}
+353
View File
@@ -0,0 +1,353 @@
{
"LanguageID": "4",
"gameMaster": "ゲームマスター",
"showFPS": "FPSを表示",
"autoStart": "自動スタート",
"enableDarkTheme": "ダークテーマを有効化",
"enableLobbyMusic": "ロビーBGM",
"disableInfoWhenDead": "死亡時に情報を非表示",
"disableCommandHelper": "コマンドヘルパーを無効化",
"disableCompatibilityWarning": "互換性警告を無効化",
"gameMasterWarning": "ゲームマスターをオフにするまで観戦モードになります。警告: この設定が有効な場合、役職の割り当てが正確に行われない可能性があります。",
"cancelStartCountdown": "カウントダウンがキャンセルされました",
"invalidFriendCodeKick": "{0} は無効なフレンドコードのためキックされました",
"invalidFriendCodeBan": "{0} は無効なフレンドコードのためBANされました",
"language": "言語 (再起動が必要)",
"gamemode": "ゲームモード",
"tabGroupMain": "モデレーション",
"kickLowLevelPlayer": "指定レベル未満のプレイヤーをキック",
"tempBanLowLevelPlayer": "キックの代わりにBAN",
"dontKickLevelOnes": "Lv.1プレイヤーをキックしない (バグロビー対策)",
"kickInvalidFriendCodes": "無効(空欄)なフレンドコードをキック",
"tempBanInvalidFriendCodes": "キックの代わりにBAN",
"deniedWordsToKick": "NGワード送信者をキック",
"moderatorCanUseCommand": "モデレーターのコマンド使用を許可",
"autoKickStart": "「Start/開始」と発言したプレイヤーをキック",
"autoKickStartAsBan": "キックの代わりにBAN",
"autoKickStartStrength": "厳格検出モード",
"tabGroupAutomation": "自動化",
"autoSendGameInfo": "勝者情報を自動送信",
"autoRejoinLobby": "ロビーへ自動再参加",
"autoStartTimer": "自動スタートのカウントダウン",
"waitAutoStart": "自動スタートまでの待機時間",
"playerAutoStart": "自動スタートに必要な人数",
"enableJoinMessages": "参加歓迎メッセージを有効化",
"messagePerPlayerNum": "指定参加人数ごとの通知",
"tabGroupMisc": "実験的",
"startCountdown": "デフォルトのカウントダウン",
"colorCommandLevel": "カラーコマンドの使用権限",
"allowFortegreen": "フォルテグリーン色を許可",
"noGameEnd": "ゲーム終了なし",
"tabGroupAccess": "アクセス権限",
"slashColorCmd": "/color の使用権限",
"slashRolesAndGamemodeCmd": "/r & テンプレート の使用権限",
"slashLastGameCmd": "/l & /aur の使用権限",
"slashKickCmd": "/kick & /ckick の使用権限",
"slashBanCmd": "/ban & /cban の使用権限",
"slashEndMeetingCmd": "/endmeeting & /seeker の使用権限",
"slashStartAndEndGameCmd": "/startgame & /endgame の使用権限",
"tabGroupCrewmate": "クルー役職",
"tabGroupNeutral": "第三陣営役職",
"tabGroupImpostor": "インポスター役職",
"tabGroupStandard": "ノーマル",
"tabGroupHNS": "かくれんぼ (Hide and Seek)",
"numSeekers": "鬼の人数",
"tabGroup0Kcd": "キルクールダウン0秒",
"noKcdSettingsOverride": "設定を自動更新",
"tabGroupSNS": "シェイプ&シーク (Shift and Seek)",
"snsChatInGame": "ゲーム中のチャットを許可 (ベータ機能)",
"snsSettingsOverride": "設定を自動更新",
"cantKillTime": "お手付き後のキル不可時間",
"misfiresToSuicide": "指定回数のお手付きで自滅",
"crewAutoWinsGameAfter": "クルーの自動勝利カウントダウン",
"snsDisableSabotage": "SnS緊急サボタージュを無効化",
"snsDisableReactor": "リアクターサボタージュを無効化",
"snsDisableOxygen": "O2サボタージュを無効化",
"snsDisableLights": "停電サボタージュを無効化",
"snsDisableComms": "通信妨害サボタージュを無効化",
"snsDisableHeli": "墜落危険サボタージュを無効化",
"snsDisableMushroomMixup": "キノコシャッフルサボタージュを無効化",
"snsDisableCloseDoor": "SnSドア閉鎖を無効化",
"tabGroupSpeedrun": "スピードラン",
"speedrunSettingsOverride": "設定を自動更新",
"gameAutoEndsAfter": "ゲームの自動終了時間",
"engineerMode": "全員エンジニア",
"tabGroupSabotages": "サボタージュ設定",
"deadImpostorsCanSabotage": "幽霊インポスターのサボタージュを許可",
"disableSabotage": "緊急サボタージュを無効化",
"disableReactor": "リアクターサボタージュを無効化",
"disableOxygen": "O2サボタージュを無効化",
"disableLights": "停電サボタージュを無効化",
"disableComms": "通信妨害サボタージュを無効化",
"disableHeli": "墜落危険サボタージュを無効化",
"disableMushroomMixup": "キノコシャッフルサボタージュを無効化",
"disableCloseDoor": "ドア閉鎖を無効化",
"tabGroupGameplayGeneral": "一般ゲーム設定",
"disableAnnoyingMeetingCalls": "開始30秒間の緊急会議召集を禁止",
"disableReport": "通報を無効化",
"changeDecontaminationTime": "除染時間を変更 (ノーマル限定)",
"decontaminationTimeOnMiraHQ": "MIRA HQ 除染所要時間",
"decontaminationDoorOpenTimeOnMiraHQ": "MIRA HQ 除染ドア開放時間",
"decontaminationTimeOnPolus": "Polus 除染所要時間",
"decontaminationDoorOpenTimeOnPolus": "Polus 除染ドア開放時間",
"disableSporeTrigger": "Fungleの胞子発生を無効化",
"disableDevices": "端末・設備を無効化",
"disableSkeldDevices": "The Skeld の設備を無効化",
"disableSkeldAdmin": "The Skeld アドミンを無効化",
"disableSkeldCamera": "The Skeld 防犯カメラを無効化",
"disableMiraHQDevices": "MIRA HQ の設備を無効化",
"disableMiraHQAdmin": "MIRA HQ アドミンを無効化",
"disableMiraHQDoorLog": "MIRA HQ ドアログを無効化",
"disablePolusDevices": "Polus の設備を無効化",
"disablePolusAdmin": "Polus アドミンを無効化",
"disablePolusCamera": "Polus 防犯カメラを無効化",
"disablePolusVital": "Polus バイタルを無効化",
"disableAirshipDevices": "The Airship の設備を無効化",
"disableAirshipCockpitAdmin": "The Airship 操縦室アドミンを無効化",
"disableAirshipRecordsAdmin": "The Airship 記録室アドミンを無効化",
"disableAirshipCamera": "The Airship 防犯カメラを無効化",
"disableAirshipVital": "The Airship バイタルを無効化",
"disableFungleDevices": "The Fungle の設備を無効化",
"disableFungleVital": "The Fungle バイタルを無効化",
"tabGroupTasks": "タスク設定",
"allPlayersSameTasks": "全員同じタスクを割り当て",
"overrideTaskSettings": "すべてのタスクを無効化",
"taskPercentNeededToWin": "クルー勝利に必要なタスク完了率(%)",
"disableMiraTasks": "MIRA HQ タスクを無効化",
"disableBuyBeverage": "「飲料の購入」を無効化",
"disableMeasureWeather": "「天気の測定」を無効化",
"disableProcessData": "「データの処理」を無効化",
"disableRunDiagnostics": "「診断の実行」を無効化",
"disableSortSamples": "「標本の仕分け」を無効化",
"disablePolusTasks": "Polus タスクを無効化",
"disableActivateWeatherNodes": "「気象ノードの有効化」を無効化",
"disableAlignTelescope": "「望遠鏡の整列」を無効化",
"disableFillCanisters": "「キャニスターへの充填」を無効化",
"disableInsertKeys": "「鍵の挿入」を無効化",
"disableOpenWaterways": "「水路を開く」を無効化",
"disableRebootWifi": "「Wi-Fiの再起動」を無効化",
"disableRepairDrill": "「ドリルの修理」を無効化",
"disableScanBoardingPass": "「搭乗券のスキヤン」を無効化",
"disableAirshipTasks": "The Airship タスクを無効化",
"disableCleanToilet": "「トイレの掃除」を無効化",
"disableDecontaminate": "「除染」を無効化",
"disableDevelopPhotos": "「写真の現像」を無効化",
"disableDressMannequin": "「マネキンの着せ替え」を無効化",
"disableFixShower": "「シャワーの修理」を無効化",
"disableMakeBurger": "「バーガーの作成」を無効化",
"disablePickUpTowels": "「タオルを拾う」を無効化",
"disablePolishRuby": "「ルビーを磨く」を無効化",
"disablePutAwayPistols": "「拳銃の片付け」を無効化",
"disablePutAwayRifles": "「ライフルを片付ける」を無効化",
"disableRewindTapes": "「テープの巻き戻し」を無効化",
"disableResetBreakers": "「ブレーカーのリセット」を無効化",
"disableSortRecords": "「記録の整理」を無効化",
"disableStartFans": "「ファンを始動」を無効化",
"disableUnlockSafe": "「金庫の解錠」を無効化",
"disableFungleTasks": "The Fungle タスクを無効化",
"disableBuildSandcastle": "「砂の城を作る」を無効化",
"disableCatchFish": "「魚を捕まえる」を無効化",
"disableCollectSamples": "「標本の採取」を無効化",
"disableCollectShells": "「貝殻の採取」を無効化",
"disableCollectVegetables": "「野菜の収穫」を無効化",
"disableCrankGenerator": "「発電機を回す」を無効化",
"disableExtractFuel": "「燃料の抽出」を無効化",
"disableFixAntenna": "「アンテナの修理」を無効化",
"disableHelpCritter": "「生き物の救出」を無効化",
"disableHoistSupplies": "「物資の引き上げ」を無効化",
"disableLiftWeights": "「ウエイトリフティング」を無効化",
"disableMineOres": "「鉱石の採掘」を無効化",
"disablePlayVideoGame": "「ゲームを遊ぶ」を無効化",
"disablePolishGem": "「宝石を磨く」を無効化",
"disableReplaceParts": "「部品の交換」を無効化",
"disableRoastMarshmallow": "「マシュマロを焼く」を無効化",
"disableThrowFisbee": "「フリスビーを投げる」を無効化",
"disableFindSignal": "「信号を探す」を無効化",
"disableMiscCommonTasks": "共通タスクを無効化",
"disableEnterIdCode": "「IDコードの入力」を無効化",
"disableFixWiring": "「配線の修理」を無効化",
"disableSwipeCard": "「カードを通す」を無効化",
"disableMiscShortTasks": "ショートタスクを無効化",
"disableAssembleArtifact": "「アーティファクトの組み立て」を無効化",
"disableChartCourse": "「航路の確認」を無効化",
"disableCleanO2Filter": "「O2フィルターの清掃」を無効化",
"disableCleanVent": "「ベントの清掃」を無効化",
"disableMonitorMushroom": "「キノコの監視」を無効化",
"disableMonitorTree": "「木の監視」を無効化",
"disablePrimeShields": "「シールドの準備」を無効化",
"disableRecordTemperature": "「温度の記録」を無効化",
"disableStabilizeSteering": "「操舵の安定化」を無効化",
"disableStoreArtifacts": "「アーティファクトの保管」を無効化",
"disableUnlockManifolds": "「マニホールドの開錠」を無効化",
"disableMiscLongTasks": "ロングタスクを無効化",
"disableAlignEngineOutput": "「エンジン出力の調整」を無効化",
"disableClearAsteroids": "「小惑星の破壊」を無効化",
"disableEmptyChute": "「ダストシュートを空にする」を無効化",
"disableInspectSample": "「検体の検査」を無効化",
"disableReplaceWaterJug": "「給水ボトルの交換」を無効化",
"disableStartReactor": "「リアクターの起動」を無効化",
"disableWaterPlants": "「植物の水やり」を無効化",
"disableMiscMixedTasks": "ミックス(多段階)タスクを無効化",
"disableCalibrateDistributor": "「ディストリビューターの調整」を無効化",
"disableDivertPower": "「電力のバイパス」を無効化",
"disableEmptyGarbage": "「ゴミ捨て」を無効化",
"disableFuelEngines": "「エンジンへの給油」を無効化",
"disableSubmitScan": "「スキャンの送信」を無効化",
"disableUploadData": "「データのアップロード」を無効化",
"allCommandsFull": "<b>全コマンド一覧:</b>\n\n<b>/help</b>\nこのヘルプメッセージを表示します。\n<b>/aur, /socials</b>\nAmong Us Revamped のSNSリンクを送信します。\n\n<b>/r, /gm</b>\n現在のゲームモードの説明を送信します。\n<b>/l, /lastgame</b>\n前回の勝者情報を送信します。\n\n<b>/0kc, /0killcooldown</b>\nキルクール0秒モードの説明を送信します。\n<b>/sns, /shiftandseek</b>\nシェイプ&シークモードの説明を送信します。\n<b>/sp, /speedrun</b>\nスピードランモードの説明を送信します。\n\n/<b>kick, /ban</b>\n名前指定でプレイヤーをキック/BANします。\n<b>/ckick, /cban</b>\n色指定でプレイヤーをキック/BANします。\n\n<b>/vip /moderator /admin</b>\nプレイヤーをVIP、モデレーター、管理人に設定します。\n<b>/removevip, /removemoderator, /removeadmin</b>\nプレイヤーの権限を削除します。\n\n<b>/eg, /endgame</b>\n現在のゲームを強制終了します。\n<b>/em, /endmeeting</b>\n現在の会議を強制終了します。\n<b>/s, /start</b>\nゲーム開始のカウントダウンを開始します。\n\n<b>/t {template}</b>\nAUR-DATA/templates.txt から定型文を送信します。\n\n<b>/col, /color, /colour</b>\n自分の色を設定します(制限解除に使用可能)。",
"translationReloaded": "翻訳ファイルが正常にリセットされました。\n変更を適用するにはゲームを再起動してください。",
"templateWelcome": "# このファイルには定型文(テンプレート)を追加できます。\n# テンプレートを作成するには、下の例と同じフォーマットで新しい行を追加してください。\n# 注意: テンプレートは120文字を超えてはいけず、特殊文字も使用できません(送信時にキックされます)。\n\ntest: これはテンプレートの例です。'/t test' と入力して送信します。\n\nwelcome: ようこそ! このロビーは MV 作成の Among Us Revamped {ModVersion} を使用しています。お楽しみください!",
"moderatorWelcome": "# このファイルにはフレンドコードでモデレーターを追加できます。\n# 追加されたプレイヤーはゲーム内で名前が紫色で表示されます。\n# 権限のカスタマイズはゲーム内の「システム設定」で行えます。以下は記述例です。\n\nfriendcode#0000",
"vipWelcome": "# このファイルにはフレンドコードでVIPを追加できます。\n# 追加されたプレイヤーはゲーム内で名前が黄色で表示されます。\n# 権限のカスタマイズはゲーム内の「システム設定」で行えます。以下は記述例です。\n\nfriendcode#0000\n",
"adminWelcome": "# このファイルにはフレンドコードで管理人(Admin)を追加できます。\n# 追加されたプレイヤーはゲーム内で名前が赤色で表示されます。\n# 権限のカスタマイズはゲーム内の「システム設定」で行えます。以下は記述例です。\n\nfriendcode#0000\n",
"banlistWelcome": "# このファイルにフレンドコードを記述することでプレイヤーをBANリストに追加できます。\n# ゲーム内でBANしたプレイヤーも自動的にここへ追加されます。以下は記述例です。\n\nfriendcode#0000\n",
"banwordWelcome": "# このファイルではNGワードを設定できます。リスト内の単語を発言したプレイヤーは自動的にキックされます。\n# 単語ごとに改行して区切ってください。",
"bannameWelcome": "# このファイルではNGネームを設定できます。リスト内の名前を使用しているプレイヤーは自動的にキックされます。\n# 名前ごとに改行して区切ってください。",
"noGameEndWarning": "警告: 「ゲーム終了なし」が有効になっています",
"tooLongTemplate": "テンプレートが120文字を超えているため、送信するとキックされます。文字数を減らしてください。",
"vipAdd": "{0} をVIPに追加しました。",
"moderatorAdd": "{0} をモデレーターに追加しました。",
"adminAdd": "{0} を管理人に追加しました。",
"vipRemove": "{0} のVIP権限を削除しました。",
"moderatorRemove": "{0} のモデレーター権限を削除しました。",
"adminRemove": "{0} の管理人権限を削除しました。",
"permFail": "ユーザー '{0}' が見つかりませんでした。綴りが正しいか確認してください。",
"helpDesc": "すべてのコマンドと機能を表示します。",
"snsDesc": "シェイプ&シークモードの説明を送信します。",
"0kcDesc": "キルクール0秒モードの説明を送信します。",
"SrDesc": "スピードランモードの説明を送信します。",
"egDesc": "現在のゲームを強制終了します。",
"emDesc": "現在の会議を強制終了します。",
"aurDesc": "Among Us Revamped のSNSリンクを送信します。",
"sDesc": "ゲーム開始カウントダウンを開始します。",
"rDesc": "現在のゲームモードの説明を送信します。",
"rolesDesc": "すべての能力・モードの概要を送信します。",
"kickDesc": "名前指定でプレイヤーをキックします。",
"ckickDesc": "色指定でプレイヤーをキックします。",
"banDesc": "名前指定でプレイヤーをBANします。",
"cbanDesc": "色指定でプレイヤーをBANします。",
"dumpDesc": "LogOutputを別のファイルにコピーします。",
"colDesc": "自分の色を変更します。",
"reloadDesc": "言語ファイルを再読み込みします。",
"vipDesc": "ユーザーをVIPに追加します。",
"moderatorDesc": "ユーザーをモデレーターに追加します。",
"adminDesc": "ユーザーを管理人に追加します。",
"cremoveVipDesc": "ユーザーからVIP権限を削除します。",
"removeModeratorDesc": "ユーザーからモデレーター権限を削除します。",
"removeAdminDesc": "ユーザーから管理人権限を削除します。",
"lastgameDesc": "前回のゲーム情報を送信します。",
"templateDesc": "AUR-DATA/templates.txt から指定のテンプレートを送信します。",
"seekerDesc": "かくれんぼでプレイヤーを鬼(Seeker)に指定します。",
"banWordKick": "{0} は DeniedWords.txt に登録されたNGワードを {1} 回送信したためキックされました",
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>複数のプラグイン(Mod)が検出されました。</size></b>\nAmong Us Revamped は他の多くのMODと互換性がありません。\nバグが発生する場合、そのほとんどはMod間の競合によるものです。",
"systemSettings": "システム設定",
"gameplaySettings": "ゲームプレイ設定",
"gamemodeSettings": "ゲームモード設定",
"systemSettingsDesc": "快適性やテスト作業を向上させる各種設定。",
"gameplaySettingsDesc": "局内の体験を向上させるゲームプレイ設定。",
"gamemodeSettingsDesc": "特定モード用に適用する状況別の設定。",
"everyone": "全員",
"vipAndAbove": "<color=yellow>VIP</color> 以上",
"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を送信した回数でキック",
"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 を実行"
}
+354
View File
@@ -0,0 +1,354 @@
{
"LanguageID": "5",
"gameMaster": "Наблюдатель",
"showFPS": "Показать FPS",
"autoStart": "Авто Старт",
"enableDarkTheme": "Включить Тёмную Тему",
"enableLobbyMusic": "Музыка Лобби",
"disableInfoWhenDead": "Скрывать Информацию После Смерти",
"disableCommandHelper": "Выключить Командного Помощника",
"disableCompatibilityWarning": "Выключить Предупреждение Совместимости",
"cancelStartCountdown": "Отсчёт до старта отменён",
"invalidFriendCodeKick": "{0} был кикнут из-за неправильного Кода друга",
"invalidFriendCodeBan": "{0} был забанен из-за неправильного Кода друга",
"language": "Язык (Нужен Перезапуск)",
"gamemode": "Режим",
"tabGroupMain": "Модерация",
"kickLowLevelPlayer": "Кикать Игроков Ниже Уровня",
"tempBanLowLevelPlayer": "Банить вместо кика",
"dontKickLevelOnes": "Не кикать Игроков Ур.1 В Глитчнутых Лобби",
"kickInvalidFriendCodes": "Кикать Неправильные (Пустые) Коды друзей",
"tempBanInvalidFriendCodes": "Банить вместо кика",
"deniedWordsToKick": "Отправленных Запрещённых Слов Чтобы Кикнуть Игрока",
"moderatorCanUseCommand": "Модераторы Могут Использовать Команды",
"autoKickStart": "Кикать Игроков Которые Говорят Start",
"autoKickStartAsBan": "Банить вместо кика",
"autoKickStartStrength": "Режим строгого обнаружения",
"tabGroupAutomation": "Автоматизация",
"autoSendGameInfo": "Автоматически отправлять информацию о победителях",
"autoRejoinLobby": "Автоматически перезаходить в лобби",
"autoStartTimer": "Отсчёт Для Авто Старта",
"waitAutoStart": "Авто Старт После",
"playerAutoStart": "Игроков Нужно Для Авто Старта",
"enableJoinMessages": "Включить Сообщение С Приветствиями",
"messagePerPlayerNum": "Сообщение Каждые # Заходов",
"tabGroupMisc": "Экспериментальное",
"startCountdown": "Отсчёт Для Старта По Умолчанию",
"colorCommandLevel": "Кто Может использовать Команды Цветов",
"allowFortegreen": "Разрешить Фортезелёный Цвет",
"noGameEnd": "Без Конца Игры",
"tabGroupAccess": "Уровни Доступа",
"slashColorCmd": "Кто Может Использовать /color",
"slashRolesAndGamemodeCmd": "Кто Может Использовать /r & Templates",
"slashLastGameCmd": "Кто Может Использовать /l & /aur",
"slashKickCmd": "Кто Может Использовать /kick & /ckick",
"slashBanCmd": "Кто Может Использовать /ban & /cban",
"slashStartAndEndGameCmd": "Кто Может Использовать /startgame & /endgame",
"tabGroupCrewmate": "Роли Экипажа",
"tabGroupNeutral": "Роли Нейтралов",
"tabGroupImpostor": "Роли Предателей",
"tabGroupStandard": "Стандарт",
"tabGroupHNS": "Прятки",
"numSeekers": "# Искателей",
"tabGroup0Kcd": "0 Перезарядка Убийств",
"noKcdSettingsOverride": "Автоматически Обновлять Настройки",
"tabGroupSNS": "Клон",
"snsChatInGame": "Чат во время игры (экспериментальное)",
"snsSettingsOverride": "Автоматически Обновлять Настройки",
"cantKillTime": "После Осечки Нельзя Убивать В Течение",
"misfiresToSuicide": "Самоубийство После Количества Осечек",
"crewAutoWinsGameAfter": "Экипаж Автоматически Побеждает После",
"snsDisableSabotage": "Выключить Критические Саботажи в Режиме Клона",
"snsDisableReactor": "Выключить Сабботаж Реактора",
"snsDisableOxygen": "Выключить Сабботаж O2",
"snsDisableLights": "Выключить Сабботаж Света",
"snsDisableComms": "Выключить Сабботаж Связи",
"snsDisableHeli": "Выключить Сабботаж Столкновения",
"snsDisableMushroomMixup": "Выключить Сабботаж Грибного Переполоха",
"snsDisableCloseDoor": "Выключить Сабботаж Дверей в Режиме Клона",
"tabGroupSpeedrun": "Спидран",
"speedrunSettingsOverride": "Автоматически Обновлять Настройки",
"gameAutoEndsAfter": "Игра автоматически заканчивается после",
"engineerMode": "Все Инженеры",
"tabGroupSabotages": "Саботажи",
"deadImpostorsCanSabotage": "Умершие Предатели Могут Саботировать",
"disableSabotage": "Выключить Критические Саботажи",
"disableReactor": "Выключить Сабботаж Реактора",
"disableOxygen": "Выключить Сабботаж O2",
"disableLights": "Выключить Сабботаж Света",
"disableComms": "Выключить Сабботаж Связи",
"disableHeli": "Выключить Сабботаж Столкновения",
"disableMushroomMixup": "Выключить Сабботаж Грибного Переполоха",
"disableCloseDoor": "Выключить Сабботаж Дверей",
"tabGroupGameplayGeneral": "Основное",
"disableAnnoyingMeetingCalls": "В первые 30 секунд нельзя созывать собрания",
"disableReport": "Выключить Репорты Трупов",
"changeDecontaminationTime": "Изменить Время Обеззараживания (Только Стандартный Режим)",
"decontaminationTimeOnMiraHQ": "Время обеззараживания на Mira HQ",
"decontaminationDoorOpenTimeOnMiraHQ": "Время открытия дверей на Mira HQ",
"decontaminationTimeOnPolus": "Время обеззараживания на Polus",
"decontaminationDoorOpenTimeOnPolus": "Время открытия дверей на Polus",
"disableSporeTrigger": "Выключить споры на Fungle",
"disableDevices": "Выключить Девайсы",
"disableSkeldDevices": "Выключить Девайсы на Skeld",
"disableSkeldAdmin": "Выключить Админ на Skeld",
"disableSkeldCamera": "Выключить Камеры на Skeld",
"disableMiraHQDevices": "Выключить Девайсы на Mira HQ",
"disableMiraHQAdmin": "Выключить Админ на Mira HQ",
"disableMiraHQDoorLog": "Выключить Журнал на Mira HQ",
"disablePolusDevices": "Выключить Девайсы на Polus",
"disablePolusAdmin": "Выключить Админ на Polus",
"disablePolusCamera": "Выключить Камеры на Polus",
"disablePolusVital": "Выключить Пульс на Polus",
"disableAirshipDevices": "Выключить Девайсы на Airship",
"disableAirshipCockpitAdmin": "Выключить Админ в Кабине на Airship",
"disableAirshipRecordsAdmin": "Выключить Админ в Архиве на Airship",
"disableAirshipCamera": "Выключить Камеры на Airship",
"disableAirshipVital": "Выключить Пульс на Airship",
"disableFungleDevices": "Выключить Девайсы на Fungle",
"disableFungleVital": "Выключить Пульс на Fungle",
"tabGroupTasks": "Задания",
"allPlayersSameTasks": "Одинаковые задания для всех",
"overrideTaskSettings": "Отключить задания",
"taskPercentNeededToWin": "% Выполненных заданий для победы экипажа",
"disableMiraTasks": "Выключить Задания на Mira HQ",
"disableBuyBeverage": "Выключить Купить Напиток",
"disableMeasureWeather": "Выключить Изучить Погодные Условия",
"disableProcessData": "Выключить Обработать Данные",
"disableRunDiagnostics": "Выключить Провести Диагностику",
"disableSortSamples": "Выключить Разобрать Образцы",
"disablePolusTasks": "Выключить Задания на Polus",
"disableActivateWeatherNodes": "Выключить Починить Узел",
"disableAlignTelescope": "Выключить Навести Телескоп",
"disableFillCanisters": "Выключить Наполнить Баллоны",
"disableInsertKeys": "Выключить Вставить Ключи",
"disableOpenWaterways": "Выключить Открыть Водопровод",
"disableRebootWifi": "Выключить Перезагрузить Wi-Fi",
"disableRepairDrill": "Выключить Починить Бур",
"disableScanBoardingPass": "Выключить Проверить Посадочный Талон",
"disableAirshipTasks": "Выключить Задания на Airship",
"disableCleanToilet": "Выключить Помыть Туалет",
"disableDecontaminate": "Выключить Пройти Обработку",
"disableDevelopPhotos": "Выключить Проявить Фото",
"disableDressMannequin": "Выключить Одеть Манекен",
"disableFixShower": "Выключить Починить Душ",
"disableMakeBurger": "Выключить Сделать Бургер",
"disablePickUpTowels": "Выключить Поднять Полотенца",
"disablePolishRuby": "Выключить Полировать рубин",
"disablePutAwayPistols": "Выключить Убрать Пистолеты",
"disablePutAwayRifles": "Выключить Убрать Ружья",
"disableRewindTapes": "Выключить Перемотать Кассеты",
"disableResetBreaker": "Выключить Перезапуск Пробок",
"disableSortRecords": "Выключить Разобрать Записи",
"disableStartFans": "Выключить Запустить Вентилятор",
"disableUnlockSafe": "Выключить Открыть Сейф",
"disableFungleTasks": "Выключить Задания на Fungle",
"disableBuildSandcastle": "Выключить Построить Песчаный Замок",
"disableCatchFish": "Выключить Поймать Рыбу",
"disableCollectSamples": "Выключить Собрать Образцы",
"disableCollectShells": "Выключить Собрать Ракушки",
"disableCollectVegetables": "Выключить Собрать Овощи",
"disableCrankGenerator": "Выключить Завести Генератор",
"disableExtractFuel": "Выключить Извлечь Топливо",
"disableFixAntenna": "Выключить Починить Антенну",
"disableHelpCritter": "Выключить Помочь Животному",
"disableHoistSupplies": "Выключить Поднять Припасы",
"disableLiftWeights": "Выключить Поднять Грузы",
"disableMineOres": "Выключить Добыть Руду",
"disablePlayVideoGame": "Выключить Играть в Видеоигру",
"disablePolishGem": "Выключить Отполировать Драгоценный Камень",
"disableReplaceParts": "Выключить Заменить Детали",
"disableRoastMarshmallow": "Выключить Поджарить Зефирки",
"disableThrowFisbee": "Выключить Играть с Фрисби",
"disableFindSignal": "Выключить Найти Сигнал",
"disableMiscCommonTasks": "Выключить Общие Задания",
"disableEnterIdCode": "Выключить Ввести Код Доступа",
"disableFixWiring": "Выключить Починить Проводку",
"disableSwipeCard": "Выключить Провести Картой",
"disableMiscShortTasks": "Выключить Короткие Задания",
"disableAssembleArtifact": "Выключить Собрать Артефакт",
"disableChartCourse": "Выключить Выровнять Курс",
"disableCleanO2Filter": "Выключить Очистить Фильтр O2",
"disableCleanVent": "Выключить Прочистить Люк",
"disableMonitorMushroom": "Выключить Наблюдать За Грибом",
"disableMonitorTree": "Выключить Проверить Дерево",
"disablePrimeShields": "Выключить Запустить Щиты",
"disableRecordTemperature": "Выключить Записать Температуру",
"disableStabilizeSteering": "Выключить Выровнять Курс",
"disableStoreArtifacts": "Выключить Сложить Артефакты",
"disableUnlockManifolds": "Выключить Открыть Коллекторы",
"disableMiscLongTasks": "Выключить Длинные Задания",
"disableAlignEngineOutput": "Выключить Выровнять Отдачу Моторов",
"disableClearAsteroids": "Выключить Разрушить Астероиды",
"disableEmptyChute": "Выключить Очистить Мусоросборник",
"disableInspectSample": "Выключить Исследовать Образец",
"disableReplaceWaterJug": "Выключить Заменить Кулер",
"disableStartReactor": "Выключить Запустить Реактор",
"disableWaterPlants": "Выключить Полить Растения",
"disableMiscMixedTasks": "Выключить Смешанные Задания",
"disableCalibrateDistributor": "Выключить Откалибровать Распределитель",
"disableDivertPower": "Выключить Подать Энергию",
"disableEmptyGarbage": "Выключить Выбросить Мусор",
"disableFuelEngines": "Выключить Заправить Моторы",
"disableSubmitScan": "Выключить Пройти Скан",
"disableUploadData": "Выключить Загрузить Данные",
"allCommandsFull": "<b>ВСЕ КОМАНДЫ:</b>\n\n<b>/help</b>\nПоказать это сообщение.\n<b>/aur, /socials</b>\nОтправляет ссылки Among Us Revamped.\n\n<b>/r, /gm</b>\nОтправляет описание текущего режима или списка способностей.\n<b>/l, /lastgame</b>\nОтправляет информацию о последнем победителе.\n\n<b>/0kc, /0killcooldown</b>\nОтправляет описание режима 0 Перезарядки Убийств.\n<b>/sns, /shiftandseek</b>\nОтправляет описание режима Клона.\n<b>/sp, /speedrun</b>\nОтправляет описание режима Спидрана.\n\n/<b>kick, /ban</b>\nКикает или банит игрока по нику.\n<b>/ckick, /cban</b>\nКикает или банит игрока по цвету.\n\n<b>/vip /moderator /admin</b>\nДобавляет игрока как VIP, Модератора или Админа.\n<b>/removevip, /removemoderator, /removeadmin</b>\nУбирает VIP, Модератора или Админа у игрока.\n\n<b>/eg, /endgame</b>\nЗаканчивает текущую игру.\n<b>/em, /endmeeting</b>\nЗаканчивает текущее собрание.\n<b>/s, /start</b>\nНачинает Отсчёт для старта.\n\n<b>/t {template}</b>\nОтправляет шаблон из AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nМеняет ваш цвет, может быть использована чтобы обойти ограничения по цветам.",
"translationReloaded": "Ваш языковой файл был успешно сброшен.\nЧтобы применить все изменения, перезапустите вашу игру.",
"templateWelcome": "# В этом файле вы можете создавать шаблоны, которые могут служить как простая альтернатива копировать-вставить.\n# Чтобы создать шаблон, напишите новую линию с таким же форматированием как и у тестового шаблона снизу.\n# Шаблоны не могут быть длиннее, чем 120 символов и не могут содержать специальные символы. В противном вас будет кикать.\n\ntest: это пример шаблона. Напишите '/t test', чтобы увидеть его.\n\nwelcome: Добро Пожаловать! Это Лобби Использует Among Us Revamped {ModVersion} от MV. Наслаждайтесь!",
"moderatorWelcome": "# В этом файле вы можете добавлять Модераторов по Коду друга.\n# Если вы добавите кого-то, они получат фиолетовый ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия Модераторов. Снизу приведен пример Кода друга.\n\nfriendcode#0000",
"vipWelcome": "# В этом файле вы можете добавлять VIP по Коду друга.\n# Если вы добавите кого-то, они получат желтый ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия VIP. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n",
"adminWelcome": "# В этом файле вы можете добавлять Админов по Коду друга.\n# Если вы добавите кого-то, они получат красный ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия Админов. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n",
"banlistWelcome": "# В этом файле вы можете банить игроков из ваших лобби по Коду друга.\n# Если вы забаните кого-то в игре они автоматически добавятся в этот файл. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n",
"banwordWelcome": "# В этом файле вы можете создавать запрещенные слова, автоматически кикает тех кто сказали эти слова которые написаны здесь.\n# Обратите внимание, чтобы разделять слова надо при помощи новых строк.",
"bannameWelcome": "# В этом файле вы можете создавать запрещенные имена, автоматически кикает тех кто использует имена которые написаны здесь.\n# Обратите внимание, чтобы разделять имена надо при помощи новых строк.",
"languageWelcome": "# In this file you can set your Among Us Revamped language.\n# To set the language, type one of the supported languages in a new line. The default is English.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian\n\nEnglish",
"noGameEndWarning": "ВНИМАНИЕ: Настройка 'Без Конца Игры' Включена",
"tooLongTemplate": "Ваш шаблон длиннее, чем 120 символов и вас кикнет если он будет отправлен. Пожалуйста, уменьшите длину.",
"vipAdd": "Успешно добавлен {0} как VIP.",
"moderatorAdd": "Успешно добавлен {0} как Модератор.",
"adminAdd": "Успешно добавлен {0} как Админ.",
"vipRemove": "Успешно убран VIP у {0}.",
"moderatorRemove": "Успешно убран Модератор у {0}.",
"adminRemove": "Успешно убран Админ у {0}.",
"permFail": "Не удалось найти игрока '{0}'. Убедитесь, что вы написали ник корректно",
"helpDesc": "Показывает все Команды и что они делают.",
"snsDesc": "Отправляет описание режима Клона.",
"0kcDesc": "Отправляет описание режима 0 Перезарядки Убийств.",
"SrDesc": "Отправляет описание режима Спидрана.",
"egDesc": "Заканчивает текущую игру.",
"emDesc": "Заканчивает текущее собрание.",
"aurDesc": "Отправляет Ссылки Us Revamped.",
"sDesc": "Начинает Отсчёт для старта.",
"rDesc": "/r Отправляет включеные способности или текущий режим.",
"rolesDesc": "Отправляет обзор всех способностей/режимов.",
"kickDesc": "Кикает игрока по нику.",
"ckickDesc": "Кикает игрока по цвету.",
"banDesc": "Банит игрока по нику.",
"cbanDesc": "Банит игрока по цвету.",
"dumpDesc": "Копирует LogOutput в отдельный файл.",
"colDesc": "Меняет ваш цвет.",
"reloadDesc": "Перезагружает языковой файл.",
"vipDesc": "Добавляет игрока как VIP.",
"moderatorDesc": "Добавляет игрока как Модератора.",
"adminDesc": "Добавляет игрока как Админа.",
"cremoveVipDesc": "Убирает VIP у игрока.",
"removeModeratorDesc": "Убирает Модератора у игрока.",
"removeAdminDesc": "Убирает Админа у игрока.",
"lastgameDesc": "Отправляет информацию о последней игре.",
"templateDesc": "Отправляет определённый шаблон из AUR-DATA/templates.txt.",
"banWordKick": "{0} был кикнут потому что они отправили запрещенное слово {1} раз(а)",
"pluginWarning": "<color=red><size=5><b>ВНИМАНИЕ:</color></b></size>\n<size=3><b>У вас обнаружено 2 или более активных плагинов.</size></b>\nAmong Us Revamped не совместим с большинством модов.\nЕсли у вас будут баги, они наверняка происходят из-за несовместимости.",
"systemSettings": "Системные Настройки",
"gameplaySettings": "Игровые Настройки",
"gamemodeSettings": "Настройки Режима",
"systemSettingsDesc": "Системные Настройки Для Повышения Комфорта и Упрощения Тестирования.",
"gameplaySettingsDesc": "Игровые Настройки Для Улучшения Игрового Процесса.",
"gamemodeSettingsDesc": "Дополнительные Настройки Для Определённых Игровых Режимов.",
"everyone": "Все",
"vipAndAbove": "<color=yellow>VIP</color> И Выше",
"moderatorAndAbove": "<color=purple>Модератор</color> И Выше",
"admin": "<color=red>Админ</color>",
"onlyYou": "Только Вы",
"seekerDesc": "Добавляет игрока как искателя в прятках",
"seekersDesc": "Показывает всех вручную выбранных искателей.",
"clearSeekerDesc": "Очищает список всех вручную выбранных искателей",
"slashEndMeetingCmd": "Кто Может Использовать /endmeeting & /seeker",
"gameMasterWarning":"Вы будете наблюдать игры пока включён режим наблюдателя. ВНИМАНИЕ: Назначение ролей может быть неправильным, если эта настройка включена.",
"startWordsWelcome": "# В этом файле вы можете создавать слова которые будут 'Кикать Игроков Которые Говорят Старт'.\n# 'Режим строгого обнаружения' ВЫКЛ = Сообщения должны идеально совпадать с определенными словами. 'Режим строгого обнаружения' ВКЛ = Сообщения нуждаются только в определённых словах.\n# Вы также можете добавлять несвязанные слова, которые будут обнаруживаться только в лобби..\n\nstart\nbegin\ncommence\nстарт\nначинайте\n",
"gameMasterWarningTwo": "ВНИМАНИЕ: Режим Наблюдателя Включен",
"startWordKick": "{0} Был кикнут так как они отправили слово которое было в StartWords.txt {1} раз(а)",
"seekers": "Искателей: ",
"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 После Перезахода"
}
+340
View File
@@ -0,0 +1,340 @@
{
"LanguageID": "2",
"gameMaster": "游戏主管(Game Master)",
"showFPS": "显示帧率 (FPS)",
"autoStart": "自动开始",
"enableDarkTheme": "启用深色主题",
"enableLobbyMusic": "大厅音乐",
"disableInfoWhenDead": "死亡后隐藏信息",
"disableCommandHelper": "禁用命令助手",
"disableCompatibilityWarning": "关闭兼容性警告",
"gameMasterWarning": "您现在将进入观战模式,直到关闭游戏主管。警告:启用此设置后,可能无法发送技能消息,且身份分配可能不准确。",
"cancelStartCountdown": "已取消开始倒计时",
"invalidFriendCodeKick": "{0} 因好友代码无效被踢出房间",
"invalidFriendCodeBan": "{0} 因好友代码无效被封禁",
"language": "语言 (需要重启)",
"gamemode": "游戏模式",
"tabGroupMain": "管理设置",
"kickLowLevelPlayer": "踢出等级低于此级别的玩家",
"tempBanLowLevelPlayer": "改为封禁而非踢出",
"dontKickLevelOnes": "不要因房间故障踢出 1 级玩家",
"kickInvalidFriendCodes": "踢出无效 (空) 好友代码",
"tempBanInvalidFriendCodes": "改为封禁而非踢出",
"deniedWordsToKick": "发送违禁词时踢出玩家",
"moderatorCanUseCommand": "管理人员可以使用命令",
"autoKickStart": "自动踢出发送“Start”的玩家",
"autoKickStartAsBan": "改为封禁而非踢出",
"autoKickStartStrength": "严格检测模式",
"tabGroupAutomation": "自动化",
"autoSendGameInfo": "自动发送获胜者信息",
"autoRejoinLobby": "自动重新加入大厅",
"autoStartTimer": "自动开始倒计时",
"waitAutoStart": "自动开始等待时间",
"playerAutoStart": "自动开始所需人数",
"enableJoinMessages": "启用欢迎消息",
"messagePerPlayerNum": "每达到指定加入人数发送消息",
"tabGroupMisc": "实验性",
"startCountdown": "默认开始倒计时",
"colorCommandLevel": "谁可以使用颜色命令",
"allowFortegreen": "允许军绿色",
"noGameEnd": "游戏永不结束",
"tabGroupAccess": "权限等级",
"slashColorCmd": "谁可以使用 /color 指令",
"slashRolesAndGamemodeCmd": "谁可以使用 /r 和模板",
"slashLastGameCmd": "谁可以使用 /l 和 /aur 指令",
"slashKickCmd": "谁可以使用 /kick 和 /ckick 指令",
"slashBanCmd": "谁可以使用 /ban 和 /cban 指令",
"slashEndMeetingCmd": "谁可以使用 /endmeeting 和 /seeker 指令",
"slashStartAndEndGameCmd": "谁可以使用 /startgame 和 /endgame 指令",
"tabGroupCrewmate": "船员职业",
"tabGroupNeutral": "中立职业",
"tabGroupImpostor": "内鬼职业",
"tabGroupStandard": "标准模式",
"tabGroupHNS": "躲猫猫模式 (Hide and Seek)",
"numSeekers": "搜寻者数量",
"tabGroup0Kcd": "0秒击杀冷却 (0 Kill Cooldown)",
"noKcdSettingsOverride": "自动更新设置",
"tabGroupSNS": "变形与搜寻 (Shift and Seek)",
"snsChatInGame": "游戏进行中允许聊天 (实验性)",
"snsSettingsOverride": "自动更新设置",
"cantKillTime": "空刀/失误后,无法击杀时长",
"misfiresToSuicide": "失误达到指定次数后自杀",
"crewAutoWinsGameAfter": "船员在此时间后自动获胜",
"snsDisableSabotage": "禁用 SnS 紧急破坏",
"snsDisableReactor": "禁用反应堆破坏",
"snsDisableOxygen": "禁用氧气破坏",
"snsDisableLights": "禁用照明破坏",
"snsDisableComms": "禁用通讯破坏",
"snsDisableHeli": "禁用坠机危机破坏",
"snsDisableMushroomMixup": "禁用迷幻蘑菇破坏",
"snsDisableCloseDoor": "禁用 SnS 关门破坏",
"tabGroupSpeedrun": "速通模式 (Speedrun)",
"speedrunSettingsOverride": "自动更新设置",
"gameAutoEndsAfter": "游戏在此时间后自动结束",
"engineerMode": "全员皆为工程师",
"tabGroupSabotages": "破坏设置",
"deadImpostorsCanSabotage": "死亡内鬼可发动破坏",
"disableSabotage": "禁用紧急破坏",
"disableReactor": "禁用反应堆破坏",
"disableOxygen": "禁用氧气破坏",
"disableLights": "禁用照明破坏",
"disableComms": "禁用通讯破坏",
"disableHeli": "禁用坠机危机破坏",
"disableMushroomMixup": "禁用迷幻蘑菇破坏",
"disableCloseDoor": "禁用关门破坏",
"tabGroupGameplayGeneral": "常规游戏性",
"disableAnnoyingMeetingCalls": "游戏前30秒禁用召开会议",
"disableReport": "禁用报告尸体",
"changeDecontaminationTime": "覆盖洗消室时间 (仅限标准模式)",
"decontaminationTimeOnMiraHQ": "米拉总部 (Mira HQ) 洗消持续时间",
"decontaminationDoorOpenTimeOnMiraHQ": "米拉总部 (Mira HQ) 开门持续时间",
"decontaminationTimeOnPolus": "波勒斯 (Polus) 洗消持续时间",
"decontaminationDoorOpenTimeOnPolus": "波勒斯 (Polus) 开门持续时间",
"disableSporeTrigger": "禁用丛林地图 (The Fungle) 的孢子触发",
"disableDevices": "禁用设备",
"disableSkeldDevices": "禁用飞船 (Skeld) 设备",
"disableSkeldAdmin": "禁用飞船 (Skeld) 管理室地图",
"disableSkeldCamera": "禁用飞船 (Skeld) 监控摄像头",
"disableMiraHQDevices": "禁用米拉总部 (Mira HQ) 设备",
"disableMiraHQAdmin": "禁用米拉总部 (Mira HQ) 管理室地图",
"disableMiraHQDoorLog": "禁用米拉总部 (Mira HQ) 传感器日志",
"disablePolusDevices": "禁用波勒斯 (Polus) 设备",
"disablePolusAdmin": "禁用波勒斯 (Polus) 管理室地图",
"disablePolusCamera": "禁用波勒斯 (Polus) 监控摄像头",
"disablePolusVital": "禁用波勒斯 (Polus) 生命体征表",
"disableAirshipDevices": "禁用飞艇 (Airship) 设备",
"disableAirshipCockpitAdmin": "禁用飞艇 (Airship) 驾驶舱管理室地图",
"disableAirshipRecordsAdmin": "禁用飞艇 (Airship) 记录室管理室地图",
"disableAirshipCamera": "禁用飞艇 (Airship) 监控摄像头",
"disableAirshipVital": "禁用飞艇 (Airship) 生命体征表",
"disableFungleDevices": "禁用丛林 (Fungle) 设备",
"disableFungleVital": "禁用丛林 (Fungle) 生命体征表",
"tabGroupTasks": "任务设置",
"allPlayersSameTasks": "所有人拥有相同的任务",
"overrideTaskSettings": "禁用任务",
"taskPercentNeededToWin": "船员获胜所需的任务完成百分比",
"disableMiraTasks": "禁用米拉总部 (Mira HQ) 任务",
"disableBuyBeverage": "禁用“购买饮料”",
"disableMeasureWeather": "禁用“测量天气”",
"disableProcessData": "禁用“处理数据”",
"disableRunDiagnostics": "禁用“运行诊断”",
"disableSortSamples": "禁用“整理样品”",
"disablePolusTasks": "禁用波勒斯 (Polus) 任务",
"disableActivateWeatherNodes": "禁用“激活天气节点”",
"disableAlignTelescope": "禁用“校准望远镜”",
"disableFillCanisters": "禁用“加注气罐”",
"disableInsertKeys": "禁用“插入钥匙”",
"disableOpenWaterways": "禁用“打开水路”",
"disableRebootWifi": "禁用“重启无线网络”",
"disableRepairDrill": "禁用“修理钻机”",
"disableScanBoardingPass": "禁用“扫描登机牌”",
"disableAirshipTasks": "禁用飞艇 (Airship) 任务",
"disableCleanToilet": "禁用“清理厕所”",
"disableDecontaminate": "禁用“洗消净化”",
"disableDevelopPhotos": "禁用“冲洗照片”",
"disableDressMannequin": "禁用“给假人穿衣服”",
"disableFixShower": "禁用“修理淋浴喷头”",
"disableMakeBurger": "禁用“做汉堡”",
"disablePickUpTowels": "禁用“捡起毛巾”",
"disablePolishRuby": "禁用“打磨红宝石”",
"disablePutAwayPistols": "禁用“放回手枪”",
"disablePutAwayRifles": "禁用“放回步枪”",
"disableRewindTapes": "禁用“倒带”",
"disableResetBreaker": "禁用“重置断路器”",
"disableSortRecords": "禁用“整理记录”",
"disableStartFans": "禁用“启动风扇”",
"disableUnlockSafe": "禁用“开保险箱”",
"disableFungleTasks": "禁用丛林 (Fungle) 任务",
"disableBuildSandcastle": "禁用“堆沙堡”",
"disableCatchFish": "禁用“钓鱼”",
"disableCollectSamples": "禁用“采集样品”",
"disableCollectShells": "禁用“收集贝壳”",
"disableCollectVegetables": "禁用“采摘蔬菜”",
"disableCrankGenerator": "禁用“摇动发电机”",
"disableExtractFuel": "禁用“提取燃料”",
"disableFixAntenna": "禁用“修理天线”",
"disableHelpCritter": "禁用“帮助小动物”",
"disableHoistSupplies": "禁用“吊起物资”",
"disableLiftWeights": "禁用“举重”",
"disableMineOres": "禁用“开采矿石”",
"disablePlayVideoGame": "禁用“玩电子游戏”",
"disablePolishGem": "禁用“打磨宝石”",
"disableReplaceParts": "禁用“更换零件”",
"disableRoastMarshmallow": "禁用“烤棉花糖”",
"disableThrowFisbee": "禁用“扔飞盘”",
"disableFindSignal": "禁用“寻找信号”",
"disableMiscCommonTasks": "禁用全局常规任务",
"disableEnterIdCode": "禁用“输入账号密码”",
"disableFixWiring": "禁用“修理电线”",
"disableSwipeCard": "禁用“刷卡”",
"disableMiscShortTasks": "禁用全局短任务",
"disableAssembleArtifact": "禁用“组装文物”",
"disableChartCourse": "禁用“设定航线”",
"disableCleanO2Filter": "禁用“清理氧气过滤网”",
"disableCleanVent": "禁用“清理通风口”",
"disableMonitorMushroom": "禁用“监控蘑菇”",
"disableMonitorTree": "禁用“监控树木”",
"disablePrimeShields": "禁用“填装护盾”",
"disableRecordTemperature": "禁用“记录温度”",
"disableStabilizeSteering": "禁用“稳定转向”",
"disableStoreArtifacts": "禁用“存放文物”",
"disableUnlockManifolds": "禁用“解锁分流管”",
"disableMiscLongTasks": "禁用全局长任务",
"disableAlignEngineOutput": "禁用“校准引擎输出”",
"disableClearAsteroids": "禁用“清理小行星”",
"disableEmptyChute": "禁用“清空垃圾通道”",
"disableInspectSample": "禁用“检查样品”",
"disableReplaceWaterJug": "禁用“更换水桶”",
"disableStartReactor": "禁用“启动反应堆”",
"disableWaterPlants": "禁用“浇花”",
"disableMiscMixedTasks": "禁用全局混合任务",
"disableCalibrateDistributor": "禁用“校准配电盘”",
"disableDivertPower": "禁用“分流电力”",
"disableEmptyGarbage": "禁用“倒垃圾”",
"disableFuelEngines": "禁用“给引擎加燃料”",
"disableSubmitScan": "禁用“提交扫描”",
"disableUploadData": "禁用“上传数据”",
"allCommandsFull": "<b>所有命令:</b>\n\n<b>/help</b>\n显示此帮助信息。\n<b>/aur, /socials</b>\n发送 Among Us Revamped 的社交链接。\n\n<b>/r, /gm</b>\n发送当前模式介绍或技能列表。\n<b>/l, /lastgame</b>\n发送上一局获胜者的信息。\n\n<b>/0kc, /0killcooldown</b>\n发送 0秒击杀冷却 模式介绍。\n<b>/sns, /shiftandseek</b>\n发送 变形与搜寻 模式介绍。\n<b>/sp, /speedrun</b>\n发送 速通 模式介绍。\n\n/<b>kick, /ban</b>\n通过名字踢出或封禁玩家。\n<b>/ckick, /cban</b>\n通过颜色踢出或封禁玩家。\n\n<b>/vip /moderator /admin</b>\n将玩家设为 VIP、管理员(Moderator) 或 超级管理员(Admin)。\n<b>/removevip, /removemoderator, /removeadmin</b>\n移除玩家的 VIP、管理员 或 超级管理员权限。\n\n<b>/eg, /endgame</b>\n结束当前游戏。\n<b>/em, /endmeeting</b>\n结束当前会议。\n<b>/s, /start</b>\n开始游戏开局倒计时。\n\n<b>/t {template}</b>\n发送 AUR-DATA/templates.txt 中的指定模板。\n\n<b>/col, /color, /colour</b>\n设置您的颜色,可用于绕过限制。",
"translationReloaded": "您的文件已成功重置。\n要应用所有更改,请重启游戏。",
"templateWelcome": "# 在此文件中,您可以添加模板,以便快捷复制粘贴。\n# 要创建新模板,请另起一行并使用与下方测试模板相同的格式。\n# 请注意,模板长度不能超过 120 个字符,且不能包含特殊字符,否则您会被踢出房间。\n\ntest: 这是一个示例模板。输入 '/t test' 即可查看。\n\nwelcome: 欢迎!本大厅使用的是由 MV 制作的 Among Us Revamped {ModVersion}。祝您玩得开心!",
"moderatorWelcome": "# 在此文件中,您可以通过好友代码添加管理员 (Moderator)。\n# 添加后,他们在游戏内的名字将变为紫色。\n# 请前往游戏内的“系统设置”自定义管理员权限。下方为好友代码示例。\n\nfriendcode#0000",
"vipWelcome": "# 在此文件中,您可以通过好友代码添加 VIP。\n# 添加后,他们在游戏内的名字将变为黄色。\n# 请前往游戏内的“系统设置”自定义 VIP 权限。下方为好友代码示例。\n\nfriendcode#0000\n",
"adminWelcome": "# 在此文件中,您可以通过好友代码添加超级管理员 (Admin)。\n# 添加后,他们在游戏内的名字将变为红色。\n# 请前往游戏内的“系统设置”自定义超级管理员权限。下方为好友代码示例。\n\nfriendcode#0000\n",
"banlistWelcome": "# 在此文件中,您可以通过好友代码将玩家从您的大厅中封禁。\n# 在游戏内封禁某人也会自动将其同步到此处。下方为好友代码示例。\n\nfriendcode#0000\n",
"banwordWelcome": "# 在此文件中,您可以设置违禁词,任何在游戏内发送此处所列词汇的玩家将被自动踢出。\n# 请务必使用换行来分隔不同的词汇。",
"bannameWelcome": "# 在此文件中,您可以设置违禁名字,任何在游戏内使用此处所列名字的玩家将被自动踢出。\n# 请务必使用换行来分隔不同的名字。",
"noGameEndWarning": "警告:“游戏永不结束”已启用",
"tooLongTemplate": "您的模板超过了 120 个字符,发送时会导致您被踢出。请缩减长度。",
"vipAdd": "成功将 {0} 添加为 VIP。",
"moderatorAdd": "成功将 {0} 添加为管理员 (Moderator)。",
"adminAdd": "成功将 {0} 添加为超级管理员 (Admin)。",
"vipRemove": "已成功移除 {0} 的 VIP 权限。",
"moderatorRemove": "已成功移除 {0} 的管理员 (Moderator) 权限。",
"adminRemove": "已成功移除 {0} 的超级管理员 (Admin) 权限。",
"permFail": "找不到用户 '{0}'。请检查拼写是否正确?",
"helpDesc": "显示所有命令及其功能。",
"snsDesc": "发送 变形与搜寻 (Shift and Seek) 游戏模式介绍。",
"0kcDesc": "发送 0秒击杀冷却 (0 Kill Cooldown) 游戏模式介绍。",
"SrDesc": "发送 速通 (Speedrun) 游戏模式介绍。",
"egDesc": "结束当前游戏。",
"emDesc": "结束当前会议。",
"aurDesc": "发送 Among Us Revamped 社交链接。",
"sDesc": "开始游戏倒计时。",
"rDesc": "/r 发送活跃技能或当前模式。",
"rolesDesc": "发送所有技能/游戏模式总览。",
"kickDesc": "通过名字踢出玩家。",
"ckickDesc": "通过颜色踢出玩家。",
"banDesc": "通过名字封禁玩家。",
"cbanDesc": "通过颜色封禁玩家。",
"dumpDesc": "将 LogOutput(日志输出)复制到独立文件中。",
"colDesc": "设置您的颜色。",
"reloadDesc": "重新加载语言文件。",
"vipDesc": "将用户添加为 VIP。",
"moderatorDesc": "将用户添加为管理员 (Moderator)。",
"adminDesc": "将用户添加为超级管理员 (Admin)。",
"cremoveVipDesc": "移除用户的 VIP 权限。",
"removeModeratorDesc": "移除用户的管理员 (Moderator) 权限。",
"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": "适用于特定游戏模式的情境设置。",
"everyone": "所有人",
"vipAndAbove": "<color=yellow>VIP</color> 及以上",
"moderatorAndAbove": "<color=purple>管理员</color> 及以上",
"admin": "<color=red>管理员</color>",
"onlyYou": "仅自己",
"seekersDesc": "显示所有手动选择的搜寻者。",
"clearSeekerDesc": "清除手动搜寻者列表。",
"startWordsWelcome": "# 在此文件中,您可以设置检查发送 “Start” 并踢出该玩家的功能。\n# 严格检测关闭 = 消息必须完全匹配关键词。\n# 严格检测开启 = 消息只需包含关键词即可。\n# 也可以添加无关词语,仅用于大厅检测。\n\nstart\nbegin\ncommence",
"gameMasterWarningTwo": "警告:游戏主管已启用",
"startWordKick": "{0} 因发送 StartWords.txt 中的关键词被踢出,累计次数:{1} 次",
"seekers": "搜寻者:",
"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"
}
+310
View File
@@ -0,0 +1,310 @@
{
"LanguageID": "3",
"gameMaster": "Maestro del Juego",
"showFPS": "Mostrar FPS",
"autoStart": "Inicio automático",
"enableDarkTheme": "Activar tema oscuro",
"enableLobbyMusic": "Música de la sala",
"disableInfoWhenDead": "Ocultar información al morir",
"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 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": "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": "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": "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",
"startCountdown": "Cuenta regresiva inicial predeterminada",
"colorCommandLevel": "Quién puede usar comandos de color",
"allowFortegreen": "Permitir color Fortegreen",
"noGameEnd": "Sin fin de partida",
"tabGroupAccess": "Niveles de acceso",
"slashColorCmd": "Quién puede usar /color",
"slashRolesAndGamemodeCmd": "Quién puede usar /r y plantillas",
"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 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",
"tabGroupImpostor": "Roles de impostor",
"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",
"crewAutoWinsGameAfter": "Los tripulantes ganan automáticamente después de",
"snsDisableSabotage": "Desactivar sabotajes críticos de SnS",
"snsDisableReactor": "Desactivar sabotaje del reactor",
"snsDisableOxygen": "Desactivar sabotaje de O2",
"snsDisableLights": "Desactivar sabotaje de luces",
"snsDisableComms": "Desactivar sabotaje de comunicaciones",
"snsDisableHeli": "Desactivar sabotaje de Crash Course",
"snsDisableMushroomMixup": "Desactivar sabotaje de mezcla de hongos",
"snsDisableCloseDoor": "Desactivar sabotajes de puertas de SnS",
"tabGroupSpeedrun": "Speedrun",
"speedrunSettingsOverride": "Actualizar configuración automáticamente",
"gameAutoEndsAfter": "La partida termina automáticamente después de",
"engineerMode": "Todos son ingenieros",
"tabGroupSabotages": "Sabotajes",
"deadImpostorsCanSabotage": "Los impostores muertos pueden sabotear",
"disableSabotage": "Desactivar sabotajes críticos",
"disableReactor": "Desactivar sabotaje del reactor",
"disableOxygen": "Desactivar sabotaje de O2",
"disableLights": "Desactivar sabotaje de luces",
"disableComms": "Desactivar sabotaje de comunicaciones",
"disableHeli": "Desactivar sabotaje de Crash Course",
"disableMushroomMixup": "Desactivar sabotaje de mezcla de hongos",
"disableCloseDoor": "Desactivar sabotajes de puertas",
"tabGroupGameplayGeneral": "General",
"disableAnnoyingMeetingCalls": "Desactivar reuniones durante los primeros 30 s",
"disableReport": "Desactivar reportes de cuerpos",
"changeDecontaminationTime": "Cambiar tiempo de descontaminación (solo estándar)",
"decontaminationTimeOnMiraHQ": "Duración de descontaminación en Mira HQ",
"decontaminationDoorOpenTimeOnMiraHQ": "Duración de apertura de puerta en Mira HQ",
"decontaminationTimeOnPolus": "Duración de descontaminación en Polus",
"decontaminationDoorOpenTimeOnPolus": "Duración de apertura de puerta en Polus",
"disableSporeTrigger": "Desactivar esporas en The Fungle",
"disableDevices": "Desactivar dispositivos",
"disableSkeldDevices": "Desactivar dispositivos de Skeld",
"disableSkeldAdmin": "Desactivar Admin de Skeld",
"disableSkeldCamera": "Desactivar cámaras de Skeld",
"disableMiraHQDevices": "Desactivar dispositivos de Mira HQ",
"disableMiraHQAdmin": "Desactivar Admin de Mira HQ",
"disableMiraHQDoorLog": "Desactivar registro de puertas de Mira HQ",
"disablePolusDevices": "Desactivar dispositivos de Polus",
"disablePolusAdmin": "Desactivar Admin de Polus",
"disablePolusCamera": "Desactivar cámaras de Polus",
"disablePolusVital": "Desactivar vitales de Polus",
"disableAirshipDevices": "Desactivar dispositivos de Airship",
"disableAirshipCockpitAdmin": "Desactivar Admin de cabina de Airship",
"disableAirshipRecordsAdmin": "Desactivar Admin de archivos de Airship",
"disableAirshipCamera": "Desactivar cámaras de Airship",
"disableAirshipVital": "Desactivar vitales de Airship",
"disableFungleDevices": "Desactivar dispositivos de Fungle",
"disableFungleVital": "Desactivar vitales de Fungle",
"tabGroupTasks": "Tareas",
"allPlayersSameTasks": "Todos tienen las mismas tareas",
"overrideTaskSettings": "Desactivar tareas",
"taskPercentNeededToWin": "% de tareas completadas para que ganen los tripulantes",
"disableMiraTasks": "Desactivar tareas de Mira HQ",
"disableBuyBeverage": "Desactivar Tarea Comprar Bebida",
"disableMeasureWeather": "Desactivar Tarea Medir Clima",
"disableProcessData": "Desactivar Tarea Procesar Datos",
"disableRunDiagnostics": "Desactivar Tarea Realizar Diagnóstico",
"disableSortSamples": "Desactivar Tarea Ordenar Muestras",
"disablePolusTasks": "Desactivar tareas de Polus",
"disableActivateWeatherNodes": "Desactivar Tarea Reparar Nodo de Clima",
"disableAlignTelescope": "Desactivar Tarea Alinear Telescopio",
"disableFillCanisters": "Desactivar Tarea Llenar Bombonas",
"disableInsertKeys": "Desactivar Tarea Insertar Llaves",
"disableOpenWaterways": "Desactivar Tarea Abrir Canales de Agua",
"disableRebootWifi": "Desactivar Tarea Reiniciar Wi-Fi",
"disableRepairDrill": "Desactivar Tarea Reparar Taladro",
"disableScanBoardingPass": "Desactivar Tarea Escanear Tarjeta de Embarque",
"disableAirshipTasks": "Desactivar tareas de Airship",
"disableCleanToilet": "Desactivar Tarea Limpiar Inodoro",
"disableDecontaminate": "Desactivar Tarea Descontaminar",
"disableDevelopPhotos": "Desactivar Tarea Revelar Fotos",
"disableDressMannequin": "Desactivar Tarea Vestir Maniquí",
"disableFixShower": "Desactivar Tarea Arreglar Duchas",
"disableMakeBurger": "Desactivar Tarea Preparar Hamburguesa",
"disablePickUpTowels": "Desactivar Tarea Recoger Toallas",
"disablePolishRuby": "Desactivar Tarea Pulir Rubí",
"disablePutAwayPistols": "Desactivar Tarea Guardar Pistolas",
"disablePutAwayRifles": "Desactivar Tarea Guardar Rifles",
"disableRewindTapes": "Desactivar Tarea Rebobinar Cintas",
"disableResetBreaker": "Desactivar Tarea Reiniciar Interruptores",
"disableSortRecords": "Desactivar Tarea Ordenar Registros",
"disableStartFans": "Desactivar Tarea Encender Ventiladores",
"disableUnlockSafe": "Desactivar Tarea Abrir Caja Fuerte",
"disableFungleTasks": "Desactivar tareas de Fungle",
"disableBuildSandcastle": "Desactivar Construir Castillo de Arena",
"disableCatchFish": "Desactivar Atrapar Peces",
"disableCollectSamples": "Desactivar Recolectar Muestras",
"disableCollectShells": "Desactivar Recolectar conchas",
"disableCollectVegetables": "Desactivar Recolectar Vegetales",
"disableCrankGenerator": "Desactivar Activar Generador",
"disableExtractFuel": "Desactivar Extraer Combustible",
"disableFixAntenna": "Desactivar Arreglar Antena",
"disableHelpCritter": "Desactivar Ayudar a la Criatura",
"disableHoistSupplies": "Desactivar Llevar Suministros",
"disableLiftWeights": "Desactivar Levantar Pesas",
"disableMineOres": "Desactivar Extraer Minerales",
"disablePlayVideoGame": "Desactivar Jugar Videojuegos",
"disablePolishGem": "Desactivar Pulir Gema",
"disableReplaceParts": "Desactivar Reemplazar Partes",
"disableRoastMarshmallow": "Desactivar Asar Malvavisco",
"disableThrowFisbee": "Desactivar Lanzar Frisbee",
"disableFindSignal": "Desactivar Encontrar Señal",
"disableMiscCommonTasks": "Desactivar tareas comunes globales",
"disableEnterIdCode": "Desactivar Tarea Introducir ID",
"disableFixWiring": "Desactivar Tarea Arreglar Cableado",
"disableSwipeCard": "Desactivar Tarea Pasar Tarjeta",
"disableMiscShortTasks": "Desactivar tareas cortas globales",
"disableAssembleArtifact": "Desactivar Tarea Montar Artefacto",
"disableChartCourse": "Desactivar Tarea Trazar Ruta",
"disableCleanO2Filter": "Desactivar Tarea Limpiar Filtro de O2",
"disableCleanVent": "Desactivar Tarea Limpiar Ventila",
"disableMonitorMushroom": "Desactivar Tarea Monitorear Hongos",
"disableMonitorTree": "Desactivar Tarea Monitorizar Árbol",
"disablePrimeShields": "Desactivar Tarea Preparar Escudos",
"disableRecordTemperature": "Desactivar Tarea Registrar Temperatura",
"disableStabilizeSteering": "Desactivar Tarea Estabilizar Dirección",
"disableStoreArtifacts": "Desactivar Tarea Almacenar Artefactos",
"disableUnlockManifolds": "Desactivar Tarea Desbloquear Colectores",
"disableMiscLongTasks": "Desactivar tareas largas globales",
"disableAlignEngineOutput": "Desactivar Tarea Alinear la Salida del Motor",
"disableClearAsteroids": "Desactivar Tarea Destruir Asteroides",
"disableEmptyChute": "Desactivar Tarea Vaciar Contenedor",
"disableInspectSample": "Desactivar Tarea Examinar Muestras",
"disableReplaceWaterJug": "Desactivar Tarea Reemplazar Bidón de Agua",
"disableStartReactor": "Desactivar Tarea Arrancar Reactor",
"disableWaterPlants": "Desactivar Tarea Regar Plantas",
"disableMiscMixedTasks": "Desactivar tareas mixtas globales",
"disableCalibrateDistributor": "Desactivar Tarea Calibrar Distribuidor",
"disableDivertPower": "Desactivar Tarea Desviar Energía",
"disableEmptyGarbage": "Desactivar Tarea Vaciar Basurero",
"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 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 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.",
"moderatorAdd": "Se agregó correctamente a {0} como moderador.",
"adminAdd": "Se agregó correctamente a {0} como administrador.",
"vipRemove": "Se eliminó correctamente el VIP de {0}.",
"moderatorRemove": "Se eliminó correctamente el moderador de {0}.",
"adminRemove": "Se eliminó correctamente el administrador de {0}.",
"permFail": "No se pudo encontrar al usuario '{0}'. ¿Lo escribiste correctamente?",
"helpDesc": "Muestra todos los comandos y lo que hacen.",
"snsDesc": "Enviar la descripción del modo de juego Shift and Seek.",
"0kcDesc": "Enviar la descripción del modo de juego 0 de enfriamiento para matar.",
"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": "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.",
"vipDesc": "Agrega al usuario como VIP.",
"moderatorDesc": "Agrega al usuario como moderador.",
"adminDesc": "Agrega al usuario como administrador.",
"cremoveVipDesc": "Elimina VIP del usuario.",
"removeModeratorDesc": "Elimina moderador del usuario.",
"removeAdminDesc": "Elimina administrador del usuario.",
"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ú",
"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"
}
-28
View File
@@ -1,28 +0,0 @@
var target = Argument("target", "Build");
var workflow = BuildSystem.GitHubActions.Environment.Workflow;
var buildId = workflow.RunNumber;
var tag = workflow.RefType == GitHubActionsRefType.Tag ? workflow.RefName : null;
Task("Build")
.Does(() =>
{
var settings = new DotNetBuildSettings
{
Configuration = "Release",
MSBuildSettings = new DotNetMSBuildSettings()
};
if (tag != null)
{
settings.MSBuildSettings.Version = tag;
}
else if (buildId != 0)
{
settings.MSBuildSettings.VersionSuffix = "ci." + buildId;
}
DotNetBuild(".", settings);
});
RunTarget(target);