Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of MiniEepo v1.3.0
MiniEepo.dll
Decompiled 2 weeks agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using ScalerCore; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("MiniEepo")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0")] [assembly: AssemblyProduct("MiniEepo")] [assembly: AssemblyTitle("MiniEepo")] [assembly: AssemblyVersion("1.3.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace MiniEepo { [BepInPlugin("darkharasho.MiniEepo", "MiniEepo", "1.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Log = null; internal static ConfigEntry<float> PlayerScale = null; internal static ConfigEntry<float> ItemScale = null; internal static ConfigEntry<float> ValuableScale = null; internal static ConfigEntry<float> CartScale = null; internal static ConfigEntry<bool> VoiceMod = null; internal static ConfigEntry<bool> ShrinkInShop = null; internal static float ActivePlayerScale; internal static float ActiveItemScale; internal static float ActiveValuableScale; internal static float ActiveCartScale; internal static bool ActiveVoiceMod; internal static bool ActiveShrinkInShop; internal static readonly HashSet<int> ManagedObjects = new HashSet<int>(); internal static bool IsApplying; private void Awake() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Expected O, but got Unknown //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Expected O, but got Unknown //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Expected O, but got Unknown //IL_0383: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Expected O, but got Unknown //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_0481: Expected O, but got Unknown //IL_0574: Unknown result type (might be due to invalid IL or missing references) //IL_0582: Expected O, but got Unknown //IL_05fa: Unknown result type (might be due to invalid IL or missing references) //IL_0607: Expected O, but got Unknown //IL_0684: Unknown result type (might be due to invalid IL or missing references) //IL_0691: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; AcceptableValueRange<float> val = new AcceptableValueRange<float>(0.1f, 1f); PlayerScale = ((BaseUnityPlugin)this).Config.Bind<float>("Scaling", "PlayerScale", 0.4f, new ConfigDescription("Scale multiplier for players (0.4 = 40%)", (AcceptableValueBase)(object)val, Array.Empty<object>())); ItemScale = ((BaseUnityPlugin)this).Config.Bind<float>("Scaling", "ItemScale", 0.4f, new ConfigDescription("Scale multiplier for items (0.4 = 40%)", (AcceptableValueBase)(object)val, Array.Empty<object>())); ValuableScale = ((BaseUnityPlugin)this).Config.Bind<float>("Scaling", "ValuableScale", 0.4f, new ConfigDescription("Scale multiplier for valuables (0.4 = 40%)", (AcceptableValueBase)(object)val, Array.Empty<object>())); CartScale = ((BaseUnityPlugin)this).Config.Bind<float>("Scaling", "CartScale", 1f, new ConfigDescription("Extra scale multiplier applied when a valuable is in the cart (1.0 = no change, 0.5 = half size)", (AcceptableValueBase)(object)val, Array.Empty<object>())); VoiceMod = ((BaseUnityPlugin)this).Config.Bind<bool>("Audio", "VoiceMod", true, new ConfigDescription("Enable voice pitch modulation when players are shrunk", (AcceptableValueBase)null, Array.Empty<object>())); ShrinkInShop = ((BaseUnityPlugin)this).Config.Bind<bool>("Scaling", "ShrinkInShop", false, new ConfigDescription("If true, shrinking applies in the shop level too. Default false — items stay normal size while shopping.", (AcceptableValueBase)null, Array.Empty<object>())); ResetToLocalConfig(); VoiceMod.SettingChanged += delegate { ActiveVoiceMod = VoiceMod.Value; }; PlayerScale.SettingChanged += delegate { OnHostScaleConfigChanged(); }; ItemScale.SettingChanged += delegate { OnHostScaleConfigChanged(); }; ValuableScale.SettingChanged += delegate { OnHostScaleConfigChanged(); }; CartScale.SettingChanged += delegate { OnHostScaleConfigChanged(); }; ShrinkInShop.SettingChanged += delegate { OnHostScaleConfigChanged(); }; ((Component)this).gameObject.AddComponent<SettingsSyncer>(); Harmony val2 = new Harmony("darkharasho.MiniEepo"); val2.PatchAll(); Type type = null; Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { if (assembly.GetName().Name != "ScalerCore") { continue; } Type[] types = assembly.GetTypes(); foreach (Type type2 in types) { if (type2.Name == "AudioPitchHelper") { type = type2; break; } } if (type != null) { break; } } MethodInfo methodInfo = ((type != null) ? AccessTools.Method(type, "ApplyPitch", (Type[])null, (Type[])null) : null); if (methodInfo != null) { val2.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(VoicePitchPatch), "Prefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)("[Voice] Patched " + type.FullName + ".ApplyPitch (Sound pitch)")); } else { Log.LogWarning((object)"[Voice] AudioPitchHelper.ApplyPitch not found"); } Type type3 = AccessTools.TypeByName("PlayerVoiceChat"); MethodInfo methodInfo2 = ((type3 != null) ? AccessTools.Method(type3, "OverridePitch", (Type[])null, (Type[])null) : null); if (methodInfo2 != null) { val2.Patch((MethodBase)methodInfo2, new HarmonyMethod(typeof(VoicePitchPatch), "Prefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)"[Voice] Patched PlayerVoiceChat.OverridePitch (Photon Voice pitch)"); } else { Log.LogWarning((object)"[Voice] PlayerVoiceChat.OverridePitch not found"); } Type type4 = null; assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly2 in assemblies) { if (assembly2.GetName().Name != "ScalerCore") { continue; } Type[] types = assembly2.GetTypes(); foreach (Type type5 in types) { if (type5.Name == "PlayerHandler") { type4 = type5; break; } } if (type4 != null) { break; } } MethodInfo methodInfo3 = ((type4 != null) ? AccessTools.Method(type4, "OnUpdate", (Type[])null, (Type[])null) : null); if (methodInfo3 != null) { val2.Patch((MethodBase)methodInfo3, (HarmonyMethod)null, new HarmonyMethod(typeof(VoicePitchPatch), "PlayerHandlerOnUpdatePostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)("[Voice] Patched " + type4.FullName + ".OnUpdate (per-frame voice pitch fields)")); } else { Log.LogWarning((object)"[Voice] PlayerHandler.OnUpdate not found"); } Type type6 = null; assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly3 in assemblies) { if (assembly3.GetName().Name != "ScalerCore") { continue; } Type[] types = assembly3.GetTypes(); foreach (Type type7 in types) { if (type7.Name == "PlayerBonkPatch") { type6 = type7; break; } } if (type6 != null) { break; } } MethodInfo methodInfo4 = ((type6 != null) ? AccessTools.Method(type6, "Postfix", (Type[])null, (Type[])null) : null); if (methodInfo4 != null) { val2.Patch((MethodBase)methodInfo4, new HarmonyMethod(typeof(BonkBlocker), "Prefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)"[BonkImmune] Disabled ScalerCore's damage-bonk-expand (damage no longer un-shrinks)"); } else { Log.LogWarning((object)"[BonkImmune] PlayerBonkPatch.Postfix not found — damage may un-shrink"); } string[] array = new string[2] { "ReviveRPC", "Revive" }; foreach (string text in array) { MethodInfo methodInfo5 = AccessTools.Method(typeof(PlayerAvatar), text, (Type[])null, (Type[])null); if (!(methodInfo5 == null)) { val2.Patch((MethodBase)methodInfo5, (HarmonyMethod)null, new HarmonyMethod(typeof(PlayerRevivePatch), "Postfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)("[Revive] Patched " + text)); } } if (Chainloader.PluginInfos.ContainsKey("Jangnana.SolidAim")) { Log.LogInfo((object)"[Stabilize] SolidAim detected — skipping built-in held-gun stabilization"); } else { MethodInfo methodInfo6 = AccessTools.Method(typeof(PhysGrabObject), "FixedUpdate", (Type[])null, (Type[])null); if (methodInfo6 != null) { val2.Patch((MethodBase)methodInfo6, (HarmonyMethod)null, new HarmonyMethod(typeof(HeldGunStabilizationPatch), "Postfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } Log.LogInfo((object)"MiniEepo v1.3.0 loaded — everything is tiny now."); } internal static void ResetToLocalConfig() { ActivePlayerScale = PlayerScale.Value; ActiveItemScale = ItemScale.Value; ActiveValuableScale = ValuableScale.Value; ActiveCartScale = CartScale.Value; ActiveVoiceMod = VoiceMod.Value; ActiveShrinkInShop = ShrinkInShop.Value; } private static void OnHostScaleConfigChanged() { if (!PhotonNetwork.InRoom || PhotonNetwork.IsMasterClient) { ResetToLocalConfig(); SettingsSyncer.Instance?.PushHostSettingsExternal(); } } internal static bool IsInGameplay() { RunManager instance = RunManager.instance; if ((Object)(object)instance == (Object)null) { return false; } Level levelCurrent = instance.levelCurrent; if ((Object)(object)levelCurrent == (Object)null) { return false; } if ((Object)(object)levelCurrent == (Object)(object)instance.levelLobby || (Object)(object)levelCurrent == (Object)(object)instance.levelLobbyMenu) { return false; } if ((Object)(object)levelCurrent == (Object)(object)instance.levelMainMenu || (Object)(object)levelCurrent == (Object)(object)instance.levelSplashScreen) { return false; } if ((Object)(object)levelCurrent == (Object)(object)instance.levelTutorial || (Object)(object)levelCurrent == (Object)(object)instance.levelRecording) { return false; } if (SemiFunc.IsLevelShop(levelCurrent) && !ActiveShrinkInShop) { return false; } return true; } internal static void Shrink(GameObject go, float factor) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) ManagedObjects.Add(((Object)go).GetInstanceID()); ScaleOptions @default = ScaleOptions.Default; @default.Factor = factor; IsApplying = true; try { ScaleManager.ApplyIfNotScaled(go, @default); } finally { IsApplying = false; } } } internal class SettingsSyncer : MonoBehaviour { private const string K_PLAYER = "ME_PS"; private const string K_ITEM = "ME_IS"; private const string K_VALUABLE = "ME_VS"; private const string K_CART = "ME_CS"; private const string K_SHOP = "ME_SS"; internal static SettingsSyncer? Instance; private bool _wasInRoom; private bool _wasMaster; private float _pullPollDelay; private float _watcherTimer; private readonly Dictionary<int, Transform?> _visualsCache = new Dictionary<int, Transform>(); private float _lastPushedPlayer = float.NaN; private float _lastPushedItem = float.NaN; private float _lastPushedValuable = float.NaN; private float _lastPushedCart = float.NaN; private bool? _lastPushedShop; private void Awake() { Instance = this; } private void Start() { Plugin.Log.LogInfo((object)"[Sync] SettingsSyncer ready (polling mode)"); } internal void TriggerRescale() { ((MonoBehaviour)this).StartCoroutine(RescaleAfterJoin()); } private void Update() { bool inRoom = PhotonNetwork.InRoom; bool flag = inRoom && PhotonNetwork.IsMasterClient; if (inRoom && !_wasInRoom) { if (flag) { PushHostSettings(); } else { PullHostSettings(); } } else if (!inRoom && _wasInRoom) { Plugin.ResetToLocalConfig(); Plugin.Log.LogInfo((object)"[Sync] Left room — reset to local config"); } else if (inRoom && flag && !_wasMaster) { PushHostSettings(); } else if (inRoom && !flag) { _pullPollDelay -= Time.unscaledDeltaTime; if (_pullPollDelay <= 0f) { _pullPollDelay = 1f; PullHostSettings(); } } _wasInRoom = inRoom; _wasMaster = flag; } private void LateUpdate() { //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.IsInGameplay()) { return; } _watcherTimer -= Time.deltaTime; if (_watcherTimer > 0f) { return; } _watcherTimer = 0.25f; float activePlayerScale = Plugin.ActivePlayerScale; if (activePlayerScale < 0.99f && GameDirector.instance?.PlayerList != null) { foreach (PlayerAvatar player in GameDirector.instance.PlayerList) { if (!((Object)(object)player == (Object)null)) { Transform transform = ((Component)player).transform; if (transform.localScale.x > 0.9f && transform.localScale.x > activePlayerScale + 0.4f) { transform.localScale = new Vector3(activePlayerScale, activePlayerScale, activePlayerScale); } int instanceID = ((Object)player).GetInstanceID(); if (!_visualsCache.TryGetValue(instanceID, out Transform value) || (Object)(object)value == (Object)null) { value = (((Object)(object)transform.parent != (Object)null) ? transform.parent.Find("Player Visuals") : null); _visualsCache[instanceID] = value; } if ((Object)(object)value != (Object)null && value.localScale.x > 0.9f && value.localScale.x > activePlayerScale + 0.4f) { value.localScale = new Vector3(activePlayerScale, activePlayerScale, activePlayerScale); } } } } float activeItemScale = Plugin.ActiveItemScale; if (!(activeItemScale < 0.99f) || PhysGrabObjectPatch.DirectScaledItems.Count <= 0) { return; } List<int> list = null; foreach (KeyValuePair<int, Transform> directScaledItem in PhysGrabObjectPatch.DirectScaledItems) { Transform value2 = directScaledItem.Value; if ((Object)(object)value2 == (Object)null) { (list ?? (list = new List<int>())).Add(directScaledItem.Key); } else if (value2.localScale.x > 0.9f && value2.localScale.x > activeItemScale + 0.4f) { value2.localScale = new Vector3(activeItemScale, activeItemScale, activeItemScale); } } if (list == null) { return; } foreach (int item in list) { PhysGrabObjectPatch.DirectScaledItems.Remove(item); } } private void PullHostSettings() { Room currentRoom = PhotonNetwork.CurrentRoom; Hashtable val = ((currentRoom != null) ? ((RoomInfo)currentRoom).CustomProperties : null); if (val == null) { return; } bool flag = false; if (((Dictionary<object, object>)(object)val).ContainsKey((object)"ME_PS")) { float num = (float)val[(object)"ME_PS"]; if (Plugin.ActivePlayerScale != num) { Plugin.ActivePlayerScale = num; flag = true; } } if (((Dictionary<object, object>)(object)val).ContainsKey((object)"ME_IS")) { float num2 = (float)val[(object)"ME_IS"]; if (Plugin.ActiveItemScale != num2) { Plugin.ActiveItemScale = num2; flag = true; } } if (((Dictionary<object, object>)(object)val).ContainsKey((object)"ME_VS")) { float num3 = (float)val[(object)"ME_VS"]; if (Plugin.ActiveValuableScale != num3) { Plugin.ActiveValuableScale = num3; flag = true; } } if (((Dictionary<object, object>)(object)val).ContainsKey((object)"ME_CS")) { float num4 = (float)val[(object)"ME_CS"]; if (Plugin.ActiveCartScale != num4) { Plugin.ActiveCartScale = num4; flag = true; } } if (((Dictionary<object, object>)(object)val).ContainsKey((object)"ME_SS")) { bool flag2 = (bool)val[(object)"ME_SS"]; if (Plugin.ActiveShrinkInShop != flag2) { Plugin.ActiveShrinkInShop = flag2; flag = true; } } if (flag) { Plugin.Log.LogInfo((object)$"[Sync] Pulled host settings — player={Plugin.ActivePlayerScale} item={Plugin.ActiveItemScale} valuable={Plugin.ActiveValuableScale} cart={Plugin.ActiveCartScale} shrinkInShop={Plugin.ActiveShrinkInShop}"); } } internal void PushHostSettingsExternal() { if (PhotonNetwork.InRoom && PhotonNetwork.IsMasterClient) { PushHostSettings(); } } private void PushHostSettings() { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown if (PhotonNetwork.CurrentRoom != null) { float value = Plugin.PlayerScale.Value; float value2 = Plugin.ItemScale.Value; float value3 = Plugin.ValuableScale.Value; float value4 = Plugin.CartScale.Value; bool value5 = Plugin.ShrinkInShop.Value; if (value == _lastPushedPlayer && value2 == _lastPushedItem && value3 == _lastPushedValuable && value4 == _lastPushedCart && value5 == _lastPushedShop) { Plugin.ResetToLocalConfig(); return; } _lastPushedPlayer = value; _lastPushedItem = value2; _lastPushedValuable = value3; _lastPushedCart = value4; _lastPushedShop = value5; Hashtable val = new Hashtable { [(object)"ME_PS"] = value, [(object)"ME_IS"] = value2, [(object)"ME_VS"] = value3, [(object)"ME_CS"] = value4, [(object)"ME_SS"] = value5 }; PhotonNetwork.CurrentRoom.SetCustomProperties(val, (Hashtable)null, (WebFlags)null); Plugin.ResetToLocalConfig(); Plugin.Log.LogInfo((object)$"[Sync] Host pushed settings — player={value} item={value2} valuable={value3} cart={value4} shrinkInShop={value5}"); } } private IEnumerator RescaleAfterJoin() { yield return (object)new WaitForSeconds(3f); Plugin.Log.LogInfo((object)"[Sync] Running post-join rescale pass"); PhysGrabObject[] array = Object.FindObjectsOfType<PhysGrabObject>(); foreach (PhysGrabObject val in array) { ItemAttributes val2 = ((Component)val).GetComponentInParent<ItemAttributes>(true) ?? ((Component)val).GetComponentInChildren<ItemAttributes>(true); if ((Object)(object)val2 != (Object)null) { Plugin.Shrink(((Component)val2).gameObject, Plugin.ActiveItemScale); } } PlayerAvatar[] array2 = Object.FindObjectsOfType<PlayerAvatar>(); for (int i = 0; i < array2.Length; i++) { Plugin.Shrink(((Component)array2[i]).gameObject, Plugin.ActivePlayerScale); } } } [HarmonyPatch(typeof(PlayerAvatar), "Start")] internal static class PlayerAvatarPatch { internal static readonly HashSet<int> DirectScaledPlayers = new HashSet<int>(); private static IEnumerator ShrinkNextFrame(PlayerAvatar instance) { yield return null; if (!Plugin.IsInGameplay()) { yield break; } if (PhotonNetwork.IsMasterClient || !PhotonNetwork.InRoom) { PhotonView component = ((Component)instance).GetComponent<PhotonView>(); if ((Object)(object)component == (Object)null || component.IsMine) { float w = 0f; while (w < 5f && ((Object)(object)PhysGrabber.instance == (Object)null || (Object)(object)((Component)instance).GetComponent<PlayerVisionTarget>() == (Object)null || (Object)(object)CameraPosition.instance == (Object)null)) { w += Time.deltaTime; yield return null; } if (!Plugin.IsInGameplay()) { yield break; } } Plugin.Shrink(((Component)instance).gameObject, Plugin.ActivePlayerScale); yield break; } float waited = 0f; while (waited < 5f && ((Component)instance).transform.localScale.x > 0.99f) { waited += Time.deltaTime; yield return null; } if (!(((Component)instance).transform.localScale.x > 0.99f) || !DirectScaledPlayers.Add(((Object)((Component)instance).gameObject).GetInstanceID())) { yield break; } Transform transform = ((Component)instance).transform; transform.localScale *= Plugin.ActivePlayerScale; Transform parent = ((Component)instance).transform.parent; if ((Object)(object)parent != (Object)null) { Transform val = parent.Find("Player Visuals"); if ((Object)(object)val != (Object)null && val.localScale.x > 0.99f) { val.localScale *= Plugin.ActivePlayerScale; } } } private static void Postfix(PlayerAvatar __instance) { ((MonoBehaviour)__instance).StartCoroutine(ShrinkNextFrame(__instance)); } } [HarmonyPatch(typeof(RunManager), "UpdateLevel")] internal static class RunManagerUpdateLevelPatch { private static void Postfix(RunManager __instance) { if (Plugin.IsInGameplay()) { SettingsSyncer.Instance?.TriggerRescale(); } } } [HarmonyPatch(typeof(PhysGrabObject), "Start")] internal static class PhysGrabObjectPatch { internal static readonly Dictionary<int, Transform> DirectScaledItems = new Dictionary<int, Transform>(); private static void Postfix(PhysGrabObject __instance) { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.IsInGameplay()) { return; } GameObject val = null; ItemAttributes componentInParent = ((Component)__instance).GetComponentInParent<ItemAttributes>(true); if ((Object)(object)componentInParent != (Object)null) { val = ((Component)componentInParent).gameObject; } else if ((Object)(object)((Component)__instance).GetComponentInChildren<ItemAttributes>(true) != (Object)null) { val = ((Component)__instance).gameObject; } if ((Object)(object)val == (Object)null || (Object)(object)val.GetComponentInChildren<ItemVehicle>(true) != (Object)null) { return; } bool num = (Object)(object)val.GetComponentInChildren<ItemEquippable>(true) != (Object)null; bool flag = (Object)(object)val.GetComponentInChildren<ItemGun>(true) != (Object)null; if ((num && !flag) || (PhotonNetwork.InRoom && !PhotonNetwork.IsMasterClient)) { int instanceID = ((Object)val).GetInstanceID(); if (!DirectScaledItems.ContainsKey(instanceID)) { DirectScaledItems[instanceID] = val.transform; Transform transform = val.transform; transform.localScale *= Plugin.ActiveItemScale; } } else { Plugin.Shrink(val, Plugin.ActiveItemScale); } } } [HarmonyPatch(typeof(ValuableObject), "Start")] internal static class ValuableObjectPatch { private static readonly HashSet<int> _scaled = new HashSet<int>(); private static void Postfix(ValuableObject __instance) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (Plugin.IsInGameplay()) { int instanceID = ((Object)((Component)__instance).gameObject).GetInstanceID(); if (_scaled.Add(instanceID)) { Transform transform = ((Component)__instance).transform; transform.localScale *= Plugin.ActiveValuableScale; PhysGrabObject val = ((Component)__instance).GetComponentInChildren<PhysGrabObject>(true) ?? ((Component)__instance).GetComponentInParent<PhysGrabObject>(true); (((Object)(object)val != (Object)null) ? ((Component)val).gameObject : ((Component)__instance).gameObject).AddComponent<ValuableCartTracker>().SetValuable(__instance); } } } } internal static class BonkBlocker { public static bool Prefix() { return false; } } internal static class VoicePitchPatch { private const BindingFlags BF = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; private static FieldInfo? _handlerStateField; private static FieldInfo? _avatarField; private static FieldInfo? _voiceChatField; private static FieldInfo? _activeField; private static FieldInfo? _multField; private static readonly object _boxedFalse = false; private static readonly object _boxedOne = 1f; public static bool Prefix() { return Plugin.ActiveVoiceMod; } public static void PlayerHandlerOnUpdatePostfix(object ctrl) { if (Plugin.ActiveVoiceMod || ctrl == null) { return; } try { if ((object)_handlerStateField == null) { _handlerStateField = ctrl.GetType().GetField("HandlerState", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } object obj = _handlerStateField?.GetValue(ctrl); if (obj == null) { return; } if ((object)_avatarField == null) { _avatarField = obj.GetType().GetField("PlayerAvatar", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } object obj2 = _avatarField?.GetValue(obj); Object val = (Object)((obj2 is Object) ? obj2 : null); if ((val != null && val == (Object)null) || obj2 == null) { return; } if ((object)_voiceChatField == null) { _voiceChatField = obj2.GetType().GetField("voiceChat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } object obj3 = _voiceChatField?.GetValue(obj2); Object val2 = (Object)((obj3 is Object) ? obj3 : null); if ((val2 == null || !(val2 == (Object)null)) && obj3 != null) { Type type = obj3.GetType(); if ((object)_activeField == null) { _activeField = type.GetField("overridePitchIsActive", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } if ((object)_multField == null) { _multField = type.GetField("overridePitchMultiplierTarget", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } _activeField?.SetValue(obj3, _boxedFalse); _multField?.SetValue(obj3, _boxedOne); } } catch (Exception ex) { Plugin.Log.LogDebug((object)("[Voice] OnUpdate postfix swallowed: " + ex.GetType().Name)); } } } internal static class PlayerRevivePatch { internal static void Postfix(PlayerAvatar __instance) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) float activePlayerScale = Plugin.ActivePlayerScale; if (activePlayerScale < 0.99f) { ((Component)__instance).transform.localScale = new Vector3(activePlayerScale, activePlayerScale, activePlayerScale); } } } [HarmonyPatch(typeof(ItemEquippable), "RPC_CompleteUnequip")] internal static class UnequipReshrinkPatch { private static void Postfix(ItemEquippable __instance) { if (!(Plugin.ActiveItemScale >= 0.99f)) { ((MonoBehaviour)__instance).StartCoroutine(Reshrink(__instance)); } } private static IEnumerator Reshrink(ItemEquippable equip) { yield return null; if (!((Object)(object)equip == (Object)null)) { ItemAttributes componentInParent = ((Component)equip).GetComponentInParent<ItemAttributes>(true); GameObject val = (((Object)(object)componentInParent != (Object)null) ? ((Component)componentInParent).gameObject : ((Component)equip).gameObject); float activeItemScale = Plugin.ActiveItemScale; if (val.transform.localScale.x > 0.9f && val.transform.localScale.x > activeItemScale + 0.4f) { val.transform.localScale = new Vector3(activeItemScale, activeItemScale, activeItemScale); } } } } internal static class HeldGunStabilizationPatch { private static readonly Dictionary<int, bool> _isGun = new Dictionary<int, bool>(); internal static void Postfix(PhysGrabObject __instance) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) int instanceID = ((Object)__instance).GetInstanceID(); if (!_isGun.TryGetValue(instanceID, out var value)) { value = (Object)(object)((Component)__instance).GetComponent<ItemGun>() != (Object)null; _isGun[instanceID] = value; } if (!value) { return; } PlayerAvatar val = SemiFunc.PlayerAvatarLocal(); if (!((Object)(object)val == (Object)null) && !(((Component)val).transform.localScale.x > 0.99f) && __instance.playerGrabbing.Contains(val.physGrabber)) { __instance.OverrideMass(0.25f, 0.1f); __instance.OverrideGrabStrength(2f, 0.1f); __instance.OverrideTorqueStrength(5f, 0.1f); __instance.OverrideDrag(2f, 0.1f); if ((Object)(object)__instance.rb != (Object)null) { __instance.rb.angularDrag = 29f; } Camera main = Camera.main; if ((Object)(object)main != (Object)null && (Object)(object)__instance.rb != (Object)null) { __instance.rb.rotation = Quaternion.Slerp(__instance.rb.rotation, ((Component)main).transform.rotation, Time.fixedDeltaTime * 10f); } } } } [HarmonyPatch(typeof(ScaleManager), "Apply", new Type[] { typeof(GameObject), typeof(ScaleOptions) })] internal static class ScaleManagerApplyPatch { private static bool Prefix(GameObject target) { if (Plugin.IsApplying) { return true; } ScaleController controller = ScaleManager.GetController(target); int item = (((Object)(object)controller != (Object)null) ? ((Object)((Component)controller).gameObject).GetInstanceID() : ((Object)target).GetInstanceID()); return !Plugin.ManagedObjects.Contains(item); } } internal class ValuableCartTracker : MonoBehaviour { private ValuableObject? _vo; private bool _inCart; private Vector3 _preCartScale; internal void SetValuable(ValuableObject vo) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) _vo = vo; _preCartScale = ((Component)vo).transform.localScale; } private void OnTriggerEnter(Collider other) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) if (!_inCart && !((Object)(object)_vo == (Object)null) && !((Object)(object)((Component)other).GetComponentInParent<PhysGrabInCart>() == (Object)null) && !(Plugin.ActiveCartScale >= 1f)) { _inCart = true; ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(ScaleTo(((Component)_vo).transform.localScale * Plugin.ActiveCartScale, 0.4f)); } } private void OnTriggerExit(Collider other) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (_inCart && !((Object)(object)_vo == (Object)null) && !((Object)(object)((Component)other).GetComponentInParent<PhysGrabInCart>() == (Object)null)) { _inCart = false; ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(ScaleTo(_preCartScale, 0.3f)); } } private IEnumerator ScaleTo(Vector3 target, float duration) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) Vector3 start = ((Component)_vo).transform.localScale; for (float t = 0f; t < duration; t += Time.deltaTime) { ((Component)_vo).transform.localScale = Vector3.Lerp(start, target, t / duration); yield return null; } ((Component)_vo).transform.localScale = target; } } public static class PluginInfo { public const string PLUGIN_GUID = "darkharasho.MiniEepo"; public const string PLUGIN_NAME = "MiniEepo"; public const string PLUGIN_VERSION = "1.3.0"; } }