Decompiled source of MoreCounterplay v1.4.1
BaronDrakula.MoreCounterplay.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; 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 BaronDrakula.MoreCounterplay.NetcodePatcher; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CSync.Extensions; using CSync.Lib; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using MoreCounterplay.Behaviours; using MoreCounterplay.Config; using MoreCounterplay.Items; using MoreCounterplay.Patches; using MoreCounterplay.Util; using Unity.Netcode; using UnityEngine; using UnityEngine.Animations; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BaronDrakula.MoreCounterplay")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.4.1.0")] [assembly: AssemblyInformationalVersion("1.4.1+46dc15b7709e89f1965a391e26bd198f9de4c570")] [assembly: AssemblyProduct("MoreCounterplay")] [assembly: AssemblyTitle("BaronDrakula.MoreCounterplay")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } 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 MoreCounterplay { [BepInPlugin("BaronDrakula.MoreCounterplay", "MoreCounterplay", "1.4.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency("com.sigurd.csync", "5.0.1")] public class MoreCounterplay : BaseUnityPlugin { public static AssetBundle? Bundle; public static MoreCounterplay Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony Harmony { get; set; } internal static ConfigSettings Settings { get; set; } private void Awake() { Instance = this; Logger = ((BaseUnityPlugin)this).Logger; Settings = new ConfigSettings(((BaseUnityPlugin)this).Config); NetcodePatcher(); LoadAssets(); Patch(); Logger.LogInfo((object)"BaronDrakula.MoreCounterplay v1.4.1 has loaded!"); } private void LoadAssets() { Log("Loading Assets..."); Bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "morecounterplayassets")); GameObject val = Bundle.LoadAsset<GameObject>("JesterSurface.prefab"); val.AddComponent<JesterSurface>(); JesterSurface.JesterSurfacePrefab = val; NetworkPrefabs.RegisterNetworkPrefab(val); CoilExplosion.RadioactiveFirePrefab = Bundle.LoadAsset<GameObject>("RadioactiveFire.prefab"); Item val2 = Bundle.LoadAsset<Item>("CoillessCoilhead.asset"); ((GrabbableObject)val2.spawnPrefab.AddComponent<HeadItem>()).itemProperties = val2; HeadItem.Prefab = val2.spawnPrefab; Items.RegisterItem(val2); NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab); } 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("BaronDrakula.MoreCounterplay"); } Harmony.PatchAll(); } private static void NetcodePatcher() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); foreach (Type type in types) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } } public static void Log(string message) { Logger.LogInfo((object)message); } public static void LogDebug(string message) { Logger.LogDebug((object)message); } public static void LogError(string message) { Logger.LogError((object)message); } public static void LogWarning(string message) { Logger.LogWarning((object)message); } public static bool IsModLoaded(string guid) { return Chainloader.PluginInfos.ContainsKey(guid); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "BaronDrakula.MoreCounterplay"; public const string PLUGIN_NAME = "MoreCounterplay"; public const string PLUGIN_VERSION = "1.4.1"; } } namespace MoreCounterplay.Util { internal class VanillaPrefabUtils { internal static bool GetInsideEnemyPrefab(string enemyName, out GameObject? enemyPrefab) { string enemyName2 = enemyName; enemyPrefab = null; for (int i = 0; i < StartOfRound.Instance.levels.Length; i++) { EnemyType val = StartOfRound.Instance.levels[i]?.Enemies?.Find((SpawnableEnemyWithRarity enemy) => string.CompareOrdinal(enemy.enemyType.enemyName, enemyName2) == 0)?.enemyType; if ((Object)(object)val != (Object)null) { enemyPrefab = val.enemyPrefab; return true; } } MoreCounterplay.LogWarning("Could not find enemy '" + enemyName2 + "' in any moon's list of spawns."); return false; } internal static bool GetOutsideEnemyPrefab(string enemyName, out GameObject? enemyPrefab) { string enemyName2 = enemyName; enemyPrefab = null; for (int i = 0; i < StartOfRound.Instance.levels.Length; i++) { EnemyType val = StartOfRound.Instance.levels[i]?.OutsideEnemies?.Find((SpawnableEnemyWithRarity enemy) => string.CompareOrdinal(enemy.enemyType.enemyName, enemyName2) == 0)?.enemyType; if ((Object)(object)val != (Object)null) { enemyPrefab = val.enemyPrefab; return true; } } MoreCounterplay.LogWarning("Could not find enemy '" + enemyName2 + "' in any moon's list of spawns."); return false; } } } namespace MoreCounterplay.Patches { [HarmonyPatch] internal class CoilheadPatch { private const int SHOVEL_HIT_ID = 1; private const int KNIFE_HIT_ID = 5; [HarmonyPatch(typeof(EnemyAI), "HitEnemy")] [HarmonyPostfix] private static void HitCoilhead(EnemyAI __instance, int hitID = -1) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown if (!SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableCoilheadCounterplay) || __instance.isEnemyDead || ((object)__instance).GetType() != typeof(SpringManAI)) { return; } SpringManAI val = (SpringManAI)__instance; if (val.inCooldownAnimation) { MoreCounterplay.Log("Coilhead hit negated."); return; } int num = SyncedEntry<int>.op_Implicit((SyncedEntry<int>)(hitID switch { 5 => MoreCounterplay.Settings.CoilheadKnifeDamage, 1 => MoreCounterplay.Settings.CoilheadShovelDamage, _ => MoreCounterplay.Settings.CoilheadDefaultDamage, })); MoreCounterplay.Log($"Coilhead hit for {num} damage on server."); ((EnemyAI)val).enemyHP = ((EnemyAI)val).enemyHP - num; if (((EnemyAI)val).enemyHP <= 0) { MoreCounterplay.Log("Coilhead killed!"); ((EnemyAI)val).KillEnemyOnOwnerClient(false); } } [HarmonyPatch(typeof(EnemyAI), "KillEnemy")] [HarmonyPostfix] private static void KillCoilhead(EnemyAI __instance) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableCoilheadCounterplay) && !(((object)__instance).GetType() != typeof(SpringManAI))) { SpringManAI val = (SpringManAI)__instance; ResetCoilhead(val); val.DoSpringAnimation(true); IgniteCoilhead(val, SpawnHead(val)); } } private static void ResetCoilhead(SpringManAI coilhead) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) coilhead.hasStopped = true; ((EnemyAI)coilhead).creatureAnimator.SetFloat("walkSpeed", 0f); coilhead.currentAnimSpeed = 0f; coilhead.mainCollider.isTrigger = false; if (((NetworkBehaviour)coilhead).IsOwner) { ((EnemyAI)coilhead).agent.speed = 0f; ((EnemyAI)coilhead).movingTowardsTargetPlayer = false; ((EnemyAI)coilhead).SetDestinationToPosition(((Component)coilhead).transform.position, false); } } private static GameObject? SpawnHead(SpringManAI coilhead) { //IL_0077: 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_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) if ((!((NetworkBehaviour)coilhead).IsServer && !((NetworkBehaviour)coilhead).IsHost) || !SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.DropHeadAsScrap)) { return null; } if ((Object)(object)HeadItem.Prefab == (Object)null) { MoreCounterplay.LogWarning("'Coilless Coilhead' prefab did not load correctly or is missing; it will not be spawned."); return null; } GameObject gameObject = ((Component)((EnemyAI)coilhead).meshRenderers.First((MeshRenderer mesh) => ((Object)mesh).name == "Head")).gameObject; GameObject val = Object.Instantiate<GameObject>(HeadItem.Prefab, gameObject.transform.position, gameObject.transform.rotation); NetworkObject val2 = default(NetworkObject); HeadItem headItem = default(HeadItem); if (!val.TryGetComponent<NetworkObject>(ref val2) || !val.TryGetComponent<HeadItem>(ref headItem)) { MoreCounterplay.LogWarning("'Coilless Coilhead' instance has missing components; it will not be spawned."); Object.Destroy((Object)(object)val); return null; } val2.Spawn(false); ((GrabbableObject)headItem).SetScrapValue(HeadItem.Random.Next(SyncedEntry<int>.op_Implicit(MoreCounterplay.Settings.MinHeadValue), SyncedEntry<int>.op_Implicit(MoreCounterplay.Settings.MaxHeadValue) + 1)); headItem.AttachItemClientRpc(NetworkObjectReference.op_Implicit(((EnemyAI)coilhead).thisNetworkObject)); RoundManager.Instance.SyncScrapValuesClientRpc((NetworkObjectReference[])(object)new NetworkObjectReference[1] { NetworkObjectReference.op_Implicit(val2) }, new int[1] { ((GrabbableObject)headItem).scrapValue }); return val; } private static void IgniteCoilhead(SpringManAI coilhead, GameObject? scrapHead) { if (!SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.LoreAccurateCoilheads)) { return; } Transform obj = ((Component)coilhead).transform.Find("SpringManModel/RadioactiveFire"); if (obj != null) { GameObject gameObject = ((Component)obj).gameObject; if (gameObject != null) { gameObject.SetActive(true); } } if (((NetworkBehaviour)coilhead).IsServer || ((NetworkBehaviour)coilhead).IsHost) { CoilExplosion coilExplosion = default(CoilExplosion); if (!((Component)coilhead).TryGetComponent<CoilExplosion>(ref coilExplosion)) { MoreCounterplay.LogWarning("Coilhead CoilExplosion script did not load correctly or is missing; explosion will not happen."); return; } coilExplosion.HeadContainer = scrapHead; coilExplosion.UpdateScanNodeClientRpc(ignited: true); coilExplosion.TimeLeft = Mathf.Clamp(coilExplosion.TimeSinceLastStop, SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.MinExplosionTimer), SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.MaxExplosionTimer)); coilExplosion.Ticking = true; ((Behaviour)coilExplosion).enabled = true; } } [HarmonyPatch(typeof(SpringManAI), "SetAnimationGoServerRpc")] [HarmonyPostfix] private static void OnStartedMoving(SpringManAI __instance) { CoilExplosion coilExplosion = default(CoilExplosion); if ((((NetworkBehaviour)__instance).IsServer || ((NetworkBehaviour)__instance).IsHost) && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.LoreAccurateCoilheads) && ((Component)__instance).TryGetComponent<CoilExplosion>(ref coilExplosion)) { coilExplosion.TimeSinceLastStop = 0f; ((Behaviour)coilExplosion).enabled = true; } } [HarmonyPatch(typeof(SpringManAI), "SetAnimationStopServerRpc")] [HarmonyPostfix] private static void OnStoppedMoving(SpringManAI __instance) { CoilExplosion coilExplosion = default(CoilExplosion); if ((((NetworkBehaviour)__instance).IsServer || ((NetworkBehaviour)__instance).IsHost) && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.LoreAccurateCoilheads) && ((Component)__instance).TryGetComponent<CoilExplosion>(ref coilExplosion)) { ((Behaviour)coilExplosion).enabled = false; } } } [HarmonyPatch] internal class JesterPatch { [HarmonyPatch(typeof(JesterAI), "Start")] [HarmonyPostfix] public static void OnSpawn(JesterAI __instance) { if ((!((NetworkBehaviour)__instance).IsServer && !((NetworkBehaviour)__instance).IsHost) || !SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableJesterCounterplay)) { return; } if ((Object)(object)JesterSurface.JesterSurfacePrefab == (Object)null) { MoreCounterplay.LogWarning("Jester surface prefab did not load correctly or is missing; its counterplay will not work."); return; } GameObject val = Object.Instantiate<GameObject>(JesterSurface.JesterSurfacePrefab); ((Object)val).name = ((Object)JesterSurface.JesterSurfacePrefab).name; NetworkObject val2 = default(NetworkObject); if (val.TryGetComponent<NetworkObject>(ref val2)) { val2.Spawn(false); val.transform.SetParent(((Component)__instance).transform, false); } } [HarmonyPatch(typeof(EnemyAI), "SwitchToBehaviourState")] [HarmonyPrefix] public static void CheckJesterHead(EnemyAI __instance, ref int stateIndex) { //IL_0108: Unknown result type (might be due to invalid IL or missing references) if ((!((NetworkBehaviour)__instance).IsServer && !((NetworkBehaviour)__instance).IsHost) || !SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableJesterCounterplay) || ((object)__instance).GetType() != typeof(JesterAI)) { return; } Transform obj = ((Component)__instance).transform.Find("JesterSurface"); JesterSurface jesterSurface = default(JesterSurface); if (obj == null || !((Component)obj).TryGetComponent<JesterSurface>(ref jesterSurface)) { return; } switch (stateIndex) { case 0: case 1: if (SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPanicThreshold) > 0f && jesterSurface.TotalWeight >= SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPanicThreshold)) { MoreCounterplay.Log("Uh oh..."); stateIndex = 2; jesterSurface.SwitchAnimationClientRpc(panic: true); } break; case 2: if (SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPreventThreshold) > 0f && jesterSurface.TotalWeight >= SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPreventThreshold)) { MoreCounterplay.Log("Preventing Jester from popping..."); stateIndex = 0; jesterSurface.SwitchAnimationClientRpc(); } else { jesterSurface.DropAllItemsOnClient(); jesterSurface.DropAllItemsServerRpc(NetworkObjectReference.op_Implicit(((Component)GameNetworkManager.Instance.localPlayerController).GetComponent<NetworkObject>())); } break; } } [HarmonyPatch(typeof(GrabbableObject), "GrabItem")] [HarmonyPrefix] public static void GrabItem(GrabbableObject __instance) { //IL_0050: 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) if (((NetworkBehaviour)__instance).IsOwner && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableJesterCounterplay)) { Transform parent = ((Component)__instance).transform.GetParent(); JesterSurface jesterSurface = default(JesterSurface); if (parent != null && ((Component)parent).TryGetComponent<JesterSurface>(ref jesterSurface)) { jesterSurface.RemoveItemOnClient(__instance); jesterSurface.RemoveItemServerRpc(NetworkObjectReference.op_Implicit(((Component)GameNetworkManager.Instance.localPlayerController).GetComponent<NetworkObject>()), NetworkObjectReference.op_Implicit(((Component)__instance).GetComponent<NetworkObject>())); } } } [HarmonyPatch(typeof(EnemyAI), "HitEnemy")] [HarmonyPrefix] private static void HitJester(EnemyAI __instance, PlayerControllerB playerWhoHit, int hitID = -1) { //IL_008f: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)playerWhoHit == (Object)null) && ((NetworkBehaviour)playerWhoHit).IsOwner && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableJesterCounterplay) && !__instance.isEnemyDead && !(((object)__instance).GetType() != typeof(JesterAI)) && __instance.currentBehaviourStateIndex != 2 && hitID == 1 && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.DropItemsOnHit)) { Transform obj = ((Component)__instance).transform.Find("JesterSurface"); JesterSurface jesterSurface = default(JesterSurface); if (obj != null && ((Component)obj).TryGetComponent<JesterSurface>(ref jesterSurface)) { jesterSurface.DropAllItemsOnClient(hit: true); jesterSurface.DropAllItemsServerRpc(NetworkObjectReference.op_Implicit(((Component)playerWhoHit).GetComponent<NetworkObject>()), hit: true); } } } [HarmonyPatch(typeof(EnemyAI), "KillEnemy")] [HarmonyPrefix] private static void KillJester(EnemyAI __instance) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) if (((NetworkBehaviour)__instance).IsOwner && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableJesterCounterplay) && !__instance.isEnemyDead && !(((object)__instance).GetType() != typeof(JesterAI))) { Transform obj = ((Component)__instance).transform.Find("JesterSurface"); JesterSurface jesterSurface = default(JesterSurface); if (obj != null && ((Component)obj).TryGetComponent<JesterSurface>(ref jesterSurface)) { jesterSurface.DropAllItemsOnClient(hit: true); jesterSurface.DropAllItemsServerRpc(NetworkObjectReference.op_Implicit(((Component)GameNetworkManager.Instance.localPlayerController).GetComponent<NetworkObject>()), hit: true); } } } } [HarmonyPatch] internal class LoadPatches { [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] [HarmonyPostfix] private static void OnDisconnect() { GameObject? radioactiveFirePrefab = CoilExplosion.RadioactiveFirePrefab; if (radioactiveFirePrefab != null) { radioactiveFirePrefab.transform.SetParent((Transform)null, false); } GameObject? coilheadPrefab = CoilExplosion.CoilheadPrefab; Object.Destroy((Object)(object)((coilheadPrefab != null) ? coilheadPrefab.GetComponent<CoilExplosion>() : null)); GameObject? coilheadPrefab2 = CoilExplosion.CoilheadPrefab; SpringManAI val = default(SpringManAI); if (coilheadPrefab2 != null && coilheadPrefab2.TryGetComponent<SpringManAI>(ref val)) { ((EnemyAI)val).enemyHP = 3; ((EnemyAI)val).enemyType.canDie = false; } } internal static void FindAndModifyPrefabs() { if (!SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableCoilheadCounterplay)) { return; } MoreCounterplay.Log("Loading prefab textures..."); if (VanillaPrefabUtils.GetInsideEnemyPrefab("Spring", out GameObject enemyPrefab)) { CoilExplosion.CoilheadPrefab = enemyPrefab; if ((Object)(object)HeadItem.Prefab != (Object)null && (Object)(object)enemyPrefab != (Object)null) { SpringManAI component = enemyPrefab.GetComponent<SpringManAI>(); ((EnemyAI)component).enemyHP = SyncedEntry<int>.op_Implicit(MoreCounterplay.Settings.SpringDurability); ((EnemyAI)component).enemyType.canDie = true; if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.LoreAccurateCoilheads)) { ((Behaviour)enemyPrefab.AddComponent<CoilExplosion>()).enabled = false; if ((Object)(object)CoilExplosion.RadioactiveFirePrefab != (Object)null && (MoreCounterplay.Settings.ExplosionFire.Value || MoreCounterplay.Settings.ExplosionParticles.Value)) { CoilExplosion.RadioactiveFirePrefab.transform.SetParent(enemyPrefab.transform.Find("SpringManModel"), false); CoilExplosion.RadioactiveFirePrefab.SetActive(false); ((Behaviour)((Component)CoilExplosion.RadioactiveFirePrefab.transform.Find("FireLight")).GetComponent<Light>()).enabled = MoreCounterplay.Settings.ExplosionFire.Value; ((Renderer)((Component)CoilExplosion.RadioactiveFirePrefab.transform.Find("GreenFlame")).GetComponent<ParticleSystemRenderer>()).enabled = MoreCounterplay.Settings.ExplosionFire.Value; ((Renderer)((Component)CoilExplosion.RadioactiveFirePrefab.transform.Find("RadioactiveParticles")).GetComponent<ParticleSystemRenderer>()).enabled = MoreCounterplay.Settings.ExplosionParticles.Value; } } if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.DropHeadAsScrap)) { Material material = ((Renderer)((Component)enemyPrefab.transform.Find("SpringManModel/Head")).GetComponent<MeshRenderer>()).material; ((Renderer)HeadItem.Prefab.GetComponent<MeshRenderer>()).material = material; } } else { MoreCounterplay.LogWarning("Either the 'Coilless Coilhead' prefab did not load or the Coilhead enemy prefab could not be found. Some stuff might not load or work properly."); } } if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.LoreAccurateCoilheads) && MoreCounterplay.Settings.ExplosionFire.Value && VanillaPrefabUtils.GetOutsideEnemyPrefab("ForestGiant", out GameObject enemyPrefab2)) { if ((Object)(object)CoilExplosion.RadioactiveFirePrefab != (Object)null && (Object)(object)enemyPrefab2 != (Object)null) { Texture mainTexture = ((Renderer)((Component)enemyPrefab2.transform.Find("FireParticlesContainer/LingeringFire")).GetComponent<ParticleSystemRenderer>()).material.mainTexture; ((Renderer)((Component)CoilExplosion.RadioactiveFirePrefab.transform.Find("GreenFlame")).GetComponent<ParticleSystemRenderer>()).material.mainTexture = mainTexture; } else { MoreCounterplay.LogWarning("Either the 'RadioactiveFire' prefab did not load or the Forest Giant enemy prefab could not be found. Some stuff might not load or work properly."); } } MoreCounterplay.Log("Finished loading textures!"); } } [HarmonyPatch] internal class TurretPatch { private const int KNIFE_HIT_ID = 5; [HarmonyPatch(typeof(Turret), "IHittable.Hit")] [HarmonyPostfix] public static void CheckHitID(Turret __instance, int hitID = -1) { if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableTurretCounterplay) && hitID == 5) { MoreCounterplay.Log("Turret hit using knife"); TurretCounterplay turretCounterplay = ((Component)__instance).gameObject.AddComponent<TurretCounterplay>(); turretCounterplay.TurretDisabled = true; } } [HarmonyPatch(typeof(Turret), "Update")] [HarmonyPrefix] public static bool CheckIfTurretGotDisabled(Turret __instance) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (!SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.EnableTurretCounterplay)) { return true; } if ((int)__instance.turretMode != 0) { return true; } TurretCounterplay component = ((Component)__instance).gameObject.GetComponent<TurretCounterplay>(); if ((Object)(object)component != (Object)null && component.TurretDisabled) { if (__instance.turretActive) { __instance.ToggleTurretEnabled(false); __instance.mainAudio.Stop(); __instance.farAudio.Stop(); __instance.berserkAudio.Stop(); __instance.bulletCollisionAudio.Stop(); __instance.bulletParticles.Stop(); __instance.mainAudio.PlayOneShot(__instance.turretDeactivate); } return false; } return true; } } internal class TurretCounterplay : MonoBehaviour { public bool TurretDisabled; } } namespace MoreCounterplay.Items { public class AttachedItem : PhysicsProp { public bool IsAttached { get; private set; } public Action? OnGrab { get; set; } public Action? OnEquip { get; set; } public override void Start() { ((GrabbableObject)this).Start(); ((GrabbableObject)this).grabbable = true; ((GrabbableObject)this).grabbableToEnemies = true; OnGrab = delegate { if (IsAttached && ((NetworkBehaviour)this).IsOwner) { DetachItemServerRpc(); } }; } public override void LateUpdate() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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) if ((Object)(object)((GrabbableObject)this).radarIcon != (Object)null) { ((GrabbableObject)this).radarIcon.position = ((Component)this).transform.position; } if (!((Object)(object)((GrabbableObject)this).parentObject == (Object)null) && !IsAttached) { ((Component)this).transform.position = ((GrabbableObject)this).parentObject.position; ((Component)this).transform.rotation = ((GrabbableObject)this).parentObject.rotation; ApplyOffsets(); } } public override void GrabItem() { ((GrabbableObject)this).GrabItem(); OnGrab?.Invoke(); } public override void EquipItem() { ((PhysicsProp)this).EquipItem(); OnEquip?.Invoke(); } public virtual void ApplyOffsets() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0022: 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_003d: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)this).transform; transform.position += ((GrabbableObject)this).parentObject.rotation * ((GrabbableObject)this).itemProperties.positionOffset; ((Component)this).transform.Rotate(((GrabbableObject)this).itemProperties.rotationOffset); } public void AttachTo(GameObject parent) { //IL_0018: 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) if (!IsAttached) { ParentConstraint component = ((Component)this).gameObject.GetComponent<ParentConstraint>(); ConstraintSource val = default(ConstraintSource); ((ConstraintSource)(ref val)).weight = 1f; ((ConstraintSource)(ref val)).sourceTransform = parent.transform; component.AddSource(val); component.constraintActive = true; ((GrabbableObject)this).parentObject = parent.transform; IsAttached = true; } } [ClientRpc] public virtual void AttachItemClientRpc(NetworkObjectReference parent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1876029344u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref parent, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1876029344u, val, (RpcDelivery)0); } NetworkObject val3 = default(NetworkObject); if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && ((NetworkObjectReference)(ref parent)).TryGet(ref val3, (NetworkManager)null)) { AttachTo(((Component)val3).gameObject); } } } [ClientRpc] public void DetachItemClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(318505161u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 318505161u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ParentConstraint component = ((Component)this).gameObject.GetComponent<ParentConstraint>(); component.RemoveSource(0); component.constraintActive = false; IsAttached = false; } } } [ServerRpc(RequireOwnership = false)] public void DetachItemServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4149983584u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4149983584u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { DetachItemClientRpc(); } } } public override string __getTypeName() { return "AttachedItem"; } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_AttachedItem() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(1876029344u, new RpcReceiveHandler(__rpc_handler_1876029344)); NetworkManager.__rpc_func_table.Add(318505161u, new RpcReceiveHandler(__rpc_handler_318505161)); NetworkManager.__rpc_func_table.Add(4149983584u, new RpcReceiveHandler(__rpc_handler_4149983584)); } private static void __rpc_handler_1876029344(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference parent = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref parent, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)2; ((AttachedItem)(object)target).AttachItemClientRpc(parent); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_318505161(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((AttachedItem)(object)target).DetachItemClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4149983584(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((AttachedItem)(object)target).DetachItemServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string? __getTypeName() { return "AttachedItem"; } } public class HeadItem : RotatingItem { private static Random? _random; public static GameObject? Prefab { get; internal set; } public static Random Random { get { return _random ?? (_random = new Random()); } private set { _random = value; } } public override void Start() { //IL_001b: 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) base.Start(); ((Component)this).transform.Rotate(new Vector3(0f, -90f, -35f)); ((Component)this).transform.Translate(new Vector3(-0.05f, -0.05f, 0f)); ((Object)this).hideFlags = (HideFlags)0; base.OnEquip = delegate { if (((NetworkBehaviour)this).IsOwner) { int num = Random.Next(0, 360); if (num <= 75) { OnEquipHeadServerRpc(1f / (float)Random.Next(1, 5), num); } else { SetRotationTarget(35f, 35f); } } }; } [ClientRpc] public override void AttachItemClientRpc(NetworkObjectReference coilheadReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4210478846u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref coilheadReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4210478846u, val, (RpcDelivery)0); } NetworkObject val3 = default(NetworkObject); if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && ((NetworkObjectReference)(ref coilheadReference)).TryGet(ref val3, (NetworkManager)null)) { GameObject gameObject = ((Component)((Component)val3).transform.Find("SpringManModel/Head")).gameObject; Material material = ((Renderer)gameObject.GetComponent<MeshRenderer>()).material; ((Renderer)((Component)this).GetComponent<MeshRenderer>()).material = material; AttachTo(gameObject); gameObject.GetComponent<Renderer>().enabled = false; } } } [ClientRpc] public void OnEquipHeadClientRpc(float rotationSpeed, int startingAngle) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: 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) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(156822866u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref rotationSpeed, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, startingAngle); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 156822866u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { SetRotationSpeed(rotationSpeed); SetRotationTarget(startingAngle, 35f); } } } [ServerRpc(RequireOwnership = false)] public void OnEquipHeadServerRpc(float rotationSpeed, int startingAngle) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: 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) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1697168690u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref rotationSpeed, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, startingAngle); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1697168690u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { OnEquipHeadClientRpc(rotationSpeed, startingAngle); } } } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_HeadItem() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(4210478846u, new RpcReceiveHandler(__rpc_handler_4210478846)); NetworkManager.__rpc_func_table.Add(156822866u, new RpcReceiveHandler(__rpc_handler_156822866)); NetworkManager.__rpc_func_table.Add(1697168690u, new RpcReceiveHandler(__rpc_handler_1697168690)); } private static void __rpc_handler_4210478846(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference coilheadReference = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref coilheadReference, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)2; ((HeadItem)(object)target).AttachItemClientRpc(coilheadReference); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_156822866(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_003e: 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_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float rotationSpeed = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref rotationSpeed, default(ForPrimitives)); int startingAngle = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref startingAngle); target.__rpc_exec_stage = (__RpcExecStage)2; ((HeadItem)(object)target).OnEquipHeadClientRpc(rotationSpeed, startingAngle); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1697168690(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_003e: 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_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float rotationSpeed = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref rotationSpeed, default(ForPrimitives)); int startingAngle = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref startingAngle); target.__rpc_exec_stage = (__RpcExecStage)1; ((HeadItem)(object)target).OnEquipHeadServerRpc(rotationSpeed, startingAngle); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string? __getTypeName() { return "HeadItem"; } } public class RotatingItem : AttachedItem { public float CurrentAngle { get; private set; } = 90f; public float RotationSpeed { get; private set; } = 0.5f; public float StartingAngle { get; private set; } = 90f; public float TargetAngle { get; private set; } = 35f; public bool ReachedTarget { get; private set; } public override void Start() { base.Start(); base.OnEquip = ResetRotation; } public override void ApplyOffsets() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_004f: 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_0064: Unknown result type (might be due to invalid IL or missing references) Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(((GrabbableObject)this).itemProperties.rotationOffset.x, ((GrabbableObject)this).itemProperties.rotationOffset.y, CurrentAngle); Transform transform = ((Component)this).transform; transform.position += ((GrabbableObject)this).parentObject.rotation * ((GrabbableObject)this).itemProperties.positionOffset; ((Component)this).transform.Rotate(val); if (!ReachedTarget) { if (CurrentAngle > TargetAngle + RotationSpeed * 2f) { CurrentAngle -= RotationSpeed; } else if (CurrentAngle < TargetAngle - RotationSpeed * 2f) { CurrentAngle += RotationSpeed; } else { ReachedTarget = true; } } } public void ResetRotation() { SetRotation(StartingAngle); } public void SetRotation(float angle) { CurrentAngle = angle; ReachedTarget = false; } public void SetRotationTarget(float startingAngle, float targetAngle) { StartingAngle = Math.Abs(startingAngle % 360f); TargetAngle = Math.Abs(targetAngle % 360f); ResetRotation(); } public void SetRotationSpeed(float rotationSpeed) { RotationSpeed = rotationSpeed; } public override string __getTypeName() { return "RotatingItem"; } protected override void __initializeVariables() { base.__initializeVariables(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "RotatingItem"; } } } namespace MoreCounterplay.Config { public class ConfigSettings : SyncedConfig2<ConfigSettings> { [field: SyncedEntryField] public SyncedEntry<bool> EnableJesterCounterplay { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> JesterPreventThreshold { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> JesterEncumberThreshold { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> JesterPanicThreshold { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> MinPanicTimer { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> MaxPanicTimer { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> ItemsStayOnLid { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> DropItemsOnHit { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> ShowWeightOnScan { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> EnableTurretCounterplay { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> EnableCoilheadCounterplay { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> SpringDurability { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> CoilheadDefaultDamage { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> CoilheadKnifeDamage { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> CoilheadShovelDamage { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> DropHeadAsScrap { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> MinHeadValue { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> MaxHeadValue { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> LoreAccurateCoilheads { get; private set; } [field: SyncedEntryField] public SyncedEntry<int> ExplosionDamage { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> ExplosionDamageRadius { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> ExplosionKillRadius { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> MinExplosionTimer { get; private set; } [field: SyncedEntryField] public SyncedEntry<float> MaxExplosionTimer { get; private set; } [field: SyncedEntryField] public SyncedEntry<bool> ExplosionDestroysHead { get; private set; } public ConfigEntry<bool> ExplosionFire { get; private set; } public ConfigEntry<bool> ExplosionParticles { get; private set; } public ConfigEntry<float> ExplosionWarnVolume { get; private set; } public ConfigEntry<bool> EnableCoilheadScanNode { get; private set; } public ConfigEntry<bool> ModifyCoilheadScanNode { get; private set; } public ConfigSettings(ConfigFile config) : base("BaronDrakula.MoreCounterplay") { //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Expected O, but got Unknown config.SaveOnConfigSet = false; EnableJesterCounterplay = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Jester", "EnableJesterCounterplay", true, "Add counterplay for Jesters. Required for all Jester settings under this."); JesterPreventThreshold = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Jester", "JesterPreventThreshold", 60f, "Minimum weight of items needed to prevent the Jester from popping. Set to 0 to disable."); JesterEncumberThreshold = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Jester", "JesterEncumberThreshold", 120f, "Minimum weight of items needed to prevent the Jester from walking at all. Set to 0 to disable. Can be smaller than the setting above."); JesterPanicThreshold = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Jester", "JesterPanicThreshold", 200f, "Minimum weight of items needed for the Jester to start panicking. Set to 0 to disable. Functionally disables counterplay if lower than the 'prevent' threshold."); MinPanicTimer = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Jester", "MinPanicTimer", 0.5f, "Shortest amount of time the Jester can panic for before popping."); MaxPanicTimer = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Jester", "MaxPanicTimer", 5f, "Largest amount of time the Jester can panic for before popping"); ItemsStayOnLid = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Jester", "ItemsStayOnLid", false, "Allow items to stay on top of the Jester after preventing it from popping."); DropItemsOnHit = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Jester", "DropItemsOnHit", true, "Drop all items on top of the Jester when hitting it with a shovel."); ShowWeightOnScan = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Jester", "ShowWeightOnScan", true, "Shows the total weight on top of the Jester as the subtext of its scan node."); EnableTurretCounterplay = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Turret", "EnableTurretCounterplay", true, "Add counterplay for Turret."); EnableCoilheadCounterplay = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Coilhead", "EnableCoilheadCounterplay", true, "Add counterplay for Coilheads. Required for all Coilhead settings under this."); SpringDurability = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "SpringDurability", 3, "Set Coilhead health points."); CoilheadDefaultDamage = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "CoilheadDefaultDamage", 0, "Amount of damage that Coilheads take from any source not specified below."); CoilheadKnifeDamage = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "CoilheadKnifeDamage", 1, "Amount of damage that Coilheads take from Knife."); CoilheadShovelDamage = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "CoilheadShovelDamage", 0, "Amount of damage that Coilheads take from Shovel."); DropHeadAsScrap = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Coilhead", "DropHeadAsScrap", true, "Enable the Coilhead head scrap item spawning on death."); MinHeadValue = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "MinHeadValue", 30, "Minimum value of the Coilhead head item."); MaxHeadValue = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "MaxHeadValue", 70, "Maximum value of the Coilhead head item."); LoreAccurateCoilheads = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Coilhead", "LoreAccurateCoilheads", true, "Enable lore accurate (volatile) Coilhead counterplay (requires restart). Required for all Coilhead settings under this."); ExplosionDamage = SyncedBindingExtensions.BindSyncedEntry<int>(config, "Coilhead", "ExplosionDamage", 50, "Amount of damage the Coilhead explosion deals."); ExplosionDamageRadius = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Coilhead", "ExplosionDamageRadius", 4f, "Radius of the Coilhead explosion damage zone."); ExplosionKillRadius = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Coilhead", "ExplosionKillRadius", 2f, "Radius of the Coilhead explosion kill zone."); MinExplosionTimer = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Coilhead", "MinExplosionTimer", 0.5f, "Minimum time until Coilhead explosion."); MaxExplosionTimer = SyncedBindingExtensions.BindSyncedEntry<float>(config, "Coilhead", "MaxExplosionTimer", 5f, "Maximum time until Coilhead explosion."); ExplosionDestroysHead = SyncedBindingExtensions.BindSyncedEntry<bool>(config, "Coilhead", "ExplosionDestroysHead", true, "Destroy Coilhead scrap head if still attached during explosion."); ExplosionFire = config.Bind<bool>("Coilhead", "ExplosionFire", true, "(Client-side) Enable green fire effect for Coilheads that are about to explode."); ExplosionParticles = config.Bind<bool>("Coilhead", "ExplosionParticles", true, "(Client-side) Enable radioactive particles effect for Coilheads that are about to explode."); ExplosionWarnVolume = config.Bind<float>("Coilhead", "ExplosionWarnVolume", 1f, new ConfigDescription("(Client-side) Adjust volume of the sound effect played right before exploding (NOT the actual explosion).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); EnableCoilheadScanNode = config.Bind<bool>("Coilhead", "EnableCoilheadScanNode", true, "(Client-side) Enable scanning Coilheads that have been killed."); ModifyCoilheadScanNode = config.Bind<bool>("Coilhead", "ModifyCoilheadScanNode", true, "(Client-side) Add extra text/subtext to a killed Coilhead's scan node."); base.InitialSyncCompleted += delegate { LoadPatches.FindAndModifyPrefabs(); }; ClearOrphanedEntries(config); config.SaveOnConfigSet = true; config.Save(); ConfigManager.Register<ConfigSettings>((SyncedConfig2<ConfigSettings>)(object)this); } private void ClearOrphanedEntries(ConfigFile config) { PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries"); ((Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(config))?.Clear(); } } } namespace MoreCounterplay.Behaviours { public class CoilExplosion : NetworkBehaviour { public static GameObject? CoilheadPrefab { get; internal set; } public static GameObject? RadioactiveFirePrefab { get; internal set; } public bool Ticking { get; internal set; } public float TimeLeft { get; internal set; } public float TimeSinceLastStop { get; internal set; } public bool PlayedSfx { get; internal set; } public GameObject? HeadContainer { get; internal set; } public GameObject? FireContainer { get; private set; } public SpringManAI? Coilhead { get; private set; } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); SpringManAI coilhead = default(SpringManAI); if (((Component)this).TryGetComponent<SpringManAI>(ref coilhead)) { Coilhead = coilhead; } Transform obj = ((Component)this).transform.Find("SpringManModel/RadioactiveFire"); FireContainer = ((obj != null) ? ((Component)obj).gameObject : null); } public void LateUpdate() { if (!Ticking) { TimeSinceLastStop += Time.deltaTime; } else if (TimeLeft <= 0f) { GameObject? headContainer = HeadContainer; AttachedItem attachedItem = default(AttachedItem); if (headContainer != null && headContainer.TryGetComponent<AttachedItem>(ref attachedItem) && attachedItem.IsAttached && !((GrabbableObject)attachedItem).heldByPlayerOnServer && SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.ExplosionDestroysHead)) { GameObject? headContainer2 = HeadContainer; if (headContainer2 != null) { headContainer2.GetComponent<NetworkObject>().Despawn(true); } } SpawnExplosionClientRpc(); UpdateScanNodeClientRpc(ignited: false); ((Behaviour)this).enabled = false; } else { if (!PlayedSfx && TimeLeft <= 1f) { PlaySfxClientRpc(); PlayedSfx = true; } TimeLeft -= Time.deltaTime; } } [ClientRpc] private void SpawnExplosionClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_00c1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(854298167u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 854298167u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { Landmine.SpawnExplosion(((Component)this).transform.position, true, SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.ExplosionKillRadius), SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.ExplosionDamageRadius), SyncedEntry<int>.op_Implicit(MoreCounterplay.Settings.ExplosionDamage), 0f, (GameObject)null, false); SpringManAI? coilhead = Coilhead; if (coilhead != null) { coilhead.DoSpringAnimation(true); } GameObject? fireContainer = FireContainer; if (fireContainer != null) { fireContainer.SetActive(false); } } } [ClientRpc] private void PlaySfxClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1574743326u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1574743326u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { SpringManAI? coilhead = Coilhead; if (coilhead != null) { AudioSource creatureVoice = ((EnemyAI)coilhead).creatureVoice; GameObject? prefab = HeadItem.Prefab; HeadItem headItem = default(HeadItem); creatureVoice.PlayOneShot((prefab != null && prefab.TryGetComponent<HeadItem>(ref headItem)) ? ((GrabbableObject)headItem).itemProperties.throwSFX : Coilhead?.enterCooldownSFX, MoreCounterplay.Settings.ExplosionWarnVolume.Value); } } } [ClientRpc] internal void UpdateScanNodeClientRpc(bool ignited) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(548278882u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref ignited, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 548278882u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost) || !MoreCounterplay.Settings.ModifyCoilheadScanNode.Value) { return; } Transform obj = ((Component)this).transform.Find("SpringManModel/ScanNode"); ScanNodeProperties val3 = default(ScanNodeProperties); if (obj != null && ((Component)obj).TryGetComponent<ScanNodeProperties>(ref val3)) { Collider val4 = default(Collider); if (((Component)val3).TryGetComponent<Collider>(ref val4)) { val4.enabled = true; } if (MoreCounterplay.Settings.ModifyCoilheadScanNode.Value) { val3.headerText = (ignited ? "Fissile" : "Decayed") + " Coil-Head"; val3.subText = (ignited ? "Run." : "Don't get too close..."); val3.nodeType = (ignited ? 1 : 0); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_CoilExplosion() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(854298167u, new RpcReceiveHandler(__rpc_handler_854298167)); NetworkManager.__rpc_func_table.Add(1574743326u, new RpcReceiveHandler(__rpc_handler_1574743326)); NetworkManager.__rpc_func_table.Add(548278882u, new RpcReceiveHandler(__rpc_handler_548278882)); } private static void __rpc_handler_854298167(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((CoilExplosion)(object)target).SpawnExplosionClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1574743326(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((CoilExplosion)(object)target).PlaySfxClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_548278882(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool ignited = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref ignited, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)2; ((CoilExplosion)(object)target).UpdateScanNodeClientRpc(ignited); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string? __getTypeName() { return "CoilExplosion"; } } public class JesterSurface : PlaceableObjectsSurface { public static GameObject? JesterSurfacePrefab { get; internal set; } public float TotalWeight { get; internal set; } public JesterAI? Jester { get; private set; } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); Transform transform = ((Component)this).transform; GameObject? jesterSurfacePrefab = JesterSurfacePrefab; ((Object)transform).name = ((jesterSurfacePrefab != null) ? ((Object)jesterSurfacePrefab).name : null); base.parentTo = ((Component)this).GetComponent<NetworkObject>(); base.placeableBounds = ((Component)((Component)this).transform.Find("bounds")).GetComponent<Collider>(); base.triggerScript = ((Component)this).GetComponent<InteractTrigger>(); ((UnityEvent<PlayerControllerB>)(object)base.triggerScript.onInteract).AddListener((UnityAction<PlayerControllerB>)PlaceObject); } public void Start() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) Transform parent = ((Component)this).transform.GetParent(); JesterAI jester = default(JesterAI); if (parent != null && ((Component)parent).TryGetComponent<JesterAI>(ref jester)) { Jester = jester; } ((Component)this).gameObject.layer = LayerMask.NameToLayer("InteractableObject"); ParentConstraint val = ((Component)this).gameObject.AddComponent<ParentConstraint>(); ConstraintSource val2 = default(ConstraintSource); ((ConstraintSource)(ref val2)).weight = 1f; ((ConstraintSource)(ref val2)).sourceTransform = ((Component)this).transform.GetParent().Find("MeshContainer/AnimContainer/metarig/BoxContainer"); val.AddSource(val2); val.constraintActive = true; } public void Update() { if ((Object)(object)base.triggerScript != (Object)null) { InteractTrigger triggerScript = base.triggerScript; int interactable; if (GameNetworkManager.Instance.localPlayerController.isHoldingObject) { JesterAI? jester = Jester; interactable = ((jester == null || ((EnemyAI)jester).currentBehaviourStateIndex != 2) ? 1 : 0); } else { interactable = 0; } triggerScript.interactable = (byte)interactable != 0; } } public void PlaceObject(PlayerControllerB playerWhoTriggered) { //IL_0047: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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 (((NetworkBehaviour)playerWhoTriggered).IsOwner && playerWhoTriggered.isHoldingObject && !playerWhoTriggered.isGrabbingObjectAnimation && !((Object)(object)playerWhoTriggered.currentlyHeldObjectServer == (Object)null)) { GrabbableObject currentlyHeldObjectServer = playerWhoTriggered.currentlyHeldObjectServer; Vector3 val = ((Component)base.parentTo).transform.InverseTransformPoint(itemPlacementPosition(((Component)playerWhoTriggered.gameplayCamera).transform, currentlyHeldObjectServer)); playerWhoTriggered.DiscardHeldObject(true, base.parentTo, val, false); PlaceItemOnClient(currentlyHeldObjectServer); PlaceItemServerRpc(NetworkObjectReference.op_Implicit(((Component)playerWhoTriggered).GetComponent<NetworkObject>()), NetworkObjectReference.op_Implicit(((Component)currentlyHeldObjectServer).GetComponent<NetworkObject>())); } } public Vector3 itemPlacementPosition(Transform camera, GrabbableObject heldItem) { //IL_0007: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0056: Unknown result type (might be due to invalid IL or missing references) int num = 1074277120; RaycastHit val = default(RaycastHit); if (Physics.Raycast(camera.position, camera.forward, ref val, 7f, num, (QueryTriggerInteraction)1)) { return base.placeableBounds.ClosestPoint(((RaycastHit)(ref val)).point) + ((Component)base.placeableBounds).transform.up * heldItem.itemProperties.verticalOffset; } return ((Component)base.placeableBounds).transform.position; } public void ResetJester() { if (!((Object)(object)Jester == (Object)null)) { if (SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterEncumberThreshold) != 0f && TotalWeight < SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterEncumberThreshold) && ((EnemyAI)Jester).stunNormalizedTimer > 0f) { Jester.beginCrankingTimer = ((EnemyAI)Jester).stunNormalizedTimer * ((EnemyAI)Jester).enemyType.stunTimeMultiplier; ((EnemyAI)Jester).stunNormalizedTimer = 0f; } if (SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPanicThreshold) != 0f && TotalWeight < SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPanicThreshold) && ((EnemyAI)Jester).creatureAnimator.GetBool("turningCrank") && ((EnemyAI)Jester).currentBehaviourStateIndex == 0) { ((EnemyAI)Jester).creatureVoice.Stop(); ((EnemyAI)Jester).creatureAnimator.SetBool("turningCrank", false); ((EnemyAI)Jester).creatureAnimator.SetFloat("CrankSpeedMultiplier", 1f); ((EnemyAI)Jester).creatureAnimator.CrossFade("IdleDocile", 0.1f); } } } public void PlaceItemOnClient(GrabbableObject item) { if ((Object)(object)base.parentTo == (Object)null || (Object)(object)base.placeableBounds == (Object)null || (Object)(object)base.triggerScript == (Object)null || (Object)(object)Jester == (Object)null || ((EnemyAI)Jester).currentBehaviourStateIndex == 2) { return; } Transform child = ((Component)item).transform.GetChild(0); ScanNodeProperties val = default(ScanNodeProperties); Rigidbody val2 = default(Rigidbody); if (child != null && ((Component)child).TryGetComponent<ScanNodeProperties>(ref val) && !((Component)val).TryGetComponent<Rigidbody>(ref val2)) { ((Component)val).gameObject.AddComponent<Rigidbody>().isKinematic = true; } TotalWeight += (item.itemProperties.weight - 1f) * 105f; MoreCounterplay.Log($"Current weight: {TotalWeight}"); if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.ShowWeightOnScan)) { Transform obj = ((Component)Jester).transform.Find("ScanNode"); ScanNodeProperties val3 = default(ScanNodeProperties); if (obj != null && ((Component)obj).TryGetComponent<ScanNodeProperties>(ref val3)) { val3.subText = $"Weight: {TotalWeight} lbs"; } } if (SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterEncumberThreshold) > 0f && TotalWeight >= SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterEncumberThreshold) && ((EnemyAI)Jester).stunNormalizedTimer <= 0f && !((EnemyAI)Jester).creatureAnimator.GetBool("turningCrank")) { ((EnemyAI)Jester).stunNormalizedTimer = Jester.beginCrankingTimer / ((EnemyAI)Jester).enemyType.stunTimeMultiplier; JesterAI? jester = Jester; jester.beginCrankingTimer *= 15f; } if (SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPanicThreshold) > 0f && TotalWeight >= SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.JesterPanicThreshold)) { if (!((EnemyAI)Jester).creatureAnimator.GetBool("turningCrank")) { ((EnemyAI)Jester).creatureVoice.clip = Jester.screamingSFX; ((EnemyAI)Jester).creatureVoice.Play(); ((EnemyAI)Jester).creatureAnimator.SetBool("turningCrank", true); ((EnemyAI)Jester).creatureAnimator.SetFloat("CrankSpeedMultiplier", 2.5f); Jester.beginCrankingTimer = Mathf.Clamp(Jester.beginCrankingTimer, SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.MinPanicTimer) * 15f, SyncedEntry<float>.op_Implicit(MoreCounterplay.Settings.MaxPanicTimer) * 15f); ((EnemyAI)Jester).stunNormalizedTimer = Jester.beginCrankingTimer / (((EnemyAI)Jester).enemyType.stunTimeMultiplier * 15f); } else { ((EnemyAI)Jester).SwitchToBehaviourStateOnLocalClient(2); ((EnemyAI)Jester).stunNormalizedTimer = 0f; DropAllItemsOnClient(); } } } public void RemoveItemOnClient(GrabbableObject item) { if (!((Object)(object)base.parentTo == (Object)null) && !((Object)(object)base.placeableBounds == (Object)null) && !((Object)(object)base.triggerScript == (Object)null) && !((Object)(object)Jester == (Object)null) && ((EnemyAI)Jester).currentBehaviourStateIndex != 2) { TotalWeight -= (item.itemProperties.weight - 1f) * 105f; MoreCounterplay.Log($"Current weight: {TotalWeight}"); ((Component)item).transform.SetParent(StartOfRound.Instance.propsContainer, true); ScanNodeProperties val = default(ScanNodeProperties); if (SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.ShowWeightOnScan) && ((Component)((Component)Jester).transform.Find("ScanNode")).TryGetComponent<ScanNodeProperties>(ref val)) { val.subText = ((TotalWeight > 0f) ? $"Weight: {TotalWeight} lbs" : ""); } if (((EnemyAI)Jester).currentBehaviourStateIndex == 0) { ResetJester(); } } } public void DropAllItemsOnClient(bool hit = false) { CollectionExtensions.Do<GrabbableObject>((IEnumerable<GrabbableObject>)((Component)this).GetComponentsInChildren<GrabbableObject>(), (Action<GrabbableObject>)delegate(GrabbableObject item) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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) item.parentObject = null; ((Component)item).transform.SetParent(StartOfRound.Instance.propsContainer, true); item.EnablePhysics(true); item.EnableItemMeshes(true); item.isHeld = false; item.isPocketed = false; item.startFallingPosition = StartOfRound.Instance.propsContainer.InverseTransformPoint(((Component)item).transform.position); item.FallToGround(false); item.fallTime = -0.3f; item.hasHitGround = false; }); JesterAI? jester = Jester; if (jester != null) { Transform obj = ((Component)jester).transform.Find("ScanNode"); ScanNodeProperties val = default(ScanNodeProperties); if (((obj != null) ? new bool?(((Component)obj).TryGetComponent<ScanNodeProperties>(ref val)) : null) == true) { val.subText = ""; } } TotalWeight = 0f; if (hit) { ResetJester(); } } [ClientRpc] public void SwitchAnimationClientRpc(bool panic = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(64899127u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref panic, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 64899127u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)Jester == (Object)null)) { if (panic || !SyncedEntry<bool>.op_Implicit(MoreCounterplay.Settings.ItemsStayOnLid)) { ((EnemyAI)Jester).creatureAnimator.CrossFade("JesterPopUp", 0.1f); ((EnemyAI)Jester).creatureVoice.Stop(); DropAllItemsOnClient(); } else { ((EnemyAI)Jester).creatureAnimator.CrossFade("IdleDocile", 0.1f); } } } [ClientRpc] public void PlaceItemClientRpc(NetworkObjectReference playerReference, NetworkObjectReference itemReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3819297365u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref itemReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3819297365u, val, (RpcDelivery)0); } NetworkObject val3 = default(NetworkObject); NetworkObject val4 = default(NetworkObject); GrabbableObject item = default(GrabbableObject); if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && (!((NetworkObjectReference)(ref playerReference)).TryGet(ref val3, (NetworkManager)null) || !val3.IsOwner) && ((NetworkObjectReference)(ref itemReference)).TryGet(ref val4, (NetworkManager)null) && ((Component)val4).TryGetComponent<GrabbableObject>(ref item)) { PlaceItemOnClient(item); } } } [ServerRpc(RequireOwnership = false)] public void PlaceItemServerRpc(NetworkObjectReference playerReference, NetworkObjectReference itemReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2783664661u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref itemReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2783664661u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { PlaceItemClientRpc(playerReference, itemReference); } } } [ClientRpc] public void RemoveItemClientRpc(NetworkObjectReference playerReference, NetworkObjectReference itemReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3251711782u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref itemReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3251711782u, val, (RpcDelivery)0); } NetworkObject val3 = default(NetworkObject); NetworkObject val4 = default(NetworkObject); GrabbableObject item = default(GrabbableObject); if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && (!((NetworkObjectReference)(ref playerReference)).TryGet(ref val3, (NetworkManager)null) || !val3.IsOwner) && ((NetworkObjectReference)(ref itemReference)).TryGet(ref val4, (NetworkManager)null) && ((Component)val4).TryGetComponent<GrabbableObject>(ref item)) { RemoveItemOnClient(item); } } } [ServerRpc(RequireOwnership = false)] public void RemoveItemServerRpc(NetworkObjectReference playerReference, NetworkObjectReference itemReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1616201748u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref itemReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1616201748u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { RemoveItemClientRpc(playerReference, itemReference); } } } [ClientRpc] public void DropAllItemsClientRpc(NetworkObjectReference playerReference, bool hit = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4025649712u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref hit, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4025649712u, val, (RpcDelivery)0); } NetworkObject val3 = default(NetworkObject); if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && (!((NetworkObjectReference)(ref playerReference)).TryGet(ref val3, (NetworkManager)null) || !val3.IsOwner)) { DropAllItemsOnClient(hit); } } } [ServerRpc(RequireOwnership = false)] public void DropAllItemsServerRpc(NetworkObjectReference playerReference, bool hit = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2288380667u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref hit, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2288380667u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { DropAllItemsClientRpc(playerReference, hit); } } } protected override void __initializeVariables() { ((PlaceableObjectsSurface)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_JesterSurface() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(64899127u, new RpcReceiveHandler(__rpc_handler_64899127)); NetworkManager.__rpc_func_table.Add(3819297365u, new RpcReceiveHandler(__rpc_handler_3819297365)); NetworkManager.__rpc_func_table.Add(2783664661u, new RpcReceiveHandler(__rpc_handler_2783664661)); NetworkManager.__rpc_func_table.Add(3251711782u, new RpcReceiveHandler(__rpc_handler_3251711782)); NetworkManager.__rpc_func_table.Add(1616201748u, new RpcReceiveHandler(__rpc_handler_1616201748)); NetworkManager.__rpc_func_table.Add(4025649712u, new RpcReceiveHandler(__rpc_handler_4025649712)); NetworkManager.__rpc_func_table.Add(2288380667u, new RpcReceiveHandler(__rpc_handler_2288380667)); } private static void __rpc_handler_64899127(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool panic = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref panic, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)2; ((JesterSurface)(object)target).SwitchAnimationClientRpc(panic); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3819297365(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //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_004a: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference playerReference = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref playerReference, default(ForNetworkSerializable)); NetworkObjectReference itemReference = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref itemReference, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)2; ((JesterSurface)(object)target).PlaceItemClientRpc(playerReference, itemReference); target.__rpc_exec_stage =