This commit is contained in:
Ape committed 2026-08-05 21:21:23 +02:00
1 parent 9c1d8a2943
commit 95a203b711
12 files changed
+278 -37

No files matched your search

+2 -1
View File
@@ -44,9 +44,10 @@ public partial class Main : BasePlugin
public static bool HasArgumentException;
public static string CredentialsText;
public const string ModVersion = "v1.9.2";
public const string ModVersion = "v1.9.3";
public static float GameTimer;
public static float AfkTimer;
public static readonly Dictionary<int, int> SayStartTimes = [];
public static readonly Dictionary<int, int> SayDeniedWordTimes = [];
+1 -1
View File
@@ -206,7 +206,7 @@ public static class BanManager
public static bool IsStartWord(PlayerControl player, string input)
{
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0 || !Options.AutoKickStart.GetBool()) return false;
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0 || !Options.AutoKickStart.GetBool() || !Utils.IsLobby) return false;
int clientId = player.Data.ClientId;
var startWords = File.ReadAllLines(StartWordsPath).Where(x => !x.StartsWith("#"));
+43 -7
View File
@@ -56,15 +56,13 @@ namespace AmongUsRevamped
Translator.Get("everyone"), Translator.Get("vipAndAbove"), Translator.Get("moderatorAndAbove"), Translator.Get("admin"), Translator.Get("onlyYou")
};
public static readonly string[] crewmateAbilities =
public static readonly string[] afkPenalties =
{
"Mayor", "Workhorse", "Jester", "Tasker", "None"
};
public static readonly string[] impostorAbilities =
{
"Tyrant", "Stealer", "Juggernaut", "None"
Translator.Get("kick"), Translator.Get("ban"), Translator.Get("notifyMe")
};
//System
public static OptionItem Language;
@@ -77,6 +75,9 @@ namespace AmongUsRevamped
public static OptionItem KickLowLevelPlayer;
public static OptionItem DontKickLevelOnes;
public static OptionItem TempBanLowLevelPlayer;
public static OptionItem EnableKickHighLevelPlayer;
public static OptionItem KickHighLevelPlayer;
public static OptionItem TempBanHighLevelPlayer;
public static OptionItem TabGroupKickInvalidFriendCodes;
public static OptionItem KickInvalidFriendCodes;
@@ -99,6 +100,10 @@ namespace AmongUsRevamped
public static OptionItem AutoRejoinLobby;
public static OptionItem EnableJoinMessages;
public static OptionItem MessagePerPlayerNum;
public static OptionItem AutomaticMapPoll;
public static OptionItem TimeBeforeMapPoll;
public static OptionItem AutomaticAllMapPoll;
public static OptionItem TimeBeforeAllMapPoll;
public static OptionItem TabGroupAutostart;
public static OptionItem AutoStartTimer;
@@ -107,6 +112,13 @@ namespace AmongUsRevamped
public static OptionItem Rehost;
public static OptionItem Public;
public static OptionItem TabGroupAfk;
public static OptionItem EnableAfkDetection;
public static OptionItem AfkTimer;
public static OptionItem AfkPenalty;
public static OptionItem OnlyDetectSpawn;
public static OptionItem TabGroupMisc;
public static OptionItem MapVoteDuration;
public static OptionItem StartCountdown;
@@ -324,6 +336,12 @@ namespace AmongUsRevamped
.SetParent(EnableKickLowLevelPlayer);
DontKickLevelOnes = BooleanOptionItem.Create(60052, Translator.Get("dontKickLevelOnes"), false, TabGroup.ModerationSettings, false)
.SetParent(EnableKickLowLevelPlayer);
EnableKickHighLevelPlayer = BooleanOptionItem.Create(60053, Translator.Get("enableKickHighLevelPlayer"), false, TabGroup.ModerationSettings, false);
KickHighLevelPlayer = IntegerOptionItem.Create(60054, Translator.Get("kickHighLevelPlayer"), new(100, 5000, 50), 1000, TabGroup.ModerationSettings, false)
.SetParent(EnableKickHighLevelPlayer)
.SetValueFormat(OptionFormat.Level);
TempBanHighLevelPlayer = BooleanOptionItem.Create(60055, Translator.Get("tempBanLowLevelPlayer"), false, TabGroup.ModerationSettings, false)
.SetParent(EnableKickHighLevelPlayer);
TabGroupKickInvalidFriendCodes = TextOptionItem.Create(60079, Translator.Get("tabGroupKickInvalidFriendCodes"), TabGroup.ModerationSettings)
.SetColor(Color.red);
@@ -371,6 +389,14 @@ namespace AmongUsRevamped
EnableJoinMessages = BooleanOptionItem.Create(60152, Translator.Get("enableJoinMessages"), true, TabGroup.SystemSettings, false);
MessagePerPlayerNum = IntegerOptionItem.Create(60153, Translator.Get("messagePerPlayerNum"), new(1, 15, 1), 5, TabGroup.SystemSettings, false)
.SetParent(EnableJoinMessages);
AutomaticMapPoll = BooleanOptionItem.Create(60154, Translator.Get("automaticMapPoll"), false, TabGroup.SystemSettings, false);
TimeBeforeMapPoll = IntegerOptionItem.Create(60155, Translator.Get("timeBeforeMapPoll"), new(10, 300, 5), 10, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(AutomaticMapPoll);
AutomaticAllMapPoll = BooleanOptionItem.Create(60156, Translator.Get("automaticAllMapPoll"), false, TabGroup.SystemSettings, false);
TimeBeforeAllMapPoll = IntegerOptionItem.Create(60157, Translator.Get("timeBeforeMapPoll"), new(10, 300, 5), 10, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(AutomaticAllMapPoll);
TabGroupAutostart = TextOptionItem.Create(64425, Translator.Get("tabGroupAutostart"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
@@ -383,9 +409,19 @@ namespace AmongUsRevamped
Public = BooleanOptionItem.Create(64430, Translator.Get("public"), false, TabGroup.SystemSettings, false)
.SetParent(Rehost);
TabGroupAfk = TextOptionItem.Create(60370, Translator.Get("tabGroupAfk"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
EnableAfkDetection = BooleanOptionItem.Create(60371, Translator.Get("enableAfkDetection"), false, TabGroup.SystemSettings, false);
AfkTimer = IntegerOptionItem.Create(60372, Translator.Get("afkTimer"), new(15, 120, 5), 30, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(EnableAfkDetection);
AfkPenalty = StringOptionItem.Create(60373, Translator.Get("afkPenalty"), afkPenalties, 0, TabGroup.SystemSettings, false)
.SetParent(EnableAfkDetection);
OnlyDetectSpawn = BooleanOptionItem.Create(60374, Translator.Get("onlyDetectSpawn"), true, TabGroup.SystemSettings, false)
.SetParent(EnableAfkDetection);
TabGroupMisc = TextOptionItem.Create(60378, Translator.Get("tabGroupMisc"), TabGroup.SystemSettings)
.SetColor(Color.yellow);
MapVoteDuration = IntegerOptionItem.Create(60379, Translator.Get("mapVoteDuration"), new(5, 60, 5), 20, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetColor(Color.red);
+87
View File
@@ -9,11 +9,27 @@ namespace AmongUsRevamped;
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.FixedUpdate))]
public static class FixedUpdate
{
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 +46,77 @@ 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) 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();
}
}
}
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;
}
}
}
+2
View File
@@ -204,6 +204,8 @@ public static class Utils
HandlingGameEnd = false;
OnGameJoinedPatch.AutoStartCheck = false;
Main.GameTimer = 0f;
Main.AfkTimer = 0f;
FixedUpdate.Position.Clear();
NormalGameEndChecker.canUpdateWinnerText = true;
MurderPlayerPatch.misfireCount.Clear();
MurderPlayerPatch.killCount.Clear();
+35 -1
View File
@@ -46,6 +46,21 @@ internal static class OnGameJoinedPatch
}, 5.2f, "AutoSendGameInfo2");
}
if (Options.AutomaticMapPoll.GetBool())
{
new LateTask(() =>
{
Utils.MapVote(false, true);
}, Options.TimeBeforeMapPoll.GetInt(), "AutoMapPoll");
}
if (Options.AutomaticAllMapPoll.GetBool())
{
new LateTask(() =>
{
Utils.MapVote(true, true);
}, Options.TimeBeforeAllMapPoll.GetInt(), "AutoMapPoll");
}
if (Options.Public.GetBool() && DisconnectManager.Rehosting)
{
AmongUsClient.Instance.ChangeGamePublic(true);
@@ -158,7 +173,26 @@ public static class SetLevelPatch
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
}
HandledLevelKicks.Add(__instance);
}
}
if (AmongUsClient.Instance.AmHost && level > Options.KickHighLevelPlayer.GetInt() - 1 && __instance.Data.ClientId != AmongUsClient.Instance.HostId && Options.EnableKickHighLevelPlayer.GetBool())
{
if (HandledLevelKicks.Contains(__instance)) return;
if (!Options.TempBanHighLevelPlayer.GetBool() && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
{
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being above level {Options.KickHighLevelPlayer.GetInt()}", "KickHighLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being above level {Options.KickHighLevelPlayer.GetInt()}");
}
else if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
{
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being above level {Options.KickHighLevelPlayer.GetInt()} ", "BanHighLevelPlayer");
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being above level {Options.KickHighLevelPlayer.GetInt()}");
}
HandledLevelKicks.Add(__instance);
}
}
}
+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;
}
}
+7 -5
View File
@@ -29,7 +29,7 @@
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
‎
# 🎮 Features (v1.9.2):
# 🎮 Features (v1.9.3):
## <b>♠️ Client Side settings:</b>
- Game Master (Spectator)
@@ -38,12 +38,12 @@
- Toggle Lobby Music
- Show/Hide Info When Dead
## <b>⚙️ Technical settings:</b>
- Kick/Ban players under a certain level
- Kick/Ban invalid FriendCodes
- Advanced AFK Detection system
- Kick/Ban players under/above a certain level
- Kick/Ban invalid (Empty) Friendcodes
- Kick/Ban players who say "start"
- Denyword system
- Banlist system
- Denyname system
- Denyword and Denyname system
- Advanced Moderator system
- To add Admins, Moderators and VIP's, type the user's Friendcode in the designated files located in AUR-DATA
- Enable No Game End
@@ -52,6 +52,7 @@
- Full Autohost and Rehost support
- Automatically rejoin lobby
- Automatically send winner info
- Automatically Send Map Votes
- Enable (configurable) Welcome Messages from Templates.txt
## <b>🔧 Gameplay Settings:</b>
- Dead impostors can sabotage
@@ -76,6 +77,7 @@
- Detect Invalid animations
- Detect Invalid task completions
- Detect immortality cheats
- Block attempted votekicks
- These are all enabled by default
## <b>❓ Other Improvements:</b>
- Lanuage support: English, Italian, Japanese, Russian, Simplified Chinese, Spanish
+21 -1
View File
@@ -23,6 +23,8 @@
"enableKickLowLevelPlayer": "Kick Low Level Players",
"kickLowLevelPlayer": "Kick Players Under Level",
"tempBanLowLevelPlayer": "Ban Instead Of Kick",
"enableKickHighLevelPlayer": "Kick High Level Players",
"kickHighLevelPlayer": "Kick Players Above Level",
"dontKickLevelOnes": "Don't Kick Lv.1 Players For Glitched Lobbies",
"tabGroupKickInvalidFriendCodes": "Invalid Friendcodes",
"kickInvalidFriendCodes": "Kick Invalid (Empty) Friendcodes",
@@ -315,5 +317,23 @@
"seekers": "Seekers: ",
"clearedSeekers": "Successfully cleared the manual Seeker list.",
"rehostSuccess": "Successfully rehosted a lobby"
"rehostSuccess": "Successfully rehosted a lobby",
"kick": "Kick",
"ban": "Ban",
"notifyMe": "Notify Me",
"tabGroupAfk": "AFK Detection",
"enableAfkDetection": "Enable AFK Detection",
"afkTimer": "Detection Threshold",
"afkPenalty": "AFK Penalty",
"onlyDetectSpawn": "Only Detect Players At Spawn",
"afkNotify": "{0} has been AFK for {1}s",
"afkKick": "{0} has been AFK for {1s}, 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 Poll Starts"
}
+34 -9
View File
@@ -28,7 +28,6 @@
"moderatorCanUseCommand": "モデレーターのコマンド使用を許可",
"autoKickStart": "「Start/開始」と発言したプレイヤーをキック",
"autoKickStartAsBan": "キックの代わりにBAN",
"autoKickStartTimes": "キックに必要な催促メッセージ回数",
"autoKickStartStrength": "厳格検出モード",
"tabGroupAutomation": "自動化",
"autoSendGameInfo": "勝者情報を自動送信",
@@ -227,10 +226,7 @@
"banlistWelcome": "# このファイルにフレンドコードを記述することでプレイヤーをBANリストに追加できます。\n# ゲーム内でBANしたプレイヤーも自動的にここへ追加されます。以下は記述例です。\n\nfriendcode#0000\n",
"banwordWelcome": "# このファイルではNGワードを設定できます。リスト内の単語を発言したプレイヤーは自動的にキックされます。\n# 単語ごとに改行して区切ってください。",
"bannameWelcome": "# このファイルではNGネームを設定できます。リスト内の名前を使用しているプレイヤーは自動的にキックされます。\n# 名前ごとに改行して区切ってください。",
"startWordsWelcome": "# このファイルでは「『Start』と発言したプレイヤーをキック」に使用する判定単語を設定できます。\n# 「厳格検出モード」OFF = 完全一致で判定。「厳格検出モード」ON = 部分一致で判定。\n# ロビー内でのみ検知したい無関係な単語を入れることも可能です。\n\nstart\nbegin\ncommence",
"noGameEndWarning": "警告: 「ゲーム終了なし」が有効になっています",
"gameMasterWarningTwo": "警告: 「ゲームマスター」が有効になっています",
"tooLongTemplate": "テンプレートが120文字を超えているため、送信するとキックされます。文字数を減らしてください。",
@@ -268,11 +264,8 @@
"lastgameDesc": "前回のゲーム情報を送信します。",
"templateDesc": "AUR-DATA/templates.txt から指定のテンプレートを送信します。",
"seekerDesc": "かくれんぼでプレイヤーを鬼(Seeker)に指定します。",
"seekersDesc": "手動選択された鬼のリストを表示します。",
"clearSeekerDesc": "手動選択された鬼のリストをクリアします。",
"banWordKick": "{0} は DeniedWords.txt に登録されたNGワードを {1} 回送信したためキックされました",
"startWordKick": "{0} は StartWords.txt に登録された単語を {1} 回送信したためキックされました",
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>複数のプラグイン(Mod)が検出されました。</size></b>\nAmong Us Revamped は他の多くのMODと互換性がありません。\nバグが発生する場合、そのほとんどはMod間の競合によるものです。",
@@ -289,7 +282,39 @@
"moderatorAndAbove": "<color=purple>モデレーター</color> 以上",
"admin": "<color=red>管理人</color>",
"onlyYou": "あなたのみ",
"seekersDesc": "手動で選択されたシーカーをすべて表示します。",
"clearSeekerDesc": "手動シーカーリストをクリアします。",
"startWordsWelcome": "# このファイルでは、「Start」と発言したプレイヤーをキックする機能で検出する単語を設定できます。\n# 「厳格検出モード」OFF = メッセージが単語と完全に一致する必要があります。\n# 「厳格検出モード」ON = メッセージに単語が含まれているだけで検出されます。\n# ロビー内でのみ検出したい無関係な単語を追加することもできます。\n\nstart\nbegin\ncommence",
"gameMasterWarningTwo": "警告:ゲームマスターが有効になっています",
"startWordKick": "{0} は StartWords.txt に設定された単語を送信したためキックされました(回数:{1}回)",
"seekers": "シーカー:",
"clearedSeekers": "手動シーカーリストを正常にクリアしました。",
"autoKickStartTimes": "StartWordsを送信した回数でキック",
"seekers": "鬼(Seeker): ",
"clearedSeekers": "手動選択された鬼のリストを正常にクリアしました。"
"tabGroupLevelKick": "レベル管理",
"enableKickLowLevelPlayer": "低レベルのプレイヤーをキック",
"tabGroupKickInvalidFriendCodes": "無効なフレンドコード",
"tabGroupAutoKickStart": "StartWords",
"tabGroupAutostart": "自動ホスト",
"rehost": "切断時にロビーを自動で再作成",
"public": "新しいロビーを自動で公開",
"mapVoteDuration": "マップ投票時間",
"tabGroupDeniedWords": "禁止ワード",
"enableDeniedWords": "禁止ワードを送信したプレイヤーをキック",
"slashMapAndSeekerCmd": "/seeker と /mapvote を使用できる人",
"snsChatInGameExtend": "ゲーム開始後にゲームモード情報を送信",
"mapVoteDesc": "5つの通常マップで投票を開始します。",
"allMapVoteDesc": "Eht Dleks を含む全6マップで投票を開始します。",
"banWordBan": "{0} は DeniedWords.txt の単語を {1} 回送信したためBANされました",
"startWordBan": "{0} は StartWords.txt の単語を {1} 回送信したためBANされました",
"moderationSettings": "モデレーション設定",
"moderationSettingsDesc": "荒らしや迷惑行為を防止するための設定です。",
"rehostSuccess": "ロビーの再作成に成功しました"
}
+23 -3
View File
@@ -26,7 +26,6 @@
"moderatorCanUseCommand": "Модераторы Могут Использовать Команды",
"autoKickStart": "Кикать Игроков Которые Говорят Start",
"autoKickStartAsBan": "Банить вместо кика",
"autoKickStartTimes": "Start сообщений нужно для кика",
"autoKickStartStrength": "Режим строгого обнаружения",
"tabGroupAutomation": "Автоматизация",
"autoSendGameInfo": "Автоматически отправлять информацию о победителях",
@@ -36,7 +35,7 @@
"playerAutoStart": "Игроков Нужно Для Авто Старта",
"enableJoinMessages": "Включить Сообщение С Приветствиями",
"messagePerPlayerNum": "Сообщение Каждые # Заходов",
"tabGroupMisc": "Разное",
"tabGroupMisc": "Экспериментальное",
"startCountdown": "Отсчёт Для Старта По Умолчанию",
"colorCommandLevel": "Кто Может использовать Команды Цветов",
"allowFortegreen": "Разрешить Фортезелёный Цвет",
@@ -297,5 +296,26 @@
"startWordKick": "{0} Был кикнут так как они отправили слово которое было в StartWords.txt {1} раз(а)",
"seekers": "Искателей: ",
"clearedSeekers": "Успешно очищен список вручную выбранных искателей."
"clearedSeekers": "Успешно очищен список вручную выбранных искателей.",
"tabGroupLevelKick": "Уровневая Модерация",
"enableKickLowLevelPlayer": "Кикать Игроков С Низким Уровнем",
"tabGroupKickInvalidFriendCodes": "Неправильные Коды Друзей",
"tabGroupAutoKickStart": "Старт Слова",
"autoKickStartTimes": "Отправленных Cтарт сообщений нужно для кика",
"tabGroupAutostart": "АвтоХост",
"rehost": "Автоматически Пересоздавать Лобби При Вылете",
"public": "Автоматически Делать Новое Лобби Публичным",
"mapVoteDuration": "Продолжительность Голосования За Карты",
"tabGroupDeniedWords": "Запрещенные Слова",
"enableDeniedWords": "Кикать Игроков Которые Говорят Запрещенные Слова",
"slashMapAndSeekerCmd": "Кто Может Использовать /seeker & /mapvote",
"snsChatInGameExtend": "Отправлять информацию о режиме после начала игры",
"mapVoteDesc": "Начинает голосование между 5 основными картами.",
"allMapVoteDesc": "Начинает голосование между всеми 6 картами, включая Eht Dleks.",
"banWordBan": "{0} Были забанены потому что они отправили слово из DeniedWords.txt {1} раз(а)",
"startWordBan": "{0} Были забанены потому что они отправили слово из StartWords.txt {1} раз(а)",
"moderationSettings": "Настройки Модерации",
"moderationSettingsDesc": "Настройки Модерации чтобы бороться с токсичностью и плохим поведением.",
"rehostSuccess": "Лобби Было Успешно Пересоздано"
}
+21 -7
View File
@@ -28,7 +28,6 @@
"moderatorCanUseCommand": "管理人员可以使用命令",
"autoKickStart": "自动踢出发送“Start”的玩家",
"autoKickStartAsBan": "改为封禁而非踢出",
"autoKickStartTimes": "踢出所需的“Start”消息次数",
"autoKickStartStrength": "严格检测模式",
"tabGroupAutomation": "自动化",
"autoSendGameInfo": "自动发送获胜者信息",
@@ -239,7 +238,6 @@
"moderatorRemove": "已成功移除 {0} 的管理员 (Moderator) 权限。",
"adminRemove": "已成功移除 {0} 的超级管理员 (Admin) 权限。",
"permFail": "找不到用户 '{0}'。请检查拼写是否正确?",
"helpDesc": "显示所有命令及其功能。",
"snsDesc": "发送 变形与搜寻 (Shift and Seek) 游戏模式介绍。",
"0kcDesc": "发送 0秒击杀冷却 (0 Kill Cooldown) 游戏模式介绍。",
@@ -265,15 +263,11 @@
"removeAdminDesc": "移除用户的超级管理员 (Admin) 权限。",
"lastgameDesc": "发送上一局游戏信息。",
"templateDesc": "发送 AUR-DATA/templates.txt 中指定的模板。",
"banWordKick": "{0} 因发送违禁词被踢出,累计次数:{1} 次",
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>检测到您启用了 2 个或更多插件。</size></b>\nAmong Us Revamped 与大多数模组不兼容。\n如果遇到 Bug,极有可能是因为冲突所致。",
"systemSettings": "系统设置",
"gameplaySettings": "游戏设置",
"gamemodeSettings": "模式设置",
"systemSettingsDesc": "用于提升舒适度与测试的画质/系统设置。",
"gameplaySettingsDesc": "用于改善游戏内体验的设置。",
"gamemodeSettingsDesc": "适用于特定游戏模式的情境设置。",
@@ -289,5 +283,25 @@
"gameMasterWarningTwo": "警告:游戏主管已启用",
"startWordKick": "{0} 因发送 StartWords.txt 中的关键词被踢出,累计次数:{1} 次",
"seekers": "搜寻者:",
"clearedSeekers": "已成功清除手动搜寻者列表。"
"clearedSeekers": "已成功清除手动搜寻者列表。",
"autoKickStartTimes": "发送 StartWords 关键词达到此次数时踢出玩家",
"tabGroupLevelKick": "等级管理",
"enableKickLowLevelPlayer": "启用低等级玩家踢出",
"tabGroupKickInvalidFriendCodes": "无效好友代码",
"tabGroupAutoKickStart": "StartWords",
"tabGroupAutostart": "自动开房",
"rehost": "断线后自动重新创建大厅",
"public": "自动将新大厅设为公开",
"mapVoteDuration": "地图投票持续时间",
"tabGroupDeniedWords": "违禁词",
"enableDeniedWords": "踢出发送违禁词的玩家",
"slashMapAndSeekerCmd": "谁可以使用 /seeker 与 /mapvote",
"snsChatInGameExtend": "游戏开始后发送游戏模式介绍",
"mapVoteDesc": "发起包含 5 张官方地图的地图投票。",
"allMapVoteDesc": "发起包含全部 6 张地图(包括 Eht Dleks)的地图投票。",
"banWordBan": "{0} 因发送了 DeniedWords.txt 中的关键词,第 {1} 次违规,已被封禁。",
"startWordBan": "{0} 因发送了 StartWords.txt 中的关键词,第 {1} 次违规,已被封禁。",
"moderationSettings": "管理设置",
"moderationSettingsDesc": "用于防止恶意行为和不当行为的管理设置。",
"rehostSuccess": "已成功重新创建大厅。"
}