using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using SPF_debugTools.Patches; using SpiderPositionFix.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("fandovec03.SpiderPositionFix")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.6.3.0")] [assembly: AssemblyInformationalVersion("1.6.3+b8d96fc09c5ec55e216da332d24d2bd7b4abde6b")] [assembly: AssemblyProduct("SpiderPositionFix")] [assembly: AssemblyTitle("fandovec03.SpiderPositionFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.6.3.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SpiderPositionFix { [BepInPlugin("fandovec03.SpiderPositionFix", "SpiderPositionFix", "1.6.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class InitialScript : BaseUnityPlugin { public static AssetBundle SpiderAssets; internal static bool debugTools; internal static bool debugToolsInit; public static InitialScript Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } internal static ConfigClass configSettings { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; configSettings = new ConfigClass(((BaseUnityPlugin)this).Config); Patch(); string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); SpiderAssets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "spideranimationfixbundle")); if ((Object)(object)SpiderAssets == (Object)null) { Logger.LogError((object)"Failed to load Assets"); } Logger.LogInfo((object)"fandovec03.SpiderPositionFix v1.6.3 has loaded!"); } internal static void Patch() { //IL_000d: 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_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("fandovec03.SpiderPositionFix"); } Logger.LogDebug((object)"Patching spider position fix..."); Harmony.PatchAll(typeof(SpiderPositionPatch)); if (Chainloader.PluginInfos.ContainsKey("SPF_debugTools")) { debugTools = true; } Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching spider position fix..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } } internal class ConfigClass { public readonly ConfigEntry applyMask; public readonly ConfigEntry modifyRadius; public readonly ConfigEntry agentRadius; public readonly ConfigEntry debugLogs; public ConfigClass(ConfigFile cfg) { cfg.SaveOnConfigSet = false; applyMask = cfg.Bind("Settings", "Apply changes to agent areaMask", true, "Apply the changes made to the spider agent areaMask. This will affect the pathfinding over offMeshLinks"); debugLogs = cfg.Bind("Debug", "Debug logs", false, "Enable debug logs"); modifyRadius = cfg.Bind("Settings", "Modify agent radius", false, "Should this mod modify the agent radius?"); agentRadius = cfg.Bind("Settings", "Pathfinding agent radius", 2f, "[Modify agent radius toggle must be on] \n Vanilla: 2 \n\n Set pathfinding agent's collision avoidance radius."); ClearOrphanedEntries(cfg); cfg.Save(); cfg.SaveOnConfigSet = true; } public void ClearOrphanedEntries(ConfigFile cfg) { PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries"); Dictionary dictionary = (Dictionary)propertyInfo.GetValue(cfg); dictionary.Clear(); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "fandovec03.SpiderPositionFix"; public const string PLUGIN_NAME = "SpiderPositionFix"; public const string PLUGIN_VERSION = "1.6.3"; } } namespace SpiderPositionFix.Patches { public class SPF_debugToolsClass { public static void SetDebugObjectsPosition(SandSpiderAI instance) { SPF_debugToolsMethods.SetDebugObjectsPosition(instance); } public static void DeleteObjects(SandSpiderAI instance) { SPF_debugToolsMethods.DeleteObjects(instance); } public static void GetWallPositionForMesh(SandSpiderAI instance, Vector3 unmodifiedWallPosition, Vector3 normalProjection) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) SPF_debugToolsMethods.GetWallPositionForMesh(instance, unmodifiedWallPosition, normalProjection); } public static void Init() { SPF_debugToolsMethods.InitDebugTools(); } } internal class spiderPositionData { public int currentJumpMaskBit = 1; public bool startPatch = false; public bool isSlowedDown = false; public float originalSpeed = 4.25f; public float offsetSpeed = 0f; public float delayTimer = 0f; public int delayTimes = 0; public bool reachTheWallFail = false; public float time = 0.2f; public float invalidPositionTimer = 0f; public int faildetToGetPositionTimes = 0; public Transform altWallPosForMesh = new Transform(); public Vector3 previousMeshContainerPos = Vector3.zero; } [HarmonyPatch(typeof(SandSpiderAI))] public class SpiderPositionPatch { private static bool debugLogs = InitialScript.configSettings.debugLogs.Value; internal static Dictionary spiderData = new Dictionary(); public static Transform getWallPosTransform(SandSpiderAI instance) { string text = ""; spiderPositionData spiderPositionData2 = GetSpiderData(instance); if (spiderPositionData2.faildetToGetPositionTimes > 10) { text = "homeNode instance.homeNode"; spiderPositionData2.altWallPosForMesh = instance.homeNode; } else { text = "transform instance.transform"; spiderPositionData2.altWallPosForMesh = ((Component)instance).transform; } if (debugLogs) { InitialScript.Logger.LogInfo((object)("Returning " + text)); } return spiderPositionData2.altWallPosForMesh; } [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPostfix(SandSpiderAI __instance) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown if ((Object)(object)InitialScript.SpiderAssets != (Object)null) { try { AnimatorOverrideController val = new AnimatorOverrideController(((EnemyAI)__instance).creatureAnimator.runtimeAnimatorController); val["SpiderIdle"] = InitialScript.SpiderAssets.LoadAsset("Assets/LethalCompany/CustomAnims/SandSpider/SpiderIdleFixed.anim"); ((EnemyAI)__instance).creatureAnimator.runtimeAnimatorController = (RuntimeAnimatorController)(object)val; } catch { InitialScript.Logger.LogError((object)"Failed to load OverrideController asset"); } } GetSpiderData(__instance).startPatch = true; if (InitialScript.debugTools && !InitialScript.debugToolsInit) { SPF_debugToolsClass.Init(); InitialScript.debugToolsInit = true; } GetSpiderData(__instance).altWallPosForMesh = ((Component)__instance).transform; if (InitialScript.configSettings.modifyRadius.Value) { ((EnemyAI)__instance).agent.radius = InitialScript.configSettings.agentRadius.Value; } } [HarmonyPatch("Update")] [HarmonyPrefix] private static void UpdatePrefix(SandSpiderAI __instance) { spiderPositionData spiderPositionData2 = GetSpiderData(__instance); if (((NetworkBehaviour)__instance).IsOwner) { if (spiderPositionData2.time > 0f) { spiderPositionData2.time -= Time.deltaTime; } if (__instance.onWall && ((Behaviour)((EnemyAI)__instance).agent).enabled) { ((EnemyAI)__instance).agent.avoidancePriority = 99; ((Behaviour)((EnemyAI)__instance).agent).enabled = false; } if (!__instance.onWall && !((Behaviour)((EnemyAI)__instance).agent).enabled) { ((EnemyAI)__instance).agent.avoidancePriority = 25; ((Behaviour)((EnemyAI)__instance).agent).enabled = true; } } else if (spiderPositionData2.time <= 0f) { spiderPositionData2.time = 0f; } } [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePostfix(SandSpiderAI __instance) { //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) spiderPositionData spiderPositionData2 = GetSpiderData(__instance); if (!((NetworkBehaviour)__instance).IsOwner) { return; } if (spiderPositionData2.invalidPositionTimer > 0f) { spiderPositionData2.invalidPositionTimer -= Time.deltaTime; } if (InitialScript.configSettings.applyMask.Value) { if (((EnemyAI)__instance).isOutside && spiderPositionData2.currentJumpMaskBit != 1) { ChangeJumpMask(__instance, ref spiderPositionData2.currentJumpMaskBit); spiderPositionData2.currentJumpMaskBit = 1; } else if (!((EnemyAI)__instance).isOutside && spiderPositionData2.currentJumpMaskBit != 0) { ChangeJumpMask(__instance, ref spiderPositionData2.currentJumpMaskBit); spiderPositionData2.currentJumpMaskBit = 0; } } if (__instance.watchFromDistance) { return; } if (!__instance.onWall) { if (((EnemyAI)__instance).currentBehaviourStateIndex != 1) { ((EnemyAI)__instance).agent.speed = __instance.spiderSpeed; } if (((EnemyAI)__instance).agent.isOnOffMeshLink) { ((EnemyAI)__instance).agent.speed = __instance.spiderSpeed / 1.15f; if (debugLogs) { InitialScript.Logger.LogDebug((object)"On offMeshLink. Cutting speed"); } } } if (((EnemyAI)__instance).currentBehaviourStateIndex == 1 && __instance.onWall) { __instance.spiderSpeed = 3.75f; } if (__instance.reachedWallPosition) { spiderPositionData2.reachTheWallFail = false; } if (Vector3.Distance(((Component)__instance).transform.position, __instance.meshContainer.position) > 2f && !__instance.onWall) { ((EnemyAI)__instance).agent.speed = __instance.spiderSpeed / 3f; spiderPositionData2.isSlowedDown = true; } else { spiderPositionData2.isSlowedDown = false; } if (InitialScript.debugTools) { SPF_debugToolsClass.SetDebugObjectsPosition(__instance); } } [HarmonyPatch("LateUpdate")] [HarmonyPostfix] private static void MeshContainerPositionFix(SandSpiderAI __instance) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) spiderPositionData spiderPositionData2 = GetSpiderData(__instance); if (((NetworkBehaviour)__instance).IsOwner && spiderPositionData2.startPatch && (Vector3.Distance(__instance.meshContainerServerPosition, __instance.meshContainer.position) > 1.5f || Vector3.SignedAngle(__instance.meshContainerServerRotation, __instance.meshContainer.eulerAngles, Vector3.up) > 30f)) { __instance.meshContainerServerPosition = __instance.meshContainer.position; Quaternion rotation = __instance.meshContainer.rotation; __instance.meshContainerServerRotation = ((Quaternion)(ref rotation)).eulerAngles; if (((NetworkBehaviour)__instance).IsServer) { __instance.SyncMeshContainerPositionClientRpc(__instance.meshContainerServerPosition, __instance.meshContainerServerRotation); } } } [HarmonyPatch("CalculateMeshMovement")] [HarmonyPrefix] private static bool MeshMovementPatch(SandSpiderAI __instance) { //IL_0038: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) spiderPositionData spiderPositionData2 = GetSpiderData(__instance); if (__instance.lookingForWallPosition && __instance.gotWallPositionInLOS && !__instance.onWall) { float num = Vector3.Distance(((Component)__instance).transform.position, __instance.floorPosition); float num2 = Vector3.Distance(__instance.meshContainer.position, __instance.floorPosition); if (spiderPositionData2.delayTimer > 1f) { if (debugLogs) { InitialScript.Logger.LogDebug((object)("distanceFromFloorPosition: " + num)); InitialScript.Logger.LogDebug((object)("distanceFromFloorPositionMesh: " + num2)); } spiderPositionData2.delayTimer = 0f; spiderPositionData2.delayTimes++; if (spiderPositionData2.delayTimes >= 20) { InitialScript.Logger.LogWarning((object)(((object)__instance)?.ToString() + ", NWID " + ((NetworkBehaviour)__instance).NetworkObjectId + " failing to climb walls within set timer!")); spiderPositionData2.delayTimes = 0; } } else { spiderPositionData2.delayTimer += Time.deltaTime; } ((EnemyAI)__instance).SetDestinationToPosition(__instance.floorPosition, false); if (num < 1f && num2 < 0.7f) { spiderPositionData2.delayTimes = 0; return true; } return false; } return true; } [HarmonyPatch("CalculateSpiderPathToPosition")] [HarmonyPostfix] private static void CalculateSpiderPathToPositionPostfix(SandSpiderAI __instance) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_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_0059: 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) //IL_0069: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) spiderPositionData spiderPositionData2 = GetSpiderData(__instance); if (((NetworkBehaviour)__instance).IsOwner) { Vector3 meshContainerTarget = __instance.meshContainer.position; Vector3 velocity = ((EnemyAI)__instance).agent.velocity; if (((Vector3)(ref velocity)).magnitude > 1f) { meshContainerTarget = ((Component)__instance).transform.position + ((EnemyAI)__instance).agent.velocity * 1.25f * ((EnemyAI)__instance).AIIntervalTime; } if (spiderPositionData2.isSlowedDown) { meshContainerTarget = ((Component)__instance).transform.position; } __instance.meshContainerTarget = meshContainerTarget; } } [HarmonyPatch("CalculateMeshMovement")] [HarmonyPostfix] private static void MeshMovementPostfixPatch(SandSpiderAI __instance) { //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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((EnemyAI)__instance).agent.desiredVelocity; float magnitude = ((Vector3)(ref val)).magnitude; val = ((EnemyAI)__instance).agent.velocity; float num = 1f / (magnitude / ((Vector3)(ref val)).magnitude); spiderPositionData spiderPositionData2 = GetSpiderData(__instance); if (__instance.onWall) { return; } if (((EnemyAI)__instance).agent.isOnOffMeshLink) { __instance.meshContainer.position = Vector3.Lerp(__instance.meshContainer.position, ((Component)((EnemyAI)__instance).agent).transform.position, Distance(Vector3.Distance(__instance.meshContainer.position, ((Component)__instance).transform.position), 0.5f)); __instance.meshContainerPosition = __instance.meshContainer.position; Quaternion rotation = __instance.meshContainer.rotation; OffMeshLinkData currentOffMeshLinkData = ((EnemyAI)__instance).agent.currentOffMeshLinkData; __instance.meshContainerTargetRotation = Quaternion.Lerp(rotation, Quaternion.LookRotation(((OffMeshLinkData)(ref currentOffMeshLinkData)).endPos - __instance.meshContainer.position, Vector3.up), 0.75f); return; } if (spiderPositionData2.time <= 0f && debugLogs) { ManualLogSource logger = InitialScript.Logger; val = ((EnemyAI)__instance).agent.velocity; logger.LogDebug((object)((Vector3)(ref val)).magnitude); spiderPositionData2.time = 0.4f; } if (!__instance.overrideSpiderLookRotation) { val = ((EnemyAI)__instance).agent.desiredVelocity; Vector3 normalized = ((Vector3)(ref val)).normalized; normalized = ((EnemyAI)__instance).agent.velocity; if (((EnemyAI)__instance).agent.path.corners.Length > 1) { normalized = ((EnemyAI)__instance).agent.path.corners[1] - __instance.meshContainer.position; } Quaternion val2 = Quaternion.LookRotation(normalized + __instance.meshContainer.forward * 0.02f, Vector3.up); __instance.meshContainerTargetRotation = Quaternion.Lerp(__instance.meshContainer.rotation, val2, 0.75f); } } private static float Distance(float distance, float time) { return distance / time; } private static void ChangeJumpMask(SandSpiderAI __instance, ref int bit) { if ((Object)(object)__instance != (Object)null) { NavMeshAgent agent = ((EnemyAI)__instance).agent; agent.areaMask ^= 1 << NavMesh.GetAreaFromName("Jump"); if (bit == 0) { bit = 1; } else if (bit == 1) { bit = 0; } if (debugLogs) { InitialScript.Logger.LogDebug((object)("Spider: Toggled mask bit to " + bit)); } } } [HarmonyPatch("GetWallPositionForSpiderMesh")] [HarmonyPrefix] private static void GetWallPositionForSpiderMeshPrefix(SandSpiderAI __instance) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) __instance.floorPosition = Vector3.zero; } [HarmonyPatch("GetWallPositionForSpiderMesh")] [HarmonyPostfix] private static void GetWallPositionForSpiderMeshPatch(SandSpiderAI __instance, ref bool __result) { //IL_000a: 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: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_006a: 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) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Invalid comparison between Unknown and I4 //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Invalid comparison between Unknown and I4 //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Invalid comparison between Unknown and I4 //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Invalid comparison between Unknown and I4 spiderPositionData spiderPositionData2 = GetSpiderData(__instance); NavMeshHit val = default(NavMeshHit); Vector3 val2 = __instance.wallPosition + __instance.wallNormal; Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(val2.x, __instance.wallPosition.y, val2.z); NavMeshPath val4 = new NavMeshPath(); Vector3 point = ((RaycastHit)(ref __instance.rayHit)).point; if (debugLogs) { InitialScript.Logger.LogInfo((object)$"Test | WallPosition: {__instance.wallPosition}, unmodifiedWallPosition: {point}"); } if (__instance.floorPosition == Vector3.zero || RoundManager.Instance.GetNavMeshPosition(__instance.floorPosition, val, 0.7f, -1) == __instance.floorPosition || !((EnemyAI)__instance).agent.CalculatePath(__instance.floorPosition, val4) || (int)val4.status == 1 || (int)val4.status == 2) { if (spiderPositionData2.invalidPositionTimer <= 0f) { InitialScript.Logger.LogWarning((object)"failed to get valid position for floorPosition."); spiderPositionData2.invalidPositionTimer = 5f; } Vector3 zero = Vector3.zero; for (int i = 0; i < 4; i++) { zero = Vector3.Lerp(point, val3, (float)(i + 1) / 4f); Vector3 val5 = Vector3.zero; RaycastHit val6 = default(RaycastHit); if (Physics.Raycast(zero, Vector3.down, ref val6, 20f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { val5 = ((RaycastHit)(ref val6)).point; } if (val5 == Vector3.zero || RoundManager.Instance.GetNavMeshPosition(val5, val, 0.7f, -1) == val5 || !((EnemyAI)__instance).agent.CalculatePath(val5, val4) || (int)val4.status == 1 || (int)val4.status == 2) { __result = false; spiderPositionData2.faildetToGetPositionTimes++; continue; } __instance.floorPosition = val5; spiderPositionData2.faildetToGetPositionTimes = 0; __result = true; spiderPositionData2.invalidPositionTimer = 0f; InitialScript.Logger.LogMessage((object)"Assigned new floor position."); break; } } val4.ClearCorners(); if (InitialScript.debugTools) { SPF_debugToolsClass.GetWallPositionForMesh(__instance, point, val3); } } private static spiderPositionData GetSpiderData(SandSpiderAI spider) { if (!spiderData.ContainsKey(spider)) { spiderData.Add(spider, new spiderPositionData()); } return spiderData[spider]; } } internal class EnemyAIPatch { [HarmonyPatch(typeof(EnemyAI), "OnDestroy")] [HarmonyPostfix] public static void OnDestroyPatch(EnemyAI aI) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown if (aI is SandSpiderAI) { SpiderPositionPatch.spiderData.Remove((SandSpiderAI)aI); InitialScript.Logger.LogMessage((object)$"Cleared {aI.enemyType.enemyName} #{aI.thisEnemyIndex}'s data"); if (InitialScript.debugTools) { SPF_debugToolsClass.DeleteObjects((SandSpiderAI)aI); } } } } }