using System.Reflection; using System.Text.Json; using HarmonyLib; using undead_universal_patch_il2cpp.Core; using undead_universal_patch_il2cpp.Core.Config; namespace undead_universal_patch_il2cpp.Patches.Video; [HarmonyPatch] public class VideoTamperPatch { public static DediConfig config = new("VideoTamperPatchConfig", JsonSerializer.Serialize( new BaseOptionConfig { Enabled = false } ), null); static PatchTypesResult patchTypesResult = Util.PreparePatchTypes( "Video anti-tamper hash disabler patch", "RecRoom.Core.Cinematics.CinematicVideoPlayer", "Start" ); static bool Prepare() { if (config.Get().Enabled) return patchTypesResult.Success; else return false; } static MethodBase TargetMethod() => patchTypesResult.Method; static void Prefix(ref object __instance) { PropertyInfo useProp = __instance.GetType().GetRuntimeProperty("useAntiTamperHash"); if (useProp == null) { UniversalPatchPlugin.Log.LogError("VideoTamperPatch prefix: useAntiTamperHash was not found!"); return; } useProp.SetValue(__instance, false); } static void Postfix(ref object __instance) { PropertyInfo autoProp = __instance.GetType().GetRuntimeProperty("autoPlay"); if (autoProp == null) { UniversalPatchPlugin.Log.LogError("VideoTamperPatch postfix: autoPlay was not found!"); return; } MethodInfo playMethod = __instance.GetType().GetMethod("Play"); if (playMethod == null) { UniversalPatchPlugin.Log.LogError("VideoTamperPatch postfix: playMethod was not found!"); return; } if ((bool)autoProp.GetValue(__instance)) playMethod.Invoke(__instance, []); } }