Decompiled source of LethalPlaytime v1.3.6
Nuclear_Fox.LethalPlaytime.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; 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.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Events; using UnityEngine.InputSystem.Utilities; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Nuclear_Fox.LethalPlaytime")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.3.6.0")] [assembly: AssemblyInformationalVersion("1.3.6")] [assembly: AssemblyProduct("LethalPlaytime")] [assembly: AssemblyTitle("Nuclear_Fox.LethalPlaytime")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.6.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 LethalPlaytime { public class BoxyBooAI : EnemyAI { private enum BoxyStates { BasicSearch, AdvancedSearch, BasicChase, AdvancedChase, Box, Jumpscare, Leap, Armgrab, Retreat } private enum CrankStates { WindUp, Static, NormalSpin, FastSpin } private Random rng; private AISearchRoutine boxySearchRoutine; private CrankStates crankState; public Transform crank; public InteractTrigger interactTrigger; public bool box = false; public bool partial = true; public bool full = false; public bool attacking = false; public bool leaping = false; public bool grabbing = false; public bool jumpscaring = false; public static readonly int maxEnergy = 26; public static readonly int thresholdEnergy = 21; public float energy = 0f; public bool reversing = false; private static readonly int maxCrankBackwardsTime = 2; private float crankBackwardsTime = 0f; public static readonly float maxLeapCooldown = 8f; public static readonly float maxGrabCooldown = 10f; public static readonly float startLeapCooldown = 2000f; public static readonly float startGrabCooldown = 2000f; public float leapCooldown = 5f; public float grabCooldown = 6f; public static readonly float maxTimeSinceMoving = 0.15f; public float timeSinceMoving = 0f; public int numJumps = 1; public Transform leftsideCheck; public Transform rightsideCheck; private Vector3 landingPosition; private static float peakJumpHeight = 0.5f; private static float jumpSpeed = 5f; public float timeSinceOnNavMesh = 0f; private Vector3 reservedAgentSpeed; private bool wasOnOffMeshLink = false; public AudioSource crankAudio; public AudioSource hitConnectAudio; public AudioSource grabAudioPoint; public AudioSource musicAudio; public AudioSource creakAudio; public AudioSource jumpAudio; public AudioSource retractAudio; public AudioClip[] walkSounds; public AudioClip[] staticSounds; public AudioClip[] attackSounds; public AudioClip[] hitConnectSounds; public AudioClip[] grabLaunchSounds; public AudioClip[] grabReadySounds; public AudioClip[] crankSounds; public AudioClip[] musicTrackSounds; public AudioClip[] boxLandSounds; public AudioClip[] leapSounds; public AudioClip[] landSounds; public AudioClip[] creakSounds; public AudioClip[] popSounds; public AudioClip[] jumpscareSounds; public AudioClip[] partialRetractSounds; public AudioClip[] fullRetractSounds; public AudioClip[] hitConnectSlashSounds; private float maxTimeBetweenCranks = 0.75f; public float timeBetweenCranks = 0f; private static readonly float maxCreakTime = 6f; private static readonly float minCreekTime = 3f; public float creakTime = 5f; public BoxCollider attackArea; public static readonly float maxAttackCooldown = 1.4f; public float attackCooldown = 0f; public int numGrabs = 1; private int angleOffsetGrab = 45; private static readonly float maxTimeAimingGrab = 0.6f; public float timeAimingGrab = 0f; public bool grabbedPlayer = false; public bool checkingArmCollision = false; public Transform jumpscareAttachPoint; private ulong jumpscareClientID; public BoxCollider jumpscareCollision; public Coroutine jumpscare; private Vector3 retreatPosition; private readonly float maxRetreatTime = 25f; public float retreatTime = 0f; public float trackedDamage = 0f; public bool shouldEnterRetreat = false; public readonly float maxTrackedDamaged = 8f; private bool setupFinished = false; public BoxCollider boxCollision; public bool checkingLastSeenPostion = false; public float timeSinceSeeingTarget = 0f; public readonly float losTimeBasicChase = 6f; public readonly float losTimeAdvancedChase = 9f; public readonly float maxTimeCheckingLastSeenPosition = 12f; public float timeCheckingLastSeenPosition = 0f; private Vector3 lastSeenEnemyPosition; public override void Start() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_0099: 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) ((EnemyAI)this).Start(); rng = new Random(StartOfRound.Instance.randomMapSeed); boxySearchRoutine = new AISearchRoutine(); crankState = CrankStates.Static; if ((Object)(object)musicAudio != (Object)null && musicTrackSounds != null) { musicAudio.clip = musicTrackSounds[0]; } if (!((NetworkBehaviour)this).IsServer && ((NetworkBehaviour)this).IsOwner) { ((EnemyAI)this).ChangeOwnershipOfEnemy(StartOfRound.Instance.allPlayerScripts[0].actualClientId); } retreatPosition = ((Component)this).transform.position; base.debugEnemyAI = false; } public void SetupStartTrigger() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown if (base.debugEnemyAI && ((NetworkBehaviour)this).IsClient) { Debug.Log((object)"SetupStartTrigger called on client."); } if (interactTrigger.onInteract != null) { ((UnityEvent<PlayerControllerB>)(object)interactTrigger.onInteract).AddListener((UnityAction<PlayerControllerB>)CrankBackwards); return; } interactTrigger.onInteract = new InteractEvent(); ((UnityEvent<PlayerControllerB>)(object)interactTrigger.onInteract).AddListener((UnityAction<PlayerControllerB>)CrankBackwards); } public override void DoAIInterval() { //IL_0ce2: Unknown result type (might be due to invalid IL or missing references) //IL_0ce8: Unknown result type (might be due to invalid IL or missing references) //IL_0c5a: Unknown result type (might be due to invalid IL or missing references) //IL_0c65: Unknown result type (might be due to invalid IL or missing references) //IL_0d3b: Unknown result type (might be due to invalid IL or missing references) //IL_06d9: Unknown result type (might be due to invalid IL or missing references) //IL_06e9: 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_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_052e: Unknown result type (might be due to invalid IL or missing references) //IL_0539: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03e8: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Unknown result type (might be due to invalid IL or missing references) //IL_0726: Unknown result type (might be due to invalid IL or missing references) //IL_0731: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_0452: Unknown result type (might be due to invalid IL or missing references) //IL_0591: Unknown result type (might be due to invalid IL or missing references) //IL_0482: Unknown result type (might be due to invalid IL or missing references) //IL_0492: Unknown result type (might be due to invalid IL or missing references) //IL_04e5: Unknown result type (might be due to invalid IL or missing references) //IL_0ad4: Unknown result type (might be due to invalid IL or missing references) //IL_0ae6: Unknown result type (might be due to invalid IL or missing references) //IL_0af6: Unknown result type (might be due to invalid IL or missing references) //IL_0b0d: Unknown result type (might be due to invalid IL or missing references) //IL_0b22: Unknown result type (might be due to invalid IL or missing references) //IL_07fc: Unknown result type (might be due to invalid IL or missing references) //IL_0811: Unknown result type (might be due to invalid IL or missing references) //IL_07b6: Unknown result type (might be due to invalid IL or missing references) //IL_07cb: Unknown result type (might be due to invalid IL or missing references) //IL_08c9: Unknown result type (might be due to invalid IL or missing references) //IL_08d4: Unknown result type (might be due to invalid IL or missing references) //IL_08d9: Unknown result type (might be due to invalid IL or missing references) //IL_08de: Unknown result type (might be due to invalid IL or missing references) //IL_08e2: Unknown result type (might be due to invalid IL or missing references) //IL_08e7: Unknown result type (might be due to invalid IL or missing references) //IL_08f4: Unknown result type (might be due to invalid IL or missing references) //IL_08f9: Unknown result type (might be due to invalid IL or missing references) //IL_0900: Unknown result type (might be due to invalid IL or missing references) //IL_0905: Unknown result type (might be due to invalid IL or missing references) //IL_090a: Unknown result type (might be due to invalid IL or missing references) //IL_090c: Unknown result type (might be due to invalid IL or missing references) //IL_0926: Unknown result type (might be due to invalid IL or missing references) //IL_0934: Unknown result type (might be due to invalid IL or missing references) //IL_0939: Unknown result type (might be due to invalid IL or missing references) //IL_0941: Unknown result type (might be due to invalid IL or missing references) //IL_0946: Unknown result type (might be due to invalid IL or missing references) //IL_0948: Unknown result type (might be due to invalid IL or missing references) //IL_0959: Unknown result type (might be due to invalid IL or missing references) //IL_095b: Unknown result type (might be due to invalid IL or missing references) //IL_09c9: Unknown result type (might be due to invalid IL or missing references) //IL_09de: Unknown result type (might be due to invalid IL or missing references) //IL_09fa: Unknown result type (might be due to invalid IL or missing references) //IL_0a0f: Unknown result type (might be due to invalid IL or missing references) //IL_0880: Unknown result type (might be due to invalid IL or missing references) //IL_0895: Unknown result type (might be due to invalid IL or missing references) //IL_0a6e: Unknown result type (might be due to invalid IL or missing references) //IL_0a70: Unknown result type (might be due to invalid IL or missing references) if (base.isEnemyDead || StartOfRound.Instance.allPlayersDead || base.isEnemyDead) { return; } ((EnemyAI)this).DoAIInterval(); if (base.timeSinceSpawn < 2f && base.timeSinceSpawn > 1f && !setupFinished) { setupFinished = true; if (base.debugEnemyAI) { Debug.Log((object)"Setting up interact trigger on clients."); } BoxyBooSendStringClientRcp("SetupClientInteractTrigger"); } timeSinceSeeingTarget += base.AIIntervalTime; switch (base.currentBehaviourStateIndex) { case 0: { if (energy <= 0f) { ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); ((EnemyAI)this).StopSearch(boxySearchRoutine, false); break; } PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(360f, 2, -1, 0f); if ((Object)(object)val == (Object)null) { val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(150f, 25, -1, 0f); } if ((Object)(object)val != (Object)null && val.isInsideFactory && !val.isPlayerDead && !Object.op_Implicit((Object)(object)val.inAnimationWithEnemy)) { timeSinceSeeingTarget = 0f; base.targetPlayer = val; ((EnemyAI)this).SwitchToBehaviourState(2); BoxyBooSendStringClientRcp("SwitchToBasicChase"); } else if (!boxySearchRoutine.inProgress) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, boxySearchRoutine); } break; } case 1: { if (energy <= 0f) { ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); ((EnemyAI)this).StopSearch(boxySearchRoutine, false); break; } PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(360f, 3, -1, 0f); if ((Object)(object)val == (Object)null) { val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(180f, 32, -1, 0f); } if ((Object)(object)val != (Object)null && val.isInsideFactory && !val.isPlayerDead && !Object.op_Implicit((Object)(object)val.inAnimationWithEnemy)) { timeSinceSeeingTarget = 0f; base.targetPlayer = val; ((EnemyAI)this).SwitchToBehaviourState(3); BoxyBooSendStringClientRcp("SwitchToAdvancedChase"); } else if (!boxySearchRoutine.inProgress) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, boxySearchRoutine); } break; } case 2: if (boxySearchRoutine.inProgress) { ((EnemyAI)this).StopSearch(boxySearchRoutine, true); } if (energy <= 0f) { ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); } else if ((Object)(object)base.targetPlayer != (Object)null && !base.targetPlayer.isPlayerDead && base.targetPlayer.isInsideFactory && !Object.op_Implicit((Object)(object)base.targetPlayer.inAnimationWithEnemy)) { if (timeSinceSeeingTarget > losTimeBasicChase) { lastSeenEnemyPosition = ((Component)base.targetPlayer).transform.position; checkingLastSeenPostion = true; base.targetPlayer = null; break; } float num = Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position); bool flag = !Physics.Linecast(((Component)base.eye).transform.position, ((Component)base.targetPlayer.gameplayCamera).transform.position, StartOfRound.Instance.collidersAndRoomMaskAndDefault); PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(150f, 25, -1, 0f); if ((Object)(object)val != (Object)(object)base.targetPlayer && (Object)(object)val != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) < num) { timeSinceSeeingTarget = 0f; base.targetPlayer = val; num = Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position); flag = true; } if (num < 1.5f && !attacking && attackCooldown <= 0f) { AttackRandom(); break; } ((EnemyAI)this).SetDestinationToPosition(((Component)base.targetPlayer).transform.position, false); if (flag) { timeSinceSeeingTarget = 0f; if (num > 26f) { base.targetPlayer = null; } } } else if (checkingLastSeenPostion && Vector3.Distance(lastSeenEnemyPosition, ((Component)this).transform.position) > 2f) { timeCheckingLastSeenPosition += base.AIIntervalTime; if (timeCheckingLastSeenPosition > maxTimeCheckingLastSeenPosition) { checkingLastSeenPostion = false; timeCheckingLastSeenPosition = 0f; } ((EnemyAI)this).SetDestinationToPosition(lastSeenEnemyPosition, false); } else { checkingLastSeenPostion = false; timeCheckingLastSeenPosition = 0f; PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(150f, 25, -1, 0f); if ((Object)(object)val != (Object)null) { base.targetPlayer = val; } else if (energy > 2f) { base.targetPlayer = null; ((EnemyAI)this).SwitchToBehaviourState(0); BoxyBooSendStringClientRcp("SwitchToBasicSearch"); } else { base.targetPlayer = null; ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); } } break; case 3: if (boxySearchRoutine.inProgress) { ((EnemyAI)this).StopSearch(boxySearchRoutine, true); } if (energy <= 0f) { ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); } else if ((Object)(object)base.targetPlayer != (Object)null && !base.targetPlayer.isPlayerDead && base.targetPlayer.isInsideFactory && !Object.op_Implicit((Object)(object)base.targetPlayer.inAnimationWithEnemy)) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position); PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(360f, 25, -1, 0f); if ((Object)(object)val != (Object)(object)base.targetPlayer && (Object)(object)val != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) < num2) { ((EnemyAI)this).TargetClosestPlayer(5f, false, 70f); base.targetPlayer = val; } if (energy > 2f) { if (grabCooldown <= 0f && (double)num2 < 3.25 && (double)num2 > 0.6 && !base.agent.isOnOffMeshLink && (double)Math.Abs(((Component)this).transform.position.y - ((Component)base.targetPlayer).transform.position.y) < 1.25 && !Physics.Linecast(((Component)base.eye).transform.position, ((Component)base.targetPlayer.gameplayCamera).transform.position, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { ((EnemyAI)this).SwitchToBehaviourState(7); BoxyBooSendStringClientRcp("SwitchToGrab"); break; } if (leapCooldown <= 0f && num2 < 10f && (double)num2 > 5.5 && !base.agent.isOnOffMeshLink && (double)Math.Abs(((Component)this).transform.position.y - ((Component)base.targetPlayer).transform.position.y) < 0.7) { Vector3 val2 = ((Component)base.targetPlayer).transform.position - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; Vector3 val3 = ((Component)base.targetPlayer).transform.position - normalized * 0.5f; NavMeshHit val4 = default(NavMeshHit); if (NavMesh.SamplePosition(val3, ref val4, 0.6f, -1)) { Vector3 randomNavMeshPositionInRadiusSpherical = GetRandomNavMeshPositionInRadiusSpherical(val3, 1f, 0.02f, 100); Debug.DrawLine(((Component)this).transform.position, randomNavMeshPositionInRadiusSpherical, Color.magenta, 4f); landingPosition = randomNavMeshPositionInRadiusSpherical; BoxyBooSendStringClientRcp("Vector3: " + landingPosition.x + "," + landingPosition.y + "," + landingPosition.z); bool flag2 = Physics.Linecast(leftsideCheck.position, ((Component)base.targetPlayer.playerEye).transform.position, StartOfRound.Instance.collidersAndRoomMaskAndDefault); bool flag3 = Physics.Linecast(rightsideCheck.position, ((Component)base.targetPlayer.playerEye).transform.position, StartOfRound.Instance.collidersAndRoomMaskAndDefault); if (base.debugEnemyAI) { Debug.Log((object)("Leftcheck: " + flag2)); Debug.Log((object)("Rightcheck: " + flag3)); } if (flag2 && flag3) { landingPosition = randomNavMeshPositionInRadiusSpherical; ((EnemyAI)this).SwitchToBehaviourState(6); BoxyBooSendStringClientRcp("SwitchToLeap"); break; } } } } if (num2 < 1.5f && !attacking && attackCooldown <= 0f) { AttackRandom(); break; } ((EnemyAI)this).SetDestinationToPosition(((Component)base.targetPlayer).transform.position, false); float num3 = Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position); if (!Physics.Linecast(((Component)base.eye).transform.position, ((Component)base.targetPlayer.gameplayCamera).transform.position, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { if (num3 > 31f) { base.targetPlayer = null; } } else if (num3 > 20f) { base.targetPlayer = null; } } else { PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(360f, 25, -1, 0f); if ((Object)(object)val != (Object)null) { base.targetPlayer = val; } else if (energy > 2f) { base.targetPlayer = null; ((EnemyAI)this).SwitchToBehaviourState(1); BoxyBooSendStringClientRcp("SwitchToAdvancedSearch"); } else { base.targetPlayer = null; ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); } } break; case 4: { PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForPlayer(270f, 7, -1); if (energy >= (float)maxEnergy) { ((EnemyAI)this).SwitchToBehaviourState(1); BoxyBooSendStringClientRcp("SwitchToAdvancedSearch"); } else if (energy >= (float)thresholdEnergy && (Object)(object)val != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) < 7f) { ((EnemyAI)this).SwitchToBehaviourState(0); BoxyBooSendStringClientRcp("SwitchToBasicSearch"); } break; } case 5: break; case 6: break; case 7: if (numGrabs <= 0 && !jumpscaring) { ((EnemyAI)this).SwitchToBehaviourState(1); BoxyBooSendStringClientRcp("SwitchToAdvancedSearch"); } break; case 8: if (Vector3.Distance(((Component)this).transform.position, retreatPosition) < 2.5f || retreatTime > maxRetreatTime) { retreatTime = 0f; base.targetPlayer = null; ((EnemyAI)this).SwitchToBehaviourState(4); BoxyBooSendStringClientRcp("SwitchToBox"); } else { ((EnemyAI)this).SetDestinationToPosition(retreatPosition, false); } break; } } public override void Update() { if (!base.isEnemyDead) { ((EnemyAI)this).Update(); UpdateOffmeshJumpState(); UpdateCrank(crankState, reversing); UpdateEnergy((BoxyStates)base.currentBehaviourStateIndex); UpdateCooldowns(); UpdateStateDependent(); UpdateCreak(); if (((NetworkBehaviour)this).IsHost || ((NetworkBehaviour)this).IsServer) { UpdateRetreatCheck(); UpdateWalking(); UpdateNavMesh(); CheckArmCollision(); } } } private void UpdateRetreatCheck() { if (!attacking && shouldEnterRetreat && (base.currentBehaviourStateIndex == 0 || base.currentBehaviourStateIndex == 1 || base.currentBehaviourStateIndex == 2 || base.currentBehaviourStateIndex == 3)) { shouldEnterRetreat = false; trackedDamage = 0f; ((EnemyAI)this).SwitchToBehaviourState(8); BoxyBooSendStringClientRcp("SwitchToRetreat"); } } private void UpdateOffmeshJumpState() { if (base.agent.isOnOffMeshLink && !wasOnOffMeshLink) { BoxyBooSendStringClientRcp("PlayJumpAnimation"); } wasOnOffMeshLink = base.agent.isOnOffMeshLink; } private void UpdateCreak() { if (base.currentBehaviourStateIndex < 4) { creakTime -= Time.deltaTime; if (creakTime <= 0f) { creakTime = (float)(rng.NextDouble() * (double)(maxCreakTime - minCreekTime)) + minCreekTime; PlayRandomCreakSound(); } } } private void UpdateStateDependent() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_012f: 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_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0154: 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_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0175: 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_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) if (attacking && (Object)(object)base.targetPlayer != (Object)null) { Vector3 val = ((Component)base.targetPlayer).transform.position - ((Component)this).transform.position; val.y = 0f; Quaternion val2 = Quaternion.LookRotation(val); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val2, Time.deltaTime * 10f); } switch (base.currentBehaviourStateIndex) { case 4: timeBetweenCranks += Time.deltaTime; if (timeBetweenCranks > maxTimeBetweenCranks) { timeBetweenCranks = 0f; PlayRandomCrankSound(); } break; case 7: { PlayerControllerB val3 = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(360f, 7, -1, 0f); if ((Object)(object)val3 != (Object)null && val3.isInsideFactory && !val3.isPlayerDead) { Vector3 val4 = ((Component)val3).transform.position - ((Component)this).transform.position; val4.y = 0f; Quaternion val5 = Quaternion.LookRotation(val4); Quaternion val6 = Quaternion.Euler(0f, 7f, 0f); Quaternion val7 = val5 * val6; ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val7, Time.deltaTime * 20f); } if ((double)timeAimingGrab > -0.5) { timeAimingGrab += Time.deltaTime; if (timeAimingGrab > maxTimeAimingGrab) { timeAimingGrab = -1f; BoxyBooSendStringClientRcp("FinishArmGrab"); } } break; } case 8: retreatTime += Time.deltaTime; break; } } private IEnumerator Leap() { Vector3 startingPosition = ((Component)this).transform.position; _ = startingPosition.y; float distanceToDestination = Vector3.Distance(startingPosition, landingPosition); float currentDistanceToDestination = distanceToDestination; float timeTaken = 0f; while (currentDistanceToDestination > 0.2f && (double)timeTaken < 0.75) { ((Component)this).transform.position = Vector3.Lerp(((Component)this).transform.position, landingPosition, Time.deltaTime * jumpSpeed); Vector3 diff = ((Component)base.targetPlayer).transform.position - ((Component)this).transform.position; diff.y = 0f; Quaternion targetLook = Quaternion.LookRotation(diff); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, targetLook, Time.deltaTime * 10f); currentDistanceToDestination = Vector3.Distance(((Component)this).transform.position, landingPosition); timeTaken += Time.deltaTime; yield return null; } if (currentDistanceToDestination <= 0.15f) { if (!base.agent.isOnNavMesh) { FindAndSetValidNavMeshPosition(); } ((EnemyAI)this).SwitchToBehaviourState(3); BoxyBooSendStringClientRcp("SwitchToAdvancedChase"); if ((Object)(object)base.targetPlayer != (Object)null && base.targetPlayer.isInsideFactory && !base.targetPlayer.isPlayerDead) { ((EnemyAI)this).SetDestinationToPosition(((Component)base.targetPlayer).transform.position, true); } } else { if (!base.agent.isOnNavMesh) { FindAndSetValidNavMeshPosition(); } ((EnemyAI)this).SwitchToBehaviourState(3); BoxyBooSendStringClientRcp("SwitchToAdvancedChase"); if ((Object)(object)base.targetPlayer != (Object)null && base.targetPlayer.isInsideFactory && !base.targetPlayer.isPlayerDead) { ((EnemyAI)this).SetDestinationToPosition(((Component)base.targetPlayer).transform.position, true); } } } public void FindAndSetValidNavMeshPosition(float searchRadius = 0.1f, int maxAttempts = 500) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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) Vector3 position = ((Component)this).transform.position; int num = 0; NavMeshHit val2 = default(NavMeshHit); while (num < maxAttempts && !base.agent.isOnNavMesh) { Vector3 val = position + Random.insideUnitSphere * searchRadius; if (NavMesh.SamplePosition(val, ref val2, searchRadius, -1)) { base.agent.Warp(((NavMeshHit)(ref val2)).position); return; } num++; searchRadius += 0.03f; } Debug.LogWarning((object)"Failed to find a valid NavMesh position after maximum attempts."); } private Vector3 GetRandomNavMeshPositionInRadiusSpherical(Vector3 pos, float initialRadius = 10f, float radiusIncrement = 5f, int maxAttempts = 10) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: 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_00ae: 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) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0046: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_00b3: Unknown result type (might be due to invalid IL or missing references) float num = initialRadius; NavMeshHit val2 = default(NavMeshHit); for (int i = 0; i < maxAttempts; i++) { Vector3 val = pos + Random.insideUnitSphere * num; if (NavMesh.SamplePosition(val, ref val2, num, -1)) { Debug.DrawRay(((NavMeshHit)(ref val2)).position + Vector3.forward * 0.01f, Vector3.up * 2f, Color.blue); return ((NavMeshHit)(ref val2)).position; } num += radiusIncrement; } Debug.DrawRay(pos + Vector3.forward * 0.01f, Vector3.up * 2f, Color.yellow); return pos; } private void SwitchToAdvancedSearch() { if ((Object)(object)musicAudio.clip != (Object)(object)musicTrackSounds[1]) { musicAudio.clip = musicTrackSounds[1]; musicAudio.Play(); } numJumps = 1; box = false; partial = false; full = true; UpdateAnimationState(); base.agent.speed = 5f; crankState = CrankStates.FastSpin; } private void SwitchToAdvancedChase() { if ((Object)(object)musicAudio.clip != (Object)(object)musicTrackSounds[1]) { musicAudio.clip = musicTrackSounds[1]; musicAudio.Play(); } box = false; partial = false; full = true; UpdateAnimationState(); base.agent.speed = 6f; attacking = false; attackCooldown = maxAttackCooldown * 1.5f; crankState = CrankStates.FastSpin; } private void SwitchToBasicSearch() { if ((Object)(object)musicAudio.clip != (Object)(object)musicTrackSounds[0]) { musicAudio.clip = musicTrackSounds[0]; musicAudio.Play(); } box = false; partial = false; full = true; UpdateAnimationState(); base.agent.speed = 4f; crankState = CrankStates.NormalSpin; } private void SwitchToBasicChase() { if ((Object)(object)musicAudio.clip != (Object)(object)musicTrackSounds[0]) { musicAudio.clip = musicTrackSounds[0]; musicAudio.Play(); } attacking = false; attackCooldown = maxAttackCooldown * 2f; box = false; partial = false; full = true; UpdateAnimationState(); base.agent.speed = 5.5f; crankState = CrankStates.NormalSpin; } private void SwitchToLeap() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) numJumps = 0; box = false; partial = false; full = true; leapCooldown = maxLeapCooldown; UpdateAnimationState(); base.agent.speed = 0f; base.agent.velocity = Vector3.zero; base.creatureAnimator.SetTrigger("JumpHop"); PlayRandomLeapSound(); if (((NetworkBehaviour)this).IsHost) { ((MonoBehaviour)this).StartCoroutine(Leap()); } } private void SwitchToGrab() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) numGrabs = 1; box = false; partial = false; full = true; UpdateAnimationState(); base.agent.speed = 0f; base.agent.velocity = Vector3.zero; timeAimingGrab = 0f; crankState = CrankStates.FastSpin; base.creatureAnimator.SetTrigger("ArmGrab"); base.creatureAnimator.SetBool("Winding", true); PlayRandomGrabReadySound(); grabCooldown = maxGrabCooldown; } private void SwitchToRetreat() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) if (boxySearchRoutine.inProgress) { ((EnemyAI)this).StopSearch(boxySearchRoutine, true); } retreatPosition = ((EnemyAI)this).ChooseFarthestNodeFromPosition(((Component)this).transform.position, false, 0, false, 50, false).position; energy = 0f; base.agent.speed = 0f; base.agent.velocity = Vector3.zero; ((MonoBehaviour)this).StartCoroutine(SetSpeedAfterDelay(1.2f, 5.5f)); } private IEnumerator SetSpeedAfterDelay(float delay, float speed) { yield return (object)new WaitForSeconds(delay); base.agent.speed = speed; } private void SwitchToBox() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) musicAudio.clip = null; box = true; partial = false; full = false; UpdateAnimationState(); base.agent.speed = 0f; base.agent.velocity = Vector3.zero; crankState = CrankStates.WindUp; ((Behaviour)interactTrigger).enabled = true; if ((Object)(object)boxCollision != (Object)null) { ((Collider)boxCollision).isTrigger = false; } } private void SwitchToFull() { box = false; partial = false; full = true; UpdateAnimationState(); base.agent.speed = 4.5f; ((Behaviour)interactTrigger).enabled = false; if ((Object)(object)boxCollision != (Object)null) { ((Collider)boxCollision).isTrigger = true; } } private void SwitchToPartial() { musicAudio.clip = null; box = false; partial = true; full = false; UpdateAnimationState(); crankState = CrankStates.Static; ((Behaviour)interactTrigger).enabled = false; if ((Object)(object)boxCollision != (Object)null) { ((Collider)boxCollision).isTrigger = true; } } private void UpdateAnimationState() { base.creatureAnimator.SetBool("box", box); base.creatureAnimator.SetBool("partial", partial); base.creatureAnimator.SetBool("full", full); } private void UpdateCooldowns() { if (leapCooldown > 0f) { leapCooldown -= Time.deltaTime; } if (grabCooldown > 0f) { grabCooldown -= Time.deltaTime; } if (attackCooldown > 0f) { attackCooldown -= Time.deltaTime; } } private void UpdateWalking() { //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) timeSinceMoving += Time.deltaTime; Vector3 velocity = base.agent.velocity; if ((double)((Vector3)(ref velocity)).magnitude < 0.1) { if (timeSinceMoving > maxTimeSinceMoving && base.creatureAnimator.GetBool("walking")) { BoxyBooSendStringClientRcp("Idle"); base.creatureAnimator.SetBool("walking", false); } return; } if (!base.creatureAnimator.GetBool("walking")) { BoxyBooSendStringClientRcp("Walking"); base.creatureAnimator.SetBool("walking", true); } timeSinceMoving = 0f; } private void UpdateEnergy(BoxyStates boxyState) { switch (boxyState) { case BoxyStates.BasicChase: energy -= Time.deltaTime * 0.5f; break; case BoxyStates.AdvancedChase: energy -= Time.deltaTime; break; case BoxyStates.BasicSearch: energy -= Time.deltaTime * 0.3333f; break; case BoxyStates.AdvancedSearch: energy -= Time.deltaTime * 0.75f; break; case BoxyStates.Box: energy += Time.deltaTime; break; } } private void UpdateCrank(CrankStates crankState, bool reversing = false) { //IL_007e: Unknown result type (might be due to invalid IL or missing references) int num = 0; switch (crankState) { case CrankStates.WindUp: num = 90; break; case CrankStates.Static: num = 0; break; case CrankStates.NormalSpin: num = -270; break; case CrankStates.FastSpin: num = -540; break; } if (reversing) { crankBackwardsTime -= Time.deltaTime; if (crankBackwardsTime <= 0f) { this.reversing = false; return; } num *= -5; } crank.Rotate(Vector3.right, (float)num * Time.deltaTime); } private void UpdateNavMesh() { if (base.agent.isOnNavMesh) { timeSinceOnNavMesh = 0f; return; } timeSinceOnNavMesh += Time.deltaTime; if (timeSinceOnNavMesh > 5f) { Debug.Log((object)"Tried to fix Boxy Boo's position."); FindAndSetValidNavMeshPosition(); } } public void CrankBackwards(PlayerControllerB player) { if (base.debugEnemyAI) { Debug.Log((object)$"Boxy: Tried to alert host to crank request. Is client?: {((NetworkBehaviour)this).IsClient}"); } BoxyBooSendStringCrankRpc("ClientCrank"); } public void CheckAttackArea() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_005b: Unknown result type (might be due to invalid IL or missing references) Bounds bounds = ((Collider)((Component)StartOfRound.Instance.localPlayerController).GetComponent<BoxCollider>()).bounds; if (((Bounds)(ref bounds)).Intersects(((Collider)attackArea).bounds)) { PlayRandomHitConnectSound(); if (!base.debugEnemyAI) { StartOfRound.Instance.localPlayerController.DamagePlayer(27, false, true, (CauseOfDeath)6, 0, false, default(Vector3)); } } else { PlayRandomSwingSound(); } } private void InterpretRpcString(string informationString) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) if (informationString.Contains("Vector3:")) { informationString = informationString.Replace("Vector3:", "").Trim(); string[] array = informationString.Split(","); if (array.Length >= 3) { landingPosition = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2])); } return; } if (informationString.Contains("Jumpscare:")) { if (base.debugEnemyAI) { Debug.Log((object)"Boxy: Processing Jumpscare clientID"); } informationString = informationString.Replace("Jumpscare:", "").Trim(); ulong playerID = (ulong)int.Parse(informationString); base.creatureAnimator.SetBool("GrabbedTarget", true); jumpscare = ((MonoBehaviour)this).StartCoroutine(GrabAndJumpscare(playerID)); return; } if (!((NetworkBehaviour)this).IsHost && base.debugEnemyAI) { Debug.Log((object)("String received from host: " + informationString)); } string text = informationString; string text2 = text; if (text2 == null) { return; } switch (text2.Length) { case 11: switch (text2[0]) { case 'S': if (text2 == "SwitchToBox") { SwitchToBox(); } break; case 'C': if (text2 == "ClientCrank" && ((NetworkBehaviour)this).IsHost) { CrankBackwardsHostProcess(); } break; case 'A': if (text2 == "AttackRight") { AttackRight(); } break; } break; case 12: switch (text2[8]) { case 'G': if (text2 == "SwitchToGrab") { SwitchToGrab(); } break; case 'L': if (text2 == "SwitchToLeap") { SwitchToLeap(); } break; } break; case 22: if (text2 == "SwitchToAdvancedSearch") { SwitchToFull(); SwitchToAdvancedSearch(); } break; case 21: if (text2 == "SwitchToAdvancedChase") { SwitchToFull(); SwitchToAdvancedChase(); } break; case 19: if (text2 == "SwitchToBasicSearch") { SwitchToFull(); SwitchToBasicSearch(); } break; case 18: if (text2 == "SwitchToBasicChase") { SwitchToFull(); SwitchToBasicChase(); } break; case 7: if (text2 == "Walking") { base.creatureAnimator.SetBool("walking", true); } break; case 4: if (text2 == "Idle") { base.creatureAnimator.SetBool("walking", false); } break; case 16: if (text2 == "HostCrankApprove") { reversing = true; crankBackwardsTime += maxCrankBackwardsTime; } break; case 10: if (text2 == "AttackLeft") { AttackLeft(); } break; case 13: if (text2 == "FinishArmGrab") { base.creatureAnimator.SetBool("Winding", false); } break; case 17: if (text2 == "PlayJumpAnimation") { base.creatureAnimator.SetTrigger("JumpHop"); if ((((NetworkBehaviour)this).IsHost || ((NetworkBehaviour)this).IsServer) && base.currentBehaviourStateIndex == 3) { leapCooldown += 0.65f; grabCooldown += 0.65f; attackCooldown += 0.65f; } } break; case 15: if (text2 == "SwitchToRetreat") { SwitchToRetreat(); SwitchToPartial(); } break; case 26: if (text2 == "SetupClientInteractTrigger") { SetupStartTrigger(); } break; case 5: case 6: case 8: case 9: case 14: case 20: case 23: case 24: case 25: break; } } private void AttackLeft() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) base.agent.speed = 0f; base.agent.velocity = Vector3.zero; base.creatureAnimator.SetTrigger("AttackLeft"); ((Collider)((Component)base.agent).gameObject.GetComponent<BoxCollider>()).isTrigger = false; } private void AttackRight() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) base.agent.speed = 0f; base.agent.velocity = Vector3.zero; base.creatureAnimator.SetTrigger("AttackRight"); ((Collider)((Component)base.agent).gameObject.GetComponent<BoxCollider>()).isTrigger = false; } public void ResetAfterAttack() { ((Collider)((Component)base.agent).gameObject.GetComponent<BoxCollider>()).isTrigger = true; attacking = false; switch (base.currentBehaviourStateIndex) { case 3: base.agent.speed = 6f; break; case 1: base.agent.speed = 5f; break; case 2: base.agent.speed = 5.5f; break; case 0: base.agent.speed = 4f; break; case 4: base.agent.speed = 0f; break; } } private void AttackRandom() { attacking = true; if (rng.Next(2) == 0) { BoxyBooSendStringClientRcp("AttackLeft"); } else { BoxyBooSendStringClientRcp("AttackRight"); } } private void CrankBackwardsHostProcess() { if (base.debugEnemyAI) { Debug.Log((object)$"CrankBackwardsHostProcess called. Host: {((NetworkBehaviour)this).IsHost}, Server: {((NetworkBehaviour)this).IsServer}, Energy: {energy}"); } if (!((NetworkBehaviour)this).IsHost && !((NetworkBehaviour)this).IsServer) { return; } if (box && energy < 22f) { energy -= 2f; if (energy < 0f) { energy = 0f; } BoxyBooSendStringClientRcp("HostCrankApprove"); Debug.Log((object)"Request to uncrank approved."); } else { Debug.Log((object)"Request to uncrank denied."); } } public void FinishGrab() { numGrabs = 0; if (base.debugEnemyAI) { Debug.Log((object)"Finished Boxy Grab"); } } private void CheckArmCollision() { //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_005f: Unknown result type (might be due to invalid IL or missing references) if (!checkingArmCollision || !((NetworkBehaviour)this).IsHost || !((Object)(object)jumpscareCollision != (Object)null)) { return; } for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { if (grabbedPlayer || jumpscaring) { continue; } Bounds bounds = ((Collider)((Component)StartOfRound.Instance.allPlayerScripts[i]).GetComponent<BoxCollider>()).bounds; if (((Bounds)(ref bounds)).Intersects(((Collider)jumpscareCollision).bounds)) { if (base.debugEnemyAI) { Debug.Log((object)"Boxy: Arm Collided with player."); } jumpscaring = true; grabbedPlayer = true; checkingArmCollision = false; ulong actualClientId = StartOfRound.Instance.allPlayerScripts[i].actualClientId; ((EnemyAI)this).SwitchToBehaviourState(5); BoxyBooSendStringClientRcp("Jumpscare:" + actualClientId); } } } public void SetArmGrabChech(bool value) { checkingArmCollision = value; } public void EndJumpscare() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.inSpecialAnimationWithPlayer != (Object)null) { base.inSpecialAnimationWithPlayer.DropBlood(Vector3.forward, true, false); base.inSpecialAnimationWithPlayer.DropBlood(Vector3.left, true, false); base.inSpecialAnimationWithPlayer.DropBlood(Vector3.right, true, false); base.inSpecialAnimationWithPlayer.DropBlood(Vector3.up, true, false); base.inSpecialAnimationWithPlayer.DropBlood(Vector3.back, true, false); base.inSpecialAnimationWithPlayer.DropBlood(Vector3.down, true, false); base.inSpecialAnimationWithPlayer.DamagePlayer(10000, false, true, (CauseOfDeath)0, 7, false, default(Vector3)); base.inSpecialAnimationWithPlayer.inSpecialInteractAnimation = false; base.inSpecialAnimationWithPlayer.snapToServerPosition = false; base.inSpecialAnimationWithPlayer.disableLookInput = false; base.inSpecialAnimationWithPlayer = null; } grabbedPlayer = false; jumpscaring = false; base.creatureAnimator.SetBool("GrabbedTarget", false); base.targetPlayer = null; base.inSpecialAnimation = false; ((EnemyAI)this).SwitchToBehaviourState(1); BoxyBooSendStringClientRcp("SwitchToAdvancedSearch"); if (base.debugEnemyAI) { Debug.Log((object)"Boxy: Ended Jumpscare."); } } private IEnumerator GrabAndJumpscare(ulong playerID) { if (base.debugEnemyAI) { Debug.Log((object)"Boxy: Beginning Jumpscare"); } base.agent.speed = 0f; base.agent.velocity = Vector3.zero; base.inSpecialAnimationWithPlayer = StartOfRound.Instance.allPlayerScripts[playerID]; base.targetPlayer = base.inSpecialAnimationWithPlayer; if ((Object)(object)base.inSpecialAnimationWithPlayer != (Object)null) { base.inSpecialAnimation = true; base.inSpecialAnimationWithPlayer.inSpecialInteractAnimation = true; base.inSpecialAnimationWithPlayer.snapToServerPosition = true; base.inSpecialAnimationWithPlayer.disableLookInput = true; base.inSpecialAnimationWithPlayer.DropAllHeldItems(true, false); } bool inArmGrab = true; float timeElapsed = 0f; while (inArmGrab && timeElapsed < 2f && (Object)(object)base.inSpecialAnimationWithPlayer != (Object)null) { Vector3 diff2 = ((Component)this).transform.position - ((Component)base.targetPlayer).transform.position; diff2.y = 0f; ((Component)base.inSpecialAnimationWithPlayer).transform.position = jumpscareAttachPoint.position + Vector3.down; ((Component)base.inSpecialAnimationWithPlayer).transform.rotation = Quaternion.LookRotation(diff2); base.inSpecialAnimationWithPlayer.ResetFallGravity(); if (base.creatureAnimator.GetAnimatorStateName(0, true) == "Boxy_Jumpscare") { inArmGrab = false; } timeElapsed += Time.deltaTime; yield return null; } bool inJumpscare = true; timeElapsed = 0f; while (inJumpscare && timeElapsed < 1.7f && (Object)(object)base.inSpecialAnimationWithPlayer != (Object)null) { Vector3 diff3 = ((Component)this).transform.position - ((Component)base.targetPlayer).transform.position; diff3.y = 0f; ((Component)base.inSpecialAnimationWithPlayer).transform.position = jumpscareAttachPoint.position + Vector3.down; ((Component)base.inSpecialAnimationWithPlayer).transform.rotation = Quaternion.LookRotation(diff3); base.inSpecialAnimationWithPlayer.ResetFallGravity(); timeElapsed += Time.deltaTime; yield return null; } } [ClientRpc] private void BoxyBooSendStringClientRcp(string informationString) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Invalid comparison between Unknown and I4 //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if ((Object)(object)networkManager == (Object)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(1245740165u, val, (RpcDelivery)0); bool flag = informationString != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(informationString, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1245740165u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost || ((NetworkBehaviour)this).IsServer)) { if (!((NetworkBehaviour)this).IsHost && !((NetworkBehaviour)this).IsServer) { InterpretRpcString(informationString); } else { InterpretRpcString(informationString); } } } private static void __rpc_handler_1245740165(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if ((Object)(object)networkManager != (Object)null && networkManager.IsListening) { bool flag = false; ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string informationString = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref informationString, false); } target.__rpc_exec_stage = (__RpcExecStage)2; ((BoxyBooAI)(object)target).BoxyBooSendStringClientRcp(informationString); target.__rpc_exec_stage = (__RpcExecStage)0; } } [ServerRpc(RequireOwnership = false)] private void BoxyBooSendStringCrankRpc(string informationString) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Invalid comparison between Unknown and I4 //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Invalid comparison between Unknown and I4 //IL_0046: 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_0054: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (!((Object)(object)networkManager != (Object)null) || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1245549521u, val, (RpcDelivery)0); bool flag = informationString != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(informationString, false); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1245549521u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { if (base.debugEnemyAI) { Debug.Log((object)("[Server] Processing on server with information: " + informationString)); } InterpretClientCrank(informationString); } } private void InterpretClientCrank(string informationString) { if (base.debugEnemyAI) { Debug.Log((object)$"InterpretClientCrank tried to interpret the crank received. IsClient? {((NetworkBehaviour)this).IsClient}"); } if (informationString == "ClientCrank" && ((NetworkBehaviour)this).IsHost) { if (base.debugEnemyAI) { Debug.Log((object)$"InterpretClientCrank tried to interpret the crank received. IsClient? {((NetworkBehaviour)this).IsClient}"); } CrankBackwardsHostProcess(); } } private static void __rpc_handler_1245549521(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if ((Object)(object)networkManager != (Object)null && networkManager.IsListening) { bool flag = false; ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string informationString = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref informationString, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((BoxyBooAI)(object)target).BoxyBooSendStringCrankRpc(informationString); target.__rpc_exec_stage = (__RpcExecStage)0; } } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_BoxyBooAI() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(1245740165u, new RpcReceiveHandler(__rpc_handler_1245740165)); NetworkManager.__rpc_func_table.Add(1245549521u, new RpcReceiveHandler(__rpc_handler_1245549521)); } public void PlayRandomWalkSound() { if (walkSounds != null && (Object)(object)base.creatureSFX != (Object)null) { RoundManager.PlayRandomClip(base.creatureSFX, walkSounds, true, 3f, 0, 1000); } } public void PlayRandomSwingSound() { if (attackSounds != null && (Object)(object)hitConnectAudio != (Object)null) { RoundManager.PlayRandomClip(hitConnectAudio, attackSounds, true, 2f, 0, 1000); } } public void PlayRandomHitConnectSound() { if (hitConnectSounds != null && (Object)(object)hitConnectAudio != (Object)null) { RoundManager.PlayRandomClip(hitConnectAudio, hitConnectSounds, true, 2f, 0, 1000); PlayRandomHitConnectslashSound(); } } public void PlayRandomHitConnectslashSound() { if (hitConnectSlashSounds != null && (Object)(object)jumpAudio != (Object)null) { RoundManager.PlayRandomClip(jumpAudio, hitConnectSlashSounds, true, 2f, 0, 1000); } } public void PlayRandomGrabReadySound() { if (grabReadySounds != null && (Object)(object)grabAudioPoint != (Object)null) { RoundManager.PlayRandomClip(grabAudioPoint, grabReadySounds, true, 2f, 0, 1000); } } public void PlayRandomGrabLaunchSound() { if (grabLaunchSounds != null && (Object)(object)grabAudioPoint != (Object)null) { RoundManager.PlayRandomClip(grabAudioPoint, grabLaunchSounds, true, 3f, 0, 1000); } } public void PlayRandomBoxLandSound() { if (boxLandSounds != null && (Object)(object)base.creatureSFX != (Object)null) { RoundManager.PlayRandomClip(base.creatureSFX, boxLandSounds, true, 1f, 0, 1000); } } public void PlayRandomLandingSound() { if (landSounds != null && (Object)(object)base.creatureSFX != (Object)null) { RoundManager.PlayRandomClip(base.creatureSFX, landSounds, true, 1f, 0, 1000); } } public void PlayRandomCrankSound() { if (crankSounds != null && (Object)(object)crankAudio != (Object)null) { RoundManager.PlayRandomClip(crankAudio, crankSounds, true, 1f, 0, 1000); } } public void PlayRandomLeapSound() { if (leapSounds != null && (Object)(object)jumpAudio != (Object)null) { RoundManager.PlayRandomClip(jumpAudio, leapSounds, true, 4f, 0, 1000); } } public void PlayRandomFullPopSound() { if (popSounds != null && (Object)(object)base.creatureSFX != (Object)null) { RoundManager.PlayRandomClip(base.creatureSFX, popSounds, true, 3f, 0, 1000); } } public void PlayRandomCreakSound() { if (creakSounds != null && (Object)(object)creakAudio != (Object)null) { RoundManager.PlayRandomClip(creakAudio, creakSounds, true, 3f, 0, 1000); } } public void PlayRandomJumpscareSound() { if (jumpscareSounds != null && (Object)(object)hitConnectAudio != (Object)null) { RoundManager.PlayRandomClip(hitConnectAudio, jumpscareSounds, true, 3f, 0, 1000); } } public void PlayRandomPartialRetractSound() { if (partialRetractSounds != null && (Object)(object)retractAudio != (Object)null) { RoundManager.PlayRandomClip(retractAudio, partialRetractSounds, true, 2.5f, 0, 1000); } } public void PlayRandomFullRetractSound() { if (fullRetractSounds != null && (Object)(object)retractAudio != (Object)null) { RoundManager.PlayRandomClip(retractAudio, fullRetractSounds, true, 2.5f, 0, 1000); } } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { if (base.currentBehaviourStateIndex != 8 && base.currentBehaviourStateIndex != 4) { ((EnemyAI)this).HitEnemy(force, playerWhoHit, playHitSFX, hitID); trackedDamage += force; if (((NetworkBehaviour)this).IsHost && trackedDamage > maxTrackedDamaged) { shouldEnterRetreat = true; } } } } public class BoxyBooAnimationEvents : MonoBehaviour { public BoxyBooAI scriptReference; public void PlayRandomWalkSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomWalkSound(); } } public void PlayRandomLandingSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomLandingSound(); } } public void PlayRandomBoxLandSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomBoxLandSound(); } } public void CheckAttackArea() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.CheckAttackArea(); } } public void PlayRandomGrabLaunchSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomGrabLaunchSound(); } } public void ResetAfterAttack() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.ResetAfterAttack(); } } public void PlayRandomFullPopSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomFullPopSound(); } } public void PlayRandomGrabReadySound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomGrabReadySound(); } } public void PlayRandomJumpscareSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomJumpscareSound(); } } public void PlayRandomPartialRetractSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomPartialRetractSound(); } } public void PlayRandomFullRetractSound() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.PlayRandomFullRetractSound(); } } public void FinishGrab() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.FinishGrab(); } } public void EndJumpscare() { if ((Object)(object)scriptReference != (Object)null) { scriptReference.EndJumpscare(); } } public void SetArmGrabCheck(int value) { if ((Object)(object)scriptReference != (Object)null) { if (value == 2) { scriptReference.SetArmGrabChech(value: false); } else { scriptReference.SetArmGrabChech(value: true); } } } } public class PlaytimeConfig { internal enum RarityAddTypes { All, Modded, Vanilla, List } private static AssetBundle assetBundle; private static LevelTypes chosenRegistrationMethod = (LevelTypes)(-1); private static RarityAddTypes defaultCreatureRegistrationMethod = RarityAddTypes.All; private static int missDelightRarity; private static int huggyWuggyRarity; private static int dogdayMonsterRarity; private static int boxyBooMonsterRarity; public static void ConfigureAndRegisterAssets(LethalPlaytime Instance, ManualLogSource Logger) { LoadAssets(); CreateConfigEntries(Instance, Logger); ConfigureAndRegisterMissDelight(); ConfigureAndRegisterHuggyWuggy(); ConfigureAndRegisterDogday(); ConfigureAndRegisterBoxyBoo(); } internal static void CreateConfigEntries(LethalPlaytime Instance, ManualLogSource Logger) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_006a: Unknown result type (might be due to invalid IL or missing references) ConfigEntry<RarityAddTypes> val = ((BaseUnityPlugin)Instance).Config.Bind<RarityAddTypes>("Creatures", "Registration Method", RarityAddTypes.All, "The method to add creatures to the level. \n Default = All \n Vanilla \n Modded \n List (Not yet implemented for creatures, defaults to All)"); EnumDropDownConfigItem<RarityAddTypes> val2 = new EnumDropDownConfigItem<RarityAddTypes>(val); switch (val.Value) { case RarityAddTypes.All: chosenRegistrationMethod = (LevelTypes)(-1); break; case RarityAddTypes.Vanilla: chosenRegistrationMethod = (LevelTypes)15356; break; case RarityAddTypes.Modded: chosenRegistrationMethod = (LevelTypes)1024; break; case RarityAddTypes.List: chosenRegistrationMethod = (LevelTypes)(-1); break; } ConfigEntry<int> val3 = Instance.CreateIntSliderConfig("Miss Delight", 65, "Adjust how often you see the enemy Miss Delight.", 0, 400, "Creatures"); missDelightRarity = val3.Value; ConfigEntry<int> val4 = Instance.CreateIntSliderConfig("Huggy Wuggy", 55, "Adjust how often you see Huggy Wuggy.", 0, 400, "Creatures"); huggyWuggyRarity = val4.Value; ConfigEntry<int> val5 = Instance.CreateIntSliderConfig("Monster Dogday", 55, "Adjust how often you see Dogday.", 0, 400, "Creatures"); dogdayMonsterRarity = val5.Value; ConfigEntry<int> val6 = Instance.CreateIntSliderConfig("Boxy Boo", 55, "Adjust how often you see Boxy Boo.", 0, 400, "Creatures"); boxyBooMonsterRarity = val6.Value; Logger.LogInfo((object)("Miss Delight rarity set to: " + missDelightRarity)); Logger.LogInfo((object)("Huggy Wuggy rarity set to: " + huggyWuggyRarity)); Logger.LogInfo((object)("Dogday rarity set to: " + dogdayMonsterRarity)); Logger.LogInfo((object)("Boxy Boo rarity set to: " + boxyBooMonsterRarity)); } private static void ConfigureAndRegisterMissDelight() { //IL_03b2: Unknown result type (might be due to invalid IL or missing references) EnemyType val = assetBundle.LoadAsset<EnemyType>("Miss Delight"); MissDelightAI missDelightAI = val.enemyPrefab.AddComponent<MissDelightAI>(); ((EnemyAI)missDelightAI).creatureVoice = val.enemyPrefab.GetComponent<AudioSource>(); ((EnemyAI)missDelightAI).creatureSFX = val.enemyPrefab.GetComponent<AudioSource>(); missDelightAI.weaponAudioPoint = ((Component)FindDeepChild(val.enemyPrefab.transform, "DelightWeaponAudio")).GetComponent<AudioSource>(); ((EnemyAI)missDelightAI).agent = val.enemyPrefab.GetComponent<NavMeshAgent>(); ((EnemyAI)missDelightAI).creatureAnimator = val.enemyPrefab.GetComponent<Animator>(); ((EnemyAI)missDelightAI).syncMovementSpeed = 0.1f; ((EnemyAI)missDelightAI).exitVentAnimationTime = 1f; ((EnemyAI)missDelightAI).eye = val.enemyPrefab.transform.Find("Eye"); ((EnemyAI)missDelightAI).enemyType = val; ((EnemyAI)missDelightAI).updatePositionThreshold = 0.1f; ((EnemyAI)missDelightAI).enemyBehaviourStates = (EnemyBehaviourState[])(object)new EnemyBehaviourState[4]; ((EnemyAI)missDelightAI).AIIntervalTime = 0.08f; missDelightAI.weaponCollider = ((Component)FindDeepChild(val.enemyPrefab.transform, "JNT_R_Hand_IK")).GetComponent<SphereCollider>(); ((Component)val.enemyPrefab.transform.Find("Teacher")).GetComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)missDelightAI; missDelightAI.footstepClips = (AudioClip[])(object)new AudioClip[7]; missDelightAI.footstepClips[0] = assetBundle.LoadAsset<AudioClip>("DelightFootstep1"); missDelightAI.footstepClips[1] = assetBundle.LoadAsset<AudioClip>("DelightFootstep2"); missDelightAI.footstepClips[2] = assetBundle.LoadAsset<AudioClip>("DelightFootstep3"); missDelightAI.footstepClips[3] = assetBundle.LoadAsset<AudioClip>("DelightFootstep4"); missDelightAI.footstepClips[4] = assetBundle.LoadAsset<AudioClip>("DelightFootstep5"); missDelightAI.footstepClips[5] = assetBundle.LoadAsset<AudioClip>("DelightFootstep6"); missDelightAI.footstepClips[6] = assetBundle.LoadAsset<AudioClip>("DelightFootstep7"); missDelightAI.weaponSwingClip = (AudioClip[])(object)new AudioClip[1]; missDelightAI.weaponSwingClip[0] = assetBundle.LoadAsset<AudioClip>("DelightWeaponSwing1"); missDelightAI.weaponSwingVoiceClips = (AudioClip[])(object)new AudioClip[4]; missDelightAI.weaponSwingVoiceClips[0] = assetBundle.LoadAsset<AudioClip>("DelightSwingVoice1"); missDelightAI.weaponSwingVoiceClips[1] = assetBundle.LoadAsset<AudioClip>("DelightSwingVoice2"); missDelightAI.weaponSwingVoiceClips[2] = assetBundle.LoadAsset<AudioClip>("DelightSwingVoice3"); missDelightAI.weaponSwingVoiceClips[3] = assetBundle.LoadAsset<AudioClip>("DelightSwingVoice4"); missDelightAI.weaponImpactClips = (AudioClip[])(object)new AudioClip[2]; missDelightAI.weaponImpactClips[0] = assetBundle.LoadAsset<AudioClip>("DelightWeaponImpact1"); missDelightAI.weaponImpactClips[1] = assetBundle.LoadAsset<AudioClip>("DelightWeaponImpact2"); missDelightAI.laughClips = (AudioClip[])(object)new AudioClip[4]; missDelightAI.laughClips[0] = assetBundle.LoadAsset<AudioClip>("DelightLaugh1"); missDelightAI.laughClips[1] = assetBundle.LoadAsset<AudioClip>("DelightLaugh2"); missDelightAI.laughClips[2] = assetBundle.LoadAsset<AudioClip>("DelightLaugh3"); missDelightAI.laughClips[3] = assetBundle.LoadAsset<AudioClip>("DelightLaugh4"); missDelightAI.doorSmashClips = (AudioClip[])(object)new AudioClip[1]; missDelightAI.doorSmashClips[0] = assetBundle.LoadAsset<AudioClip>("DelightDoorKick 1"); missDelightAI.growlClips = (AudioClip[])(object)new AudioClip[4]; missDelightAI.growlClips[0] = assetBundle.LoadAsset<AudioClip>("DelightBreathe1"); missDelightAI.growlClips[1] = assetBundle.LoadAsset<AudioClip>("DelightBreathe2"); missDelightAI.growlClips[2] = assetBundle.LoadAsset<AudioClip>("DelightBreathe3"); missDelightAI.growlClips[3] = assetBundle.LoadAsset<AudioClip>("DelightBreathe4"); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); TerminalNode val2 = assetBundle.LoadAsset<TerminalNode>("Miss Delight Terminal Node"); TerminalKeyword val3 = assetBundle.LoadAsset<TerminalKeyword>("Miss Delight Terminal Keyword"); Enemies.RegisterEnemy(val, missDelightRarity, chosenRegistrationMethod, val2, val3); } private static void ConfigureAndRegisterHuggyWuggy() { //IL_03d0: Unknown result type (might be due to invalid IL or missing references) EnemyType val = assetBundle.LoadAsset<EnemyType>("Huggy Wuggy"); HuggyAI huggyAI = val.enemyPrefab.AddComponent<HuggyAI>(); ((EnemyAI)huggyAI).creatureVoice = val.enemyPrefab.GetComponent<AudioSource>(); ((EnemyAI)huggyAI).creatureSFX = val.enemyPrefab.GetComponent<AudioSource>(); huggyAI.voiceAudio = ((Component)val.enemyPrefab.transform.Find("VoiceAudio")).GetComponent<AudioSource>(); huggyAI.voiceFarAudio = ((Component)val.enemyPrefab.transform.Find("VoiceFarAudio")).GetComponent<AudioSource>(); huggyAI.slashAudio = ((Component)val.enemyPrefab.transform.Find("SlashAudio")).GetComponent<AudioSource>(); ((EnemyAI)huggyAI).enemyBehaviourStates = (EnemyBehaviourState[])(object)new EnemyBehaviourState[6]; ((EnemyAI)huggyAI).AIIntervalTime = 0.08f; ((EnemyAI)huggyAI).syncMovementSpeed = 0.1f; ((EnemyAI)huggyAI).updatePositionThreshold = 0.12f; ((EnemyAI)huggyAI).exitVentAnimationTime = 1f; ((EnemyAI)huggyAI).enemyType = val; ((EnemyAI)huggyAI).eye = val.enemyPrefab.transform.Find("Eye"); ((EnemyAI)huggyAI).agent = val.enemyPrefab.GetComponent<NavMeshAgent>(); ((EnemyAI)huggyAI).creatureAnimator = val.enemyPrefab.GetComponent<Animator>(); huggyAI.jumpScarePoint = FindDeepChild(val.enemyPrefab.transform, "JumpScarePoint"); ((EnemyAI)huggyAI).agent.baseOffset = 0f; ((Component)val.enemyPrefab.transform.Find("HuggyWuggyModelContainer")).GetComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)huggyAI; huggyAI.weaponSwingCheckArea = ((Component)val.enemyPrefab.transform.Find("AttackCollisionArea")).GetComponent<BoxCollider>(); huggyAI.sitCollisionArea = ((Component)val.enemyPrefab.transform.Find("SitCollision")).GetComponent<BoxCollider>(); huggyAI.footstepClips = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("HuggyStomp1"), assetBundle.LoadAsset<AudioClip>("HuggyStomp2"), assetBundle.LoadAsset<AudioClip>("HuggyStomp3") }; huggyAI.attackSwingClips = (AudioClip[])(object)new AudioClip[4] { assetBundle.LoadAsset<AudioClip>("HuggyAttack1"), assetBundle.LoadAsset<AudioClip>("HuggyAttack2"), assetBundle.LoadAsset<AudioClip>("HuggyAttack3"), assetBundle.LoadAsset<AudioClip>("HuggyAttack4") }; huggyAI.attackVoiceClips = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("HuggyAttackVoice1"), assetBundle.LoadAsset<AudioClip>("HuggyAttackVoice2"), assetBundle.LoadAsset<AudioClip>("HuggyAttackVoice3") }; huggyAI.crouchClips = (AudioClip[])(object)new AudioClip[1] { assetBundle.LoadAsset<AudioClip>("HuggyCrouch1") }; huggyAI.sitDownClips = (AudioClip[])(object)new AudioClip[1] { assetBundle.LoadAsset<AudioClip>("HuggySitDown") }; huggyAI.sitUpClips = (AudioClip[])(object)new AudioClip[1] { assetBundle.LoadAsset<AudioClip>("HuggySitUp") }; huggyAI.roarClips = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("HuggyRoar1"), assetBundle.LoadAsset<AudioClip>("HuggyRoar2"), assetBundle.LoadAsset<AudioClip>("HuggyRoar3") }; huggyAI.roarFarClips = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("HuggyRoar1Far"), assetBundle.LoadAsset<AudioClip>("HuggyRoar2Far"), assetBundle.LoadAsset<AudioClip>("HuggyRoar3Far") }; huggyAI.slashClips = (AudioClip[])(object)new AudioClip[1] { assetBundle.LoadAsset<AudioClip>("HuggySlash") }; huggyAI.jumpscareClips = (AudioClip[])(object)new AudioClip[1]; huggyAI.jumpscareClips[0] = assetBundle.LoadAsset<AudioClip>("Huggie_Jumpscare"); TerminalNode val2 = assetBundle.LoadAsset<TerminalNode>("Huggy Wuggy Terminal Node"); TerminalKeyword val3 = assetBundle.LoadAsset<TerminalKeyword>("Huggy Wuggy Terminal Keyword"); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); Enemies.RegisterEnemy(val, huggyWuggyRarity, chosenRegistrationMethod, val2, val3); } private static void ConfigureAndRegisterDogday() { //IL_037b: Unknown result type (might be due to invalid IL or missing references) EnemyType val = assetBundle.LoadAsset<EnemyType>("Dogday Monster"); DogdayAI dogdayAI = val.enemyPrefab.AddComponent<DogdayAI>(); ((EnemyAI)dogdayAI).creatureVoice = val.enemyPrefab.GetComponent<AudioSource>(); ((EnemyAI)dogdayAI).creatureSFX = val.enemyPrefab.GetComponent<AudioSource>(); ((EnemyAI)dogdayAI).enemyBehaviourStates = (EnemyBehaviourState[])(object)new EnemyBehaviourState[4]; ((EnemyAI)dogdayAI).AIIntervalTime = 0.1f; ((EnemyAI)dogdayAI).syncMovementSpeed = 0.1f; ((EnemyAI)dogdayAI).updatePositionThreshold = 0.12f; ((EnemyAI)dogdayAI).exitVentAnimationTime = 1f; ((EnemyAI)dogdayAI).enemyType = val; ((EnemyAI)dogdayAI).eye = val.enemyPrefab.transform.Find("Eye"); ((EnemyAI)dogdayAI).agent = val.enemyPrefab.GetComponent<NavMeshAgent>(); ((EnemyAI)dogdayAI).creatureAnimator = ((Component)val.enemyPrefab.transform.Find("DogdayModelContainer")).GetComponent<Animator>(); ((EnemyAI)dogdayAI).enemyHP = 6; ((Component)val.enemyPrefab.transform.Find("DogdayCollision")).GetComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)dogdayAI; DogdayAnimationEvents dogdayAnimationEvents = ((Component)val.enemyPrefab.transform.Find("DogdayModelContainer")).gameObject.AddComponent<DogdayAnimationEvents>(); dogdayAnimationEvents.scriptReference = dogdayAI; dogdayAI.attackArea = ((Component)val.enemyPrefab.transform.Find("AttackArea")).GetComponent<BoxCollider>(); dogdayAI.walkAudio = ((Component)val.enemyPrefab.transform.Find("FootStepAudio")).GetComponent<AudioSource>(); dogdayAI.staticSoundSource = ((Component)val.enemyPrefab.transform.Find("StaticAudio")).GetComponent<AudioSource>(); dogdayAI.hitConnectAudio = ((Component)val.enemyPrefab.transform.Find("HitAudio")).GetComponent<AudioSource>(); dogdayAI.dogdayModel = val.enemyPrefab.transform.Find("DogdayModelContainer"); dogdayAI.walkSounds = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("HuggyStomp1"), assetBundle.LoadAsset<AudioClip>("HuggyStomp2"), assetBundle.LoadAsset<AudioClip>("HuggyStomp3") }; dogdayAI.gurrgleSounds = (AudioClip[])(object)new AudioClip[5] { assetBundle.LoadAsset<AudioClip>("DogdayMonsterGurgle1"), assetBundle.LoadAsset<AudioClip>("DogdayMonsterGurgle2"), assetBundle.LoadAsset<AudioClip>("DogdayMonsterGurgle3"), assetBundle.LoadAsset<AudioClip>("DogdayMonsterGurgle4"), assetBundle.LoadAsset<AudioClip>("DogdayMonsterGurgle5") }; ((EnemyAI)dogdayAI).dieSFX = assetBundle.LoadAsset<AudioClip>("DogdayDie1"); dogdayAI.hitSounds = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("DogdayHit1"), assetBundle.LoadAsset<AudioClip>("DogdayHit2"), assetBundle.LoadAsset<AudioClip>("DogdayHit3") }; dogdayAI.attackSounds = (AudioClip[])(object)new AudioClip[3] { assetBundle.LoadAsset<AudioClip>("DogdayAttack1"), assetBundle.LoadAsset<AudioClip>("DogdayAttack2"), assetBundle.LoadAsset<AudioClip>("DogdayAttack3") }; dogdayAI.hitConnectSounds = (AudioClip[])(object)new AudioClip[4] { assetBundle.LoadAsset<AudioClip>("DogdayHitConnect1"), assetBundle.LoadAsset<AudioClip>("DogdayHitConnect2"), assetBundle.LoadAsset<AudioClip>("DogdayHitConnect3"), assetBundle.LoadAsset<AudioClip>("DogdayHitConnect4") }; TerminalNode val2 = assetBundle.LoadAsset<TerminalNode>("Dogday Monster Terminal Node"); TerminalKeyword val3 = assetBundle.LoadAsset<TerminalKeyword>("Dogday Monster Terminal Keyword"); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); Enemies.RegisterEnemy(val, dogdayMonsterRarity, chosenRegistrationMethod, val2, val3); } private static void ConfigureAndRegisterBoxyBoo() { //IL_0784: Unknown result type (might be due to invalid IL or missing references) EnemyType val = assetBundle.LoadAsset<EnemyType>("Boxy Boo"); BoxyBooAI boxyBooAI = val.enemyPrefab.AddComponent<BoxyBooAI>(); ((EnemyAI)boxyBooAI).creatureVoice = val.enemyPrefab.GetComponent<AudioSource>(); ((EnemyAI)boxyBooAI).creatureSFX = val.enemyPrefab.GetComponent<AudioSource>(); ((EnemyAI)boxyBooAI).enemyBehaviourStates = (EnemyBehaviourState[])(object)new EnemyBehaviourState[9]; ((EnemyAI)boxyBooAI).AIIntervalTime = 0.1f; ((EnemyAI)boxyBooAI).syncMovementSpeed = 0.2f; ((EnemyAI)boxyBooAI).updatePositionThreshold = 0.2f; ((EnemyAI)boxyBooAI).exitVentAnimationTime = 1f; ((EnemyAI)boxyBooAI).enemyType = val; ((EnemyAI)boxyBooAI).eye = val.enemyPrefab.transform.Find("Eye"); ((EnemyAI)boxyBooAI).agent = val.enemyPrefab.GetComponent<NavMeshAgent>(); ((EnemyAI)boxyBooAI).creatureAnimator = ((Component)val.enemyPrefab.transform.Find("BoxyBoo Model")).GetComponent<Animator>(); BoxyBooAnimationEvents boxyBooAnimationEvents = ((Component)((EnemyAI)boxyBooAI).creatureAnimator).gameObject.AddComponent<BoxyBooAnimationEvents>(); boxyBooAnimationEvents.scriptReference = boxyBooAI; boxyBooAI.crank = FindDeepChild(val.enemyPrefab.transform, "box_handle_JNT"); boxyBooAI.leftsideCheck = ((Component)FindDeepChild(val.enemyPrefab.transform, "BoxcheckLeft")).transform; boxyBooAI.rightsideCheck = ((Component)FindDeepChild(val.enemyPrefab.transform, "BoxcheckRight")).transform; ((EnemyAI)boxyBooAI).agent.baseOffset = -0.3f; ((Component)val.enemyPrefab.transform.Find("BoxyCollision")).GetComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)boxyBooAI; boxyBooAI.interactTrigger = ((Component)boxyBooAI.crank.Find("Handle_Trigger")).GetComponent<InteractTrigger>(); boxyBooAI.interactTrigger.playersManager = StartOfRound.Instance; ((UnityEvent<PlayerControllerB>)(object)boxyBooAI.interactTrigger.onInteract).AddListener((UnityAction<PlayerControllerB>)boxyBooAI.CrankBackwards); boxyBooAI.attackArea = ((Component)FindDeepChild(val.enemyPrefab.transform, "AttackArea")).GetComponent<BoxCollider>(); boxyBooAI.boxCollision = ((Component)FindDeepChild(val.enemyPrefab.transform, "cog_JNT")).GetComponent<BoxCollider>(); boxyBooAI.jumpscareAttachPoint = FindDeepChild(val.enemyPrefab.transform, "JumpscarePoint"); boxyBooAI.jumpscareCollision = ((Component)boxyBooAI.jumpscareAttachPoint).GetComponent<BoxCollider>(); boxyBooAI.musicAudio = ((Component)FindDeepChild(val.enemyPrefab.transform, "MusicAudio")).GetComponent<AudioSource>(); boxyBooAI.grabAudioPoint = ((Component)FindDeepChild(val.enemyPrefab.transform, "GrabAudio")).GetComponent<AudioSource>(); boxyBooAI.hitConnectAudio = ((Component)FindDeepChild(val.enemyPrefab.transform, "HitConnectAudio")).GetComponent<AudioSource>(); boxyBooAI.crankAudio = ((Component)FindDeepChild(val.enemyPrefab.transform, "CrankAudio")).GetComponent<AudioSource>(); boxyBooAI.creakAudio = ((Component)FindDeepChild(val.enemyPrefab.transform, "CreakAudio")).GetComponent<AudioSource>(); boxyBooAI.jumpAudio = ((Component)FindDeepChild(val.enemyPrefab.transform, "JumpAudio")).GetComponent<AudioSource>(); boxyBooAI.retractAudio = ((Component)FindDeepChild(val.enemyPrefab.transform, "RetractAudio")).GetComponent<AudioSource>(); boxyBooAI.walkSounds = (AudioClip[])(object)new AudioClip[3]; boxyBooAI.walkSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyStepHard1"); boxyBooAI.walkSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxyStepHard2"); boxyBooAI.walkSounds[2] = assetBundle.LoadAsset<AudioClip>("BoxyStepHard3"); boxyBooAI.attackSounds = (AudioClip[])(object)new AudioClip[2]; boxyBooAI.attackSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxySwing1"); boxyBooAI.attackSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxySwing2"); boxyBooAI.hitConnectSounds = (AudioClip[])(object)new AudioClip[2]; boxyBooAI.hitConnectSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyHitConnect1"); boxyBooAI.hitConnectSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxyHitConnect2"); boxyBooAI.grabLaunchSounds = (AudioClip[])(object)new AudioClip[4]; boxyBooAI.grabLaunchSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyGrabLaunch1"); boxyBooAI.grabLaunchSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxyGrabLaunch2"); boxyBooAI.grabLaunchSounds[2] = assetBundle.LoadAsset<AudioClip>("BoxyGrabLaunch3"); boxyBooAI.grabLaunchSounds[3] = assetBundle.LoadAsset<AudioClip>("BoxyGrabLaunch4"); boxyBooAI.grabReadySounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.grabReadySounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyGrabReady"); boxyBooAI.crankSounds = (AudioClip[])(object)new AudioClip[6]; boxyBooAI.crankSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyCrank1"); boxyBooAI.crankSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxyCrank2"); boxyBooAI.crankSounds[2] = assetBundle.LoadAsset<AudioClip>("BoxyCrank3"); boxyBooAI.crankSounds[3] = assetBundle.LoadAsset<AudioClip>("BoxyCrank4"); boxyBooAI.crankSounds[4] = assetBundle.LoadAsset<AudioClip>("BoxyCrank5"); boxyBooAI.crankSounds[5] = assetBundle.LoadAsset<AudioClip>("BoxyCrank6"); boxyBooAI.boxLandSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.boxLandSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyCrateLand"); boxyBooAI.leapSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.leapSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyLeap"); boxyBooAI.landSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.landSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyMetal1"); boxyBooAI.musicTrackSounds = (AudioClip[])(object)new AudioClip[2]; boxyBooAI.musicTrackSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxySongSlow"); boxyBooAI.musicTrackSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxySongFast"); boxyBooAI.creakSounds = (AudioClip[])(object)new AudioClip[9]; boxyBooAI.creakSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyCreak1"); boxyBooAI.creakSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxyCreak2"); boxyBooAI.creakSounds[2] = assetBundle.LoadAsset<AudioClip>("BoxyCreak3"); boxyBooAI.creakSounds[3] = assetBundle.LoadAsset<AudioClip>("BoxyCreak4"); boxyBooAI.creakSounds[4] = assetBundle.LoadAsset<AudioClip>("BoxyCreak5"); boxyBooAI.creakSounds[5] = assetBundle.LoadAsset<AudioClip>("BoxyCreak6"); boxyBooAI.creakSounds[6] = assetBundle.LoadAsset<AudioClip>("BoxyCreak7"); boxyBooAI.creakSounds[7] = assetBundle.LoadAsset<AudioClip>("BoxyCreak8"); boxyBooAI.creakSounds[8] = assetBundle.LoadAsset<AudioClip>("BoxyCreak9"); boxyBooAI.popSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.popSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyFullPop1"); boxyBooAI.jumpscareSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.jumpscareSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyJumpscare"); boxyBooAI.partialRetractSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.partialRetractSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyRetractPartial"); boxyBooAI.fullRetractSounds = (AudioClip[])(object)new AudioClip[1]; boxyBooAI.fullRetractSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyRetractFull"); boxyBooAI.hitConnectSlashSounds = (AudioClip[])(object)new AudioClip[3]; boxyBooAI.hitConnectSlashSounds[0] = assetBundle.LoadAsset<AudioClip>("BoxyHitConnectSlash1"); boxyBooAI.hitConnectSlashSounds[1] = assetBundle.LoadAsset<AudioClip>("BoxyHitConnectSlash2"); boxyBooAI.hitConnectSlashSounds[2] = assetBundle.LoadAsset<AudioClip>("BoxyHitConnectSlash3"); TerminalNode val2 = assetBundle.LoadAsset<TerminalNode>("Boxy Terminal Node"); TerminalKeyword val3 = assetBundle.LoadAsset<TerminalKeyword>("Boxy Terminal Keyword"); Utilities.FixMixerGroups(val.enemyPrefab); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); Enemies.RegisterEnemy(val, boxyBooMonsterRarity, chosenRegistrationMethod, val2, val3); } private static void LoadAssets() { string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "lethalplaytime"); assetBundle = AssetBundle.LoadFromFile(text); } public static Transform FindDeepChild(Transform parent, string childName) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown foreach (Transform item in parent) { Transform val = item; if (((Object)val).name == childName) { return val; } Transform val2 = FindDeepChild(val, childName); if ((Object)(object)val2 != (Object)null) { return val2; } } return null; } } internal static class CreatureUtil { public static void AdjustCreatureRotationWithSlope(EnemyAI monster) { DogdayAI dogdayAI = monster as DogdayAI; if (dogdayAI != null) { return; } HuggyAI huggyAI = monster as HuggyAI; if (huggyAI == null) { MissDelightAI missDelightAI = monster as MissDelightAI; if (missDelightAI != null) { } } } private static void MakeForwardAngleAdjustment(EnemyAI monster, float targetForwardAngle) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //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_005f: 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_0070: Unknown result type (might be due to invalid IL or missing references) Quaternion rotation = ((Component)monster).transform.rotation; float num = Mathf.DeltaAngle(((Quaternion)(ref rotation)).eulerAngles.x, targetForwardAngle); if (!(num < 1f)) { rotation = ((Component)monster).transform.rotation; Quaternion val = Quaternion.Euler(targetForwardAngle, ((Quaternion)(ref rotation)).eulerAngles.y, 0f); ((Component)monster).transform.rotation = Quaternion.Slerp(((Component)monster).transform.rotation, val, Time.deltaTime * 2f); } } public static void CalculateForwardTargetRotation(EnemyAI monster) { //IL_0007: 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_002d: 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) //IL_003c: 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_0055: 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) RaycastHit val = default(RaycastHit); if (Physics.Raycast(new Vector3(((Component)monster).transform.position.x, ((Component)monster).transform.position.y + 0.5f, ((Component)monster).transform.position.z), Vector3.down, ref val)) { Vector3 normal = ((RaycastHit)(ref val)).normal; float num = Vector3.Angle(Vector3.up, normal); float num2 = Mathf.Clamp(num, -15f, 15f); DogdayAI dogdayAI = monster as DogdayAI; if (dogdayAI != null) { } } } } public class DogdayAI : EnemyAI { public enum dogdayStates { Searching, Chasing, Enrage, HuntingSound } public Transform dogdayModel; private readonly float debugSpeedCheck = 6f; private float debugSpeed = 6f; private readonly float animationSpeedNormal = 1f; private readonly float animationSpeedChase = 1.7f; private readonly float agentSpeedNormal = 2.5f; private readonly float agentSpeedChase = 5.5f; private Random rng; public AISearchRoutine dogdaySearch; public PlayerControllerB playerLooking = null; public bool attacking = false; public bool dying = false; public bool changeInAnimationStateNeeded = false; private readonly float hearNoiseCooldown = 0.1f;