using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Logging; using GameNetcodeStuff; using HQoL.Network; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using StatsTracker.Patches; using StatsTracker.Util; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("DunGen")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.ASPP")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.UnityNav")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("OreoM.HQoL.72")] [assembly: IgnoresAccessChecksTo("OreoM.HQoL.73")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.XR.CoreUtils")] [assembly: IgnoresAccessChecksTo("Unity.XR.Management")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MetaQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.OculusQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.RuntimeDebugger")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.SpatialTracking")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.XR.LegacyInputHelpers")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("OreoM.StatsTracker")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.3.0")] [assembly: AssemblyInformationalVersion("1.1.3+917cbf30b9e22e1944e01c7598618f3a5532fa02")] [assembly: AssemblyProduct("StatsTracker")] [assembly: AssemblyTitle("OreoM.StatsTracker")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.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 StatsTracker { [BepInPlugin("OreoM.StatsTracker", "StatsTracker", "1.1.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class StatsTracker : BaseUnityPlugin { internal static bool dayHasStarted = false; internal static Stats? DayStats; internal static HttpSSE LocalServer = new HttpSSE(); internal static Dictionary VanillaInteriorNames = new Dictionary { { "Level1Flow", "Facility" }, { "Level2Flow", "Mansion" }, { "Level1FlowExtraLarge", "UnusedFacility" }, { "Level1Flow3Exits", "Facility" }, { "Level3Flow", "Mineshaft" } }; public static readonly Type? EggItemType = AccessTools.TypeByName("KiwiBabyItem"); public static readonly Type? KnifeItemType = AccessTools.TypeByName("KnifeItem"); public static readonly Type? ShotgunItemType = AccessTools.TypeByName("ShotgunItem"); public static readonly Type? GiftBoxItemType = AccessTools.TypeByName("GiftBoxItem"); public static readonly FieldInfo? DeactivatedField = AccessTools.Field(typeof(GrabbableObject), "deactivated"); public static StatsTracker Instance { get; private set; } = null; internal static ManualLogSource Logger { get; private set; } = null; internal static Harmony? Harmony { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Patch(); LocalServer.Start(); Logger.LogInfo((object)"OreoM.StatsTracker v1.1.3 has loaded!"); } internal static void Patch() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("OreoM.StatsTracker"); } Logger.LogDebug((object)"Patching..."); CompanyTracker.ApplyCompanyTrackerPatches(Harmony); HazardTracker.ApplyHazardTrakcerPatches(Harmony); ItemAndEventTracker.ApplyItemAndEventTrackerPatches(Harmony); PlayerTracker.ApplyPlayerTrackerPatches(Harmony); ServerEvents.ApplyServerEventPatches(Harmony); ShipTracker.ApplyShipTrackerPatches(Harmony); SpawnTracker.ApplySpawnTrackerPatches(Harmony); if (Chainloader.PluginInfos.ContainsKey("OreoM.HQoL.72") || Chainloader.PluginInfos.ContainsKey("OreoM.HQoL.73")) { HQoLTracker.ApplyHQoLTrackerPatches(Harmony); } Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } internal static string GetCurrentTimeString() { float normalizedTimeOfDay = TimeOfDay.Instance.normalizedTimeOfDay; float num = TimeOfDay.Instance.numberOfHours; bool flag = false; string text = ""; string text2 = ""; int num2 = (int)(normalizedTimeOfDay * (60f * num)) + 360; int num3 = (int)Mathf.Floor((float)(num2 / 60)); text = (flag ? "\n" : " "); text2 = text + "AM"; if (num3 >= 24) { return "12:00 " + text + " AM"; } text2 = ((num3 >= 12) ? (text + "PM") : (text + "AM")); if (num3 > 12) { num3 %= 12; } int num4 = num2 % 60; string text3 = $"{num3:00}:{num4:00}".TrimStart('0') + text2; if (!(text3 == "6:00 AM")) { return text3; } return "7:40 AM"; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "OreoM.StatsTracker"; public const string PLUGIN_NAME = "StatsTracker"; public const string PLUGIN_VERSION = "1.1.3"; } } namespace StatsTracker.Util { public class HttpSSE { private HttpListener? listener; private string? currentJson; private Thread? serverThread; private const int PORT = 2145; private readonly ManualResetEvent dayFinishedSignaler = new ManualResetEvent(initialState: false); public void Start() { listener = new HttpListener(); listener.Prefixes.Add($"http://localhost:{2145}/"); listener.Start(); serverThread = new Thread(ListenLoop) { IsBackground = true }; serverThread.Start(); StatsTracker.Logger.LogInfo((object)$"Stat server running at http://localhost:{2145}"); } public void Stop() { listener?.Stop(); serverThread?.Join(); StatsTracker.Logger.LogInfo((object)"Stat server stopped"); } public void PublishStats(string json) { currentJson = json; dayFinishedSignaler.Set(); } public void Reset() { currentJson = null; dayFinishedSignaler.Reset(); } private void ListenLoop() { while (listener.IsListening) { try { HttpListenerContext context = listener.GetContext(); ThreadPool.QueueUserWorkItem(delegate { HandleRequest(context); }); } catch (HttpListenerException) { break; } } } private void HandleRequest(HttpListenerContext context) { HttpListenerResponse response = context.Response; response.StatusCode = 200; response.ContentType = "text/event-stream"; response.Headers.Add("Cache-Control", "no-cache"); response.Headers.Add("Access-Control-Allow-Origin", "*"); dayFinishedSignaler.WaitOne(); string s = "data: " + currentJson + "\n\n"; byte[] bytes = Encoding.UTF8.GetBytes(s); response.OutputStream.Write(bytes, 0, bytes.Length); response.OutputStream.Flush(); response.Close(); Reset(); } } internal class PlayerStats { public string Name; public bool Alive; public bool Disconnected; public string TimeOfDeath; public string CauseOfDeath; public PlayerStats(string name) { Name = name; Alive = true; TimeOfDeath = ""; CauseOfDeath = ""; base..ctor(); } public void Kill(string TimeOfDeath, string CauseOfDeath) { Alive = false; this.TimeOfDeath = TimeOfDeath; this.CauseOfDeath = CauseOfDeath; } public void Disconnect() { Disconnected = true; } } internal class SpecialItemInfo { public List Available = new List(); public List Collected = new List(); public void AddToAvailable(int value) { Available.Add(value); } public void AddToCollected(int value) { Collected.Add(value); } } internal class GiftBoxInfo { public int NewScrapValue; public int GiftScrapValue; public bool Collected; public GiftBoxInfo(int newScrapValue, int GiftScrapValue) { NewScrapValue = newScrapValue; this.GiftScrapValue = GiftScrapValue; base..ctor(); } } internal class MissingItemInfo { public int Value; public string ItemType; public double[] DespawnPosition; public bool CollectedOnPreviousDay; public int ScrapInsideGiftValue; public MissingItemInfo(string Name, int Value, Vector3 DespawnPosition, bool CollectedOnPreviousDay, int ScrapInsideGiftValue = 0) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) this.Value = Value; ItemType = Name; this.DespawnPosition = new double[3] { Math.Round(DespawnPosition.x, 1), Math.Round(DespawnPosition.y, 1), Math.Round(DespawnPosition.z, 1) }; this.CollectedOnPreviousDay = CollectedOnPreviousDay; this.ScrapInsideGiftValue = ScrapInsideGiftValue; base..ctor(); } } internal class HazardInfo { public int TurretCount; public int LandmineCount; public int SpiketrapCount; public HazardInfo(int TurretCount, int LandmineCount, int SpiketrapCount) { this.TurretCount = TurretCount; this.LandmineCount = LandmineCount; this.SpiketrapCount = SpiketrapCount; base..ctor(); } } internal class MoonInfo { public string Name; public string Weather; public MoonInfo(string Name, string Weather) { this.Name = Name; this.Weather = Weather; base..ctor(); } } internal class DungeonInfo { public int ItemCount; public string Interior; public DungeonInfo(int ItemCount, string Interior) { this.ItemCount = ItemCount; this.Interior = Interior; base..ctor(); } } internal class SpawnInfo { public string Enemy = EnemyType.enemyName; public string SpawnTime; public string TimeOfDeath; public SpawnInfo(EnemyType EnemyType, string Time) { SpawnTime = Time; TimeOfDeath = ""; base..ctor(); } } internal class Stats { public MoonInfo MoonInfo; public DungeonInfo? DungeonInfo; public HazardInfo? HazardInfo; public SpecialItemInfo BeeInfo; public SpecialItemInfo EggInfo; public SpecialItemInfo KnifeInfo; public SpecialItemInfo ShotgunInfo; public int Seed; public int Version; public int CollectedNoExtra; public int CollectedTotal; public int BottomLine; public int BottomLineTrue; public int ExtraFromOldGift; public int ValueSold; public int NewQuota; public bool AppSpawned; public bool IndoorFog; public string TakeOffTime; public string SIDType; public string InfestationType; public string MeteorShowerTime; public Dictionary Players; public List IndoorSpawns; public List DayTimeSpawns; public List NightTimeSpawns; public List GiftBoxesOpened; public List MissedItems; public Stats(int version, string moonName, string weather, PlayerControllerB[] allPlayers) { MoonInfo = new MoonInfo(moonName, weather); BeeInfo = new SpecialItemInfo(); EggInfo = new SpecialItemInfo(); KnifeInfo = new SpecialItemInfo(); ShotgunInfo = new SpecialItemInfo(); Seed = 0; Version = version; CollectedNoExtra = 0; CollectedTotal = 0; BottomLine = 0; BottomLineTrue = 0; ExtraFromOldGift = 0; ValueSold = 0; NewQuota = 0; AppSpawned = false; IndoorFog = false; TakeOffTime = ""; SIDType = ""; InfestationType = ""; MeteorShowerTime = ""; Players = new Dictionary(); IndoorSpawns = new List(); DayTimeSpawns = new List(); NightTimeSpawns = new List(); GiftBoxesOpened = new List(); MissedItems = new List(); foreach (PlayerControllerB val in allPlayers) { Players[val.playerSteamId] = new PlayerStats(val.playerUsername); } } } } namespace StatsTracker.Patches { internal class CompanyTracker { private static int itemsOnCounterCountLastFrame; public static void ApplyCompanyTrackerPatches(Harmony Harmony) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown Harmony.Patch((MethodBase)AccessTools.Method(typeof(DepositItemsDesk), "Update", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(CompanyTracker), "CheckForNewItemsOnCounter", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(StartOfRound), "ShipHasLeft", (Type[])null, (Type[])null), new HarmonyMethod(typeof(CompanyTracker), "ResetItemCountAfterTakingOffCompanyTypeMoon", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void CheckForNewItemsOnCounter(DepositItemsDesk __instance) { if (__instance.itemsOnCounter.Count > itemsOnCounterCountLastFrame) { for (int i = itemsOnCounterCountLastFrame; i < __instance.itemsOnCounter.Count; i++) { if (__instance.itemsOnCounter[i].itemProperties.isScrap) { StatsTracker.DayStats.ValueSold += __instance.itemsOnCounter[i].scrapValue; } } } itemsOnCounterCountLastFrame = __instance.itemsOnCounter.Count; } private static void ResetItemCountAfterTakingOffCompanyTypeMoon(RoundManager __instance) { if (!((Object)(object)Object.FindAnyObjectByType() == (Object)null)) { itemsOnCounterCountLastFrame = 0; } } } internal class HQoLTracker { private static int totalSold; public static void ApplyHQoLTrackerPatches(Harmony Harmony) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown Harmony.Patch((MethodBase)AccessTools.Method(typeof(DepositItemsDesk), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(HQoLTracker), "RegisterOnChangeWhenLandingOnCompanyTypeMoon", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(StartOfRound), "ShipHasLeft", (Type[])null, (Type[])null), new HarmonyMethod(typeof(HQoLTracker), "DeregisterOnChangeAfterTakingOffCompanyTypeMoon", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void RegisterOnChangeWhenLandingOnCompanyTypeMoon(DepositItemsDesk __instance) { if ((Object)(object)HQoLNetwork.Instance != (Object)null) { NetworkVariable totalStorageValue = HQoLNetwork.Instance.totalStorageValue; totalStorageValue.OnValueChanged = (OnValueChangedDelegate)(object)Delegate.Combine((Delegate?)(object)totalStorageValue.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate(OnChangeFindSoldValue)); } else if ((Object)(object)HQoLNetwork.Instance != (Object)null) { NetworkVariable totalStorageValue2 = HQoLNetwork.Instance.totalStorageValue; totalStorageValue2.OnValueChanged = (OnValueChangedDelegate)(object)Delegate.Combine((Delegate?)(object)totalStorageValue2.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate(OnChangeFindSoldValue)); } else { StatsTracker.Logger.LogWarning((object)"Failed to find HQoL instance, sold value will not be sync'd"); } } private static void DeregisterOnChangeAfterTakingOffCompanyTypeMoon(RoundManager __instance) { if (!((Object)(object)Object.FindAnyObjectByType() == (Object)null)) { if ((Object)(object)HQoLNetwork.Instance != (Object)null) { NetworkVariable totalStorageValue = HQoLNetwork.Instance.totalStorageValue; totalStorageValue.OnValueChanged = (OnValueChangedDelegate)(object)Delegate.Remove((Delegate?)(object)totalStorageValue.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate(OnChangeFindSoldValue)); } else if ((Object)(object)HQoLNetwork.Instance != (Object)null) { NetworkVariable totalStorageValue2 = HQoLNetwork.Instance.totalStorageValue; totalStorageValue2.OnValueChanged = (OnValueChangedDelegate)(object)Delegate.Remove((Delegate?)(object)totalStorageValue2.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate(OnChangeFindSoldValue)); } else { StatsTracker.Logger.LogWarning((object)"Failed to find HQoL instance, sold value will not be sync'd"); } StatsTracker.DayStats.ValueSold = totalSold; totalSold = 0; } } private static void OnChangeFindSoldValue(int prevValue, int currValue) { if (currValue < prevValue) { totalSold += prevValue - currValue; } } } internal class HazardTracker { public static int turretCount; public static int landmineCount; public static int spiketrapCount; public static void ApplyHazardTrakcerPatches(Harmony Harmony) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown Harmony Harmony2 = Harmony; Harmony2.Patch((MethodBase)AccessTools.Method(typeof(RoundManager), "GenerateNewLevelClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(HazardTracker), "ResetHazardTrackerWhenStartingNewDay", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)AccessTools.Method(typeof(Landmine), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(HazardTracker), "CountLandmine", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)AccessTools.Method(typeof(Turret), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(HazardTracker), "CountTurret", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Type SpikeRoofTrapType = AccessTools.TypeByName("SpikeRoofTrap"); if (SpikeRoofTrapType != null) { SpikeRoofTrapTypePath(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void SpikeRoofTrapTypePath() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown Harmony2.Patch((MethodBase)AccessTools.Method(SpikeRoofTrapType, "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(HazardTracker), "CountSpiketrap", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } private static void ResetHazardTrackerWhenStartingNewDay(RoundManager __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { turretCount = (landmineCount = (spiketrapCount = 0)); } } private static void CountLandmine(Landmine __instance) { landmineCount++; } private static void CountTurret(Turret __instance) { turretCount++; } private static void CountSpiketrap(SpikeRoofTrap __instance) { spiketrapCount++; } } internal class ItemAndEventTracker { [CompilerGenerated] private sealed class <>c__DisplayClass15_0 { public GrabbableObject instance; internal bool b__0() { return instance.scrapValue != 0; } } [CompilerGenerated] private sealed class <>c__DisplayClass20_0 { public float startTime; public NetworkObjectReference netObjRef; public NetworkObject netObject; internal bool b__0() { if (Time.realtimeSinceStartup - startTime < 8f) { return !((NetworkObjectReference)(ref netObjRef)).TryGet(ref netObject, (NetworkManager)null); } return false; } } [CompilerGenerated] private sealed class <>c__DisplayClass23_0 { public ShotgunItem instance; internal bool b__0() { return ((GrabbableObject)instance).scrapValue != 0; } } [CompilerGenerated] private sealed class d__20 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public NetworkObjectReference netObjRef; private <>c__DisplayClass20_0 <>8__1; public int indexForCollectedGift; public bool giftSpawnedThisDay; public int originalGiftValue; public int newScrapValue; 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() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0029: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass20_0(); <>8__1.netObjRef = netObjRef; <>8__1.netObject = null; <>8__1.startTime = Time.realtimeSinceStartup; <>2__current = (object)new WaitWhile((Func)(() => Time.realtimeSinceStartup - <>8__1.startTime < 8f && !((NetworkObjectReference)(ref <>8__1.netObjRef)).TryGet(ref <>8__1.netObject, (NetworkManager)null))); <>1__state = 1; return true; case 1: <>1__state = -1; if ((Object)(object)<>8__1.netObject == (Object)null) { StatsTracker.Logger.LogWarning((object)"No network object found for giftbox"); return false; } indexFromGiftBox[NetworkObjectReference.op_Implicit(<>8__1.netObject)] = indexForCollectedGift; if (giftSpawnedThisDay) { valueFromGiftSpawner[NetworkObjectReference.op_Implicit(<>8__1.netObject)] = originalGiftValue; StatsTracker.DayStats.BottomLineTrue -= originalGiftValue; } else { objectsExtraSpawnedThisDay.Remove(NetworkObjectReference.op_Implicit(<>8__1.netObject)); StatsTracker.DayStats.BottomLineTrue -= newScrapValue; StatsTracker.DayStats.ExtraFromOldGift += newScrapValue - originalGiftValue; } 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__15 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GrabbableObject instance; private <>c__DisplayClass15_0 <>8__1; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__15(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass15_0(); <>8__1.instance = instance; <>2__current = (object)new WaitUntil((Func)(() => <>8__1.instance.scrapValue != 0)); <>1__state = 1; return true; case 1: <>1__state = -1; StatsTracker.DayStats.BottomLineTrue += <>8__1.instance.scrapValue; 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__23 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ShotgunItem instance; private <>c__DisplayClass23_0 <>8__1; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__23(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass23_0(); <>8__1.instance = instance; <>2__current = (object)new WaitUntil((Func)(() => ((GrabbableObject)<>8__1.instance).scrapValue != 0)); <>1__state = 1; return true; case 1: <>1__state = -1; StatsTracker.DayStats.ShotgunInfo.AddToAvailable(((GrabbableObject)<>8__1.instance).scrapValue); 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 const int knifeValue = 35; private static readonly HashSet appSpawnedThisDay = new HashSet(); private static readonly HashSet objectsNaturallySpawnedThisDay = new HashSet(); private static readonly HashSet objectsExtraSpawnedThisDay = new HashSet(); private static readonly Dictionary valueFromGiftSpawner = new Dictionary(); private static readonly Dictionary indexFromGiftBox = new Dictionary(); public static void ApplyItemAndEventTrackerPatches(Harmony Harmony) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Expected O, but got Unknown //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Expected O, but got Unknown //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Expected O, but got Unknown //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Expected O, but got Unknown Harmony Harmony2 = Harmony; Harmony2.Patch((MethodBase)AccessTools.Method(typeof(RoundManager), "GenerateNewLevelClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "ResetItemAndEventTrackerWhenStartingNewDay", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); MethodInfo methodInfo = AccessTools.Method(typeof(RoundManager), "SyncScrapValuesClientRpc", (Type[])null, (Type[])null); Harmony2.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackDungeonInfo", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackSID", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); MethodInfo RoundManagerRefreshEnemiesList = AccessTools.Method(typeof(RoundManager), "RefreshEnemiesList", (Type[])null, (Type[])null); FieldInfo fieldInfo = AccessTools.Field(typeof(RoundManager), "enemyRushIndex"); if (fieldInfo != null) { enemyRushIndexPath(); } FieldInfo fieldInfo2 = AccessTools.Field(typeof(RoundManager), "indoorFog"); if (fieldInfo2 != null) { indoorFogIntoPath(); } MethodInfo TimeOfDaySetBeginMeteorShowerClientRpcInfo = AccessTools.Method(typeof(TimeOfDay), "SetBeginMeteorShowerClientRpc", (Type[])null, (Type[])null); if (TimeOfDaySetBeginMeteorShowerClientRpcInfo != null) { TimeOfDaySetBeginMeteorShowerClientRpcInfoPath(); } Harmony2.Patch((MethodBase)AccessTools.Method(typeof(LungProp), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(ItemAndEventTracker), "CountApp", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)AccessTools.Method(typeof(NetworkBehaviour), "OnNetworkSpawn", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackSpawnedItems", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)AccessTools.Method(typeof(NetworkBehaviour), "OnNetworkDespawn", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "TrackMissedItems", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)AccessTools.Method(typeof(RoundManager), "DespawnPropsAtEndOfRound", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "TrackCollectedItems", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); if (StatsTracker.GiftBoxItemType != null) { GiftBoxItemTypePath(); } Harmony2.Patch((MethodBase)AccessTools.Method(typeof(RedLocustBees), "SpawnHiveClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "TrackHive", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Type NutcrackerEnemyAIType = AccessTools.TypeByName("NutcrackerEnemyAI"); if (NutcrackerEnemyAIType != null) { NutcrackerEnemyAITypePath(); } Type ButlerEnemyAIType = AccessTools.TypeByName("ButlerEnemyAI"); if (ButlerEnemyAIType != null) { ButlerEnemyAITypePath(); } Type GiantKiwiAIType = AccessTools.TypeByName("GiantKiwiAI"); if (GiantKiwiAIType != null) { GiantKiwiAITypePath(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void ButlerEnemyAITypePath() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown Harmony2.Patch((MethodBase)AccessTools.Method(ButlerEnemyAIType, "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackKnifeBeforePopping", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony2.Patch((MethodBase)AccessTools.Method(ButlerEnemyAIType, "KillEnemy", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "TrackButlerPopAndRemoveFakeValue", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void GiantKiwiAITypePath() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown Harmony2.Patch((MethodBase)AccessTools.Method(GiantKiwiAIType, "SpawnEggsClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "TrackEggs", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void GiftBoxItemTypePath() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown Harmony2.Patch((MethodBase)AccessTools.Method(StatsTracker.GiftBoxItemType, "OpenGiftBoxClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "AddNewlySpawnedGiftItemToItemTracker", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); MethodInfo methodInfo2 = AccessTools.Method(StatsTracker.GiftBoxItemType, "InitializeAfterPositioning", (Type[])null, (Type[])null) ?? AccessTools.Method(StatsTracker.GiftBoxItemType, "Start", (Type[])null, (Type[])null); Harmony2.Patch((MethodBase)methodInfo2, (HarmonyMethod)null, new HarmonyMethod(typeof(ItemAndEventTracker), "PopulateObjectInGiftValueForAllClients", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void NutcrackerEnemyAITypePath() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown Harmony2.Patch((MethodBase)AccessTools.Method(NutcrackerEnemyAIType, "InitializeNutcrackerValuesClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ItemAndEventTracker), "TrackShotgun", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void TimeOfDaySetBeginMeteorShowerClientRpcInfoPath() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown Harmony2.Patch((MethodBase)TimeOfDaySetBeginMeteorShowerClientRpcInfo, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackMeteorShower", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void enemyRushIndexPath() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown Harmony2.Patch((MethodBase)RoundManagerRefreshEnemiesList, (HarmonyMethod)null, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackInfestation", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] void indoorFogIntoPath() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown Harmony2.Patch((MethodBase)RoundManagerRefreshEnemiesList, (HarmonyMethod)null, new HarmonyMethod(typeof(ItemAndEventTracker), "TrackIndoorFog", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } private static void ResetItemAndEventTrackerWhenStartingNewDay(RoundManager __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { appSpawnedThisDay.Clear(); objectsNaturallySpawnedThisDay.Clear(); objectsExtraSpawnedThisDay.Clear(); valueFromGiftSpawner.Clear(); indexFromGiftBox.Clear(); } } private static void TrackDungeonInfo(RoundManager __instance, NetworkObjectReference[] spawnedScrap, int[] allScrapValue) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { objectsNaturallySpawnedThisDay.UnionWith(spawnedScrap); int num = 0; foreach (int num2 in allScrapValue) { num += num2; } string value = Traverse.Create((object)__instance).Field("dungeonGenerator").Field("Generator") .Field("DungeonFlow") .Property("name", (object[])null) .GetValue(); string value2; bool flag = StatsTracker.VanillaInteriorNames.TryGetValue(value, out value2); StatsTracker.DayStats.DungeonInfo = new DungeonInfo(spawnedScrap.Length + appSpawnedThisDay.Count, flag ? value2 : value); StatsTracker.DayStats.BottomLine += num; StatsTracker.DayStats.HazardInfo = new HazardInfo(HazardTracker.turretCount, HazardTracker.landmineCount, HazardTracker.spiketrapCount); } } private static void TrackSID(RoundManager __instance, NetworkObjectReference[] spawnedScrap) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 //IL_0075: 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) if ((GameNetworkManager.Instance.gameVersionNum > 72 && (int)((NetworkBehaviour)__instance).__rpc_exec_stage != 1) || (GameNetworkManager.Instance.gameVersionNum <= 72 && (int)((NetworkBehaviour)__instance).__rpc_exec_stage != 2) || GameNetworkManager.Instance.gameVersionNum < 60) { return; } NetworkObject val = default(NetworkObject); ((NetworkObjectReference)(ref spawnedScrap[0])).TryGet(ref val, (NetworkManager)null); GrabbableObject component = ((Component)val).GetComponent(); if ((Object)(object)component == (Object)null) { StatsTracker.Logger.LogWarning((object)"Unable to retrieve first GrabbableObject from the spawned objects"); return; } NetworkObject val3 = default(NetworkObject); for (int i = 0; i < spawnedScrap.Length; i++) { NetworkObjectReference val2 = spawnedScrap[i]; ((NetworkObjectReference)(ref val2)).TryGet(ref val3, (NetworkManager)null); GrabbableObject component2 = ((Component)val3).GetComponent(); if ((Object)(object)component2 == (Object)null) { StatsTracker.Logger.LogWarning((object)"Unable to retrieve some GrabbableObject from the spawned objects"); return; } if (((Object)component2.itemProperties).name != ((Object)component.itemProperties).name) { return; } } StatsTracker.DayStats.SIDType = ((Component)component).gameObject.GetComponentInChildren().headerText; } private static void TrackInfestation(RoundManager __instance) { if (__instance.enemyRushIndex != -1) { StatsTracker.DayStats.InfestationType = ((Object)__instance.currentLevel.Enemies[__instance.enemyRushIndex].enemyType).name; } } private static void TrackIndoorFog(RoundManager __instance) { StatsTracker.DayStats.IndoorFog = ((Component)__instance.indoorFog).gameObject.activeSelf; } private static void TrackMeteorShower(TimeOfDay __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { StatsTracker.DayStats.MeteorShowerTime = StatsTracker.GetCurrentTimeString(); } } private static void CountApp(LungProp __instance) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) StatsTracker.DayStats.AppSpawned = true; appSpawnedThisDay.Add(NetworkObjectReference.op_Implicit(((NetworkBehaviour)__instance).NetworkObject)); } private static void TrackSpawnedItems(NetworkBehaviour __instance) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (__instance is GrabbableObject && StatsTracker.dayHasStarted) { GrabbableObject val = (GrabbableObject)__instance; if (val.itemProperties.isScrap && !(val is RagdollGrabbableObject)) { objectsExtraSpawnedThisDay.Add(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject)); ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(WaitUntilItemValueHasBeenSetAndUpdateBottomLine(val)); } } } [IteratorStateMachine(typeof(d__15))] private static IEnumerator WaitUntilItemValueHasBeenSetAndUpdateBottomLine(GrabbableObject instance) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__15(0) { instance = instance }; } private static void PopulateObjectInGiftValueForAllClients(object __instance) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown GiftBoxItem val = (GiftBoxItem)__instance; Random random = new Random((int)((GrabbableObject)val).targetFloorPosition.x + (int)((GrabbableObject)val).targetFloorPosition.y); Random random2 = new Random((int)((GrabbableObject)val).targetFloorPosition.x + (int)((GrabbableObject)val).targetFloorPosition.y); List list = new List(RoundManager.Instance.currentLevel.spawnableScrap.Count); for (int i = 0; i < RoundManager.Instance.currentLevel.spawnableScrap.Count; i++) { if (RoundManager.Instance.currentLevel.spawnableScrap[i].spawnableItem.itemId == 152767) { list.Add(0); } else { list.Add(RoundManager.Instance.currentLevel.spawnableScrap[i].rarity); } } int randomWeightedIndexList = RoundManager.Instance.GetRandomWeightedIndexList(list, random); Item spawnableItem = RoundManager.Instance.currentLevel.spawnableScrap[randomWeightedIndexList].spawnableItem; val.objectInPresentValue = (int)((float)random2.Next(spawnableItem.minValue + 25, spawnableItem.maxValue + 35) * RoundManager.Instance.scrapValueMultiplier); } private static void TrackMissedItems(NetworkBehaviour __instance) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) if (__instance is GrabbableObject && StatsTracker.dayHasStarted) { GrabbableObject val = (GrabbableObject)__instance; if (val.itemProperties.isScrap && !(val is RagdollGrabbableObject) && !((bool?)StatsTracker.DeactivatedField?.GetValue(val)).GetValueOrDefault()) { List missedItems = StatsTracker.DayStats.MissedItems; string name = (((Object)(object)((Component)val).gameObject.GetComponentInChildren() == (Object)null) ? ((Object)val.itemProperties).name : ((Component)val).gameObject.GetComponentInChildren().headerText); int scrapValue = val.scrapValue; Vector3 position = ((Component)val).transform.position; bool collectedOnPreviousDay = !objectsExtraSpawnedThisDay.Contains(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject)); Type? giftBoxItemType = StatsTracker.GiftBoxItemType; missedItems.Add(new MissingItemInfo(name, scrapValue, position, collectedOnPreviousDay, ((object)giftBoxItemType != null && giftBoxItemType.IsInstanceOfType(val)) ? Traverse.Create((object)val).Field("objectInPresentValue").GetValue() : 0)); } } } private static void TrackCollectedItems() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) GrabbableObject[] array = Object.FindObjectsByType((FindObjectsSortMode)0); GrabbableObject[] array2 = array; foreach (GrabbableObject val in array2) { if (!val.itemProperties.isScrap || ((bool?)StatsTracker.DeactivatedField?.GetValue(val)).GetValueOrDefault() || val.itemUsedUp || !val.isInShipRoom) { continue; } if (indexFromGiftBox.TryGetValue(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject), out var value)) { StatsTracker.DayStats.GiftBoxesOpened[value].Collected = true; } if (!objectsExtraSpawnedThisDay.Contains(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject))) { continue; } StatsTracker.DayStats.CollectedTotal += val.scrapValue; if (objectsNaturallySpawnedThisDay.Contains(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject))) { StatsTracker.DayStats.CollectedNoExtra += val.scrapValue; continue; } if (valueFromGiftSpawner.TryGetValue(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject), out var value2)) { StatsTracker.DayStats.CollectedNoExtra += value2; continue; } if (((Object)val.itemProperties).name == "RedLocustHive") { StatsTracker.DayStats.BeeInfo.AddToCollected(val.scrapValue); continue; } Type? eggItemType = StatsTracker.EggItemType; if ((object)eggItemType != null && eggItemType.IsInstanceOfType(val)) { StatsTracker.DayStats.EggInfo.AddToCollected(val.scrapValue); continue; } Type? shotgunItemType = StatsTracker.ShotgunItemType; if ((object)shotgunItemType != null && shotgunItemType.IsInstanceOfType(val)) { StatsTracker.DayStats.ShotgunInfo.AddToCollected(val.scrapValue); continue; } Type? knifeItemType = StatsTracker.KnifeItemType; if ((object)knifeItemType != null && knifeItemType.IsInstanceOfType(val)) { StatsTracker.DayStats.KnifeInfo.AddToCollected(val.scrapValue); } } } private static void AddNewlySpawnedGiftItemToItemTracker(object __instance, NetworkObjectReference netObjectRef) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) GiftBoxItem val = (GiftBoxItem)__instance; if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)val).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)val).__rpc_exec_stage == 2) && StatsTracker.dayHasStarted) { int count = StatsTracker.DayStats.GiftBoxesOpened.Count; StatsTracker.DayStats.GiftBoxesOpened.Add(new GiftBoxInfo(val.objectInPresentValue, ((GrabbableObject)val).scrapValue)); ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(WaitForGiftItemToFullySpawnBeforeTracking(netObjectRef, count, ((GrabbableObject)val).scrapValue, val.objectInPresentValue, objectsExtraSpawnedThisDay.Contains(NetworkObjectReference.op_Implicit(((NetworkBehaviour)val).NetworkObject)))); } } [IteratorStateMachine(typeof(d__20))] private static IEnumerator WaitForGiftItemToFullySpawnBeforeTracking(NetworkObjectReference netObjRef, int indexForCollectedGift, int originalGiftValue, int newScrapValue, bool giftSpawnedThisDay) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__20(0) { netObjRef = netObjRef, indexForCollectedGift = indexForCollectedGift, originalGiftValue = originalGiftValue, newScrapValue = newScrapValue, giftSpawnedThisDay = giftSpawnedThisDay }; } private static void TrackHive(RedLocustBees __instance, int hiveScrapValue) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { StatsTracker.DayStats.BeeInfo.AddToAvailable(hiveScrapValue); } } private static void TrackShotgun(NutcrackerEnemyAI __instance, NetworkObjectReference gunObject) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum > 72 && (int)((NetworkBehaviour)__instance).__rpc_exec_stage != 1) || (GameNetworkManager.Instance.gameVersionNum <= 72 && (int)((NetworkBehaviour)__instance).__rpc_exec_stage != 2)) { return; } NetworkObject val = null; ((NetworkObjectReference)(ref gunObject)).TryGet(ref val, (NetworkManager)null); if ((Object)(object)val == (Object)null) { StatsTracker.Logger.LogWarning((object)"Gun in GrabGun function did not contain NetworkObject."); return; } ShotgunItem component = ((Component)val).GetComponent(); if ((Object)(object)component == (Object)null) { StatsTracker.Logger.LogWarning((object)"Gun in GrabGun function did not contain ShotgunItem component."); } else { ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(WaitUntilShotgunValueHasBeenSetBeforeAddingToAvailable(component)); } } [IteratorStateMachine(typeof(d__23))] private static IEnumerator WaitUntilShotgunValueHasBeenSetBeforeAddingToAvailable(ShotgunItem instance) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__23(0) { instance = instance }; } private static void TrackKnifeBeforePopping(ButlerEnemyAI __instance) { StatsTracker.DayStats.BottomLineTrue += 35; StatsTracker.DayStats.KnifeInfo.AddToAvailable(35); } private static void TrackButlerPopAndRemoveFakeValue(ButlerEnemyAI __instance) { StatsTracker.DayStats.BottomLineTrue -= 35; } private static void TrackEggs(GiantKiwiAI __instance, int[] eggScrapValues) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { foreach (int value in eggScrapValues) { StatsTracker.DayStats.EggInfo.AddToAvailable(value); } } } } internal class PlayerTracker { public static void ApplyPlayerTrackerPatches(Harmony Harmony) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown Harmony.Patch((MethodBase)AccessTools.Method(typeof(PlayerControllerB), "KillPlayerClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(PlayerTracker), "TrackDeath", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(StartOfRound), "OnPlayerDC", (Type[])null, (Type[])null), new HarmonyMethod(typeof(PlayerTracker), "TrackDisconnect", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void TrackDeath(PlayerControllerB __instance, int causeOfDeath) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_004a: 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_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { PlayerStats playerStats = StatsTracker.DayStats.Players[__instance.playerSteamId]; string currentTimeString = StatsTracker.GetCurrentTimeString(); CauseOfDeath val = (CauseOfDeath)causeOfDeath; playerStats.Kill(currentTimeString, ((object)(CauseOfDeath)(ref val)).ToString()); } } private static void TrackDisconnect(StartOfRound __instance, int playerObjectNumber) { StatsTracker.DayStats.Players[__instance.allPlayerScripts[playerObjectNumber].playerSteamId].Disconnect(); } } internal class ServerEvents { [CompilerGenerated] private sealed class <>c__DisplayClass4_0 { public int prevQuota; internal bool b__0() { return TimeOfDay.Instance.profitQuota != prevQuota; } } [CompilerGenerated] private sealed class d__4 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int prevQuota; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitUntil((Func)new <>c__DisplayClass4_0 { prevQuota = prevQuota }.b__0); <>1__state = 1; return true; case 1: <>1__state = -1; StatsTracker.DayStats.NewQuota = TimeOfDay.Instance.profitQuota; StatsTracker.LocalServer.PublishStats(JsonConvert.SerializeObject((object)StatsTracker.DayStats)); 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 void ApplyServerEventPatches(Harmony Harmony) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown Harmony.Patch((MethodBase)AccessTools.Method(typeof(StartOfRound), "ResetPlayersLoadedValueClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ServerEvents), "StartTrackingNewday", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(ServerEvents), "TrackNewSeed", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(StartOfRound), "PassTimeToNextDay", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(ServerEvents), "PublishDayStats", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void StartTrackingNewday(StartOfRound __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { StatsTracker.DayStats = new Stats(GameNetworkManager.Instance.gameVersionNum, __instance.currentLevel.PlanetName, ((int)__instance.currentLevel.currentWeather == -1) ? "Mild" : ((object)(LevelWeatherType)(ref __instance.currentLevel.currentWeather)).ToString(), new ArraySegment(__instance.allPlayerScripts, 0, __instance.connectedPlayersAmount + 1).ToArray()); StatsTracker.dayHasStarted = true; TimeOfDay.Instance.normalizedTimeOfDay = 0f; } } private static void TrackNewSeed(RoundManager __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { StatsTracker.DayStats.Seed = StartOfRound.Instance.randomMapSeed; } } private static void PublishDayStats(StartOfRound __instance) { if (TimeOfDay.Instance.profitQuota - TimeOfDay.Instance.quotaFulfilled <= 0) { ((MonoBehaviour)__instance).StartCoroutine(PublishDayStatsAfterQuotaRoll(TimeOfDay.Instance.profitQuota)); } else { StatsTracker.LocalServer.PublishStats(JsonConvert.SerializeObject((object)StatsTracker.DayStats)); } StatsTracker.dayHasStarted = false; } [IteratorStateMachine(typeof(d__4))] private static IEnumerator PublishDayStatsAfterQuotaRoll(int prevQuota) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__4(0) { prevQuota = prevQuota }; } } internal class ShipTracker { public static void ApplyShipTrackerPatches(Harmony Harmony) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown Harmony.Patch((MethodBase)AccessTools.Method(typeof(StartOfRound), "ShipLeave", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(ShipTracker), "RegisterTakeOffTime", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void RegisterTakeOffTime(StartOfRound __instance) { StatsTracker.DayStats.TakeOffTime = StatsTracker.GetCurrentTimeString(); } } internal class SpawnTracker { private static readonly Dictionary EnemyToSpawnInfoIndex = new Dictionary(); public static void ApplySpawnTrackerPatches(Harmony Harmony) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown Harmony.Patch((MethodBase)AccessTools.Method(typeof(RoundManager), "GenerateNewLevelClientRpc", (Type[])null, (Type[])null), new HarmonyMethod(typeof(SpawnTracker), "ResetSpawnTrackerWhenStartingNewDay", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyAI), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(SpawnTracker), "TrackSpawn", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyAI), "KillEnemy", (Type[])null, (Type[])null), new HarmonyMethod(typeof(SpawnTracker), "TrackDeath", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void ResetSpawnTrackerWhenStartingNewDay(RoundManager __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((GameNetworkManager.Instance.gameVersionNum <= 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) && (GameNetworkManager.Instance.gameVersionNum > 72 || (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 2)) { EnemyToSpawnInfoIndex.Clear(); } } private static void TrackSpawn(EnemyAI __instance) { //IL_0018: 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_0069: Unknown result type (might be due to invalid IL or missing references) if (__instance.enemyType.isDaytimeEnemy) { EnemyToSpawnInfoIndex[NetworkObjectReference.op_Implicit(((NetworkBehaviour)__instance).NetworkObject)] = StatsTracker.DayStats.DayTimeSpawns.Count; StatsTracker.DayStats.DayTimeSpawns.Add(new SpawnInfo(__instance.enemyType, StatsTracker.GetCurrentTimeString())); } else if (__instance.enemyType.isOutsideEnemy) { EnemyToSpawnInfoIndex[NetworkObjectReference.op_Implicit(((NetworkBehaviour)__instance).NetworkObject)] = StatsTracker.DayStats.NightTimeSpawns.Count; StatsTracker.DayStats.NightTimeSpawns.Add(new SpawnInfo(__instance.enemyType, StatsTracker.GetCurrentTimeString())); } else { EnemyToSpawnInfoIndex[NetworkObjectReference.op_Implicit(((NetworkBehaviour)__instance).NetworkObject)] = StatsTracker.DayStats.IndoorSpawns.Count; StatsTracker.DayStats.IndoorSpawns.Add(new SpawnInfo(__instance.enemyType, StatsTracker.GetCurrentTimeString())); } } private static void TrackDeath(EnemyAI __instance) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) EnemyToSpawnInfoIndex.TryGetValue(NetworkObjectReference.op_Implicit(((NetworkBehaviour)__instance).NetworkObject), out var value); try { if (__instance.enemyType.isDaytimeEnemy) { StatsTracker.DayStats.DayTimeSpawns[value].TimeOfDeath = StatsTracker.GetCurrentTimeString(); } else if (__instance.enemyType.isOutsideEnemy) { StatsTracker.DayStats.NightTimeSpawns[value].TimeOfDeath = StatsTracker.GetCurrentTimeString(); } else { StatsTracker.DayStats.IndoorSpawns[value].TimeOfDeath = StatsTracker.GetCurrentTimeString(); } } catch (Exception ex) { StatsTracker.Logger.LogError((object)("Error when registering enemy death: " + ex.Message + "\n$" + ex.StackTrace)); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }