Compare commits

...
7 Commits
Author SHA1 Message Date
Ape f456eb63d5 1.8.1 2026-06-12 11:51:57 +02:00
Ape 8e013830b6 1.8.0 2026-06-07 13:52:31 +02:00
Ape 5e74dd1f84 1.7.7 2026-06-05 12:56:13 +02:00
Ape ca39da4d64 fix (3) 2026-06-04 15:35:43 +02:00
Ape 5558350749 fix (2) 2026-06-04 15:34:20 +02:00
Ape 9a0b38c276 Fix 2026-06-04 15:31:03 +02:00
Ape 0f2516fdf5 Mostly bug fixes, some changes 2026-06-04 15:17:19 +02:00
19 changed files with 209 additions and 69 deletions

No files matched your search

+3 -2
View File
@@ -43,11 +43,12 @@ public partial class Main : BasePlugin
public static bool HasArgumentException;
public static string CredentialsText;
public const string ModVersion = "v1.7.6";
public const string ModVersion = "v1.8.1";
public static float GameTimer;
public static readonly Dictionary<int, int> SayStartTimes = [];
public static readonly Dictionary<int, int> SayDeniedWordTimes = [];
public static PlayerControl[] AllPlayerControls
{
@@ -96,7 +97,7 @@ public partial class Main : BasePlugin
Translator.Init();
Translator.Reload();
BanManager.Init();
Harmony.PatchAll();
ConsoleManager.DetachConsole();
+1 -1
View File
@@ -18,7 +18,7 @@
<ItemGroup>
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" ExcludeAssets="runtime;native" />
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2026.3.31" PrivateAssets="all" Condition="'$(Configuration)' == 'Release'"/>
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2026.6.5" PrivateAssets="all" Condition="'$(Configuration)' == 'Release'"/>
<PackageReference Include="AmongUs.GameLibs.Android" Version="2025.10.14" PrivateAssets="all" Condition="'$(Configuration)' == 'Android'"/>
<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
+15 -4
View File
@@ -170,17 +170,28 @@ public static class BanManager
{
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0) return false;
int clientId = player.Data.ClientId;
var bannedWords = File.ReadAllLines(BanWordPath).Where(x => !x.StartsWith("#"));
if (bannedWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase)))
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, false);
Logger.Info($" {player.Data.PlayerName} was kicked because they sent a banned word", "Kick");
Logger.SendInGame($"{player.Data.PlayerName} was kicked because they sent a banned word");
if (!Main.SayDeniedWordTimes.ContainsKey(clientId))
{
Main.SayDeniedWordTimes.Add(clientId, 0);
}
Main.SayDeniedWordTimes[clientId]++;
if (Main.SayDeniedWordTimes[clientId] >= Options.DeniedWordsToKick.GetInt())
{
AmongUsClient.Instance.KickPlayer(clientId, false);
Logger.Info(Translator.Get("banWordKick", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()), "DeniedWordKick");
Logger.SendInGame(Translator.Get("banWordKick", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()));
}
return true;
}
else return false;
}
[HarmonyPatch(typeof(BanMenu), nameof(BanMenu.Select))]
+3 -3
View File
@@ -78,11 +78,11 @@ internal static class CommandHelper
[HarmonyPostfix]
public static void Postfix(TextBoxTMP __instance)
{
if (!HudManager.InstanceExists || HudManager.Instance.Chat == null || HudManager.Instance.Chat.freeChatField == null || __instance != HudManager.Instance.Chat.freeChatField.textArea) return;
if (!HudManager.InstanceExists || HudManager.Instance.Chat == null || HudManager.Instance.Chat.freeChatField == null || HudManager.Instance.Chat.freeChatField.textArea == null || __instance != HudManager.Instance.Chat.freeChatField.textArea) return;
if (Main.DisableCommandHelper.Value)
if (Main.DisableCommandHelper.Value || !AmongUsClient.Instance.AmHost)
{
HelperText.enabled = false;
if (HelperText != null) HelperText.enabled = false;
return;
}
+5 -2
View File
@@ -77,6 +77,8 @@ namespace AmongUsRevamped
public static OptionItem KickInvalidFriendCodes;
public static OptionItem TempBanInvalidFriendCodes;
public static OptionItem DeniedWordsToKick;
public static OptionItem AutoKickStart;
public static OptionItem AutoKickStartAsBan;
public static OptionItem AutoKickStartTimes;
@@ -103,7 +105,6 @@ namespace AmongUsRevamped
public static OptionItem SlashColorCmd;
public static OptionItem SlashRolesAndGamemodeCmd;
public static OptionItem SlashLastGameCmd;
public static OptionItem SlashHelpAndAurCmd;
public static OptionItem SlashKickCmd;
public static OptionItem SlashBanCmd;
public static OptionItem SlashEndMeetingCmd;
@@ -350,6 +351,9 @@ namespace AmongUsRevamped
TabGroupMain = TextOptionItem.Create(60000, Translator.Get("tabGroupMain"), TabGroup.SystemSettings)
.SetColor(Color.blue);
DeniedWordsToKick = IntegerOptionItem.Create(60049, Translator.Get("deniedWordsToKick"), new(1, 5, 1), 1, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Level);
KickLowLevelPlayer = IntegerOptionItem.Create(60050, Translator.Get("kickLowLevelPlayer"), new(0, 100, 1), 0, TabGroup.SystemSettings, false)
.SetValueFormat(OptionFormat.Level);
TempBanLowLevelPlayer = BooleanOptionItem.Create(60051, Translator.Get("tempBanLowLevelPlayer"), false, TabGroup.SystemSettings, false)
@@ -398,7 +402,6 @@ namespace AmongUsRevamped
SlashColorCmd = StringOptionItem.Create(60401, Translator.Get("slashColorCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashRolesAndGamemodeCmd = StringOptionItem.Create(60402, Translator.Get("slashRolesAndGamemodeCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashLastGameCmd = StringOptionItem.Create(60403, Translator.Get("slashLastGameCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashHelpAndAurCmd = StringOptionItem.Create(60404, Translator.Get("slashHelpAndAurCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
SlashKickCmd = StringOptionItem.Create(60405, Translator.Get("slashKickCmd"), accessLevels, 2, TabGroup.SystemSettings, false);
SlashBanCmd = StringOptionItem.Create(60406, Translator.Get("slashBanCmd"), accessLevels, 2, TabGroup.SystemSettings, false);
SlashEndMeetingCmd = StringOptionItem.Create(60407, Translator.Get("slashEndMeetingCmd"), accessLevels, 3, TabGroup.SystemSettings, false);
+3 -3
View File
@@ -165,7 +165,7 @@ public static class AbilityManagement
private static int PendingRoleMessages = 0;
public static void SendRoleMessages()
{
if (!AmongUsClient.Instance.AmHost) return;
if (!AmongUsClient.Instance.AmHost || Options.Gamemode.GetValue() > 1) return;
if (string.IsNullOrEmpty(RoleList()) || PlayerControl.LocalPlayer.Data.IsDead)
{
@@ -175,12 +175,12 @@ public static class AbilityManagement
}
var players = PlayerControl.AllPlayerControls.ToArray().ToList();
float delay = 4.4f;
float delay = 6.6f;
PendingRoleMessages = 0;
HandlingRoleMessages = true;
SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), false);
SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), true);
foreach (var player in players)
{
+2 -2
View File
@@ -111,7 +111,7 @@ class FixedUpdateInGamePatch
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
Logger.Info($" Crewmates won because the game took longer than {Options.CrewAutoWinsGameAfter.GetInt()}s", "SNSManager");
NormalGameEndChecker.LastWinReason = $"Crewmates win! (Timer)\n\nImpostors:\n" + string.Join("\n", NormalGameEndChecker.imps.Select(p => p.Data.PlayerName));
NormalGameEndChecker.CheckWinnerText("SnSTimer");
}
}
// 3 = Speedrun
@@ -123,7 +123,7 @@ class FixedUpdateInGamePatch
Utils.CustomWinnerEndGame(PlayerControl.LocalPlayer, 0);
Logger.Info($" No one won because the game took longer than {Options.GameAutoEndsAfter.GetInt()}s", "SpeedrunManager");
NormalGameEndChecker.LastWinReason = $"No one wins! (Timer)";
NormalGameEndChecker.CheckWinnerText("NoOneWin");
}
}
}
+1
View File
@@ -19,6 +19,7 @@ public static class Translator
public static void Init()
{
Logger.Info($" Among Us Revamped {Main.ModVersion}", "Init");
CheckLanguageFile(_currentLang);
LoadLanguage(_currentLang);
}
+7 -1
View File
@@ -228,6 +228,12 @@ public static class Utils
OnPlayerJoinedPatch.JoinNum = 0;
PlayerControlSetRolePatch.Seekers.Clear();
PlayerControlSetRolePatch.Jesters.Clear();
PlayerControlSetRolePatch.FirstAssign = true;
OnGameStartPatch.ScheduleExile = false;
CoShowIntroPatch.IntroInitiated = false;
}
public static PlayerControl[] AllAlivePlayerControls
@@ -572,7 +578,7 @@ public static class Utils
return null;
}
Logger.Info($"Found {methodName}.MoveNext", "GetStateMachineMoveNext");
// Logger.Info($"Found {methodName}.MoveNext", "GetStateMachineMoveNext");
return moveNext;
}
+39 -4
View File
@@ -373,7 +373,14 @@ internal static class SendChatPatch
if (text == "/sns" || text == "/shiftandseek")
{
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
{
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeThree", Options.CrewAutoWinsGameAfter.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
else
{
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
return false;
}
@@ -396,7 +403,14 @@ internal static class SendChatPatch
break;
case 2:
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
{
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeThree", Options.CrewAutoWinsGameAfter.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
else
{
Utils.ChatCommand(__instance, Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
break;
case 3:
@@ -656,6 +670,12 @@ public static class RPCHandlerPatch
Utils.ModeratorChatCommand($"{NormalGameEndChecker.LastWinReason}", "", false);
}
if (text == "/aur" || text == "/socials")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
Utils.ModeratorChatCommand(Translator.Get("socialsAll"), "", false);
}
if (text == "/0kc" || text == "/0killcooldown")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
@@ -664,7 +684,15 @@ public static class RPCHandlerPatch
if (text == "/sns" || text == "/shiftandseek")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
{
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeThree", Options.CrewAutoWinsGameAfter.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
else
{
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
}
if (text == "/sr" || text == "/speedrun")
@@ -687,7 +715,14 @@ public static class RPCHandlerPatch
break;
case 2:
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
{
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeThree", Options.CrewAutoWinsGameAfter.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
else
{
Utils.ModeratorChatCommand(Translator.Get("SnSModeOne"), Translator.Get("SnSModeTwo", Options.CrewAutoWinsGameAfter.GetInt(), Options.CantKillTime.GetInt(), Options.MisfiresToSuicide.GetInt()), true);
}
break;
case 3:
+27 -1
View File
@@ -180,6 +180,7 @@ namespace AmongUsRevamped
private static PassiveButton template;
private static PassiveButton discordButton;
private static PassiveButton gitHubButton;
private static PassiveButton animationSceneButton;
private static Transform buttonParent;
public static void Postfix(MainMenuManager __instance)
{
@@ -212,6 +213,18 @@ namespace AmongUsRevamped
"GitHub");
}
if (animationSceneButton == null)
{
animationSceneButton = CreateButton(
__instance,
"AnimationTestSceneButton",
new(0f, 2.65f, 1f),
new(139, 0, 0, byte.MaxValue),
new(255, 127, 127, byte.MaxValue),
() => SceneChanger.ChangeScene("AnimationTestScene"),
"Animation Tester");
}
var bg = GameObject.Find("BackgroundTexture");
if (bg != null)
{
@@ -230,6 +243,12 @@ namespace AmongUsRevamped
div.SetActive(false);
}
var logo = GameObject.Find("MainUI/AspectScaler/LeftPanel/Sizer/LOGO-AU");
if (logo != null)
{
logo.SetActive(false);
}
Transform tintTrans = __instance.transform.Find("MainUI/Tint");
var tint = tintTrans.gameObject;
@@ -290,7 +309,14 @@ namespace AmongUsRevamped
button.name = name;
button.transform.localPosition = localPosition;
button.transform.localScale = new Vector3(0.8f, 1f, 1f);
if (name == "GitHubButton" || name == "DiscordButton")
{
button.transform.localScale = new Vector3(0.8f, 1f, 1f);
}
else
{
button.transform.localScale = new Vector3(1.8f, 1.6f, 1f);
}
var aspect = button.GetComponent<AspectPosition>();
if (aspect != null)
+1 -1
View File
@@ -58,7 +58,7 @@ internal static class DisableDevice
foreach (PlayerControl pc in Main.AllPlayerControls)
{
if (pc.Data.IsDead || Main.GM.Value && pc == PlayerControl.LocalPlayer) return;
if (pc.Data.IsDead || (Main.GM.Value && pc == PlayerControl.LocalPlayer)) continue;
try
{
+14
View File
@@ -72,6 +72,20 @@ class NormalGameEndChecker
return;
}
if (Winner == "SnSTimer")
{
LastWinReason = Translator.Get("crewmateWinTimer", Options.CrewAutoWinsGameAfter.GetInt()) + impostorList;
canUpdateWinnerText = false;
return;
}
if (Winner == "NoOneWinsSpeedrun")
{
LastWinReason = Translator.Get("noOneWin", Options.GameAutoEndsAfter.GetInt());
canUpdateWinnerText = false;
return;
}
if (Utils.AliveImpostors == 0 || Winner == "Crewmate")
{
LastWinReason = Translator.Get("crewmateWin") + impostorList;
+5 -2
View File
@@ -9,12 +9,15 @@ namespace AmongUsRevamped;
[HarmonyPatch(typeof(HudManager), nameof(HudManager.CoShowIntro))]
internal static class CoShowIntroPatch
{
public static bool IntroInitiated;
public static void Postfix(IntroCutscene __instance)
{
Logger.Info(" Intro initiated", "CoShowIntro");
if (!AmongUsClient.Instance.AmHost) return;
IntroInitiated = true;
AbilityManagement.SendRoleMessages();
foreach (var p in PlayerControl.AllPlayerControls)
@@ -40,14 +43,14 @@ internal static class CoShowIntroPatch
}, 33f, "MeetingEnabled");
}
if (Options.Gamemode.GetValue() == 2 && Options.SNSChatInGame.GetBool() /*|| Options.Gamemode.GetValue() == 0 && Options.ChatBeforeFirstMeeting.GetBool()*/)
if (Options.Gamemode.GetValue() == 2 && Options.SNSChatInGame.GetBool())
{
_ = new LateTask(() =>
{
PlayerControl.LocalPlayer.CmdReportDeadBody(null);
if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
}, 9f, "SetChatVisible");
}, 9.5f, "SetChatVisible");
}
}
}
+11
View File
@@ -153,4 +153,15 @@ public static class SetLevelPatch
HandledLevelKicks.Add(__instance);
}
}
}
[HarmonyPatch(typeof(GameStartManager), nameof(GameStartManager.Start))]
public static class ShowLobbyTimer_GameStartManager_Start_Postfix
{
public static void Postfix(GameStartManager __instance)
{
if (__instance == null || !GameData.Instance || !AmongUsClient.Instance || AmongUsClient.Instance.NetworkMode == NetworkModes.LocalGame || !AmongUsClient.Instance.AmHost) return;
HudManager.Instance.ShowLobbyTimer(600);
}
}
+31 -17
View File
@@ -13,8 +13,9 @@ internal class CoStartGamePatch
if (!AmongUsClient.Instance.AmHost) return;
Logger.Info(" -------- GAME STARTED --------", "StartGame");
Logger.Info($" Gamemode: {Options.Gamemode.GetValue()}", "StartGame");
Logger.Info($" Gamemode: {Options.Gamemode.GetString()}", "StartGame");
Logger.Info($" Players: {PlayerControl.AllPlayerControls.Count}", "StartGame");
Logger.Info($" Map: {(MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId}", "StartGame");
NormalGameEndChecker.imps.Clear();
NormalGameEndChecker.LastWinReason = "";
@@ -25,9 +26,9 @@ internal class CoStartGamePatch
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.RpcSetRole))]
class PlayerControlSetRolePatch
{
private static int i;
public static bool FirstAssign;
private static HashSet<byte> Seekers = new();
private static readonly HashSet<byte> ProcessedPlayers = new();
public static HashSet<byte> Seekers = new();
public static HashSet<PlayerControl> Jesters = new();
private static readonly System.Random rand = new System.Random();
@@ -35,17 +36,17 @@ class PlayerControlSetRolePatch
{
if (!FirstAssign || !AmongUsClient.Instance.AmHost) return true;
var oldRole = roleType;
if (!ProcessedPlayers.Add(__instance.PlayerId)) return true;
canOverrideRole = false;
if (Main.GM.Value && __instance == PlayerControl.LocalPlayer)
{
roleType = RoleTypes.CrewmateGhost;
return true;
roleType = RoleTypes.Crewmate;
OnGameStartPatch.ScheduleExile = true;
}
if (Utils.isHideNSeek && i == 0)
if (Utils.isHideNSeek && Seekers.Count() == 0)
{
int seekersCount = Options.NumSeekers.GetInt();
@@ -77,22 +78,21 @@ class PlayerControlSetRolePatch
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek)
{
if (__instance == PlayerControl.LocalPlayer && Main.GM.Value)
{
PlayerControl.LocalPlayer.myTasks.Clear();
return true;
}
if (Options.EngineerMode.GetBool()) roleType = RoleTypes.Engineer;
else roleType = RoleTypes.Crewmate;
}
i++;
if (i >= PlayerControl.AllPlayerControls.Count)
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek)
{
if (roleType == RoleTypes.Impostor || roleType == RoleTypes.Phantom || roleType == RoleTypes.Viper) roleType = RoleTypes.Shapeshifter;
}
if (ProcessedPlayers.Count >= PlayerControl.AllPlayerControls.Count)
{
Seekers.Clear();
ProcessedPlayers.Clear();
FirstAssign = false;
i = 0;
Logger.Info("PCSRP successful", "RoleManaging");
}
@@ -105,7 +105,21 @@ class PlayerControlSetRolePatch
{
Jesters.Add(__instance);
}
return true;
}
}
[HarmonyPatch(typeof(HudManager), nameof(HudManager.OnGameStart))]
internal static class OnGameStartPatch
{
public static bool ScheduleExile;
public static void Postfix()
{
if (ScheduleExile)
{
PlayerControl.LocalPlayer.Exiled();
ScheduleExile = false;
}
}
}
+14 -6
View File
@@ -15,8 +15,9 @@ class ReportDeadBodyPatch
public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)] NetworkedPlayerInfo target)
{
if (!AmongUsClient.Instance.AmHost || __instance == null) return true;
if (Utils.isHideNSeek) return false;
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings /*&& !Options.ChatBeforeFirstMeeting.GetBool()*/ && target == null)
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings && target == null && Options.Gamemode.GetValue() < 2)
{
Logger.Info($" {__instance.Data.PlayerName} is calling a meeting too fast, attempt blocked", "ReportDeadBodyPatch");
return false;
@@ -26,10 +27,17 @@ class ReportDeadBodyPatch
if (Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3)
{
if (target != null) Logger.Info($" Stopped {__instance.Data.PlayerName} reporting the body of {target.PlayerName}", "ReportDeadBodyPatch");
else Logger.Info($" Stopped {__instance.Data.PlayerName} trying to call a meeting", "ReportDeadBodyPatch");
return false;
if (target != null)
{
Logger.Info($" Stopped {__instance.Data.PlayerName} reporting the body of {target.PlayerName}", "ReportDeadBodyPatch");
return false;
}
if (__instance != PlayerControl.LocalPlayer)
{
Logger.Info($" Stopped {__instance.Data.PlayerName} trying to call a meeting", "ReportDeadBodyPatch");
return false;
}
return true;
}
else return true;
}
@@ -211,7 +219,7 @@ class PlayerControlCompleteTaskPatch
public static void CalculateTaskWin()
{
if (!Utils.GamePastRoleSelection || Utils.isHideNSeek || Options.NoGameEnd.GetBool()) return;
if (!Utils.GamePastRoleSelection || Utils.isHideNSeek || Options.NoGameEnd.GetBool() || !CoShowIntroPatch.IntroInitiated) return;
//Logger.Info($" Checking if {GameData.Instance.CompletedTasks} - {ignoredCompletedTasks} >= ({GameData.Instance.TotalTasks} - {ignoredTasks}) * 0.01 * {Options.TaskPercentNeededToWin.GetInt()}", "TaskPatch");
+11 -9
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.7.6):
# 🎮 Features (v1.8.1):
## <b> 🌟 Custom Abilities:</b>
- Mayor (Crewmate)
- The Mayor has a configurable amount of extra votes
@@ -54,7 +54,6 @@
- Dark Theme
- Toggle Lobby Music
- Show/Hide Info When Dead
- Customizable strings
## <b>⚙️ Technical settings:</b>
- Kick/Ban players under a certain level
- Kick/Ban invalid FriendCodes
@@ -99,6 +98,8 @@
- Zoom out in lobby or when dead
- See player kill/task count and Role when dead
- Higher and more accurate Option ranges
- Always visible lobby timer
- Access experimental animation test scene
- <b>🎉 And this all works in public lobbies!</b>
### Hotkeys
@@ -118,26 +119,27 @@
| /help | Show command help |
| /l<br>/lastgame | Send last game info |
| /r | Send current gamemode/roles description |
| /r <ability> | Send specific Ability info |
| /r {ability} | Send specific Ability info |
| /0kc<br>/sns</br>/sp | Send respective gamemode description |
| /ban <name> | Ban a player by name |
| /kick <name> | Kick a player by name |
| /cban <color> | Ban a player by color |
| /ckick <color> | Kick a player by color |
| /ban {name} | Ban a player by name |
| /kick {name} | Kick a player by name |
| /cban {color} | Ban a player by color |
| /ckick {color} | Kick a player by color |
| /dump | Copy your LogOutput file |
| /eg<br>/endgame | Instantly end an ongoing game |
| /em<br>/endmeeting | Instantly end an ongoing meeting |
| /aur<br>/socials | Send AUR socials (GitHub, Discord) |
| /col<br>/color | Set color. Can be used to bypass color limit |
| /reload | Reset the *Language*.JSON file to default |
| /s<br/start | Start game countdown |
| /s<br>/start | Start game countdown |
| /vip<br>/moderator<br>/admin | Add a user to respective list by name |
| /t <template> | Send a Template from Templates.txt |
| /t {template} | Send a Template from Templates.txt |
‎
**Credit to these mods and their developers for their code:**
### :star: [AUnlocker](https://github.com/astra1dev/AUnlocker)
> - Original NumberOptionsPatch
> - Always Show Lobby Timer
### :star: [EHR (Formerly TOHE+)](https://github.com/Gurge44/EndlessHostRoles)
> - Task Patching
### :star: [TOH](https://github.com/tukasa0001/TownOfHost) :
+16 -11
View File
@@ -10,7 +10,7 @@
"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. WARNING: Ability messages will not be sent and role assigning might be inaccurate if this setting is enabled.",
"cancelStartCountdown": "Start countdown canceled",
@@ -19,8 +19,9 @@
"kickLowLevelPlayer": "Kick Players Under Level",
"tempBanLowLevelPlayer": "Ban Instead Of Kick",
"dontKickLevelOnes": "Don't Kick Lv.1 Players For Glitched Lobbies",
"kickInvalidFriendCodes": "Kick Invalid FriendCodes",
"kickInvalidFriendCodes": "Kick Invalid (Empty) Friendcodes",
"tempBanInvalidFriendCodes": "Ban Instead Of Kick",
"deniedWordsToKick": "Sent Denied Words To Kick Player",
"applyBanList": "Apply BanList",
"applyDenyNameList": "Apply DenyName List",
"applyModeratorList": "Apply Moderator List",
@@ -45,13 +46,12 @@
"tabGroupAccess": "Access Levels",
"slashColorCmd": "Who Can Use /color",
"slashRolesAndGamemodeCmd": "Who Can Use /r And Templates",
"slashLastGameCmd": "Who Can Use /l",
"slashHelpAndAurCmd": "Who Can Use /help And /aur",
"slashKickCmd": "Who Can Use /kick And /ckick",
"slashBanCmd": "Who Can Use /ban And /cban",
"slashRolesAndGamemodeCmd": "Who Can Use /r & Templates",
"slashLastGameCmd": "Who Can Use /l & /aur",
"slashKickCmd": "Who Can Use /kick & /ckick",
"slashBanCmd": "Who Can Use /ban & /cban",
"slashEndMeetingCmd": "Who Can Use /endmeeting",
"slashStartAndEndGameCmd": "Who Can Use /startgame And /endgame",
"slashStartAndEndGameCmd": "Who Can Use /startgame & /endgame",
"tabGroupCrewmate": "Crewmate Roles",
"tabGroupNeutral": "Neutral Roles",
@@ -220,7 +220,8 @@
"noKcdMode": "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!",
"SnSModeOne": "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off",
"SnSModeTwo": "Crew wins by tasks/surviving {0}s\nImp wins by killing\nOne wrong kill = Can't kill for {1}s\n{2} wrong kill(s) = suicide",
"SnSModeTwo": "Crew wins by tasks/surviving {0}s\nImp wins by killing\nOne wrong kill = Can't kill for {1}s\n{2} wrong kills = suicide",
"SnSModeThree": "Crewmates win by doing tasks or surviving {0}s\nImpostors win by killing everyone\n{1} wrong kill(s) = suicide",
"speedrunMode": "Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {0}s",
"allCommandsFull": "<b>ALL COMMANDS:</b>\n\n<b>/help</b>\nShow this message.\n<b>/aur, /socials</b>\nSend Among Us Revamped social links.\n\n<b>/r, /gm</b>\nSend current mode description 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.",
@@ -279,6 +280,8 @@
"impostorWin": "Impostors Win!\n\nImpostors: ",
"crewmateWinTasks": "Crewmates Win! ({0}% tasks completed)\n\nImpostors: ",
"impostorWinMisc": "Impostors Win! (Sabotage)\n\n Impostors: ",
"crewmateWinTimer": "Crewmates Win! (Survived {0}s)\n\n Impostors: ",
"noOneWin": "No one wins. ({0}s Timer)",
"ability": "Ability",
@@ -310,7 +313,7 @@
"emDesc": "End the current meeting.",
"aurDesc": "Send Among Us Revamped social links.",
"sDesc": "Start the game countdown.",
"rDesc": "/r send active abilities or current gamemode. /r {ability} send specific ability info",
"rDesc": "/r sends active abilities or current gamemode. /r {ability} sends specific ability info",
"rolesDesc": "Send all abilities/gamemode overview.",
"kickDesc": "Kick a player by name.",
"ckickDesc": "Kick a player by color.",
@@ -326,5 +329,7 @@
"removeModeratorDesc": "Remove Moderator from user.",
"removeAdminDesc": "Remove Admin from user.",
"lastgameDesc": "Send last game info.",
"templateDesc": "Send a specified template from AUR-DATA/templates.txt."
"templateDesc": "Send a specified template from AUR-DATA/templates.txt.",
"banWordKick": "{0} was kicked because they sent a banned word {1} time(s)"
}