Files
Radicade/2023Patch/RadicadePatch/VoiceChatBanFlagPatches.cs
2026-10-16 23:33:13 -07:00

67 lines
1.8 KiB
C#

using System;
using System.Reflection;
using HarmonyLib;
internal static class VoiceChatBanFlagPatches
{
private static bool _armed;
internal static void Apply(Harmony harmony)
{
if (_armed) return;
_armed = true;
Patch(harmony, "IsVoiceChatBanned", nameof(BannedPostfix));
Patch(harmony, "AllowedToVoiceChat", nameof(AllowedPostfix));
}
private static void Patch(Harmony harmony, string propertyName, string handler)
{
try
{
var getter = AccessTools.Method(typeof(SettingsModel), "get_" + propertyName)
?? AccessTools.Property(typeof(SettingsModel), propertyName)?.GetGetMethod(true);
if (getter == null)
{
RadicadeEacBypassPlugin.LogSource.LogWarning("[VoiceBanFlag] SettingsModel."
+ propertyName + " has no getter in this build, so the Audio page keeps its own value.");
return;
}
harmony.Patch(getter, postfix: new HarmonyMethod(typeof(VoiceChatBanFlagPatches)
.GetMethod(handler, BindingFlags.Static | BindingFlags.NonPublic)));
}
catch (Exception ex)
{
RadicadeEacBypassPlugin.LogSource.LogWarning("[VoiceBanFlag] could not patch SettingsModel."
+ propertyName + ": " + ex.GetType().Name + ": " + ex.Message);
}
}
private static void BannedPostfix(ref bool __result)
{
try
{
if (!VoiceChatRestrictionPatches.RestrictionInForce) return;
__result = true;
}
catch { }
}
private static void AllowedPostfix(ref bool __result)
{
try
{
if (!VoiceChatRestrictionPatches.RestrictionInForce) return;
__result = false;
}
catch { }
}
}