using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using InternalRevenueStorage.Components; using InternalRevenueStorage.Data; using InternalRevenueStorage.Managers; using InternalRevenueStorage.Managers.HUDS; using InternalRevenueStorage.Utility; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Photon.Pun; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("KITEForce")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.8.3.0")] [assembly: AssemblyInformationalVersion("0.8.3+96130defa59e16512d4b13ff4957225223abd78d")] [assembly: AssemblyProduct("InternalRevenueStorage")] [assembly: AssemblyTitle("InternalRevenueStorage")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.8.3.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace InternalRevenueStorage { [BepInPlugin("KITEForce.InternalRevenueStorage", "InternalRevenueStorage", "0.8.46")] public class InternalRevenueStoragePlugin : BaseUnityPlugin { internal static InternalRevenueStoragePlugin Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); IRSConfigManager.Init(((BaseUnityPlugin)this).Config); LocalizationManager.Init(); SoundManager.LoadSounds(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0025: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } } namespace InternalRevenueStorage.Utility { public static class JsonUtilityWrapper { [Serializable] private class Wrapper { public List Items; } public static List FromJsonList(string json) { try { Type typeFromHandle = typeof(Wrapper); MethodInfo method = typeof(JsonUtility).GetMethod("FromJson", new Type[1] { typeof(string) }); MethodInfo methodInfo = method.MakeGenericMethod(typeFromHandle); object obj = methodInfo.Invoke(null, new object[1] { json }); FieldInfo field = typeFromHandle.GetField("Items"); return (List)field.GetValue(obj); } catch { return new List(); } } public static string ToJsonList(List list) { Wrapper wrapper = new Wrapper { Items = list }; return JsonUtility.ToJson((object)wrapper, true); } } public static class WavUtility { public static AudioClip ToAudioClip(byte[] wavFile, int offsetSamples = 0, string name = "wav") { using MemoryStream input = new MemoryStream(wavFile); using BinaryReader binaryReader = new BinaryReader(input); binaryReader.ReadChars(4); binaryReader.ReadInt32(); binaryReader.ReadChars(4); binaryReader.ReadChars(4); binaryReader.ReadInt32(); ushort num = binaryReader.ReadUInt16(); ushort num2 = binaryReader.ReadUInt16(); int num3 = binaryReader.ReadInt32(); binaryReader.ReadInt32(); binaryReader.ReadUInt16(); ushort num4 = binaryReader.ReadUInt16(); string text = new string(binaryReader.ReadChars(4)); while (text != "data") { int count = binaryReader.ReadInt32(); binaryReader.ReadBytes(count); text = new string(binaryReader.ReadChars(4)); } int num5 = binaryReader.ReadInt32(); byte[] array = binaryReader.ReadBytes(num5); float[] array2 = null; if (num4 == 16) { short[] array3 = new short[num5 / 2]; for (int i = 0; i < array3.Length; i++) { array3[i] = (short)(array[i * 2] | (array[i * 2 + 1] << 8)); } array2 = new float[array3.Length]; for (int j = 0; j < array3.Length; j++) { array2[j] = (float)array3[j] / 32768f; } AudioClip val = AudioClip.Create(name, array2.Length / num2, (int)num2, num3, false); val.SetData(array2, offsetSamples); return val; } Debug.LogError((object)"[WavUtility] Only 16-bit WAVs are supported."); return null; } } } namespace InternalRevenueStorage.Patches { [HarmonyPatch(typeof(ExtractionPoint), "StateSetRPC")] public class ExtractionPointPatch { [HarmonyPostfix] public static void Postfix(State state) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected I4, but got Unknown switch (state - 3) { case 0: InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS] Extraction entered 'Success' state, checking for storage reminder."); if ((Object)(object)HUDManager.Instance != (Object)null) { HUDManager.Instance.StartExtractionReminder(); } break; case 2: case 4: InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS] Extraction ended or cancelled, stopping storage reminder."); if ((Object)(object)HUDManager.Instance != (Object)null) { HUDManager.Instance.StopExtractionReminder(); } break; case 1: case 3: break; } } } [HarmonyPatch(typeof(SemiFunc), "UIHideHealth")] public class HideUIPatch { [HarmonyPostfix] public static void Postfix() { if ((Object)(object)HUDManager.Instance != (Object)null) { HUDManager.Instance.HideHUD(); } } } [HarmonyPatch(typeof(PhysGrabber), "ShowValue")] public class PhysGrabberShowValuePatch { public static void Postfix(PhysGrabber __instance) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) if (!__instance.grabbed || (Object)(object)__instance.grabbedPhysGrabObject == (Object)null) { return; } ValuableObject component = ((Component)__instance.grabbedPhysGrabObject).GetComponent(); if (!((Object)(object)component == (Object)null)) { string volumeLabel = GetVolumeLabel(component.volumeType); Color val = default(Color); ((Color)(ref val))..ctor(1f, 0.46f, 0f); if (!Utility.IsNullOrWhiteSpace(volumeLabel)) { ItemInfoExtraUI.instance.ItemInfoText("Size: " + volumeLabel, val); } } } private static string GetVolumeLabel(Type type) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected I4, but got Unknown return (int)type switch { 0 => LocalizationManager.Translate("volume.tiny"), 1 => LocalizationManager.Translate("volume.small"), 2 => LocalizationManager.Translate("volume.medium"), 3 => LocalizationManager.Translate("volume.big"), _ => LocalizationManager.Translate("volume.denied"), }; } } [HarmonyPatch(typeof(PlayerController))] internal static class PlayerControllerPatch { [CompilerGenerated] private sealed class d__1 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public StorageComponent storageComponent; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS] Delayed bag limit upgrade -- triggered after PlayerController Start."); storageComponent.ResetBags(); storageComponent.UpdateBagLimitBasedOnRunLevel(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__2 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown PhysGrabber instance; switch (<>1__state) { default: return false; case 0: <>1__state = -1; goto IL_0022; case 1: <>1__state = -1; goto IL_0022; case 2: { <>1__state = -1; IRSConfigManager.StoreTipShown.Value = true; ((ConfigEntryBase)IRSConfigManager.StoreTipShown).ConfigFile.Save(); InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS] Displayed store tip after first item pickup."); break; } IL_0022: instance = PhysGrabber.instance; if ((Object)(object)instance != (Object)null) { PhysGrabObject grabbedPhysGrabObject = instance.grabbedPhysGrabObject; if ((Object)(object)grabbedPhysGrabObject != (Object)null) { ValuableObject component = ((Component)grabbedPhysGrabObject).GetComponent(); if ((Object)(object)component != (Object)null) { if (!IRSConfigManager.StoreTipShown.Value) { KeyCode value = IRSConfigManager.KeyInfoHud.Value; string arg = ((object)(KeyCode)(ref value)).ToString(); string text = string.Format(LocalizationManager.Translate("storetip.small"), arg); SemiFunc.UIFocusText(text, Color.white, AssetManager.instance.colorYellow, 3f); <>2__current = (object)new WaitForSeconds(2f); <>1__state = 2; return true; } break; } } } <>2__current = null; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(PlayerController __instance) { InternalRevenueStoragePlugin.Logger.LogInfo((object)$"{__instance} Start Postfix"); StorageComponent storageComponent = ((Component)__instance).GetComponent(); if ((Object)(object)storageComponent == (Object)null) { storageComponent = ((Component)__instance).gameObject.AddComponent(); InternalRevenueStoragePlugin.Logger.LogInfo((object)("[Attach] InternalRevenueStorage Storage Component attached to: " + ((Object)((Component)__instance).gameObject).name)); ((MonoBehaviour)__instance).StartCoroutine(ShowTipsOnce(__instance, storageComponent)); } if ((Object)(object)((Component)__instance).GetComponent() == (Object)null) { ((Component)__instance).gameObject.AddComponent(); InternalRevenueStoragePlugin.Logger.LogInfo((object)("[Attach] InternalRevenueStorage HUDManager attached to: " + ((Object)((Component)__instance).gameObject).name)); } if ((Object)(object)storageComponent != (Object)null && (Object)(object)__instance != (Object)null && (Object)(object)((Component)__instance).gameObject != (Object)null) { ((Component)__instance).gameObject.GetComponent().StartCoroutine(DelayedBagUpgrade(storageComponent)); } if (PhotonNetwork.IsMasterClient) { storageComponent.SyncBlacklistSettingsFromHost(); } } [IteratorStateMachine(typeof(d__1))] private static IEnumerator DelayedBagUpgrade(StorageComponent storageComponent) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__1(0) { storageComponent = storageComponent }; } [IteratorStateMachine(typeof(d__2))] private static IEnumerator ShowTipsOnce(PlayerController player, StorageComponent storageComponent) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__2(0); } } [HarmonyPatch(typeof(PlayerAvatar), "PlayerDeathRPC")] public class PlayerDeathPatch { [HarmonyPostfix] public static void Postfix(PlayerAvatar __instance) { //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { return; } PhotonView component = ((Component)__instance).GetComponent(); if ((Object)(object)component == (Object)null) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS PDP] No PhotonView on dead PlayerAvatar."); return; } if (!component.IsMine) { InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS PDP] Skipping drop - not my PlayerAvatar."); return; } PlayerController instance = PlayerController.instance; if ((Object)(object)instance == (Object)null) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS PDP] No PlayerController found for local player."); return; } StorageComponent component2 = ((Component)instance).GetComponent(); if ((Object)(object)component2 == (Object)null) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS PDP] No StorageComponent found on local player."); return; } StorageManager storageManager = component2.StorageManager; int totalStorageValue = storageManager.GetTotalStorageValue(); if (totalStorageValue <= 0) { InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS PDP] No valuables to drop."); return; } Vector3 val = storageManager.CalculateBoundsForDropping(); PhotonView component3 = ((Component)instance).GetComponent(); if ((Object)(object)component3 != (Object)null) { component3.RPC("RPC_RequestDropMoneyBag", (RpcTarget)2, new object[2] { totalStorageValue, val }); component2._bagManager.TryIncrementBag(); storageManager.ClearStorage(); } else { InternalRevenueStoragePlugin.Logger.LogError((object)"[IRS PDP] Could not find PhotonView on local PlayerController."); } } } [HarmonyPatch(typeof(PlayerAvatar), "ReviveRPC")] public class ReviveRPCPatch { public static void Postfix(PlayerAvatar __instance) { if (__instance.isLocal && (Object)(object)HUDManager.Instance != (Object)null) { HUDManager.Instance.ShowHUD(); } } } } namespace InternalRevenueStorage.Managers { public class BagManager : MonoBehaviourPunCallbacks { public int BagsDropped { get; private set; } public int MaxBagsAllowed { get; private set; } = 2; public void TryIncrementBag() { BagsDropped++; } public bool CanDropBag() { InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS BM] CanDropBag check: BagsDropped={BagsDropped} MaxBagsAllowed={MaxBagsAllowed}"); return BagsDropped < MaxBagsAllowed; } public void ResetBags() { BagsDropped = 0; } public void UpdateBagLimitBasedOnRunLevel() { bool flag = !PhotonNetwork.IsConnectedAndReady || PhotonNetwork.OfflineMode; if (PhotonNetwork.IsMasterClient || flag) { int num = SemiFunc.RunGetLevelsCompleted(); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS BM] Host calculating bag limit at RunLevel {num}"); int num2 = Mathf.Max(2, IRSConfigManager.BagLevelInterval.Value); int num3 = Mathf.Clamp(IRSConfigManager.MaxBagLimit.Value, 2, 20); int num4 = Mathf.Min(num3, 2 + num / num2); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS BM] Host setting new bag limit: {num4} (clamped from config {num3})"); if (flag) { MaxBagsAllowed = num4; ValuableCheckManager.LoadBlacklist(); } ((MonoBehaviourPun)this).photonView.RPC("RPC_SetMaxBagLimitFromHost", (RpcTarget)0, new object[1] { num4 }); ValuableCheckManager.LoadBlacklist(); ValuableCheckManager.BroadcastUserBlacklistToClients((MonoBehaviour)(object)this); } } [PunRPC] public void RPC_SetMaxBagLimitFromHost(int hostLimit) { MaxBagsAllowed = hostLimit; InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS BM] Max bag limit set by host to {MaxBagsAllowed}"); } [PunRPC] public void RPC_RequestDropMoneyBag(int totalValue, Vector3 dropPosition) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (PhotonNetwork.IsMasterClient) { InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS BM] Spawning money bag at {dropPosition} worth ${totalValue}"); MoneyBagManager.SpawnMoneyBag(totalValue, dropPosition); } } } public class HUDManager : SemiUI { [CompilerGenerated] private sealed class d__20 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public HUDManager <>4__this; private BaseHUD 5__2; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__20(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; HUDManager hUDManager = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; InternalRevenueStoragePlugin.Logger.LogInfo((object)"[HUD] Starting extraction reminder pulse..."); goto IL_0219; case 1: <>1__state = -1; goto IL_01a1; case 2: <>1__state = -1; goto IL_01fb; case 3: { <>1__state = -1; 5__2 = null; goto IL_0219; } IL_0219: if (hUDManager._reminderActive) { BaseHUD baseHUD = hUDManager._huds.Find((BaseHUD hud) => hud is StorageHUD); 5__2 = hUDManager._huds.Find((BaseHUD hud) => hud is ValueHUD); int storageCount = hUDManager._storageManager.GetStorageCount(); int totalStorageValue = hUDManager._storageManager.GetTotalStorageValue(); if (storageCount <= 0 && totalStorageValue <= 0) { return false; } if ((Object)(object)baseHUD?.Text != (Object)null && !hUDManager._originalTextColors.ContainsKey(baseHUD.Text)) { hUDManager._originalTextColors[baseHUD.Text] = ((Graphic)baseHUD.Text).color; } if ((Object)(object)5__2?.Text != (Object)null && !hUDManager._originalTextColors.ContainsKey(5__2.Text)) { hUDManager._originalTextColors[5__2.Text] = ((Graphic)5__2.Text).color; } if (baseHUD != null) { <>2__current = hUDManager.PulseText(baseHUD.Text, baseHUD.OriginalScale, Vector2.op_Implicit(hUDManager.GetAdjustedPosition(baseHUD.OriginalAnchoredPosition)), Color.red, Color.white); <>1__state = 1; return true; } goto IL_01a1; } return false; IL_01fb: <>2__current = null; <>1__state = 3; return true; IL_01a1: if (5__2 != null) { <>2__current = hUDManager.PulseText(5__2.Text, 5__2.OriginalScale, Vector2.op_Implicit(hUDManager.GetAdjustedPosition(5__2.OriginalAnchoredPosition)), Color.red, Color.white); <>1__state = 2; return true; } goto IL_01fb; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__14 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public HUDManager <>4__this; public float targetAlpha; private float 5__2; private float 5__3; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; HUDManager hUDManager = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; 5__2 = 0.2f; 5__3 = 0f; break; case 1: <>1__state = -1; break; } if (5__3 < 5__2) { 5__3 += Time.deltaTime; float num2 = 5__3 / 5__2; foreach (BaseHUD hud in hUDManager._huds) { if ((Object)(object)hud.Text != (Object)null) { Color color = ((Graphic)hud.Text).color; ((Graphic)hud.Text).color = new Color(color.r, color.g, color.b, Mathf.Lerp(color.a, targetAlpha, num2)); } } <>2__current = null; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__16 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public TextMeshProUGUI text; public Color flashColor; public float duration; private Color 5__2; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__16(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; 5__2 = ((Graphic)text).color; ((Graphic)text).color = flashColor; <>2__current = (object)new WaitForSeconds(duration); <>1__state = 1; return true; case 1: <>1__state = -1; ((Graphic)text).color = 5__2; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__21 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public HUDManager <>4__this; public TextMeshProUGUI text; public Vector3 originalScale; public Vector3 originalPos; public Color first; public Color second; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__21(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; HUDManager hUDManager = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <>2__current = hUDManager.PulseTextAlphaColorShake(text, originalScale, originalPos, 0.2f, first, 0.25f, 1.15f); <>1__state = 1; return true; case 1: <>1__state = -1; <>2__current = hUDManager.PulseTextAlphaColorShake(text, originalScale, originalPos, 1f, second, 0.25f, 1.05f); <>1__state = 2; return true; case 2: <>1__state = -1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__22 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public TextMeshProUGUI text; public float duration; public float targetAlpha; public Color targetColor; public Vector3 originalPos; public Vector3 originalScale; public float punchScale; private RectTransform 5__2; private float 5__3; private Color 5__4; private float 5__5; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__22(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; if ((Object)(object)text == (Object)null) { return false; } 5__2 = ((TMP_Text)text).rectTransform; 5__3 = ((Graphic)text).color.a; 5__4 = ((Graphic)text).color; 5__5 = 0f; break; case 1: <>1__state = -1; break; } if (5__5 < duration) { 5__5 += Time.deltaTime; float num = 5__5 / duration; float num2 = Mathf.Lerp(5__3, targetAlpha, num); Color val = Color.Lerp(5__4, targetColor, num); ((Graphic)text).color = new Color(val.r, val.g, val.b, num2); 5__2.anchoredPosition = Vector2.op_Implicit(originalPos + Vector2.op_Implicit(Random.insideUnitCircle) * 2f); ((Transform)5__2).localScale = Vector3.Lerp(originalScale * punchScale, originalScale, num); <>2__current = null; <>1__state = 1; return true; } 5__2.anchoredPosition = Vector2.op_Implicit(originalPos); ((Transform)5__2).localScale = originalScale; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__17 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public RectTransform rect; public float punchScale; public float duration; private Vector3 5__2; private Vector3 5__3; private float 5__4; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__17(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0021: 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) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0082: 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) switch (<>1__state) { default: return false; case 0: <>1__state = -1; 5__2 = ((Transform)rect).localScale; 5__3 = 5__2 * punchScale; 5__4 = 0f; break; case 1: <>1__state = -1; break; } if (5__4 < duration) { 5__4 += Time.deltaTime; float num = 5__4 / duration; ((Transform)rect).localScale = Vector3.Lerp(5__3, 5__2, num); <>2__current = null; <>1__state = 1; return true; } ((Transform)rect).localScale = 5__2; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static HUDManager Instance; private readonly List _huds = new List(); private readonly Dictionary _originalTextColors = new Dictionary(); private Coroutine _fadeCoroutine; private Coroutine _extractionReminderCoroutine; private Coroutine _pulseCoroutine; private bool _isTabHeld; private bool _reminderActive; private StorageManager? _storageManager; private bool _hudVisible; private void Start() { Instance = this; _storageManager = ((Component)PlayerController.instance).GetComponent().StorageManager; HealthUI instance = HealthUI.instance; if ((Object)(object)instance == (Object)null) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS HUD] HealthUI not found!"); return; } RectTransform component = ((Component)instance).GetComponent(); _huds.Add(new StorageHUD()); _huds.Add(new ValueHUD()); _huds.Add(new BagsHUD()); _huds.Add(new PickupCapacityHUD()); _huds.Add(new InfoHUD()); foreach (BaseHUD hud in _huds) { hud.Initialize(component); } } private void Update() { if (SemiFunc.MenuLevel() || SemiFunc.RunIsLobby()) { HideHUD(); return; } bool value = IRSConfigManager.HeldHud.Value; bool grabbed = PhysGrabber.instance.grabbed; PhysGrabObject grabbedPhysGrabObject = PhysGrabber.instance.grabbedPhysGrabObject; if (!value || (value && grabbed && (Object)(object)grabbedPhysGrabObject != (Object)null && grabbedPhysGrabObject.isValuable)) { ShowHUD(); } else { HideHUD(); } foreach (BaseHUD hud in _huds) { hud.UpdateHUD(); } HandleTabInput(); } private void HandleTabInput() { if (Input.GetKeyDown((KeyCode)9) && !_isTabHeld) { _isTabHeld = true; StartFade(0.05f); } if (Input.GetKeyUp((KeyCode)9) && _isTabHeld) { _isTabHeld = false; StartFade(1f); } } private void StartFade(float targetAlpha) { if (_fadeCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_fadeCoroutine); } _fadeCoroutine = ((MonoBehaviour)this).StartCoroutine(FadeHUD(targetAlpha)); } [IteratorStateMachine(typeof(d__14))] private IEnumerator FadeHUD(float targetAlpha) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__14(0) { <>4__this = this, targetAlpha = targetAlpha }; } public void FlashAndPunchBasedOnIncDec(TextMeshProUGUI text, bool isPositive) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)text == (Object)null)) { Color flashColor = (isPositive ? Color.green : Color.red); ((MonoBehaviour)this).StartCoroutine(FlashTextColor(text, flashColor, 0.2f)); ((MonoBehaviour)this).StartCoroutine(PunchText(((TMP_Text)text).rectTransform, 1.3f, 0.3f)); ((SemiUI)this).SemiUISpringShakeY(20f, 10f, 0.3f); ((SemiUI)this).SemiUISpringScale(0.3f, 5f, 0.2f); } } [IteratorStateMachine(typeof(d__16))] private IEnumerator FlashTextColor(TextMeshProUGUI text, Color flashColor, 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) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__16(0) { text = text, flashColor = flashColor, duration = duration }; } [IteratorStateMachine(typeof(d__17))] private IEnumerator PunchText(RectTransform rect, float punchScale, float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__17(0) { rect = rect, punchScale = punchScale, duration = duration }; } public void StartExtractionReminder() { if (!_reminderActive) { _reminderActive = true; _extractionReminderCoroutine = ((MonoBehaviour)this).StartCoroutine(ExtractionReminderPulse()); } } public void StopExtractionReminder() { if (_reminderActive) { _reminderActive = false; if (_extractionReminderCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_extractionReminderCoroutine); } ResetReminderColors(); } } [IteratorStateMachine(typeof(d__20))] private IEnumerator ExtractionReminderPulse() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__20(0) { <>4__this = this }; } [IteratorStateMachine(typeof(d__21))] private IEnumerator PulseText(TextMeshProUGUI text, Vector3 originalScale, Vector3 originalPos, Color first, Color second) { //IL_0015: 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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__21(0) { <>4__this = this, text = text, originalScale = originalScale, originalPos = originalPos, first = first, second = second }; } [IteratorStateMachine(typeof(d__22))] private IEnumerator PulseTextAlphaColorShake(TextMeshProUGUI text, Vector3 originalScale, Vector3 originalPos, float targetAlpha, Color targetColor, float duration, float punchScale) { //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) //IL_0015: 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_0024: 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) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__22(0) { text = text, originalScale = originalScale, originalPos = originalPos, targetAlpha = targetAlpha, targetColor = targetColor, duration = duration, punchScale = punchScale }; } private void ResetReminderColors() { //IL_003f: Unknown result type (might be due to invalid IL or missing references) foreach (BaseHUD hud in _huds) { if ((Object)(object)hud.Text != (Object)null && _originalTextColors.TryGetValue(hud.Text, out var value)) { ((Graphic)hud.Text).color = value; } } _originalTextColors.Clear(); } public void HideHUD() { if (!_hudVisible) { return; } _hudVisible = false; foreach (BaseHUD hud in _huds) { hud.HideHUD(); } } public void ShowHUD() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) if (_hudVisible) { return; } _hudVisible = true; foreach (BaseHUD hud in _huds) { if (!(hud is InfoHUD)) { hud.ShowHUD(); if ((Object)(object)hud.Text != (Object)null) { ((MonoBehaviour)this).StartCoroutine(PulseText(hud.Text, hud.OriginalScale, Vector2.op_Implicit(GetAdjustedPosition(hud.OriginalAnchoredPosition)), Color.green, Color.white)); } } } } private Vector2 GetAdjustedPosition(Vector2 original) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) return new Vector2(original.x, original.y - (float)IRSConfigManager.HudSlider.Value); } public T? GetHUD() where T : BaseHUD { return _huds.OfType().FirstOrDefault(); } } public static class IRSConfigManager { public static ConfigEntry StoreTipShown; public static ConfigEntry MaxBagLimit; public static ConfigEntry BagLevelInterval; public static ConfigEntry EnableInternalBlacklist; public static ConfigEntry EnableUserBlacklist; public static ConfigEntry KeyStoreItem; public static ConfigEntry KeyDropMoney; public static ConfigEntry KeyBlacklistItem; public static ConfigEntry KeyInfoHud; public static ConfigEntry HudSlider; public static ConfigEntry HeldHud; public static ConfigEntry PickUpSoundVolume; public static ConfigEntry SelectedLanguage; public static void Init(ConfigFile config) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Expected O, but got Unknown //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Expected O, but got Unknown StoreTipShown = config.Bind("General", "StoreTipShown", false, "Whether the 'Store item' tip has been shown to the player."); MaxBagLimit = config.Bind("General", "MaxBagLimit", 6, new ConfigDescription("Maximum number of bags allowed (2 to 20) per player", (AcceptableValueBase)(object)new AcceptableValueRange(2, 20), Array.Empty())); BagLevelInterval = config.Bind("General", "BagLevelInterval", 2, new ConfigDescription("Run levels required to increase max bags by 1", (AcceptableValueBase)(object)new AcceptableValueRange(2, 10), Array.Empty())); EnableInternalBlacklist = config.Bind("Blacklist", "EnableInternalBlacklist", true, "Enable the internal mod-provided blacklist. Host-only setting."); EnableUserBlacklist = config.Bind("Blacklist", "EnableUserBlacklist", false, "Enable the user-provided custom blacklist from file. Host-only setting."); KeyStoreItem = config.Bind("Keybinds", "StoreHeldItem", (KeyCode)98, "Key to store the held item into inventory."); KeyDropMoney = config.Bind("Keybinds", "DropMoneyBag", (KeyCode)109, "Key to drop stored items as a money bag."); KeyBlacklistItem = config.Bind("Keybinds", "BlacklistHeldItem", (KeyCode)107, "Key to add held item to a temporary blacklist file."); KeyInfoHud = config.Bind("Keybinds", "InfoHud", (KeyCode)284, "Key to show information about the mod."); HudSlider = config.Bind("HUD", "HudSlider", 0, new ConfigDescription("Slide the hud down by increasing this value", (AcceptableValueBase)(object)new AcceptableValueRange(0, 200), Array.Empty())); HeldHud = config.Bind("HUD", "HeldHud", false, "Show the HUD only when Grabbing"); PickUpSoundVolume = config.Bind("Sound", "PickUpSoundVolume", 1f, new ConfigDescription("How loud the pickup sound is", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 1f), Array.Empty())); SelectedLanguage = config.Bind("Localization", "Language", "en", "Language to use for mod text (e.g., en, es, español, english, spanish)."); SelectedLanguage.SettingChanged += delegate { LocalizationManager.Reload(); HUDManager.Instance?.ShowHUD(); }; } } public static class LocalizationManager { private static Dictionary _entries = new Dictionary(); private static readonly Dictionary LanguageAliases = new Dictionary(StringComparer.OrdinalIgnoreCase) { { "en", "en" }, { "english", "en" }, { "es", "es" }, { "spanish", "es" }, { "espanol", "es" }, { "español", "es" }, { "da", "da" }, { "danish", "da" }, { "dansk", "da" }, { "de", "de" }, { "german", "de" }, { "deutsch", "de" }, { "fr", "fr" }, { "french", "fr" }, { "pl", "pl" }, { "polish", "pl" } }; public static void Init(string languageInput = "en") { bool flag = false; if (string.IsNullOrWhiteSpace(languageInput) || languageInput.Trim().ToLower() == "en") { languageInput = IRSConfigManager.SelectedLanguage.Value; } string value = string.Empty; if (!LanguageAliases.TryGetValue(languageInput.Trim().ToLower(), out value)) { value = languageInput.Trim().ToLower(); flag = true; InternalRevenueStoragePlugin.Logger.LogWarning((object)("[Localization] Unknown language alias: '" + languageInput + "' — attempting to load as external language.")); } string location = typeof(LocalizationManager).Assembly.Location; string directoryName = Path.GetDirectoryName(location); string text = Path.Combine(directoryName, "InternalRevenueStorage", "Resources", "Locales", value + ".txt"); string text2 = Path.Combine(directoryName, "Resources", "Locales", value + ".txt"); string text3 = null; if (File.Exists(text)) { text3 = text; } else { if (!File.Exists(text2)) { InternalRevenueStoragePlugin.Logger.LogWarning((object)("[Localization] Localization file not found at either path:\n- " + text + "\n- " + text2)); return; } InternalRevenueStoragePlugin.Logger.LogWarning((object)("[Localization] Primary localization file not found. Using fallback: " + text2)); text3 = text2; } _entries.Clear(); string[] array = File.ReadAllLines(text3); foreach (string text4 in array) { if (!string.IsNullOrWhiteSpace(text4) && text4.Contains("=")) { string[] array2 = text4.Split(new char[1] { '=' }, 2); string key = array2[0].Trim(); string value2 = array2[1].Trim(); _entries[key] = value2; } } if (flag) { InternalRevenueStoragePlugin.Logger.LogWarning((object)$"[Localization] Loaded unsupported (external) language '{value}' with {_entries.Count} entries."); } else { InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[Localization] Loaded '{value}' with {_entries.Count} entries."); } } public static string Translate(string key) { if (_entries.TryGetValue(key, out string value)) { return value; } return ""; } public static void Reload() { Init(IRSConfigManager.SelectedLanguage.Value); (HUDManager.Instance?.GetHUD())?.RefreshText(); } } public class MoneyBagManager { public static int LargeThreshold { get; } = 10000; public static int MediumThreshold { get; } = 5000; public static void SpawnMoneyBag(int totalValue, Vector3 spawnPosition) { //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: 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) if (totalValue <= 0) { return; } GameObject val = AssetManager.instance.surplusValuableSmall; if (totalValue > LargeThreshold) { val = AssetManager.instance.surplusValuableBig; } else if (totalValue > MediumThreshold) { val = AssetManager.instance.surplusValuableMedium; } if ((Object)(object)val == (Object)null) { InternalRevenueStoragePlugin.Logger.LogError((object)"Surplus prefab is missing."); return; } GameObject val2 = ((!SemiFunc.IsMultiplayer()) ? Object.Instantiate(val, spawnPosition, Quaternion.identity) : PhotonNetwork.InstantiateRoomObject("Valuables/" + ((Object)val).name, spawnPosition, Quaternion.identity, (byte)0, (object[])null)); ValuableObject component = val2.GetComponent(); PhysGrabObject component2 = val2.GetComponent(); if ((Object)(object)component != (Object)null) { component.dollarValueOverride = totalValue; } if ((Object)(object)component2 != (Object)null) { component2.spawnTorque = Random.insideUnitSphere * 0.05f; } } public static bool IsMoneyBag(ValuableObject valuable) { if ((Object)(object)valuable == (Object)null) { return false; } GameObject surplusValuableSmall = AssetManager.instance.surplusValuableSmall; GameObject surplusValuableMedium = AssetManager.instance.surplusValuableMedium; GameObject surplusValuableBig = AssetManager.instance.surplusValuableBig; string text = ((Object)((Component)valuable).gameObject).name.Replace("(Clone)", "").Trim(); if (!(text == ((Object)surplusValuableSmall).name) && !(text == ((Object)surplusValuableMedium).name)) { return text == ((Object)surplusValuableBig).name; } return true; } } public static class SoundManager { private static AudioClip? _pickupClip; private static AudioClip? _reminderClip; public static void LoadSounds() { Assembly assembly = typeof(SoundManager).Assembly; using Stream stream = assembly.GetManifestResourceStream("InternalRevenueStorage.Resources.Sounds.pickup.wav"); if (stream != null) { byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); _pickupClip = WavUtility.ToAudioClip(array, 0, "pickup"); } else { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS SoundManager] Pickup sound not found!"); } } public static void PlayPickupSound(Vector3 position) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_pickupClip != (Object)null) { AudioSource.PlayClipAtPoint(_pickupClip, position, IRSConfigManager.PickUpSoundVolume.Value); } } } public class StorageManager { private enum SlotFitResult { CannotStore, FitsOneSlot, FitsTwoSlots } private readonly int _maxStorageAmount = 2; private readonly List _storage = new List(); private readonly float _grabDisableTime = 1f; public int GetMaxStorage() { return _maxStorageAmount; } public int GetStorageCount() { return _storage.Count; } public int GetTotalStorageValue() { return _storage.Sum((ValuableObject valuable) => (int)valuable.dollarValueCurrent); } public void ClearStorage() { _storage.Clear(); } public void DropAllAsMoneyBag() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) PhotonView component = ((Component)PlayerController.instance).GetComponent(); if (GetStorageCount() == 0) { InternalRevenueStoragePlugin.Logger.LogInfo((object)"Storage is empty, nothing to drop."); return; } int totalStorageValue = GetTotalStorageValue(); Vector3 val = CalculateBoundsForDropping(); if (SemiFunc.IsMultiplayer()) { component.RPC("RPC_RequestDropMoneyBag", (RpcTarget)2, new object[2] { totalStorageValue, val }); } else { MoneyBagManager.SpawnMoneyBag(totalStorageValue, val); } _storage.Clear(); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"Dropped money bag worth ${totalStorageValue}."); } public void StoreHeldItem() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) PhysGrabber instance = PhysGrabber.instance; if ((Object)(object)instance == (Object)null) { return; } PhysGrabObject grabbedPhysGrabObject = instance.grabbedPhysGrabObject; if ((Object)(object)grabbedPhysGrabObject == (Object)null) { instance.grabbedPhysGrabObject = null; return; } ValuableObject component = ((Component)grabbedPhysGrabObject).GetComponent(); if ((Object)(object)component == (Object)null) { instance.ReleaseObjectRPC(true, _grabDisableTime, component.photonView.ViewID, default(PhotonMessageInfo)); instance.grabbedPhysGrabObject = null; return; } if (!component.physGrabObject.grabbed) { instance.ReleaseObjectRPC(true, _grabDisableTime, component.photonView.ViewID, default(PhotonMessageInfo)); instance.grabbedPhysGrabObject = null; return; } if (MoneyBagManager.IsMoneyBag(component)) { SendChatMessage("Must. Extract.", Color.yellow); return; } if (ValuableCheckManager.TryGetRestriction(component, out var restricted)) { if (string.IsNullOrEmpty(restricted.CustomMessage) || string.IsNullOrWhiteSpace(restricted.CustomMessage)) { SendChatMessage("DENIED.", restricted.MessageColor); } SendChatMessage(restricted.CustomMessage, restricted.MessageColor); InternalRevenueStoragePlugin.Logger.LogInfo((object)("Attempted to store restricted item: " + ((Object)component).name)); return; } SlotFitResult slotFitResult = GetSlotFitResult(component); if (slotFitResult == SlotFitResult.CannotStore) { SendChatMessage("Too. Heavy.", Color.red); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"Item: {((Object)component).name} is too large to store (volume type: {component.volumeType})."); return; } int num = _maxStorageAmount - GetSlotsUsed(); int num2 = ((slotFitResult != SlotFitResult.FitsTwoSlots) ? 1 : 2); if (num2 > num) { SendChatMessage((num2 == 2) ? "Need more room!" : "No room!", Color.green); return; } if (component.physGrabObject.grabbed) { if (SemiFunc.IsMultiplayer()) { PhotonView obj = PhotonView.Get((Component)(object)instance); if (obj != null) { obj.RPC("ReleaseObjectRPC", (RpcTarget)0, new object[3] { true, 0.1f, component.photonView.ViewID }); } } else { instance.ReleaseObjectRPC(true, _grabDisableTime, component.photonView.ViewID, default(PhotonMessageInfo)); } } instance.grabbedPhysGrabObject = null; PhotonView component2 = ((Component)PlayerController.instance).GetComponent(); if (SemiFunc.IsMultiplayer()) { if (PhotonNetwork.IsMasterClient || ((Component)component).GetComponent().IsMine) { PhotonNetwork.Destroy(((Component)component).gameObject); SoundManager.PlayPickupSound(((Component)PlayerController.instance).transform.position); } else { component2.RPC("RPC_RequestDestroy", (RpcTarget)2, new object[1] { ((Component)component).GetComponent().ViewID }); SoundManager.PlayPickupSound(((Component)PlayerController.instance).transform.position); } } else { Object.Destroy((Object)(object)((Component)component).gameObject); SoundManager.PlayPickupSound(((Component)PlayerController.instance).transform.position); } RemoveFromHaulList(component); _storage.Add(component); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"$Stored: {((Object)component).name} (${component.dollarValueCurrent})"); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"Total items in bag: {GetStorageCount()} (${GetTotalStorageValue()})"); } public int GetSlotsUsed() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) int num = 0; foreach (ValuableObject item in _storage) { switch (GetItemSlotSize(item)) { case SlotFitResult.FitsOneSlot: num++; break; case SlotFitResult.FitsTwoSlots: num += 2; break; case SlotFitResult.CannotStore: InternalRevenueStoragePlugin.Logger.LogWarning((object)$"[IRS] Stored item '{((Object)item).name}' is considered unstoreable (volumeType: {item.volumeType})"); break; } } return num; } private SlotFitResult GetSlotFitResult(ValuableObject valuable) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Invalid comparison between Unknown and I4 //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Invalid comparison between Unknown and I4 //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Invalid comparison between Unknown and I4 //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected I4, but got Unknown int num = 0; if (StatsManager.instance.playerUpgradeStrength.TryGetValue(PlayerController.instance.playerSteamID, out var value)) { num += value; } if ((int)valuable.volumeType == 4 || (int)valuable.volumeType == 5) { return SlotFitResult.CannotStore; } if ((int)valuable.volumeType == 0 || (int)valuable.volumeType == 1) { return SlotFitResult.FitsOneSlot; } Type volumeType = valuable.volumeType; switch ((int)volumeType) { case 0: case 1: return SlotFitResult.FitsOneSlot; case 2: if (num < 2) { return SlotFitResult.FitsTwoSlots; } return SlotFitResult.FitsOneSlot; case 3: if (num < 4) { return SlotFitResult.CannotStore; } return SlotFitResult.FitsTwoSlots; default: return SlotFitResult.CannotStore; } } private SlotFitResult GetItemSlotSize(ValuableObject valuable) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected I4, but got Unknown int num = 0; if (StatsManager.instance.playerUpgradeStrength.TryGetValue(PlayerController.instance.playerSteamID, out var value)) { num += value; } Type volumeType = valuable.volumeType; switch ((int)volumeType) { case 0: case 1: return SlotFitResult.FitsOneSlot; case 2: if (num >= 2) { return SlotFitResult.FitsOneSlot; } return SlotFitResult.FitsTwoSlots; case 3: if (num < 4) { return SlotFitResult.CannotStore; } return SlotFitResult.FitsTwoSlots; default: return SlotFitResult.CannotStore; } } public Vector3 CalculateBoundsForDropping() { //IL_000a: 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) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)PhysGrabber.instance).transform.position + Vector3.up * 0.5f; Vector3 forward = ((Component)PhysGrabber.instance).transform.forward; float num = 2f; RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, forward, ref val2, num, -1, (QueryTriggerInteraction)1)) { return ((RaycastHit)(ref val2)).point + ((RaycastHit)(ref val2)).normal * 0.2f; } return val + forward * 1.5f; } private void RemoveFromHaulList(ValuableObject valuableObject) { if (RoundDirector.instance.dollarHaulList.Contains(((Component)valuableObject).gameObject)) { RoundDirector.instance.dollarHaulList.Remove(((Component)valuableObject).gameObject); } } private void AddToHaulList(ValuableObject valuableObject) { if (!RoundDirector.instance.dollarHaulList.Contains(((Component)valuableObject).gameObject)) { RoundDirector.instance.dollarHaulList.Add(((Component)valuableObject).gameObject); } } public void SendChatMessage(string message, Color color) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) try { ChatManager.instance.PossessChatScheduleStart(1); ChatManager.instance.PossessChat((PossessChatID)0, message, 1f, color, 0f, false, 0, (UnityEvent)null); ChatManager.instance.PossessChatScheduleEnd(); } catch (Exception) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"Attempted to use ChatManager in an unexpected context."); } } } public static class ValuableCheckManager { private static readonly Dictionary internalBlacklist = new Dictionary { { "Valuable Scream Doll", new RestrictedValuable("Valuable Scream Doll", "DOLL. CURSED.", Color.red) }, { "Valuable Wizard Time Glass", new RestrictedValuable("Valuable Wizard Time Glass", "TIME. IS. AN. ILLUSION.", Color.magenta) }, { "Valuable Chomp Book", new RestrictedValuable("Valuable Chomp Book", "FORBIDDEN. KNOWLEDGE.", Color.gray) }, { "Valuable Music Box", new RestrictedValuable("Valuable Music Box", "DANCE. FOR. US.", Color.cyan) }, { "Valuable Fan", new RestrictedValuable("Valuable Fan", "BLOWING. THE. BAG. AWAY.", Color.gray) } }; public static readonly Dictionary userBlacklist = new Dictionary(); private static readonly string TempBlacklistPath = Path.Combine(Path.GetDirectoryName(typeof(ValuableCheckManager).Assembly.Location), "InternalRevenueStorage", "Resources", "TempBlacklist.json"); public static bool InternalBlacklistEnabled { get; set; } = IRSConfigManager.EnableInternalBlacklist.Value; public static bool UserBlacklistEnabled { get; set; } = IRSConfigManager.EnableUserBlacklist.Value; private static string ResolveBlacklistPath() { string location = typeof(ValuableCheckManager).Assembly.Location; string directoryName = Path.GetDirectoryName(location); string text = Path.Combine(directoryName, "InternalRevenueStorage", "Resources", "Blacklist.json"); string text2 = Path.Combine(directoryName, "Resources", "Blacklist.json"); if (File.Exists(text)) { return text; } if (File.Exists(text2)) { return text2; } return text; } public static void LoadBlacklist() { try { string text = ResolveBlacklistPath(); if (!File.Exists(text)) { InternalRevenueStoragePlugin.Logger.LogWarning((object)("[IRS] No blacklist file found. Creating default at: " + text)); CreateDefaultBlacklist(text); } string text2 = File.ReadAllText(text); List list = JsonConvert.DeserializeObject>(text2); if (list == null) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS] Blacklist file is empty or malformed."); return; } foreach (RestrictedValuable item in list) { string text3 = item.ItemName?.Trim(); if (!string.IsNullOrEmpty(text3) && !userBlacklist.ContainsKey(text3)) { userBlacklist[text3] = new RestrictedValuable(text3, item.CustomMessage); } } InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS] Loaded {userBlacklist.Count} user-restricted valuables."); } catch (Exception ex) { InternalRevenueStoragePlugin.Logger.LogError((object)("[IRS] Failed to load blacklist: " + ex.Message)); } } private static void CreateDefaultBlacklist(string path) { List list = new List { new RestrictedValuable("Valuable Item Example", "Valuable. Message."), new RestrictedValuable("Valuable Item Example Two", "Valuable. Message. Two.") }; string contents = JsonConvert.SerializeObject((object)list, (Formatting)1); Directory.CreateDirectory(Path.GetDirectoryName(path)); File.WriteAllText(path, contents); } public static bool TryGetRestriction(ValuableObject valuable, out RestrictedValuable restricted) { restricted = default(RestrictedValuable); if ((Object)(object)valuable == (Object)null) { return false; } string key = ((Object)valuable).name.Replace("(Clone)", "").Trim(); if (IRSConfigManager.EnableUserBlacklist.Value && userBlacklist.TryGetValue(key, out restricted)) { return true; } if (IRSConfigManager.EnableInternalBlacklist.Value && internalBlacklist.TryGetValue(key, out restricted)) { return true; } return false; } public static void AppendToTempBlacklist(string itemName) { string itemName2 = itemName; try { List list = new List(); if (File.Exists(TempBlacklistPath)) { string text = File.ReadAllText(TempBlacklistPath); list = JsonConvert.DeserializeObject>(text) ?? new List(); } if (list.Exists((RestrictedValuable rv) => rv.ItemName.Equals(itemName2, StringComparison.OrdinalIgnoreCase))) { InternalRevenueStoragePlugin.Logger.LogInfo((object)("[IRS] '" + itemName2 + "' is already in TempBlacklist.")); return; } list.Add(new RestrictedValuable(itemName2, "")); string contents = JsonConvert.SerializeObject((object)list, (Formatting)1); Directory.CreateDirectory(Path.GetDirectoryName(TempBlacklistPath)); File.WriteAllText(TempBlacklistPath, contents); InternalRevenueStoragePlugin.Logger.LogInfo((object)("[IRS] Added '" + itemName2 + "' to TempBlacklist.")); } catch (Exception ex) { InternalRevenueStoragePlugin.Logger.LogError((object)("[IRS] Failed to append to TempBlacklist: " + ex.Message)); } } public static void BroadcastUserBlacklistToClients(MonoBehaviour senderContext) { bool flag = !PhotonNetwork.IsConnectedAndReady || PhotonNetwork.OfflineMode; if (!PhotonNetwork.IsMasterClient && !flag) { return; } try { List list = new List(userBlacklist.Values); string text = JsonConvert.SerializeObject((object)list, (Formatting)0); if (flag) { ((Component)senderContext).SendMessage("RPC_ReceiveUserBlacklist", (object)text); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS] Applied custom blacklist locally in singleplayer ({list.Count} items)."); return; } PhotonView component = ((Component)senderContext).GetComponent(); if ((Object)(object)component != (Object)null) { component.RPC("RPC_ReceiveUserBlacklist", (RpcTarget)1, new object[1] { text }); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS] Broadcasted custom blacklist to clients ({list.Count} items)."); } else { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS] Broadcast failed: PhotonView not found on sender context."); } } catch (Exception ex) { InternalRevenueStoragePlugin.Logger.LogError((object)("[IRS] Failed to broadcast custom blacklist: " + ex.Message)); } } } } namespace InternalRevenueStorage.Managers.HUDS { public class BagsHUD : BaseHUD { private int _previousBagsUsed; public override void Initialize(RectTransform referenceRect) { //IL_0004: 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) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) Text = CreateHUDText(referenceRect, new Vector2(referenceRect.anchoredPosition.x + referenceRect.sizeDelta.x, referenceRect.anchoredPosition.y - 80f)); base.OriginalScale = ((Transform)((TMP_Text)Text).rectTransform).localScale; base.OriginalAnchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; } public override void UpdateHUD() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.MenuLevel()) { return; } Vector2 anchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; anchoredPosition.y = base.OriginalAnchoredPosition.y - (float)IRSConfigManager.HudSlider.Value; ((TMP_Text)Text).rectTransform.anchoredPosition = anchoredPosition; PlayerController instance = PlayerController.instance; StorageComponent storageComponent = ((instance != null) ? ((Component)instance).GetComponent() : null); if (!((Object)(object)storageComponent == (Object)null)) { int bagsDropped = storageComponent._bagManager.BagsDropped; int maxBagsAllowed = storageComponent._bagManager.MaxBagsAllowed; float usagePercent = (float)bagsDropped / (float)maxBagsAllowed; Color bagColor = GetBagColor(usagePercent); string format = LocalizationManager.Translate("hud.bags.used"); string text = string.Format(format, bagsDropped, maxBagsAllowed); ((TMP_Text)Text).text = "" + text + ""; if (ShouldFlash(bagsDropped, _previousBagsUsed)) { HUDManager.Instance.FlashAndPunchBasedOnIncDec(Text, bagsDropped > _previousBagsUsed); } _previousBagsUsed = bagsDropped; } } private Color GetBagColor(float usagePercent) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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 (usagePercent >= 0.9f) { return Color.red; } if (usagePercent >= 0.75f) { return new Color(1f, 0.5f, 0f); } if (usagePercent >= 0.5f) { return Color.yellow; } return Color.white; } private bool ShouldFlash(int newValue, int oldValue) { if (newValue > 0) { if (newValue == oldValue) { return oldValue == 0; } return true; } return false; } } public abstract class BaseHUD { public TextMeshProUGUI Text; public Vector3 OriginalScale { get; protected set; } public Vector2 OriginalAnchoredPosition { get; protected set; } public abstract void Initialize(RectTransform referenceRect); public abstract void UpdateHUD(); public virtual void ShowHUD() { if ((Object)(object)Text != (Object)null) { ((Behaviour)Text).enabled = true; } } public virtual void HideHUD() { if ((Object)(object)Text != (Object)null) { ((Behaviour)Text).enabled = false; } } protected TextMeshProUGUI CreateHUDText(RectTransform referenceRect, Vector2 anchoredPosition) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("HUDText", new Type[1] { typeof(RectTransform) }); val.transform.SetParent(((Transform)referenceRect).parent, false); TextMeshProUGUI val2 = val.AddComponent(); RectTransform component = ((Component)val2).GetComponent(); component.anchorMin = referenceRect.anchorMin; component.anchorMax = referenceRect.anchorMax; component.pivot = referenceRect.pivot; component.anchoredPosition = anchoredPosition; ((Behaviour)val2).enabled = false; SetupTextStyle(val2); return val2; } public void SetupTextStyle(TextMeshProUGUI text) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI component = ((Component)HealthUI.instance).GetComponent(); ((TMP_Text)text).font = ((TMP_Text)component).font; ((Graphic)text).material = ((TMP_Text)component).fontMaterial; ((TMP_Text)text).fontSize = 32f; ((TMP_Text)text).alignment = (TextAlignmentOptions)513; ((Graphic)text).color = Color.white; ((TMP_Text)text).text = ""; } } public class InfoHUD : BaseHUD { [CompilerGenerated] private sealed class d__6 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public InfoHUD <>4__this; public float targetAlpha; private float 5__2; private float 5__3; private Color 5__4; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; InfoHUD infoHUD = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; 5__2 = 0.3f; 5__3 = 0f; 5__4 = ((Graphic)infoHUD.Text).color; ((Behaviour)infoHUD.Text).enabled = true; break; case 1: <>1__state = -1; break; } if (5__3 < 5__2) { 5__3 += Time.deltaTime; float num2 = 5__3 / 5__2; float num3 = Mathf.Lerp(5__4.a, targetAlpha, num2); ((Graphic)infoHUD.Text).color = new Color(5__4.r, 5__4.g, 5__4.b, num3); <>2__current = null; <>1__state = 1; return true; } if (targetAlpha == 0f) { ((Behaviour)infoHUD.Text).enabled = false; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private bool _isHoldingKey; private Coroutine _fadeCoroutine; public override void Initialize(RectTransform referenceRect) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("InfoHUDText", new Type[1] { typeof(RectTransform) }); val.transform.SetParent(((Transform)referenceRect).parent, false); Text = val.AddComponent(); RectTransform component = ((Component)Text).GetComponent(); component.anchorMin = new Vector2(0.5f, 0.5f); component.anchorMax = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(0.5f, 0.5f); SetupTextStyle(Text); ((TMP_Text)Text).alignment = (TextAlignmentOptions)514; ((TMP_Text)Text).fontSize = 12f; ((Graphic)Text).color = new Color(((Graphic)Text).color.r, ((Graphic)Text).color.g, ((Graphic)Text).color.b, 0f); ((Behaviour)Text).enabled = false; RefreshText(); } public void RefreshText() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) KeyCode value = IRSConfigManager.KeyStoreItem.Value; string arg = ((object)(KeyCode)(ref value)).ToString(); value = IRSConfigManager.KeyDropMoney.Value; string arg2 = ((object)(KeyCode)(ref value)).ToString(); ((TMP_Text)Text).text = "" + LocalizationManager.Translate("mod.version") + "\n" + string.Format(LocalizationManager.Translate("info.store"), arg) + "\n" + string.Format(LocalizationManager.Translate("info.drop"), arg2) + "\n\n" + LocalizationManager.Translate("info.sl.title") + "\n\n" + LocalizationManager.Translate("info.sl.medium") + "\n" + LocalizationManager.Translate("info.sl.big") + "\n\n" + LocalizationManager.Translate("info.sl.upgrade") + "\n\n" + LocalizationManager.Translate("info.bag.limit"); } public override void UpdateHUD() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.MenuLevel()) { if (Input.GetKeyDown(IRSConfigManager.KeyInfoHud.Value)) { _isHoldingKey = true; StartFade(1f); } if (Input.GetKeyUp(IRSConfigManager.KeyInfoHud.Value)) { _isHoldingKey = false; StartFade(0f); } } } private void StartFade(float targetAlpha) { if (_fadeCoroutine != null) { ((MonoBehaviour)HUDManager.Instance).StopCoroutine(_fadeCoroutine); } _fadeCoroutine = ((MonoBehaviour)HUDManager.Instance).StartCoroutine(FadeHUD(targetAlpha)); } [IteratorStateMachine(typeof(d__6))] private IEnumerator FadeHUD(float targetAlpha) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__6(0) { <>4__this = this, targetAlpha = targetAlpha }; } } public class PickupCapacityHUD : BaseHUD { public override void Initialize(RectTransform referenceRect) { //IL_0004: 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) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) Text = CreateHUDText(referenceRect, new Vector2(referenceRect.anchoredPosition.x + referenceRect.sizeDelta.x, referenceRect.anchoredPosition.y - 100f)); base.OriginalScale = ((Transform)((TMP_Text)Text).rectTransform).localScale; base.OriginalAnchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; } public override void UpdateHUD() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.MenuLevel()) { Vector2 anchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; anchoredPosition.y = base.OriginalAnchoredPosition.y - (float)IRSConfigManager.HudSlider.Value; ((TMP_Text)Text).rectTransform.anchoredPosition = anchoredPosition; int num = 0; if (StatsManager.instance.playerUpgradeStrength.TryGetValue(PlayerController.instance.playerSteamID, out var value)) { num += value; } string key = ((num <= 3) ? "hud.sl.medium" : "hud.sl.big"); string text = LocalizationManager.Translate(key); ((TMP_Text)Text).text = "" + text + ""; } } } public class StorageHUD : BaseHUD { private StorageManager _storageManager; private int _previousSlotsUsed; public override void Initialize(RectTransform referenceRect) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) _storageManager = ((Component)PlayerController.instance).GetComponent().StorageManager; Text = CreateHUDText(referenceRect, new Vector2(referenceRect.anchoredPosition.x + referenceRect.sizeDelta.x, referenceRect.anchoredPosition.y - 60f)); base.OriginalScale = ((Transform)((TMP_Text)Text).rectTransform).localScale; base.OriginalAnchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; } public override void UpdateHUD() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.MenuLevel() && _storageManager != null) { Vector2 anchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; anchoredPosition.y = base.OriginalAnchoredPosition.y - (float)IRSConfigManager.HudSlider.Value; ((TMP_Text)Text).rectTransform.anchoredPosition = anchoredPosition; int slotsUsed = _storageManager.GetSlotsUsed(); int maxStorage = _storageManager.GetMaxStorage(); Color storageColor = GetStorageColor((float)slotsUsed / (float)maxStorage); ((TMP_Text)Text).text = $"{slotsUsed}/{maxStorage}"; if (ShouldFlash(slotsUsed, _previousSlotsUsed)) { HUDManager.Instance.FlashAndPunchBasedOnIncDec(Text, slotsUsed > _previousSlotsUsed); } _previousSlotsUsed = slotsUsed; } } private Color GetStorageColor(float usagePercent) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) if (!(usagePercent >= 0.9f)) { if (!(usagePercent >= 0.75f)) { if (usagePercent >= 0.5f) { return Color.yellow; } return Color.white; } return new Color(1f, 0.5f, 0f); } return Color.red; } private bool ShouldFlash(int newValue, int oldValue) { if (newValue > 0) { if (newValue == oldValue) { return oldValue == 0; } return true; } return false; } } public class ValueHUD : BaseHUD { private StorageManager _storageManager; private int _previousValue; public override void Initialize(RectTransform referenceRect) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) _storageManager = ((Component)PlayerController.instance).GetComponent().StorageManager; Text = CreateHUDText(referenceRect, new Vector2(referenceRect.anchoredPosition.x + referenceRect.sizeDelta.x + 50f, referenceRect.anchoredPosition.y - 60f)); base.OriginalScale = ((Transform)((TMP_Text)Text).rectTransform).localScale; base.OriginalAnchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; } public override void UpdateHUD() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.MenuLevel() && _storageManager != null) { Vector2 anchoredPosition = ((TMP_Text)Text).rectTransform.anchoredPosition; anchoredPosition.y = base.OriginalAnchoredPosition.y - (float)IRSConfigManager.HudSlider.Value; ((TMP_Text)Text).rectTransform.anchoredPosition = anchoredPosition; int totalStorageValue = _storageManager.GetTotalStorageValue(); ((TMP_Text)Text).text = $"${totalStorageValue}"; if (ShouldFlash(totalStorageValue, _previousValue)) { HUDManager.Instance.FlashAndPunchBasedOnIncDec(Text, totalStorageValue > _previousValue); } _previousValue = totalStorageValue; } } private bool ShouldFlash(int newValue, int oldValue) { if (newValue > 0) { if (newValue == oldValue) { return oldValue == 0; } return true; } return false; } } } namespace InternalRevenueStorage.Data { [Serializable] public struct RestrictedValuable { public string ItemName; public string CustomMessage; [NonSerialized] public Color MessageColor; public RestrictedValuable(string name, string message, Color color) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) ItemName = name; CustomMessage = message; MessageColor = color; } public RestrictedValuable(string name, string message) : this(name, message, Color.red) { }//IL_0003: Unknown result type (might be due to invalid IL or missing references) } } namespace InternalRevenueStorage.Components { public class StorageComponent : MonoBehaviourPunCallbacks { public readonly StorageManager StorageManager = new StorageManager(); public BagManager _bagManager; public static StorageComponent Instance { get; private set; } private void Awake() { if (((MonoBehaviourPun)this).photonView.IsMine) { Instance = this; } _bagManager = ((Component)this).gameObject.AddComponent(); } private void Update() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Invalid comparison between Unknown and I4 //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Invalid comparison between Unknown and I4 //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Invalid comparison between Unknown and I4 if (IsLocalPlayer()) { if (Input.GetKeyDown(IRSConfigManager.KeyStoreItem.Value) && (int)ChatManager.instance.chatState != 1) { TryStoreHeldItem(); } if (Input.GetKeyDown(IRSConfigManager.KeyDropMoney.Value) && (int)ChatManager.instance.chatState != 1) { TryDropMoneyBag(); } if (Input.GetKeyDown(IRSConfigManager.KeyBlacklistItem.Value) && (int)ChatManager.instance.chatState != 1) { TryBlacklistHeldItem(); } } } private void TryStoreHeldItem() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if (!_bagManager.CanDropBag()) { StorageManager.SendChatMessage("No. More. Bags.", Color.red); return; } InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS SC] Storage key pressed - Storing held item"); StorageManager.StoreHeldItem(); } private void TryDropMoneyBag() { if (StorageManager.GetStorageCount() > 0) { InternalRevenueStoragePlugin.Logger.LogInfo((object)"[IRS SC] Money key pressed - Dropping money bag"); StorageManager.DropAllAsMoneyBag(); _bagManager.TryIncrementBag(); } } private void TryBlacklistHeldItem() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) PhysGrabber instance = PhysGrabber.instance; PhysGrabObject val = instance?.grabbedPhysGrabObject; if ((Object)(object)val == (Object)null) { StorageManager.SendChatMessage("No. Item. Held.", Color.yellow); instance.grabbedPhysGrabObject = null; return; } ValuableObject component = ((Component)val).GetComponent(); if ((Object)(object)component == (Object)null) { StorageManager.SendChatMessage("Not. Valuable.", Color.gray); instance.grabbedPhysGrabObject = null; } else if (MoneyBagManager.IsMoneyBag(component)) { StorageManager.SendChatMessage("Why.", Color.yellow); } else { string text = ((Object)component).name.Replace("(Clone)", "").Trim(); ValuableCheckManager.AppendToTempBlacklist(text); StorageManager.SendChatMessage("Blacklisted: " + text, Color.red); } } public void ResetBags() { _bagManager.ResetBags(); } public void UpdateBagLimitBasedOnRunLevel() { _bagManager.UpdateBagLimitBasedOnRunLevel(); } private bool IsLocalPlayer() { PlayerController component = ((Component)this).GetComponent(); PlayerController instance = PlayerController.instance; return (Object)(object)component == (Object)(object)instance; } [PunRPC] public void RPC_ReceiveUserBlacklist(string json) { try { List list = JsonConvert.DeserializeObject>(json); if (list == null) { InternalRevenueStoragePlugin.Logger.LogWarning((object)"[IRS] Received user blacklist was null."); return; } foreach (RestrictedValuable item in list) { string text = item.ItemName?.Trim(); if (!string.IsNullOrEmpty(text) && !ValuableCheckManager.userBlacklist.ContainsKey(text)) { ValuableCheckManager.userBlacklist[text] = new RestrictedValuable(text, item.CustomMessage); } } InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS] Client received user blacklist with {list.Count} entries."); } catch (Exception ex) { InternalRevenueStoragePlugin.Logger.LogError((object)("[IRS] Failed to apply received blacklist: " + ex.Message)); } } [PunRPC] public void RPC_SyncBlacklistSettings(bool internalEnabled, bool userEnabled) { ValuableCheckManager.InternalBlacklistEnabled = internalEnabled; ValuableCheckManager.UserBlacklistEnabled = userEnabled; InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS] Blacklist settings synced: Internal={internalEnabled}, User={userEnabled}"); } public void SyncBlacklistSettingsFromHost() { if (PhotonNetwork.IsMasterClient) { bool value = IRSConfigManager.EnableInternalBlacklist.Value; bool value2 = IRSConfigManager.EnableUserBlacklist.Value; ValuableCheckManager.InternalBlacklistEnabled = value; ValuableCheckManager.UserBlacklistEnabled = value2; ((MonoBehaviourPun)this).photonView.RPC("RPC_SyncBlacklistSettings", (RpcTarget)1, new object[2] { value, value2 }); InternalRevenueStoragePlugin.Logger.LogInfo((object)$"[IRS] Host set blacklist settings: Internal={value}, User={value2}"); } } [PunRPC] public void RPC_RequestDestroy(int viewID) { if (PhotonNetwork.IsMasterClient) { PhotonView val = PhotonView.Find(viewID); if ((Object)(object)val != (Object)null) { PhotonNetwork.Destroy(((Component)val).gameObject); } } } } }