mirror of
https://github.com/ApeMV/AmongUsRevamped.git
synced 2026-10-20 01:46:28 +00:00
A few small changes
This commit is contained in:
1 parent
3c380c1b51
commit
4e912082db
17 files changed
+615
-136
No files matched your search
+4
-1
@@ -35,6 +35,7 @@ public partial class Main : BasePlugin
|
|||||||
public static ConfigEntry<bool> DarkTheme { get; private set; }
|
public static ConfigEntry<bool> DarkTheme { get; private set; }
|
||||||
public static ConfigEntry<bool> LobbyMusic { get; private set; }
|
public static ConfigEntry<bool> LobbyMusic { get; private set; }
|
||||||
public static ConfigEntry<bool> DisableInfoWhenDead { get; private set; }
|
public static ConfigEntry<bool> DisableInfoWhenDead { get; private set; }
|
||||||
|
public static ConfigEntry<bool> DisableCommandHelper { get; private set; }
|
||||||
|
|
||||||
public static NormalGameOptionsV10 NormalOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentNormalGameOptions : null;
|
public static NormalGameOptionsV10 NormalOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentNormalGameOptions : null;
|
||||||
public static HideNSeekGameOptionsV10 HideNSeekOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentHideNSeekGameOptions : null;
|
public static HideNSeekGameOptionsV10 HideNSeekOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentHideNSeekGameOptions : null;
|
||||||
@@ -42,7 +43,7 @@ public partial class Main : BasePlugin
|
|||||||
|
|
||||||
public static bool HasArgumentException;
|
public static bool HasArgumentException;
|
||||||
public static string CredentialsText;
|
public static string CredentialsText;
|
||||||
public const string ModVersion = "v1.7.4";
|
public const string ModVersion = "v1.7.5";
|
||||||
|
|
||||||
public static float GameTimer;
|
public static float GameTimer;
|
||||||
|
|
||||||
@@ -90,8 +91,10 @@ public partial class Main : BasePlugin
|
|||||||
DarkTheme = Config.Bind("Client Options", "Dark Theme", false);
|
DarkTheme = Config.Bind("Client Options", "Dark Theme", false);
|
||||||
LobbyMusic = Config.Bind("Client Options", "Lobby Music", false);
|
LobbyMusic = Config.Bind("Client Options", "Lobby Music", false);
|
||||||
DisableInfoWhenDead = Config.Bind("Client Options", "Disable Task/Kill View", false);
|
DisableInfoWhenDead = Config.Bind("Client Options", "Disable Task/Kill View", false);
|
||||||
|
DisableCommandHelper = Config.Bind("Client Options", "Disable Command Helper", false);
|
||||||
|
|
||||||
Translator.Init();
|
Translator.Init();
|
||||||
|
Translator.Reload();
|
||||||
BanManager.Init();
|
BanManager.Init();
|
||||||
|
|
||||||
Harmony.PatchAll();
|
Harmony.PatchAll();
|
||||||
|
|||||||
+18
-3
@@ -23,9 +23,9 @@ public static class BanManager
|
|||||||
private static readonly string DenyNameListPath = $"{DataPath}/AUR-DATA/Deniednames.txt";
|
private static readonly string DenyNameListPath = $"{DataPath}/AUR-DATA/Deniednames.txt";
|
||||||
private static string BanListPath = $"{DataPath}/AUR-DATA/Banlist.txt";
|
private static string BanListPath = $"{DataPath}/AUR-DATA/Banlist.txt";
|
||||||
private static string BanWordPath = $"{DataPath}/AUR-DATA/Deniedwords.txt";
|
private static string BanWordPath = $"{DataPath}/AUR-DATA/Deniedwords.txt";
|
||||||
private static string VipListPath = $"{DataPath}/AUR-DATA/VIP.txt";
|
public static string VipListPath = $"{DataPath}/AUR-DATA/VIP.txt";
|
||||||
private static string ModeratorListPath = $"{DataPath}/AUR-DATA/Moderator.txt";
|
public static string ModeratorListPath = $"{DataPath}/AUR-DATA/Moderator.txt";
|
||||||
private static string AdminListPath = $"{DataPath}/AUR-DATA/Admin.txt";
|
public static string AdminListPath = $"{DataPath}/AUR-DATA/Admin.txt";
|
||||||
private static string TemplatePath = $"{DataPath}/AUR-DATA/Templates.txt";
|
private static string TemplatePath = $"{DataPath}/AUR-DATA/Templates.txt";
|
||||||
public static Dictionary<string, string> Templates = new();
|
public static Dictionary<string, string> Templates = new();
|
||||||
public static List<string> TempBanWhiteList = [];
|
public static List<string> TempBanWhiteList = [];
|
||||||
@@ -233,4 +233,19 @@ public static class BanManager
|
|||||||
Logger.Exception(ex, "BanManager");
|
Logger.Exception(ex, "BanManager");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string CheckTemplate(string text)
|
||||||
|
{
|
||||||
|
Dictionary<string, string> variables = new()
|
||||||
|
{
|
||||||
|
{ "ModVersion", Main.ModVersion }
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var kvp in variables)
|
||||||
|
{
|
||||||
|
text = text.Replace($"{{{kvp.Key}}}", kvp.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return text;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
using InnerNet;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using TMPro;
|
||||||
|
|
||||||
|
namespace AmongUsRevamped;
|
||||||
|
|
||||||
|
[HarmonyPatch(typeof(TextBoxTMP), nameof(TextBoxTMP.SetText))]
|
||||||
|
internal static class CommandHelper
|
||||||
|
{
|
||||||
|
private static TextMeshPro HelperText;
|
||||||
|
|
||||||
|
public class Cmd
|
||||||
|
{
|
||||||
|
public string[] Name;
|
||||||
|
public string Prompt;
|
||||||
|
public string Description;
|
||||||
|
public bool HasVariable;
|
||||||
|
}
|
||||||
|
|
||||||
|
static readonly List<Cmd> Commands = new()
|
||||||
|
{
|
||||||
|
new Cmd { Name = new[] { "/help" }, Prompt = "/help", Description = Translator.Get("helpDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
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[] { "/0kc" }, Prompt = "/0kc", Description = Translator.Get("0kcDesc"), HasVariable = false },
|
||||||
|
new Cmd { Name = new[] { "/0killcooldown" }, Prompt = "/0killcooldown", Description = Translator.Get("0kcDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
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[] { "/eg" }, Prompt = "/eg", Description = Translator.Get("egDesc"), HasVariable = false },
|
||||||
|
new Cmd { Name = new[] { "/endgame" }, Prompt = "/endgame", Description = Translator.Get("egDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/em" }, Prompt = "/em", Description = Translator.Get("emDesc"), HasVariable = false },
|
||||||
|
new Cmd { Name = new[] { "/endmeeting" }, Prompt = "/endmeeting", Description = Translator.Get("emDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/aur" }, Prompt = "/aur", Description = Translator.Get("aurDesc"), HasVariable = false },
|
||||||
|
new Cmd { Name = new[] { "/socials" }, Prompt = "/socials", Description = Translator.Get("aurDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
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[] { "/roles" }, Prompt = "/roles", Description = Translator.Get("rolesDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/kick" }, Prompt = "/kick {name}", Description = Translator.Get("kickDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/ckick" }, Prompt = "/ckick {color}", Description = Translator.Get("ckickDesc"), HasVariable = true },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/ban" }, Prompt = "/ban {name}", Description = Translator.Get("banDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/cban" }, Prompt = "/cban {color}", Description = Translator.Get("cbanDesc"), HasVariable = true },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/dump" }, Prompt = "/dump", Description = Translator.Get("dumpDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/col" }, Prompt = "/col {color}", Description = Translator.Get("colDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/color" }, Prompt = "/color {color}", Description = Translator.Get("colDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/colour" }, Prompt = "/colour {color}", Description = Translator.Get("colDesc"), HasVariable = true },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/reload" }, Prompt = "/reload", Description = Translator.Get("reloadDesc"), HasVariable = false },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/vip" }, Prompt = "/vip {name}", Description = Translator.Get("vipDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/moderator" }, Prompt = "/moderator {name}", Description = Translator.Get("moderatorDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/admin" }, Prompt = "/admin {name}", Description = Translator.Get("adminDesc"), HasVariable = true },
|
||||||
|
|
||||||
|
new Cmd { Name = new[] { "/removevip" }, Prompt = "/removevip {name}", Description = Translator.Get("cremoveVipDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/removemoderator" }, Prompt = "/removemoderator {name}", Description = Translator.Get("removeModeratorDesc"), HasVariable = true },
|
||||||
|
new Cmd { Name = new[] { "/removeadmin" }, Prompt = "/removeadmin {name}", Description = Translator.Get("removeAdminDesc"), HasVariable = true },
|
||||||
|
|
||||||
|
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 }
|
||||||
|
};
|
||||||
|
|
||||||
|
[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 (Main.DisableCommandHelper.Value)
|
||||||
|
{
|
||||||
|
HelperText.enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!HelperText)
|
||||||
|
{
|
||||||
|
HelperText = Object.Instantiate(__instance.outputText, __instance.outputText.transform.parent);
|
||||||
|
HelperText.name = "HelperText";
|
||||||
|
HelperText.color = new Color(0.7f, 0.7f, 0.7f, 0.7f);
|
||||||
|
HelperText.transform.localPosition = __instance.outputText.transform.localPosition;
|
||||||
|
HelperText.enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string t = __instance.text;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(t) || !t.StartsWith("/"))
|
||||||
|
{
|
||||||
|
HelperText.enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string textCmd = t.Split(' ')[0];
|
||||||
|
|
||||||
|
Cmd u = null;
|
||||||
|
Cmd v = null;
|
||||||
|
|
||||||
|
foreach (var cmd in Commands)
|
||||||
|
{
|
||||||
|
foreach (var a in cmd.Name)
|
||||||
|
{
|
||||||
|
string aliasCmd = a;
|
||||||
|
|
||||||
|
if (aliasCmd.Equals(textCmd))
|
||||||
|
{
|
||||||
|
v = cmd;
|
||||||
|
u = cmd;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aliasCmd.StartsWith(textCmd))
|
||||||
|
{
|
||||||
|
u ??= cmd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v != null) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v != null && !v.HasVariable && t.Length > textCmd.Length)
|
||||||
|
{
|
||||||
|
HelperText.enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
__instance.outputText.enabled = true;
|
||||||
|
|
||||||
|
if (v != null && textCmd.Equals(v.Name[0]))
|
||||||
|
{
|
||||||
|
HelperText.text = $"\n\n<size=80%><color=#FF0000>{v.Description}</color></size>";
|
||||||
|
}
|
||||||
|
else if (u != null)
|
||||||
|
{
|
||||||
|
HelperText.text = u.Prompt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HelperText.enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
HelperText.enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -58,7 +58,7 @@ namespace AmongUsRevamped
|
|||||||
|
|
||||||
public static readonly string[] crewmateAbilities =
|
public static readonly string[] crewmateAbilities =
|
||||||
{
|
{
|
||||||
"Mayor", "Workhorse", "Jester", "Speedrunner", "None"
|
"Mayor", "Workhorse", "Jester", "Tasker", "None"
|
||||||
};
|
};
|
||||||
public static readonly string[] impostorAbilities =
|
public static readonly string[] impostorAbilities =
|
||||||
{
|
{
|
||||||
@@ -89,6 +89,8 @@ namespace AmongUsRevamped
|
|||||||
public static OptionItem AutoStartTimer;
|
public static OptionItem AutoStartTimer;
|
||||||
public static OptionItem WaitAutoStart;
|
public static OptionItem WaitAutoStart;
|
||||||
public static OptionItem PlayerAutoStart;
|
public static OptionItem PlayerAutoStart;
|
||||||
|
public static OptionItem EnableJoinMessages;
|
||||||
|
public static OptionItem MessagePerPlayerNum;
|
||||||
|
|
||||||
public static OptionItem TabGroupMisc;
|
public static OptionItem TabGroupMisc;
|
||||||
|
|
||||||
@@ -259,11 +261,6 @@ namespace AmongUsRevamped
|
|||||||
public static OptionItem DisableSubmitScan;
|
public static OptionItem DisableSubmitScan;
|
||||||
public static OptionItem DisableUploadData;
|
public static OptionItem DisableUploadData;
|
||||||
|
|
||||||
// Gamemode
|
|
||||||
/*
|
|
||||||
public static OptionItem TabGroupStandard;
|
|
||||||
public static OptionItem ChatBeforeFirstMeeting;
|
|
||||||
*/
|
|
||||||
public static OptionItem TabGroupHNS;
|
public static OptionItem TabGroupHNS;
|
||||||
public static OptionItem NumSeekers;
|
public static OptionItem NumSeekers;
|
||||||
|
|
||||||
@@ -383,6 +380,9 @@ namespace AmongUsRevamped
|
|||||||
WaitAutoStart = IntegerOptionItem.Create(64421, Translator.Get("waitAutoStart"), new(10, 600, 10), 300, TabGroup.SystemSettings, false)
|
WaitAutoStart = IntegerOptionItem.Create(64421, Translator.Get("waitAutoStart"), new(10, 600, 10), 300, TabGroup.SystemSettings, false)
|
||||||
.SetValueFormat(OptionFormat.Seconds);
|
.SetValueFormat(OptionFormat.Seconds);
|
||||||
PlayerAutoStart = IntegerOptionItem.Create(64422, Translator.Get("playerAutoStart"), new(1, 15, 1), 1, TabGroup.SystemSettings, false);
|
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)
|
||||||
|
.SetParent(EnableJoinMessages);
|
||||||
|
|
||||||
TabGroupMisc = TextOptionItem.Create(60379, Translator.Get("tabGroupMisc"), TabGroup.SystemSettings)
|
TabGroupMisc = TextOptionItem.Create(60379, Translator.Get("tabGroupMisc"), TabGroup.SystemSettings)
|
||||||
.SetColor(Color.green);
|
.SetColor(Color.green);
|
||||||
|
|||||||
@@ -104,31 +104,31 @@ public static class AbilityManagement
|
|||||||
|
|
||||||
public static string RoleList()
|
public static string RoleList()
|
||||||
{
|
{
|
||||||
var firstLines = new List<string>();
|
if (!AmongUsClient.Instance.AmHost) return "";
|
||||||
|
|
||||||
if (Options.CrewmateAbility.GetValue() != 4) firstLines.Add($"Crewmate: {Options.CrewmateAbility.GetString()}");
|
var lines = new List<string>();
|
||||||
if (Options.ScientistAbility.GetValue() != 4) firstLines.Add($"Scientist: {Options.ScientistAbility.GetString()}");
|
|
||||||
if (Options.EngineerAbility.GetValue() != 4) firstLines.Add($"Engineer: {Options.EngineerAbility.GetString()}");
|
|
||||||
if (Options.NoisemakerAbility.GetValue() != 4) firstLines.Add($"Noisemaker: {Options.NoisemakerAbility.GetString()}");
|
|
||||||
if (Options.TrackerAbility.GetValue() != 4) firstLines.Add($"Tracker: {Options.TrackerAbility.GetString()}");
|
|
||||||
|
|
||||||
var secondLines = new List<string>();
|
if (Options.CrewmateAbility.GetValue() != 4) lines.Add($"Crewmate: {Options.CrewmateAbility.GetString()}");
|
||||||
|
if (Options.ScientistAbility.GetValue() != 4) lines.Add($"Scientist: {Options.ScientistAbility.GetString()}");
|
||||||
|
if (Options.EngineerAbility.GetValue() != 4) lines.Add($"Engineer: {Options.EngineerAbility.GetString()}");
|
||||||
|
if (Options.NoisemakerAbility.GetValue() != 4) lines.Add($"Noisemaker: {Options.NoisemakerAbility.GetString()}");
|
||||||
|
if (Options.TrackerAbility.GetValue() != 4) lines.Add($"Tracker: {Options.TrackerAbility.GetString()}");
|
||||||
|
if (Options.DetectiveAbility.GetValue() != 4) lines.Add($"Detective: {Options.DetectiveAbility.GetString()}");
|
||||||
|
|
||||||
if (Options.DetectiveAbility.GetValue() != 4) secondLines.Add($"Detective: {Options.DetectiveAbility.GetString()}");
|
if (Options.ImpostorAbility.GetValue() != 3) lines.Add($"Impostor: {Options.ImpostorAbility.GetString()}");
|
||||||
if (Options.ImpostorAbility.GetValue() != 3) secondLines.Add($"Impostor: {Options.ImpostorAbility.GetString()}");
|
if (Options.ShapeshifterAbility.GetValue() != 3) lines.Add($"Shapeshifter: {Options.ShapeshifterAbility.GetString()}");
|
||||||
if (Options.ShapeshifterAbility.GetValue() != 3) secondLines.Add($"Shapeshifter: {Options.ShapeshifterAbility.GetString()}");
|
if (Options.PhantomAbility.GetValue() != 3) lines.Add($"Phantom: {Options.PhantomAbility.GetString()}");
|
||||||
if (Options.PhantomAbility.GetValue() != 3) secondLines.Add($"Phantom: {Options.PhantomAbility.GetString()}");
|
if (Options.ViperAbility.GetValue() != 3) lines.Add($"Viper: {Options.ViperAbility.GetString()}");
|
||||||
if (Options.ViperAbility.GetValue() != 3) secondLines.Add($"Viper: {Options.ViperAbility.GetString()}");
|
|
||||||
|
|
||||||
string firstText = firstLines.Count > 0 ? "ABILITIES:\n\n" + string.Join("\n", firstLines) : "";
|
if (lines.Count == 0) return "";
|
||||||
string secondText = secondLines.Count > 0 ? "\n" + string.Join("\n", secondLines) : "";
|
|
||||||
|
|
||||||
return firstText + secondText;
|
return "ABILITIES:\n\n" + string.Join("\n", lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SendRoleList(ChatController c, string text, bool moderator)
|
public static void SendRoleList(ChatController c, string text, bool moderator)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(AbilityManagement.RoleList())) return;
|
if (!AmongUsClient.Instance.AmHost) return;
|
||||||
|
if (string.IsNullOrEmpty(RoleList()) || Utils.isHideNSeek) return;
|
||||||
|
|
||||||
if (text.Length <= 120)
|
if (text.Length <= 120)
|
||||||
{
|
{
|
||||||
@@ -147,6 +147,75 @@ public static class AbilityManagement
|
|||||||
if (moderator) Utils.ModeratorChatCommand(first, second, true);
|
if (moderator) Utils.ModeratorChatCommand(first, second, true);
|
||||||
else Utils.ChatCommand(c, first, second, true);
|
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 (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);
|
||||||
|
|
||||||
|
foreach (var player in players)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(RoleInfoString(player))) continue;
|
||||||
|
|
||||||
|
PendingRoleMessages++;
|
||||||
|
|
||||||
|
new LateTask(() =>
|
||||||
|
{
|
||||||
|
if (Utils.InGame)
|
||||||
|
{
|
||||||
|
Utils.SendPrivateMessage(player, RoleInfoString(player));
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
public static class CustomRoleManagement
|
public static class CustomRoleManagement
|
||||||
|
|||||||
@@ -92,8 +92,6 @@ class FixedUpdateInGamePatch
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: // Speedrun
|
case 3: // Speedrun
|
||||||
if (settingsLabel == null)
|
|
||||||
Main.NormalOptions.TaskBarMode = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0: // Reset
|
case 0: // Reset
|
||||||
|
|||||||
+8
-2
@@ -216,7 +216,7 @@ public static class Utils
|
|||||||
NormalGameEndChecker.ImpCheckComplete = false;
|
NormalGameEndChecker.ImpCheckComplete = false;
|
||||||
CreateOptionsPickerPatch.SetDleks2 = false;
|
CreateOptionsPickerPatch.SetDleks2 = false;
|
||||||
CanCallMeetings = true;
|
CanCallMeetings = true;
|
||||||
//CustomRoleManagement.HandlingRoleMessages = false;
|
AbilityManagement.HandlingRoleMessages = false;
|
||||||
PlayerControlSetRolePatch.FirstAssign = true;
|
PlayerControlSetRolePatch.FirstAssign = true;
|
||||||
PlayerControlSetRolePatch.Jesters.Clear();
|
PlayerControlSetRolePatch.Jesters.Clear();
|
||||||
|
|
||||||
@@ -226,6 +226,8 @@ public static class Utils
|
|||||||
PlayerControlCompleteTaskPatch.ignoredCompletedTasks = 0;
|
PlayerControlCompleteTaskPatch.ignoredCompletedTasks = 0;
|
||||||
PlayerControlCompleteTaskPatch.ignoredTasks = 0;
|
PlayerControlCompleteTaskPatch.ignoredTasks = 0;
|
||||||
|
|
||||||
|
OnPlayerJoinedPatch.JoinNum = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerControl[] AllAlivePlayerControls
|
public static PlayerControl[] AllAlivePlayerControls
|
||||||
@@ -376,6 +378,8 @@ public static class Utils
|
|||||||
|
|
||||||
public static void ChatCommand(ChatController __instance, string msg, string msg2, bool multi)
|
public static void ChatCommand(ChatController __instance, string msg, string msg2, bool multi)
|
||||||
{
|
{
|
||||||
|
if (OnGameJoinedPatch.WaitingForChat) return;
|
||||||
|
|
||||||
OnGameJoinedPatch.WaitingForChat = true;
|
OnGameJoinedPatch.WaitingForChat = true;
|
||||||
|
|
||||||
__instance.freeChatField.textArea.Clear();
|
__instance.freeChatField.textArea.Clear();
|
||||||
@@ -406,6 +410,8 @@ public static class Utils
|
|||||||
|
|
||||||
public static void ModeratorChatCommand(string msg, string msg2, bool multi)
|
public static void ModeratorChatCommand(string msg, string msg2, bool multi)
|
||||||
{
|
{
|
||||||
|
if (OnGameJoinedPatch.WaitingForChat) return;
|
||||||
|
|
||||||
OnGameJoinedPatch.WaitingForChat = true;
|
OnGameJoinedPatch.WaitingForChat = true;
|
||||||
|
|
||||||
new LateTask(() =>
|
new LateTask(() =>
|
||||||
@@ -574,7 +580,7 @@ public static class Utils
|
|||||||
{
|
{
|
||||||
if (p == null) return "";
|
if (p == null) return "";
|
||||||
|
|
||||||
if (p.Data.RoleType == RoleTypes.Impostor || p.Data.RoleType == RoleTypes.Shapeshifter || p.Data.RoleType == RoleTypes.Phantom || p.Data.RoleType == RoleTypes.Viper)
|
if (p.Data.RoleType == RoleTypes.Impostor || p.Data.RoleType == RoleTypes.Shapeshifter || p.Data.RoleType == RoleTypes.Phantom || p.Data.RoleType == RoleTypes.Viper || p.Data.RoleType == RoleTypes.ImpostorGhost)
|
||||||
{
|
{
|
||||||
return $"<color=#ff1919>{p.Data.RoleType}</color>";
|
return $"<color=#ff1919>{p.Data.RoleType}</color>";
|
||||||
}
|
}
|
||||||
|
|||||||
+196
-38
@@ -1,6 +1,7 @@
|
|||||||
using Hazel;
|
using Hazel;
|
||||||
using InnerNet;
|
using InnerNet;
|
||||||
using System;
|
using System;
|
||||||
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
@@ -107,7 +108,7 @@ internal static class SendChatPatch
|
|||||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (text == "/h" || text == "/help")
|
if (text == "/help")
|
||||||
{
|
{
|
||||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"{Translator.Get("allCommandsFull")}");
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"{Translator.Get("allCommandsFull")}");
|
||||||
__instance.freeChatField.textArea.Clear();
|
__instance.freeChatField.textArea.Clear();
|
||||||
@@ -118,6 +119,8 @@ internal static class SendChatPatch
|
|||||||
if (text == "/s" || text == "/start")
|
if (text == "/s" || text == "/start")
|
||||||
{
|
{
|
||||||
GameStartManager.Instance.BeginGame();
|
GameStartManager.Instance.BeginGame();
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,9 +146,186 @@ internal static class SendChatPatch
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat /*|| CustomRoleManagement.HandlingRoleMessages*/) return false;
|
if (text.StartsWith("/vip "))
|
||||||
|
{
|
||||||
|
PlayerControl target = null;
|
||||||
|
string arg = text.Substring(5).Trim();
|
||||||
|
|
||||||
if (text == "/l" || text == "/lastgame" || text == "/win" || text == "/winner")
|
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||||
|
{
|
||||||
|
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||||
|
|
||||||
|
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
target = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.AppendAllText(BanManager.VipListPath, "\n" + target.Data.FriendCode);
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("vipAdd", target.Data.PlayerName));
|
||||||
|
}
|
||||||
|
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.StartsWith("/moderator "))
|
||||||
|
{
|
||||||
|
PlayerControl target = null;
|
||||||
|
string arg = text.Substring(11).Trim();
|
||||||
|
|
||||||
|
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||||
|
{
|
||||||
|
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||||
|
|
||||||
|
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
target = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.AppendAllText(BanManager.ModeratorListPath, "\n" + target.Data.FriendCode);
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("moderatorAdd", target.Data.PlayerName));
|
||||||
|
}
|
||||||
|
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.StartsWith("/admin "))
|
||||||
|
{
|
||||||
|
PlayerControl target = null;
|
||||||
|
string arg = text.Substring(7).Trim();
|
||||||
|
|
||||||
|
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||||
|
{
|
||||||
|
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||||
|
|
||||||
|
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
target = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.AppendAllText(BanManager.AdminListPath, "\n" + target.Data.FriendCode);
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("adminAdd", target.Data.PlayerName));
|
||||||
|
}
|
||||||
|
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.StartsWith("/removevip "))
|
||||||
|
{
|
||||||
|
PlayerControl target = null;
|
||||||
|
string arg = text.Substring(11).Trim();
|
||||||
|
|
||||||
|
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||||
|
{
|
||||||
|
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||||
|
|
||||||
|
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
target = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.WriteAllLines(BanManager.VipListPath, File.ReadAllLines(BanManager.VipListPath).Where(x => x.Trim() != target.Data.FriendCode));
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("vipRemove", target.Data.PlayerName));
|
||||||
|
}
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.StartsWith("/removemoderator "))
|
||||||
|
{
|
||||||
|
PlayerControl target = null;
|
||||||
|
string arg = text.Substring(17).Trim();
|
||||||
|
|
||||||
|
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||||
|
{
|
||||||
|
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||||
|
|
||||||
|
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
target = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.WriteAllLines(BanManager.ModeratorListPath, File.ReadAllLines(BanManager.ModeratorListPath).Where(x => x.Trim() != target.Data.FriendCode));
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("moderatorRemove", target.Data.PlayerName));
|
||||||
|
}
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.StartsWith("/removeadmin "))
|
||||||
|
{
|
||||||
|
PlayerControl target = null;
|
||||||
|
string arg = text.Substring(13).Trim();
|
||||||
|
|
||||||
|
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||||
|
{
|
||||||
|
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||||
|
|
||||||
|
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
target = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.WriteAllLines(BanManager.AdminListPath, File.ReadAllLines(BanManager.AdminListPath).Where(x => x.Trim() != target.Data.FriendCode));
|
||||||
|
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("adminRemove", target.Data.PlayerName));
|
||||||
|
}
|
||||||
|
__instance.freeChatField.textArea.Clear();
|
||||||
|
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat || AbilityManagement.HandlingRoleMessages) return false;
|
||||||
|
|
||||||
|
if (text == "/l" || text == "/lastgame")
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return false;
|
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return false;
|
||||||
Utils.ChatCommand(__instance, $"{NormalGameEndChecker.LastWinReason}", "", false);
|
Utils.ChatCommand(__instance, $"{NormalGameEndChecker.LastWinReason}", "", false);
|
||||||
@@ -175,11 +355,11 @@ internal static class SendChatPatch
|
|||||||
Utils.ChatCommand(__instance, Translator.Get("juggernautPublic", Options.KillsNeededForJuggernaut.GetInt()), "", false);
|
Utils.ChatCommand(__instance, Translator.Get("juggernautPublic", Options.KillsNeededForJuggernaut.GetInt()), "", false);
|
||||||
return false;}
|
return false;}
|
||||||
|
|
||||||
if (text == "/r speedrunner"){
|
if (text == "/r tasker"){
|
||||||
Utils.ChatCommand(__instance, Translator.Get("speedrunnerPublic"), "", false);
|
Utils.ChatCommand(__instance, Translator.Get("speedrunnerPublic"), "", false);
|
||||||
return false;}
|
return false;}
|
||||||
|
|
||||||
if (text == "/aur" || text == "/amongusrevamped" || text == "/socials")
|
if (text == "/aur" || text == "/socials")
|
||||||
{
|
{
|
||||||
Utils.ChatCommand(__instance, Translator.Get("socialsAll"), "", false);
|
Utils.ChatCommand(__instance, Translator.Get("socialsAll"), "", false);
|
||||||
return false;
|
return false;
|
||||||
@@ -197,13 +377,13 @@ internal static class SendChatPatch
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text == "/sp" || text == "/sr" || text == "/speedrun")
|
if (text == "/sr" || text == "/speedrun")
|
||||||
{
|
{
|
||||||
Utils.ChatCommand(__instance, Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
|
Utils.ChatCommand(__instance, Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text == "/r" || text == "/roles" || text == "/gamemode" || text == "/gm")
|
if (text == "/r" || text == "/roles")
|
||||||
{
|
{
|
||||||
switch (Options.Gamemode.GetValue())
|
switch (Options.Gamemode.GetValue())
|
||||||
{
|
{
|
||||||
@@ -238,7 +418,7 @@ internal static class SendChatPatch
|
|||||||
{
|
{
|
||||||
if (templateMessage.Length < 121)
|
if (templateMessage.Length < 121)
|
||||||
{
|
{
|
||||||
Utils.ChatCommand(__instance, templateMessage, "", false);
|
Utils.ChatCommand(__instance, BanManager.CheckTemplate(templateMessage), "", false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -255,7 +435,7 @@ internal static class SendChatPatch
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool col1 = text.StartsWith("/col ") || text.StartsWith("/cor ");
|
bool col1 = text.StartsWith("/col ");
|
||||||
bool col2 = text.StartsWith("/color ");
|
bool col2 = text.StartsWith("/color ");
|
||||||
bool col3 = text.StartsWith("/colour ");
|
bool col3 = text.StartsWith("/colour ");
|
||||||
|
|
||||||
@@ -380,7 +560,7 @@ public static class RPCHandlerPatch
|
|||||||
|
|
||||||
BanManager.IsWordBanned(__instance, text);
|
BanManager.IsWordBanned(__instance, text);
|
||||||
|
|
||||||
bool col1 = text.StartsWith("/col ") || text.StartsWith("/cor ");
|
bool col1 = text.StartsWith("/col ");
|
||||||
bool col2 = text.StartsWith("/color ");
|
bool col2 = text.StartsWith("/color ");
|
||||||
bool col3 = text.StartsWith("/colour ");
|
bool col3 = text.StartsWith("/colour ");
|
||||||
|
|
||||||
@@ -444,28 +624,7 @@ public static class RPCHandlerPatch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/*CustomRoleManagement.HandlingRoleMessages || */OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return;
|
if (AbilityManagement.HandlingRoleMessages || OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return;
|
||||||
|
|
||||||
if (text == "/h" || text == "/help")
|
|
||||||
{
|
|
||||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashHelpAndAurCmd.GetValue()) return;
|
|
||||||
OnGameJoinedPatch.WaitingForChat = true;
|
|
||||||
|
|
||||||
new LateTask(() =>
|
|
||||||
{
|
|
||||||
Utils.SendPrivateMessage(__instance, Translator.Get("allCommandsOne"));
|
|
||||||
}, 2.2f, "MHP1");
|
|
||||||
|
|
||||||
new LateTask(() =>
|
|
||||||
{
|
|
||||||
Utils.SendPrivateMessage(__instance, Translator.Get("allCommandsTwo"));
|
|
||||||
}, 4.4f, "MHP2");
|
|
||||||
|
|
||||||
new LateTask(() =>
|
|
||||||
{
|
|
||||||
OnGameJoinedPatch.WaitingForChat = false;
|
|
||||||
}, 6.6f, "MHP3");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text == "/eg" || text == "/endgame")
|
if (text == "/eg" || text == "/endgame")
|
||||||
{
|
{
|
||||||
@@ -490,7 +649,7 @@ public static class RPCHandlerPatch
|
|||||||
GameStartManager.Instance.BeginGame();
|
GameStartManager.Instance.BeginGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text == "/l" || text == "/lastgame" || text == "/win" || text == "/winner")
|
if (text == "/l" || text == "/lastgame")
|
||||||
{
|
{
|
||||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
|
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
|
||||||
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return;
|
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return;
|
||||||
@@ -508,13 +667,13 @@ public static class RPCHandlerPatch
|
|||||||
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
|
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text == "/sp" || text == "/sr" || text == "/speedrun")
|
if (text == "/sr" || text == "/speedrun")
|
||||||
{
|
{
|
||||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
||||||
Utils.ModeratorChatCommand(Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
|
Utils.ModeratorChatCommand(Translator.Get("speedrunMode", Options.GameAutoEndsAfter.GetInt()), "", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text == "/r" || text == "/roles" || text == "/gamemode" || text == "/gm")
|
if (text == "/r" || text == "/roles")
|
||||||
{
|
{
|
||||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
||||||
switch (Options.Gamemode.GetValue())
|
switch (Options.Gamemode.GetValue())
|
||||||
@@ -558,7 +717,7 @@ public static class RPCHandlerPatch
|
|||||||
if (text == "/r juggernaut"){
|
if (text == "/r juggernaut"){
|
||||||
Utils.ModeratorChatCommand(Translator.Get("juggernautPublic", Options.KillsNeededForJuggernaut.GetInt()), "", false);}
|
Utils.ModeratorChatCommand(Translator.Get("juggernautPublic", Options.KillsNeededForJuggernaut.GetInt()), "", false);}
|
||||||
|
|
||||||
if (text == "/r speedrunner"){
|
if (text == "/r tasker"){
|
||||||
Utils.ModeratorChatCommand(Translator.Get("speedrunnerPublic"), "", false);}
|
Utils.ModeratorChatCommand(Translator.Get("speedrunnerPublic"), "", false);}
|
||||||
|
|
||||||
if (text.StartsWith("/t "))
|
if (text.StartsWith("/t "))
|
||||||
@@ -569,7 +728,7 @@ public static class RPCHandlerPatch
|
|||||||
{
|
{
|
||||||
if (templateMessage.Length < 121)
|
if (templateMessage.Length < 121)
|
||||||
{
|
{
|
||||||
Utils.ModeratorChatCommand(templateMessage, "", false);
|
Utils.ModeratorChatCommand(BanManager.CheckTemplate(templateMessage), "", false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -577,7 +736,6 @@ public static class RPCHandlerPatch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace AmongUsRevamped
|
|||||||
private static ClientOptionItem DarkTheme;
|
private static ClientOptionItem DarkTheme;
|
||||||
private static ClientOptionItem LobbyMusic;
|
private static ClientOptionItem LobbyMusic;
|
||||||
private static ClientOptionItem DisableInfoWhenDead;
|
private static ClientOptionItem DisableInfoWhenDead;
|
||||||
|
private static ClientOptionItem DisableCommandHelper;
|
||||||
|
|
||||||
public static void Postfix(OptionsMenuBehaviour __instance)
|
public static void Postfix(OptionsMenuBehaviour __instance)
|
||||||
{
|
{
|
||||||
@@ -57,6 +58,9 @@ namespace AmongUsRevamped
|
|||||||
|
|
||||||
if (LobbyMusic == null || LobbyMusic.ToggleButton == null)
|
if (LobbyMusic == null || LobbyMusic.ToggleButton == null)
|
||||||
LobbyMusic = ClientOptionItem.Create(Translator.Get("enableLobbyMusic"), Main.LobbyMusic, __instance);
|
LobbyMusic = ClientOptionItem.Create(Translator.Get("enableLobbyMusic"), Main.LobbyMusic, __instance);
|
||||||
|
|
||||||
|
if (DisableCommandHelper == null || DisableCommandHelper.ToggleButton == null)
|
||||||
|
DisableCommandHelper = ClientOptionItem.Create(Translator.Get("disableCommandHelper"), Main.DisableCommandHelper, __instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,43 +53,43 @@ class NormalGameEndChecker
|
|||||||
|
|
||||||
if (Winner == "Jester")
|
if (Winner == "Jester")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Jester wins! (Voted)\n\nImpostors: {impostorList}";
|
LastWinReason = Translator.Get("jesterWin") + impostorList;
|
||||||
canUpdateWinnerText = false;
|
canUpdateWinnerText = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Winner == "Juggernaut")
|
if (Winner == "Juggernaut")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Impostors win! (Juggernaut killed {Options.KillsNeededForJuggernaut.GetInt()} players)\n\nImpostor: {impostorList}";
|
LastWinReason = Translator.Get("juggernautWin", Options.KillsNeededForJuggernaut.GetInt()) + impostorList;
|
||||||
canUpdateWinnerText = false;
|
canUpdateWinnerText = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Winner == "Speedrunner")
|
if (Winner == "Speedrunner")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Crewmates win! (Speedrunner finished tasks)\n\nImpostor: {impostorList}";
|
LastWinReason = Translator.Get("speedrunnerWin") + impostorList;
|
||||||
canUpdateWinnerText = false;
|
canUpdateWinnerText = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Utils.AliveImpostors == 0 || Winner == "Crewmate")
|
if (Utils.AliveImpostors == 0 || Winner == "Crewmate")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Crewmates win!\n\nImpostors: {impostorList}";
|
LastWinReason = Translator.Get("crewmateWin") + impostorList;
|
||||||
canUpdateWinnerText = false;
|
canUpdateWinnerText = false;
|
||||||
}
|
}
|
||||||
else if (Utils.AliveImpostors >= Utils.AliveCrewmates || Winner == "Impostor")
|
else if (Utils.AliveImpostors >= Utils.AliveCrewmates || Winner == "Impostor")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Impostors win!\n\nImpostor: {impostorList}";
|
LastWinReason = Translator.Get("impostorWin") + impostorList;
|
||||||
canUpdateWinnerText = false;
|
canUpdateWinnerText = false;
|
||||||
}
|
}
|
||||||
else if (GameData.Instance != null && GameData.Instance.TotalTasks > 0 && GameData.Instance.CompletedTasks >= GameData.Instance.TotalTasks || Winner == "CrewmateTasks")
|
else if (GameData.Instance != null && GameData.Instance.TotalTasks > 0 && GameData.Instance.CompletedTasks >= GameData.Instance.TotalTasks || Winner == "CrewmateTasks")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Crewmates win! ({Options.TaskPercentNeededToWin.GetInt()}% Tasks)\n\nImpostors: {impostorList}";
|
LastWinReason = Translator.Get("crewmateWinTasks", Options.TaskPercentNeededToWin.GetInt()) + impostorList;
|
||||||
canUpdateWinnerText = false;
|
canUpdateWinnerText = false;
|
||||||
}
|
}
|
||||||
else if (Options.Gamemode.GetValue() < 2 || Winner == "ImpostorSabotage")
|
else if (Options.Gamemode.GetValue() < 2 || Winner == "ImpostorSabotage")
|
||||||
{
|
{
|
||||||
LastWinReason = $"Impostors win! (Sabotage)\n\nImpostors: {impostorList}" + (string.IsNullOrEmpty(customRoles) ? "" : "\n\n" + customRoles);
|
LastWinReason = Translator.Get("impostorWinMisc") + impostorList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ class ExileControllerWrapUpPatch
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!PlayerControlCompleteTaskPatch.playerTasksCompleted.ContainsKey(p))
|
if (!PlayerControlCompleteTaskPatch.playerTasksCompleted.ContainsKey(p.PlayerId))
|
||||||
{
|
{
|
||||||
PlayerControlCompleteTaskPatch.playerTasksCompleted[p] = 0;
|
PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId] = 0;
|
||||||
}
|
}
|
||||||
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p]})";
|
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,16 +15,16 @@ internal static class CoShowIntroPatch
|
|||||||
|
|
||||||
if (!AmongUsClient.Instance.AmHost) return;
|
if (!AmongUsClient.Instance.AmHost) return;
|
||||||
|
|
||||||
AbilityManagement.SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), true);
|
AbilityManagement.SendRoleMessages();
|
||||||
|
|
||||||
foreach (var p in PlayerControl.AllPlayerControls)
|
foreach (var p in PlayerControl.AllPlayerControls)
|
||||||
{
|
{
|
||||||
p.cosmetics.nameText.text = p.Data.PlayerName;
|
p.cosmetics.nameText.text = p.Data.PlayerName;
|
||||||
|
|
||||||
MurderPlayerPatch.killCount[p.Data.PlayerId] = 0;
|
MurderPlayerPatch.killCount[p.PlayerId] = 0;
|
||||||
MurderPlayerPatch.misfireCount[p.Data.PlayerId] = 0;
|
MurderPlayerPatch.misfireCount[p.PlayerId] = 0;
|
||||||
PlayerControlCompleteTaskPatch.playerTasksCompleted[p] = 0;
|
PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId] = 0;
|
||||||
PlayerControlCompleteTaskPatch.tasksPerPlayer[p] = 0;
|
PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId] = 0;
|
||||||
|
|
||||||
Logger.Info($" {p.Data.PlayerName} -> {p.Data.RoleType}", "RoleInfo");
|
Logger.Info($" {p.Data.PlayerName} -> {p.Data.RoleType}", "RoleInfo");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ internal static class OnGameJoinedPatch
|
|||||||
[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.OnPlayerJoined))]
|
[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.OnPlayerJoined))]
|
||||||
class OnPlayerJoinedPatch
|
class OnPlayerJoinedPatch
|
||||||
{
|
{
|
||||||
|
public static int JoinNum;
|
||||||
public static bool HasInvalidFriendCode(string friendcode)
|
public static bool HasInvalidFriendCode(string friendcode)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(friendcode))
|
if (string.IsNullOrEmpty(friendcode))
|
||||||
@@ -97,6 +98,18 @@ class OnPlayerJoinedPatch
|
|||||||
Logger.SendInGame($" {Client.PlayerName} Was banned for having an invalid FriendCode");
|
Logger.SendInGame($" {Client.PlayerName} Was banned for having an invalid FriendCode");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Options.EnableJoinMessages.GetBool())
|
||||||
|
{
|
||||||
|
JoinNum++;
|
||||||
|
BanManager.Templates.TryGetValue("welcome", out string msg);
|
||||||
|
|
||||||
|
if (JoinNum >= Options.MessagePerPlayerNum.GetInt())
|
||||||
|
{
|
||||||
|
JoinNum = 0;
|
||||||
|
Utils.ModeratorChatCommand($"{msg}", "", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,10 +119,11 @@ class OnPlayerLeftPatch
|
|||||||
{
|
{
|
||||||
static void Postfix([HarmonyArgument(0)] ClientData client)
|
static void Postfix([HarmonyArgument(0)] ClientData client)
|
||||||
{
|
{
|
||||||
if (!AmongUsClient.Instance.AmHost || !Utils.InGame) return;
|
if (!AmongUsClient.Instance.AmHost) return;
|
||||||
{
|
Logger.Info($" {client.PlayerName} left the game", "OnPlayerLeft");
|
||||||
PlayerControlCompleteTaskPatch.CalculateTaskWin();
|
|
||||||
}
|
if (!Utils.InGame) return;
|
||||||
|
PlayerControlCompleteTaskPatch.CalculateTaskWin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,14 +141,14 @@ public static class SetLevelPatch
|
|||||||
if (!Options.TempBanLowLevelPlayer.GetBool())
|
if (!Options.TempBanLowLevelPlayer.GetBool())
|
||||||
{
|
{
|
||||||
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
|
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
|
||||||
Logger.Info($" {__instance.Data.PlayerName} was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer");
|
Logger.Info($" {__instance.Data.PlayerName} (level {level}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer");
|
||||||
Logger.SendInGame($" {__instance.Data.PlayerName} was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
|
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
|
||||||
Logger.Info($" {__instance.Data.PlayerName} was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer");
|
Logger.Info($" {__instance.Data.PlayerName} (level {level}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer");
|
||||||
Logger.SendInGame($" {__instance.Data.PlayerName} was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
||||||
}
|
}
|
||||||
HandledLevelKicks.Add(__instance);
|
HandledLevelKicks.Add(__instance);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ public static class CheckForEndVotingPatch
|
|||||||
|
|
||||||
visualVotes.Add(new MeetingHud.VoterState { VoterId = voterId, VotedForId = votedFor });
|
visualVotes.Add(new MeetingHud.VoterState { VoterId = voterId, VotedForId = votedFor });
|
||||||
|
|
||||||
if (!PlayerControlCompleteTaskPatch.playerTasksCompleted.ContainsKey(pc)) PlayerControlCompleteTaskPatch.playerTasksCompleted[pc] = 0;
|
if (!PlayerControlCompleteTaskPatch.playerTasksCompleted.ContainsKey(voterId)) PlayerControlCompleteTaskPatch.playerTasksCompleted[voterId] = 0;
|
||||||
if (!MurderPlayerPatch.killCount.ContainsKey(voterId)) MurderPlayerPatch.killCount[voterId] = 0;
|
if (!MurderPlayerPatch.killCount.ContainsKey(voterId)) MurderPlayerPatch.killCount[voterId] = 0;
|
||||||
|
|
||||||
int extraVotes = 0;
|
int extraVotes = 0;
|
||||||
int extraVotesCrewmate = Options.ExtraVotesCrewmate.GetInt();
|
int extraVotesCrewmate = Options.ExtraVotesCrewmate.GetInt();
|
||||||
int extraVotesImpostor = Options.ExtraVotesImpostor.GetInt();
|
int extraVotesImpostor = Options.ExtraVotesImpostor.GetInt();
|
||||||
int extraVotesPerTask = (int)(Options.ExtraVotesPerTask.GetFloat()*PlayerControlCompleteTaskPatch.playerTasksCompleted[pc]+0.1f);
|
int extraVotesPerTask = (int)(Options.ExtraVotesPerTask.GetFloat()*PlayerControlCompleteTaskPatch.playerTasksCompleted[voterId]+0.1f);
|
||||||
int extraVotesPerKill = (int)(Options.ExtraVotesPerKill.GetFloat()*MurderPlayerPatch.killCount[voterId]+0.1f);
|
int extraVotesPerKill = (int)(Options.ExtraVotesPerKill.GetFloat()*MurderPlayerPatch.killCount[voterId]+0.1f);
|
||||||
|
|
||||||
if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0;
|
if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ internal static class MurderPlayerPatch
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p]})</color> - {Utils.GetRoleText(p)}";
|
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})</color> - {Utils.GetRoleText(p)}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -145,8 +145,8 @@ internal static class CheckShapeshiftPatch
|
|||||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CompleteTask))]
|
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CompleteTask))]
|
||||||
class PlayerControlCompleteTaskPatch
|
class PlayerControlCompleteTaskPatch
|
||||||
{
|
{
|
||||||
public static Dictionary<PlayerControl, int> playerTasksCompleted = new Dictionary<PlayerControl, int>();
|
public static Dictionary<byte, int> playerTasksCompleted = new Dictionary<byte, int>();
|
||||||
public static Dictionary<PlayerControl, int> tasksPerPlayer = new Dictionary<PlayerControl, int>();
|
public static Dictionary<byte, int> tasksPerPlayer = new Dictionary<byte, int>();
|
||||||
public static List<string> ignoredRoles = new List<string> {"Jester"};
|
public static List<string> ignoredRoles = new List<string> {"Jester"};
|
||||||
public static int ignoredTasks;
|
public static int ignoredTasks;
|
||||||
public static int ignoredCompletedTasks;
|
public static int ignoredCompletedTasks;
|
||||||
@@ -158,32 +158,31 @@ class PlayerControlCompleteTaskPatch
|
|||||||
|
|
||||||
foreach (var p in PlayerControl.AllPlayerControls)
|
foreach (var p in PlayerControl.AllPlayerControls)
|
||||||
{
|
{
|
||||||
/*
|
if (AbilityManagement.IsJester(p) && !tasksInitiated)
|
||||||
if (ignoredRoles.Contains(CustomRoleManagement.GetRole(p.PlayerId)) && !tasksInitiated)
|
|
||||||
{
|
{
|
||||||
ignoredTasks += p.Data.Tasks.Count;
|
ignoredTasks += p.Data.Tasks.Count;
|
||||||
tasksInitiated = true;
|
tasksInitiated = true;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
if (!playerTasksCompleted.ContainsKey(p))
|
if (!playerTasksCompleted.ContainsKey(p.PlayerId))
|
||||||
{
|
{
|
||||||
playerTasksCompleted[p] = 0;
|
playerTasksCompleted[p.PlayerId] = 0;
|
||||||
}
|
}
|
||||||
tasksPerPlayer[p] = p.Data.Tasks.Count;
|
tasksPerPlayer[p.PlayerId] = p.Data.Tasks.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
playerTasksCompleted[__instance]++;
|
playerTasksCompleted[__instance.PlayerId]++;
|
||||||
/*
|
|
||||||
if (ignoredRoles.Contains(CustomRoleManagement.GetRole(__instance.PlayerId)))
|
if (AbilityManagement.IsJester(__instance))
|
||||||
{
|
{
|
||||||
ignoredCompletedTasks = playerTasksCompleted[__instance];
|
ignoredCompletedTasks = playerTasksCompleted[__instance.PlayerId];
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
Logger.Info($" {__instance.Data.PlayerName} completed {idx}", "TaskPatch");
|
Logger.Info($" {__instance.Data.PlayerName} completed {idx}", "TaskPatch");
|
||||||
|
|
||||||
if (Options.Gamemode.GetValue() < 2)
|
if (Options.Gamemode.GetValue() < 2)
|
||||||
{
|
{
|
||||||
if (AbilityManagement.IsSpeedrunner(__instance) && !__instance.Data.IsDead && playerTasksCompleted[__instance] >= __instance.Data.Tasks.Count)
|
if (AbilityManagement.IsSpeedrunner(__instance) && !__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count)
|
||||||
{
|
{
|
||||||
Logger.Info($"Speedrunner {__instance.Data.PlayerName} won", "TaskPatch");
|
Logger.Info($"Speedrunner {__instance.Data.PlayerName} won", "TaskPatch");
|
||||||
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
|
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
|
||||||
@@ -195,7 +194,7 @@ class PlayerControlCompleteTaskPatch
|
|||||||
|
|
||||||
if (Options.Gamemode.GetValue() == 3)
|
if (Options.Gamemode.GetValue() == 3)
|
||||||
{
|
{
|
||||||
if (!__instance.Data.IsDead && playerTasksCompleted[__instance] >= __instance.Data.Tasks.Count)
|
if (!__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count)
|
||||||
{
|
{
|
||||||
Utils.CustomWinnerEndGame(__instance, 1);
|
Utils.CustomWinnerEndGame(__instance, 1);
|
||||||
NormalGameEndChecker.LastWinReason = $"{__instance.Data.PlayerName} wins! (Completed tasks)";
|
NormalGameEndChecker.LastWinReason = $"{__instance.Data.PlayerName} wins! (Completed tasks)";
|
||||||
@@ -206,7 +205,7 @@ class PlayerControlCompleteTaskPatch
|
|||||||
if (PlayerControl.LocalPlayer.Data.IsDead && !Main.DisableInfoWhenDead.Value)
|
if (PlayerControl.LocalPlayer.Data.IsDead && !Main.DisableInfoWhenDead.Value)
|
||||||
{
|
{
|
||||||
TMP_Text nameText = __instance.cosmetics.nameText;
|
TMP_Text nameText = __instance.cosmetics.nameText;
|
||||||
nameText.text = $"{__instance.Data.PlayerName}<color=green><size=90%>({playerTasksCompleted[__instance]}/{tasksPerPlayer[__instance]})</color> - {Utils.GetRoleText(__instance)}";
|
nameText.text = $"{__instance.Data.PlayerName}<color=green><size=90%>({playerTasksCompleted[__instance.PlayerId]}/{tasksPerPlayer[__instance.PlayerId]})</color> - {Utils.GetRoleText(__instance)}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,14 +29,14 @@
|
|||||||
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
|
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
|
||||||
|
|
||||||
|
|
||||||
# 🎮 Features (v1.7.4):
|
# 🎮 Features (v1.7.5):
|
||||||
## <b> 🌟 Custom Abilities:</b>
|
## <b> 🌟 Custom Abilities:</b>
|
||||||
- Mayor (Crewmate)
|
- Mayor (Crewmate)
|
||||||
- The Mayor has a configurable amount of extra votes
|
- The Mayor has a configurable amount of extra votes
|
||||||
- Jester (Crewmate)
|
- Jester (Crewmate)
|
||||||
- The Jester wins alone by getting ejected, can win with Crewmates
|
- The Jester wins alone by getting ejected, can win with Crewmates
|
||||||
- Speedrunner (Crewmate)
|
- Tasker (Crewmate)
|
||||||
- The Crewmates win if the Speedrunner completes tasks and is alive
|
- The Crewmates win if the Tasker completes tasks and is alive
|
||||||
- Workhorse (Crewmate)
|
- Workhorse (Crewmate)
|
||||||
- The Workhorse gains additional votes per completed task
|
- The Workhorse gains additional votes per completed task
|
||||||
- Tyrant (Impostor)
|
- Tyrant (Impostor)
|
||||||
@@ -49,8 +49,7 @@
|
|||||||
- To check ability descriptions, type /r {ability}
|
- To check ability descriptions, type /r {ability}
|
||||||
|
|
||||||
## <b>♠️ Client Side settings:</b>
|
## <b>♠️ Client Side settings:</b>
|
||||||
- Game Master
|
- Game Master (Spectator)
|
||||||
- Unlock FPS
|
|
||||||
- Show FPS
|
- Show FPS
|
||||||
- Dark Theme
|
- Dark Theme
|
||||||
- Toggle Lobby Music
|
- Toggle Lobby Music
|
||||||
@@ -71,24 +70,26 @@
|
|||||||
- Automatically start game
|
- Automatically start game
|
||||||
- Automatically rejoin lobby
|
- Automatically rejoin lobby
|
||||||
- Automatically send winner info
|
- Automatically send winner info
|
||||||
|
- Enable (configurable) Welcome Messages
|
||||||
|
- The Welcome Template is in Templates.txt
|
||||||
## <b>🔧 Gameplay Settings:</b>
|
## <b>🔧 Gameplay Settings:</b>
|
||||||
- Dead impostors can sabotage
|
- Dead impostors can sabotage
|
||||||
- Disable critical sabotages (invividual)
|
- Disable critical sabotages (invividual)
|
||||||
- Disable door sabotages
|
- Disable door sabotages
|
||||||
- Disable meeting calls first 30s
|
- Disable meeting calls first 30s
|
||||||
- Disable body reports
|
|
||||||
- Disable devices (per map, individual)
|
- Disable devices (per map, individual)
|
||||||
- Override decontamination time (per map)
|
- Override decontamination time (per map)
|
||||||
- Disable spore triggers on The Fungle
|
- Disable spore triggers on The Fungle
|
||||||
- % Tasks completed for Crewmates to win
|
- % Tasks completed for Crewmates to win
|
||||||
- Enable/Disable any task
|
- Enable/Disable any task
|
||||||
- All players have same tasks
|
- All players have same tasks
|
||||||
- Hide and Seek: Custom Impostor count
|
- Hide and Seek: Custom Seeker count
|
||||||
## <b>🏆 Custom Gamemodes:</b>
|
## <b>🏆 Custom Gamemodes:</b>
|
||||||
- 0 Kill Cooldown
|
- 0 Kill Cooldown
|
||||||
- Shift and Seek
|
- Shift and Seek
|
||||||
- Speedrun
|
- Speedrun
|
||||||
## <b>❓ Other Improvements:</b>
|
## <b>❓ Other Improvements:</b>
|
||||||
|
- Command Helper
|
||||||
- Creatable and customizable Templates
|
- Creatable and customizable Templates
|
||||||
- Eht Dleks (Reverse Skeld) Map
|
- Eht Dleks (Reverse Skeld) Map
|
||||||
- Ability to cancel starting countdown
|
- Ability to cancel starting countdown
|
||||||
@@ -96,7 +97,7 @@
|
|||||||
- Faster startup time
|
- Faster startup time
|
||||||
- Custom anticheat system
|
- Custom anticheat system
|
||||||
- Zoom out in lobby or when dead
|
- Zoom out in lobby or when dead
|
||||||
- See player kill/task count when dead
|
- See player kill/task count and Role when dead
|
||||||
- Higher and more accurate Option ranges
|
- Higher and more accurate Option ranges
|
||||||
- <b>🎉 And this all works in public lobbies!</b>
|
- <b>🎉 And this all works in public lobbies!</b>
|
||||||
|
|
||||||
@@ -114,21 +115,24 @@
|
|||||||
### Chat Commands
|
### Chat Commands
|
||||||
| Command | Function |
|
| Command | Function |
|
||||||
| ------------------------------------------- | ------------------------------------------------- |
|
| ------------------------------------------- | ------------------------------------------------- |
|
||||||
| /h<br>/help | Show command help |
|
| /help | Show command help |
|
||||||
| /l<br>/win | Show winner |
|
| /l<br>/lastgame | Send last game info |
|
||||||
| /r | Show current gamemode/roles description |
|
| /r | Send current gamemode/roles description |
|
||||||
| /0kc<br>/sns</br>/sp | Show respective gamemode description |
|
| /r <ability> | Send specific Ability info |
|
||||||
|
| /0kc<br>/sns</br>/sp | Send respective gamemode description |
|
||||||
| /ban <name> | Ban a player by name |
|
| /ban <name> | Ban a player by name |
|
||||||
| /kick <name> | Kick a player by name |
|
| /kick <name> | Kick a player by name |
|
||||||
| /cban <color> | Ban a player by color |
|
| /cban <color> | Ban a player by color |
|
||||||
| /ckick <color> | Kick a player by color |
|
| /ckick <color> | Kick a player by color |
|
||||||
| /dump | Copy your LogOutput file |
|
| /dump | Copy your LogOutput file |
|
||||||
| /endgame | Instantly end the game |
|
| /eg<br>/endgame | Instantly end an ongoing game |
|
||||||
| /endmeeting | Instantly end an ongoing meeting |
|
| /em<br>/endmeeting | Instantly end an ongoing meeting |
|
||||||
| /aur | Sends AUR socials (GitHub, Discord) |
|
| /aur<br>/socials | Send AUR socials (GitHub, Discord) |
|
||||||
| /color | Sets color. Can be used to bypass color limit |
|
| /col<br>/color | Set color. Can be used to bypass color limit |
|
||||||
| /reload | Resets the *Language*.JSON file to default |
|
| /reload | Reset the *Language*.JSON file to default |
|
||||||
| /start | Starts 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 |
|
||||||
|
|
||||||
|
|
||||||
**Credit to these mods and their developers for their code:**
|
**Credit to these mods and their developers for their code:**
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
"enableDarkTheme": "Enable Dark Theme",
|
"enableDarkTheme": "Enable Dark Theme",
|
||||||
"enableLobbyMusic": "Lobby Music",
|
"enableLobbyMusic": "Lobby Music",
|
||||||
"disableInfoWhenDead": "Hide Info When Dead",
|
"disableInfoWhenDead": "Hide Info When Dead",
|
||||||
|
"disableCommandHelper": "Disable Command Helper",
|
||||||
|
|
||||||
"gameMasterWarning":"You will now spectate games until Game Master is turned off.",
|
"gameMasterWarning":"You will now spectate games until Game Master is turned off.",
|
||||||
|
|
||||||
@@ -34,6 +35,8 @@
|
|||||||
"autoStartTimer": "Countdown For Auto Start",
|
"autoStartTimer": "Countdown For Auto Start",
|
||||||
"waitAutoStart": "Auto Start After",
|
"waitAutoStart": "Auto Start After",
|
||||||
"playerAutoStart": "Players Needed To Auto Start",
|
"playerAutoStart": "Players Needed To Auto Start",
|
||||||
|
"enableJoinMessages": "Enable Welcome Messages",
|
||||||
|
"messagePerPlayerNum": "Message Per Amount Of Joins",
|
||||||
"tabGroupMisc": "Miscelleneous",
|
"tabGroupMisc": "Miscelleneous",
|
||||||
"startCountdown": "Default Starting Countdown",
|
"startCountdown": "Default Starting Countdown",
|
||||||
"colorCommandLevel": "Who Can use Color Commands",
|
"colorCommandLevel": "Who Can use Color Commands",
|
||||||
@@ -219,9 +222,9 @@
|
|||||||
"SnSModeOne": "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off",
|
"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",
|
"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",
|
"speedrunMode": "Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {0}s",
|
||||||
"allCommandsFull": "Commands:\n/r - Current mode description\n/0kc, /sns, /sp - Specific mode description\n/l - Shows last winner info\n/kick, /ban - Bans or kicks a player by name\n/ckick, /cban - Bans or kicks a player by color",
|
|
||||||
"allCommandsOne": "Commands:\n/r - Current mode description\n/0kc, /sns, /sp - Specific mode description\n/l - Shows last winner info",
|
"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.",
|
||||||
"allCommandsTwo": "/kick, /ban - Bans or kicks a player by name\n/ckick, /cban - Bans or kicks a player by color",
|
|
||||||
"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",
|
"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.",
|
"translationReloaded": "Your file has successfully been reset.\nTo apply the changes, restart your game.",
|
||||||
|
|
||||||
@@ -229,7 +232,7 @@
|
|||||||
"tyrantPublic": "Tyrant:\n\nThe Tyrant is an Impostor 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.",
|
"juggernautPublic": "Juggernaut:\n\nThe Impostors instantly win if the Juggernaut gains {0} kills.",
|
||||||
"speedrunnerPublic": "Speedrunner:\n\nThe Crewmates win if the Speedrunner completes tasks and is alive. The Speedrunner has more tasks.",
|
"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.",
|
"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.",
|
"workhorsePublic": "Workhorse:\n\nThe Workhorse gains {0} additional vote(s) per completed task. Votes are rounded down.",
|
||||||
@@ -248,8 +251,8 @@
|
|||||||
|
|
||||||
"extraVotesCrewmate": "Extra Votes For Mayor",
|
"extraVotesCrewmate": "Extra Votes For Mayor",
|
||||||
"extraVotesPerTask": "Extra Votes Per Task For Workhorse",
|
"extraVotesPerTask": "Extra Votes Per Task For Workhorse",
|
||||||
"speedrunnerShortTasks": "Short Tasks For Speedrunner",
|
"speedrunnerShortTasks": "Short Tasks For Tasker",
|
||||||
"speedrunnerLongTasks": "Long Tasks For Speedrunner",
|
"speedrunnerLongTasks": "Long Tasks For Tasker",
|
||||||
|
|
||||||
"tabGroupImpostorAbilities": "Impostor Ability Settings",
|
"tabGroupImpostorAbilities": "Impostor Ability Settings",
|
||||||
"impostorAbility": "Impostor (Role) Ability",
|
"impostorAbility": "Impostor (Role) Ability",
|
||||||
@@ -261,9 +264,25 @@
|
|||||||
"extraVotesPerKill": "Extra Votes Per Kill For Stealer",
|
"extraVotesPerKill": "Extra Votes Per Kill For Stealer",
|
||||||
"killsNeededForJuggernaut": "Kills Needed For Juggernaut",
|
"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",
|
"ability": "Ability",
|
||||||
|
|
||||||
"templateWelcome": "# In this file you can add Templates, which serve as easy copy-paste alternatives.\n# To create a template, write a new line with the same formatting as the test Template below.\n# Note that Templates can't be longer than 120 characters and can't contain special characters. Having so will kick you.\n\ntest: this is an example template. Type '/t test' to see it.",
|
"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",
|
"moderatorWelcome": "# In this file you can add Moderators by Friendcode.\n# If you add someone, they will gain a purple name in-game.\n# Go to 'System Settings' in-game to customize Moderator permissions. Below is a Friendcode example.\n\nfriendcode#0000",
|
||||||
"vipWelcome": "# In this file you can add VIP's by Friendcode.\n# If you add someone, they will gain a yellow name in-game.\n# Go to 'System Settings' in-game to customize VIP permissions. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
"vipWelcome": "# In this file you can add VIP's by Friendcode.\n# If you add someone, they will gain a yellow name in-game.\n# Go to 'System Settings' in-game to customize VIP permissions. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
||||||
"adminWelcome": "# In this file you can add Admins by Friendcode.\n# If you add someone, they will gain a red name in-game.\n# Go to 'System Settings' in-game to customize Admin permissions. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
"adminWelcome": "# In this file you can add Admins by Friendcode.\n# If you add someone, they will gain a red name in-game.\n# Go to 'System Settings' in-game to customize Admin permissions. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
||||||
@@ -273,5 +292,39 @@
|
|||||||
|
|
||||||
"noGameEndWarning": "WARNING: No Game End is enabled",
|
"noGameEndWarning": "WARNING: No Game End is enabled",
|
||||||
|
|
||||||
"tooLongTemplate": "Your Template is longer than 120 characters and would kick you upon sending. Please reduce the length."
|
"tooLongTemplate": "Your Template is longer than 120 characters and would kick you upon sending. Please reduce the length.",
|
||||||
|
|
||||||
|
"vipAdd": "Successfully added {0} as VIP.",
|
||||||
|
"moderatorAdd": "Successfully added {0} as Moderator.",
|
||||||
|
"adminAdd": "Successfully added {0} as Admin.",
|
||||||
|
"vipRemove": "Successfully removed VIP from {0}.",
|
||||||
|
"moderatorRemove": "Successfully removed Moderator from {0}.",
|
||||||
|
"adminRemove": "Successfully removed Admin from {0}.",
|
||||||
|
"permFail": "Could not find user '{0}'. Did you write it correctly?",
|
||||||
|
|
||||||
|
"helpDesc": "Show all commands and what they do.",
|
||||||
|
"snsDesc": "Send Shift and Seek gamemode Description.",
|
||||||
|
"0kcDesc": "Send 0 Kill Cooldown gamemode Description.",
|
||||||
|
"SrDesc": "Send Speedrun 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",
|
||||||
|
"rolesDesc": "Send all abilities/gamemode overview.",
|
||||||
|
"kickDesc": "Kick a player by name.",
|
||||||
|
"ckickDesc": "Kick a player by color.",
|
||||||
|
"banDesc": "Ban a player by name.",
|
||||||
|
"cbanDesc": "Ban a player by color.",
|
||||||
|
"dumpDesc": "Copy LogOutput into a seperate file.",
|
||||||
|
"colDesc": "Set your color.",
|
||||||
|
"reloadDesc": "Reload language file.",
|
||||||
|
"vipDesc": "Add user as VIP.",
|
||||||
|
"moderatorDesc": "Add user as Moderator.",
|
||||||
|
"adminDesc": "Add user as admin.",
|
||||||
|
"cremoveVipDesc": "Remove VIP from user.",
|
||||||
|
"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."
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user