add RemovePetOnDeath and DisableSabotages

This commit is contained in:
D1GQ committed 2025-03-24 17:41:15 -05:00
1 parent 6a16b1122c
commit 001e326ac3
6 files changed
+45 -8

No files matched your search

+1 -5
View File
@@ -308,11 +308,7 @@ internal class NetworkManager
return false;
}
if (BAUAntiCheat.RpcUpdateSystemCheck(player, systemType, reader) != true)
{
Logger.LogCheat($"RPC canceled by Anti-Cheat: {Enum.GetName(typeof(SystemTypes), (int)systemType)} - {MessageReader.Get(reader).ReadByte()}");
return false;
}
if (BAUAntiCheat.RpcUpdateSystemCheck(player, systemType, reader) != true) return false;
return true;
}
+24
View File
@@ -0,0 +1,24 @@
using BetterAmongUs.Modules;
using BetterAmongUs.Patches;
using HarmonyLib;
namespace BetterAmongUs.Managers;
[HarmonyPatch]
internal static class PrivateOnlyLobbyManager
{
internal static void SyncNames()
{
}
[HarmonyPatch(typeof(PlayerControl))]
[HarmonyPatch(nameof(PlayerControl.Die))]
[HarmonyPostfix]
internal static void PlayerControlDie_Postfix(PlayerControl __instance)
{
if (GameState.IsPrivateOnlyLobby && BetterGameSettings.RemovePetOnDeath.GetBool())
{
__instance.RpcSetPet(PetData.EmptyId);
}
}
}
+11 -1
View File
@@ -245,10 +245,20 @@ class BAUAntiCheat
// Check game states when sabotaging
internal static bool RpcUpdateSystemCheck(PlayerControl player, SystemTypes systemType, MessageReader oldReader)
{
if (Utils.SystemTypeIsSabotage(systemType) || systemType is SystemTypes.Doors)
{
if (GameState.IsPrivateOnlyLobby && BetterGameSettings.DisableSabotages.GetBool()) return false;
}
MessageReader reader = MessageReader.Get(oldReader);
RegisterRPCHandlerAttribute.GetClassInstance<UpdateSystemHandler>().CatchedSystemType = systemType;
return RPCHandler.HandleRPC((byte)RpcCalls.UpdateSystem, player, reader, HandlerFlag.AntiCheatCancel);
bool notCanceled = RPCHandler.HandleRPC((byte)RpcCalls.UpdateSystem, player, reader, HandlerFlag.AntiCheatCancel);
if (!notCanceled)
{
Logger.LogCheat($"RPC canceled by Anti-Cheat: {Enum.GetName(typeof(SystemTypes), (int)systemType)} - {MessageReader.Get(reader).ReadByte()}");
}
return notCanceled;
}
// Check if RPC is known
+1
View File
@@ -104,6 +104,7 @@ internal static class GameState
internal static bool IsCountDown => GameStartManager.InstanceExists && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown;
internal static bool IsShip => ShipStatus.Instance != null;
internal static bool IsHost => AmongUsClient.Instance != null && AmongUsClient.Instance.AmHost;
internal static bool IsPrivateOnlyLobby => (Main.PrivateOnlyLobby.Value || AmongUsClient.Instance.AmLocalHost) && IsHost;
internal static bool IsBetterHostLobby => PlayerControl.LocalPlayer.IsHost() || Main.AllPlayerControls.Any(pc => pc.IsHost() && pc.BetterData().IsBetterUser);
internal static bool IsTOHEHostLobby => Main.AllPlayerControls.Any(pc => pc.IsHost() && pc.BetterData().IsTOHEHost);
internal static bool IsCanMove => PlayerControl.LocalPlayer?.CanMove is true;
+6 -2
View File
@@ -24,6 +24,8 @@ class BetterGameSettings
internal static BetterOptionItem? DesyncRoles;
internal static BetterOptionItem? CancelInvalidSabotage;
internal static BetterOptionItem? CensorDetectionReason;
internal static BetterOptionItem? RemovePetOnDeath;
internal static BetterOptionItem? DisableSabotages;
}
class BetterGameSettingsTemp
@@ -47,7 +49,7 @@ static class GameSettingMenuPatch
BetterOptionItem.TempPlayerOptionDataNum = 0;
TitleList.Clear();
// Use 1500 next ID
// Use 1700 next ID
// Anti-Cheat Settings
{
@@ -91,11 +93,13 @@ static class GameSettingMenuPatch
// Gameplay Settings
{
if (IsPreload || GameState.IsHost)
if (IsPreload || GameState.IsHost && GameState.IsPrivateOnlyLobby)
{
if (IsPreload || !GameState.IsHideNSeek)
{
new BetterOptionHeaderItem().Create(BetterSettingsTab, Translator.GetString("BetterSetting.MainHeader.Gameplay"));
BetterGameSettings.DisableSabotages = new BetterOptionCheckboxItem().Create(1500, BetterSettingsTab, Translator.GetString("BetterSetting.Setting.DisableSabotages"), false);
BetterGameSettings.RemovePetOnDeath = new BetterOptionCheckboxItem().Create(1600, BetterSettingsTab, Translator.GetString("BetterSetting.Setting.RemovePetOnDeath"), false);
}
else if (IsPreload || GameState.IsHideNSeek)
{
+2
View File
@@ -87,6 +87,8 @@
"BetterSetting.Setting.DetectInvalidRPCs": "Detect invalid RPCs",
"BetterSetting.Setting.RoleRandomizer": "Randomizer",
"BetterSetting.Setting.DesyncRoles": "Desync roles to other clients",
"BetterSetting.Setting.DisableSabotages": "Disable sabotages",
"BetterSetting.Setting.RemovePetOnDeath": "Remove pet on death",
"BetterSetting.Setting.HideAndSeekImpNum": "# Seekers",
"BetterSetting.TempSetting.HideAndSeekImpNum": "Seeker",