Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Locker v1.6.3
Locker.dll
Decompiled 3 weeks agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Locker.MonoBehaviours; using Locker.NetcodePatcher; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.VFX; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Locker")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Locker")] [assembly: AssemblyCopyright("Copyright © zealsprince 2024-2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("335007C9-7068-4DF7-85B3-B406E9795203")] [assembly: AssemblyFileVersion("1.6.1")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.6.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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 Locker { internal class Assets { public enum LoadStatusCode : ushort { Success, Failed, Exists } public static AssetBundle Bundle; public static Dictionary<string, GameObject> Prefabs = new Dictionary<string, GameObject>(); public static readonly Dictionary<string, string> Manifest = new Dictionary<string, string> { { "locker", "assets/exported/locker/enemies/locker.prefab" }, { "lockerenemy", "assets/exported/locker/enemies/lockerenemy.asset" } }; public static LoadStatusCode Load() { if ((Object)(object)Bundle != (Object)null) { return LoadStatusCode.Exists; } string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Locker"); Bundle = AssetBundle.LoadFromFile(text); if ((Object)(object)Bundle == (Object)null) { Plugin.logger.LogInfo((object)("Failed to load asset bundle from path: " + text)); return LoadStatusCode.Failed; } Plugin.logger.LogInfo((object)("Loaded asset bundle from path: " + text)); string[] allAssetNames = Bundle.GetAllAssetNames(); foreach (string text2 in allAssetNames) { Plugin.logger.LogDebug((object)("Found asset: " + text2)); } foreach (KeyValuePair<string, string> item in Manifest) { Prefabs.Add(item.Key, Bundle.LoadAsset<GameObject>(item.Value)); } return LoadStatusCode.Success; } public static GameObject SpawnPrefab(string name, Vector3 position) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) try { if (Prefabs.ContainsKey(name)) { Plugin.logger.LogDebug((object)("Loading prefab '" + name + "'")); return Object.Instantiate<GameObject>(Prefabs[name], position, Quaternion.identity); } Plugin.logger.LogWarning((object)("Prefab " + name + " not found!")); } catch (Exception ex) when (ex is ArgumentException || ex is NullReferenceException) { Plugin.logger.LogError((object)ex.Message); } return null; } public static GameObject Get(string name) { if (Prefabs.ContainsKey(name)) { return Prefabs[name]; } return null; } } public class Config { public static ConfigEntry<float> LockerMechanicsReactivationChance; public static ConfigEntry<bool> LockerMechanicsBodiesEnabled; public static ConfigEntry<bool> LockerMechanicsProximitySenseEnabled; public static ConfigEntry<float> LockerMechanicsProximitySenseDistance; public static ConfigEntry<int> LockerSpawnWeight; public static ConfigEntry<float> LockerSpawnPower; public static ConfigEntry<int> LockerSpawnMax; public static ConfigEntry<string> LockerSpawnLevelsSet; public static ConfigEntry<string> LockerSpawnLevelsWithWeight; public static ConfigEntry<float> LockerVolumeAdjustment; public static void Load() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Expected O, but got Unknown //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown LockerMechanicsReactivationChance = Plugin.config.Bind<float>("Mechanics", "LockerMechanicsReactivationChance", 50f, new ConfigDescription("Chance for the Locker to reactivate after a chase and begin another lunge at the closest player (rolls a value 0-100 and if below the given value will reactivate)", (AcceptableValueBase)null, Array.Empty<object>())); LockerMechanicsBodiesEnabled = Plugin.config.Bind<bool>("Mechanics", "LockerMechanicsBodiesEnabled", false, new ConfigDescription("Should bodies fall to the ground after being killed instead of being destroyed?", (AcceptableValueBase)null, Array.Empty<object>())); LockerMechanicsProximitySenseEnabled = Plugin.config.Bind<bool>("Mechanics", "LockerMechanicsProximitySenseEnabled", false, new ConfigDescription("Should the Locker automatically lunge at players in line of sight and within reach?", (AcceptableValueBase)null, Array.Empty<object>())); LockerMechanicsProximitySenseDistance = Plugin.config.Bind<float>("Mechanics", "LockerMechanicsProximitySenseDistance", 8f, new ConfigDescription("Distance at which the Locker activates if proximity sense is enabled", (AcceptableValueBase)null, Array.Empty<object>())); LockerSpawnWeight = Plugin.config.Bind<int>("Spawn", "LockerSpawnWeight", 50, new ConfigDescription("What is the chance of the Locker spawning - higher values make it more common (this is like adding tickets to a lottery - it doesn't guarantee getting picked but it vastly increases the chances)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 99999), Array.Empty<object>())); LockerSpawnPower = Plugin.config.Bind<float>("Spawn", "LockerSpawnPower", 1f, new ConfigDescription("What's the spawn power of a Locker? How much does it subtract from the moon power pool on spawn?", (AcceptableValueBase)null, Array.Empty<object>())); LockerSpawnMax = Plugin.config.Bind<int>("Spawn", "LockerSpawnMax", 3, new ConfigDescription("What's the maximum amount of Lockers that can spawn on a given moon?", (AcceptableValueBase)null, Array.Empty<object>())); LockerSpawnLevelsSet = Plugin.config.Bind<string>("Spawn", "LockerSpawnLevelsSet", "all", new ConfigDescription("Which set of levels should by default let the Locker spawn on them? (Options are: all/none/modded/vanilla)", (AcceptableValueBase)null, Array.Empty<object>())); LockerSpawnLevelsWithWeight = Plugin.config.Bind<string>("Spawn", "LockerSpawnLevels", "experimentation:25, assurance:75, vow:0, march:0, offense:100", new ConfigDescription("Which specific moons/levels can the Locker spawn on and with what weight? (This takes priority over the level set config option - names are matched leniently and case insensitive)", (AcceptableValueBase)null, Array.Empty<object>())); LockerVolumeAdjustment = Plugin.config.Bind<float>("Volume", "LockerVolumeAdjustment", 1f, new ConfigDescription("Client side volume adjustment - values are a percentage i.e. 50% volume is 0.5", (AcceptableValueBase)null, Array.Empty<object>())); } } [BepInPlugin("com.zealsprince.locker", "Locker", "1.6.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string ModGUID = "com.zealsprince.locker"; public const string ModName = "Locker"; public const string ModVersion = "1.6.3"; public static ManualLogSource logger; public static ConfigFile config; private readonly Harmony harmony = new Harmony("com.zealsprince.locker"); public void Awake() { //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) logger = ((BaseUnityPlugin)this).Logger; config = ((BaseUnityPlugin)this).Config; Config.Load(); if (Assets.Load() != 0) { return; } EnemyType val = Assets.Bundle.LoadAsset<EnemyType>("assets/exported/locker/enemies/lockerenemy.asset"); TerminalNode val2 = Assets.Bundle.LoadAsset<TerminalNode>("assets/exported/locker/enemies/lockerterminalnode.asset"); TerminalKeyword val3 = Assets.Bundle.LoadAsset<TerminalKeyword>("assets/exported/locker/enemies/lockerterminalkeyword.asset"); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); val.PowerLevel = Config.LockerSpawnPower.Value; val.MaxCount = Config.LockerSpawnMax.Value; string[] source = new string[4] { "all", "modded", "vanilla", "none" }; string text = source.FirstOrDefault((string s) => new string((from c in Config.LockerSpawnLevelsSet.Value.ToLower().ToCharArray() where !char.IsWhiteSpace(c) select c).ToArray()).Contains(s)); LevelTypes val4 = (LevelTypes)1; switch (text) { case "all": val4 = (LevelTypes)(-1); break; case "modded": val4 = (LevelTypes)1024; break; case "vanilla": val4 = (LevelTypes)15356; break; } Dictionary<string, int> dictionary = new Dictionary<string, int>(); string text2 = new string((from c in Config.LockerSpawnLevelsWithWeight.Value.ToLower().ToCharArray() where !char.IsWhiteSpace(c) select c).ToArray()); string[] array = text2.Split(new char[1] { ',' }); foreach (string text3 in array) { string[] array2 = text3.Split(new char[1] { ':' }); if (array2.Length == 1) { dictionary.Add(array2[0], Config.LockerSpawnWeight.Value); } else { if (array2.Length != 2) { continue; } int num = 0; try { num = int.Parse(array2[1]); } catch (Exception ex) { if (ex is ArgumentException || ex is FormatException || ex is OverflowException) { logger.LogError((object)$"Failed to parse level/moon weight value: {ex}"); } continue; } dictionary.Add(array2[0], num); } } Enemies.RegisterEnemy(val, Config.LockerSpawnWeight.Value, (LevelTypes)1, (SpawnType)0, val2, val3); Enemies.RemoveEnemyFromLevels(val, (LevelTypes)1, (string[])null); Enemies.RegisterEnemy(val, (SpawnType)0, new Dictionary<LevelTypes, int> { [val4] = Config.LockerSpawnWeight.Value }, dictionary, val2, val3); try { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array3 = types; foreach (Type type in array3) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array4 = methods; foreach (MethodInfo methodInfo in array4) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } catch (Exception ex2) { logger.LogError((object)ex2); } harmony.PatchAll(); } } internal class Utilities { public static void ApplyLocalPlayerScreenshake(Vector3 position, float minDistance = 14f, float maxDistance = 25f, bool onlySmall = false) { //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) float num = Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, position); if (num < minDistance && !onlySmall) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } else if (num < maxDistance) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } } public static void Explode(Vector3 position, float minRange = 5f, float maxRange = 6f, float damage = 25f, int enemyDamage = 6) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_028a: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) Transform val = null; if ((Object)(object)RoundManager.Instance != (Object)null && (Object)(object)RoundManager.Instance.mapPropsContainer != (Object)null && (Object)(object)RoundManager.Instance.mapPropsContainer.transform != (Object)null) { val = RoundManager.Instance.mapPropsContainer.transform; } Object.Instantiate<GameObject>(StartOfRound.Instance.explosionPrefab, position, Quaternion.Euler(-90f, 0f, 0f), val).SetActive(true); ApplyLocalPlayerScreenshake(position); Collider[] array = Physics.OverlapSphere(position, maxRange, 2621448, (QueryTriggerInteraction)2); for (int i = 0; i < array.Length; i++) { float num = Vector3.Distance(position, ((Component)array[i]).transform.position); if (num > 4f && Physics.Linecast(position, ((Component)array[i]).transform.position + Vector3.up * 0.3f, 256, (QueryTriggerInteraction)1)) { continue; } if (((Component)array[i]).gameObject.layer == 3) { PlayerControllerB component = ((Component)array[i]).gameObject.GetComponent<PlayerControllerB>(); if ((Object)(object)component != (Object)null && ((NetworkBehaviour)component).IsOwner) { float num2 = 1f - Mathf.Clamp01((num - minRange) / (maxRange - minRange)); component.DamagePlayer((int)(damage * num2), true, true, (CauseOfDeath)3, 0, false, default(Vector3)); } } else if (((Component)array[i]).gameObject.layer == 21) { Landmine componentInChildren = ((Component)array[i]).gameObject.GetComponentInChildren<Landmine>(); if ((Object)(object)componentInChildren != (Object)null && !componentInChildren.hasExploded && num < 6f) { componentInChildren.Detonate(); } } else if (((Component)array[i]).gameObject.layer == 19) { EnemyAICollisionDetect componentInChildren2 = ((Component)array[i]).gameObject.GetComponentInChildren<EnemyAICollisionDetect>(); if ((Object)(object)componentInChildren2 != (Object)null && ((NetworkBehaviour)componentInChildren2.mainScript).IsOwner && num < 4.5f) { componentInChildren2.mainScript.HitEnemyOnLocalClient(enemyDamage, default(Vector3), (PlayerControllerB)null, false, -1); } } } int num3 = ~LayerMask.GetMask(new string[1] { "Room" }); num3 = ~LayerMask.GetMask(new string[1] { "Colliders" }); array = Physics.OverlapSphere(position, 10f, num3); for (int j = 0; j < array.Length; j++) { Rigidbody component2 = ((Component)array[j]).GetComponent<Rigidbody>(); if (component2 != null) { component2.AddExplosionForce(70f, position, 10f); } } } } } namespace Locker.Patches { [HarmonyPatch(typeof(HUDManager))] internal class HUDManagerPatches { [HarmonyPostfix] [HarmonyPatch("PingScan_performed")] private static void NotifyScanLockers() { if (!((Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null)) { return; } foreach (LockerAI activeLocker in LockerAI.activeLockers) { activeLocker?.PlayerScan(GameNetworkManager.Instance.localPlayerController); } } } } namespace Locker.MonoBehaviours { public class LockerAI : EnemyAI { public enum State { Dormant, Activating, Chasing, Reactivating, Resetting, Consuming, Debug } [CompilerGenerated] private sealed class <>c__DisplayClass93_0 { public PlayerControllerB player; public LockerAI <>4__this; } [CompilerGenerated] private sealed class <>c__DisplayClass93_1 { public float startTime; public <>c__DisplayClass93_0 CS$<>8__locals1; internal bool <KillPlayer>b__0() { return (Object)(object)CS$<>8__locals1.player.deadBody != (Object)null || Time.timeSinceLevelLoad - startTime > 3f; } internal bool <KillPlayer>b__1() { return (double)(Time.timeSinceLevelLoad - startTime) > (double)CS$<>8__locals1.<>4__this.consumeDuration * 0.75; } } [CompilerGenerated] private sealed class <DrawPath>d__71 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public LockerAI <>4__this; private int <i>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DrawPath>d__71(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!((Behaviour)((EnemyAI)<>4__this).agent).enabled) { return false; } <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.debugLine.positionCount = ((EnemyAI)<>4__this).agent.path.corners.Length; <>4__this.debugLine.SetPosition(0, ((Component)((EnemyAI)<>4__this).agent).transform.position); <i>5__1 = 1; while (<i>5__1 < ((EnemyAI)<>4__this).agent.path.corners.Length) { <>4__this.debugLine.SetPosition(<i>5__1, ((EnemyAI)<>4__this).agent.path.corners[<i>5__1]); <i>5__1++; } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <KillPlayer>d__93 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public ulong id; public LockerAI <>4__this; private <>c__DisplayClass93_0 <>8__1; private <>c__DisplayClass93_1 <>8__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <KillPlayer>d__93(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>8__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Expected O, but got Unknown //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass93_0(); <>8__1.<>4__this = <>4__this; <>8__1.player = StartOfRound.Instance.allPlayerScripts[id]; if ((Object)(object)<>8__1.player != (Object)null) { <>8__2 = new <>c__DisplayClass93_1(); <>8__2.CS$<>8__locals1 = <>8__1; <>8__2.CS$<>8__locals1.player.bleedingHeavily = true; <>2__current = (object)new WaitForSeconds(0.1f); <>1__state = 1; return true; } break; case 1: <>1__state = -1; <>8__2.CS$<>8__locals1.player.KillPlayer(Vector3.zero, true, (CauseOfDeath)8, 1, default(Vector3), false); <>8__2.startTime = Time.timeSinceLevelLoad; <>2__current = (object)new WaitUntil((Func<bool>)(() => (Object)(object)<>8__2.CS$<>8__locals1.player.deadBody != (Object)null || Time.timeSinceLevelLoad - <>8__2.startTime > 3f)); <>1__state = 2; return true; case 2: <>1__state = -1; if ((Object)(object)<>8__2.CS$<>8__locals1.player.deadBody != (Object)null) { <>8__2.CS$<>8__locals1.player.deadBody.attachedTo = ((Component)((EnemyAI)<>4__this).eye).transform; <>8__2.CS$<>8__locals1.player.deadBody.attachedLimb = <>8__2.CS$<>8__locals1.player.deadBody.bodyParts[5]; <>8__2.CS$<>8__locals1.player.deadBody.matchPositionExactly = true; } <>2__current = (object)new WaitUntil((Func<bool>)(() => (double)(Time.timeSinceLevelLoad - <>8__2.startTime) > (double)<>8__2.CS$<>8__locals1.<>4__this.consumeDuration * 0.75)); <>1__state = 3; return true; case 3: <>1__state = -1; if ((Object)(object)<>8__2.CS$<>8__locals1.player.deadBody != (Object)null) { <>8__2.CS$<>8__locals1.player.deadBody.attachedTo = null; <>8__2.CS$<>8__locals1.player.deadBody.attachedLimb = null; <>8__2.CS$<>8__locals1.player.deadBody.matchPositionExactly = false; if (!Config.LockerMechanicsBodiesEnabled.Value) { ((Component)<>8__2.CS$<>8__locals1.player.deadBody).gameObject.SetActive(false); <>8__2.CS$<>8__locals1.player.deadBody = null; } } <>8__2 = null; break; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static readonly int CreatureID = 176; private static readonly Color eyeColorDormant = Color.black; private static readonly Color eyeColorScan = Color.cyan; private static readonly Color eyeColorDetect = new Color(1f, 0.4f, 0f); private static readonly Color eyeColorChase = Color.red; private AudioSource audioSource; private Animator animationController; private Material eyeMaterial; private Light internalLight; private List<Light> scrapeLights; private DoorLock[] doors = Array.Empty<DoorLock>(); private Turret[] turrets = Array.Empty<Turret>(); private Landmine[] landmines = Array.Empty<Landmine>(); private VisualEffect[] visualEffects; private static VFXExposedProperty chaseVFXBeginTrigger; private static VFXExposedProperty chaseVFXEndTrigger; private static readonly string chaseVFXBeginTriggerName = "BeginChase"; private static readonly string chaseVFXEndTriggerName = "EndChase"; private static VFXExposedProperty consumeVFXBeginTrigger; private static VFXExposedProperty consumeVFXEndTrigger; private static readonly string consumeVFXBeginTriggerName = "BeginConsume"; private static readonly string consumeVFXEndTriggerName = "EndConsume"; private int observedState; private Vector3 targetPosition; private Quaternion targetRotation; private float currentRotationSpeed = 0f; private readonly float maxRotationSpeed = 90f; private Color currentEyeColor = eyeColorDormant; private float currentEyeIntensity = 0f; private float activationTimer = 0f; private readonly float activationDuration = 1.5f; private readonly float activationSpinWindup = 0.45f; private float reactivationTimer = 0f; private readonly float reactivationDuration = 1f; private float consumeTimer = 0f; private readonly float consumeDuration = 2.2f; private readonly float consumeBloodWindup = 1f; private bool consumeBloodTriggered = false; private float resetTimer = 0f; private readonly float resetDuration = 1f; private PlayerControllerB playerScanning; private bool playerScanned = false; private float playerScannedTimer = 0f; private float playerScannedDuration = 0f; private float lastTargetTime; private readonly float touchOvershoot = 1.75f; private readonly float scanOvershoot = 1f; private readonly float reactivationOvershoot = 1.25f; private Vector3 lastChasePosition = Vector3.zero; private float chaseMovementAverage = 0f; private readonly float chaseMovementSpeed = 30f; private readonly float chaseMovementAverageInitial = 1000f; private readonly float chaseMovementAverageMinimum = 0.01f; private readonly float lastTargetTimeframe = 0.2f; private readonly float explosionDamage = 100f; private readonly float explosionMinRange = 5f; private readonly float explosionMaxRange = 6f; private readonly int explosionEnemyDamage = 6; [Header("Locker")] public bool DebugToCamera = false; public AudioClip AudioClipPing; public AudioClip AudioClipActivate; public AudioClip AudioClipChase; public AudioClip AudioClipReactivate; public AudioClip AudioClipReset; public AudioClip AudioClipConsume; private LineRenderer debugLine; public static List<LockerAI> activeLockers = new List<LockerAI>(); private bool ProximitySensePlayers() { //IL_004e: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) if (Config.LockerMechanicsProximitySenseEnabled.Value) { PlayerControllerB val = null; try { val = ((EnemyAI)this).GetClosestPlayer(true, true, true); } catch (Exception ex) { if (!(ex is NullReferenceException)) { } } if ((Object)(object)val != (Object)null && Mathf.Abs(((Component)val).transform.position.y - ((Component)this).transform.position.y) + 2f > 2f && Vector3.Distance(((Component)val).transform.position, ((Component)this).transform.position) < Config.LockerMechanicsProximitySenseDistance.Value) { Vector3 val2 = ((Component)this).transform.position - ((Component)val).transform.position; TargetServerRpc(val.playerClientId, ((Component)val).transform.position - ((Vector3)(ref val2)).normalized * touchOvershoot); return true; } } return false; } public override void OnDestroy() { ((EnemyAI)this).OnDestroy(); activeLockers.Remove(this); } public override void Start() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Start(); activeLockers.Add(this); audioSource = ((Component)this).GetComponent<AudioSource>(); animationController = ((Component)this).GetComponent<Animator>(); SkinnedMeshRenderer componentInChildren = ((Component)this).gameObject.GetComponentInChildren<SkinnedMeshRenderer>(); Material[] materials = ((Renderer)componentInChildren).materials; foreach (Material val in materials) { if (((Object)val).name.ToLower().Contains("eye")) { eyeMaterial = val; eyeMaterial.SetColor("_EmissiveColor", currentEyeColor); break; } } scrapeLights = new List<Light>(); Light[] componentsInChildren = ((Component)this).gameObject.GetComponentsInChildren<Light>(); Light[] array = componentsInChildren; foreach (Light val2 in array) { if (((Object)((Component)val2).gameObject).name == "InternalLight") { internalLight = val2; continue; } scrapeLights.Add(val2); ((Behaviour)val2).enabled = false; } internalLight.intensity = 0f; ((Behaviour)internalLight).enabled = true; targetPosition = Vector3.zero; visualEffects = ((Component)this).gameObject.GetComponentsInChildren<VisualEffect>(); chaseVFXBeginTrigger.name = chaseVFXBeginTriggerName; chaseVFXEndTrigger.name = chaseVFXEndTriggerName; consumeVFXBeginTrigger.name = consumeVFXBeginTriggerName; consumeVFXEndTrigger.name = consumeVFXEndTriggerName; doors = Object.FindObjectsOfType(typeof(DoorLock)) as DoorLock[]; turrets = Object.FindObjectsOfType(typeof(Turret)) as Turret[]; landmines = Object.FindObjectsOfType(typeof(Landmine)) as Landmine[]; debugLine = ((Component)this).gameObject.GetComponent<LineRenderer>(); SwitchState(State.Dormant); } [IteratorStateMachine(typeof(<DrawPath>d__71))] public IEnumerator DrawPath() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DrawPath>d__71(0) { <>4__this = this }; } public override void DoAIInterval() { ((EnemyAI)this).DoAIInterval(); if (!base.isEnemyDead && !StartOfRound.Instance.allPlayersDead && Object.op_Implicit((Object)(object)debugLine)) { if (base.debugEnemyAI) { ((Renderer)debugLine).enabled = true; ((MonoBehaviour)this).StartCoroutine(DrawPath()); } else { ((Renderer)debugLine).enabled = false; } } } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)playerWhoHit != (Object)null) { TargetServerRpc(playerWhoHit.playerClientId, ((Component)playerWhoHit).transform.position); } } public override void Update() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0543: Unknown result type (might be due to invalid IL or missing references) //IL_054e: 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_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_045d: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_047a: Unknown result type (might be due to invalid IL or missing references) //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Unknown result type (might be due to invalid IL or missing references) //IL_048e: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (base.isEnemyDead) { return; } if (DebugToCamera) { DebugToCamera = false; TargetServerRpc(0uL, ((Component)Camera.main).transform.position); } switch (base.currentBehaviourStateIndex) { case 0: currentEyeColor = Color.Lerp(currentEyeColor, eyeColorDormant, Time.deltaTime); currentEyeIntensity = Mathf.Lerp(currentEyeIntensity, 0f, Time.deltaTime); internalLight.intensity = Mathf.Lerp(internalLight.intensity, 0f, Time.deltaTime * 8f); break; case 1: if (activationTimer > activationSpinWindup) { currentRotationSpeed = Mathf.Lerp(currentRotationSpeed, maxRotationSpeed, Time.deltaTime / Mathf.Abs(maxRotationSpeed - currentRotationSpeed)); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, targetRotation, Time.deltaTime * currentRotationSpeed * 4f); } currentEyeColor = Color.Lerp(currentEyeColor, eyeColorDetect, Time.deltaTime); currentEyeIntensity = Mathf.Lerp(currentEyeIntensity, 100000f, Time.deltaTime); internalLight.intensity = Mathf.Lerp(internalLight.intensity, 40000f, Time.deltaTime / 4f); break; case 2: currentEyeColor = Color.Lerp(currentEyeColor, eyeColorChase, Time.deltaTime); currentEyeIntensity = Mathf.Lerp(currentEyeIntensity, 500000f, Time.deltaTime * 2f); if (((Component)this).transform.position != lastChasePosition) { Quaternion val2 = Quaternion.LookRotation(((Component)this).transform.position - lastChasePosition) * Quaternion.Euler(Vector3.up * 90f) * Quaternion.Euler(Vector3.back * 8f); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val2, Time.deltaTime * 4f); } internalLight.intensity = Mathf.Lerp(internalLight.intensity, 20000f, Time.deltaTime); foreach (Light scrapeLight in scrapeLights) { scrapeLight.intensity = Mathf.Lerp(scrapeLight.intensity + (float)Random.Range(-3000, 3000), 4000f, Time.deltaTime * 2f); } break; case 3: currentRotationSpeed = Mathf.Lerp(currentRotationSpeed, maxRotationSpeed, Time.deltaTime / Mathf.Abs(maxRotationSpeed - currentRotationSpeed)); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, targetRotation, Time.deltaTime * currentRotationSpeed * 6f); break; case 4: foreach (Light scrapeLight2 in scrapeLights) { scrapeLight2.intensity = Mathf.Lerp(scrapeLight2.intensity, 0f, Time.deltaTime * 10f); } break; case 5: if (consumeTimer > consumeBloodWindup && !consumeBloodTriggered) { VisualEffect[] array = visualEffects; foreach (VisualEffect val in array) { val.SendEvent(consumeVFXBeginTrigger.name); } consumeBloodTriggered = true; } ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, targetRotation, Time.deltaTime * 8f); currentEyeColor = Color.Lerp(currentEyeColor, eyeColorChase, Time.deltaTime); currentEyeIntensity = Mathf.Lerp(currentEyeIntensity, 0f, Time.deltaTime); internalLight.intensity = Mathf.Lerp(internalLight.intensity, 0f, Time.deltaTime * 2f); foreach (Light scrapeLight3 in scrapeLights) { scrapeLight3.intensity = Mathf.Lerp(scrapeLight3.intensity, 0f, Time.deltaTime * 10f); } break; } eyeMaterial.SetColor("_EmissiveColor", currentEyeColor * currentEyeIntensity); } public void FixedUpdate() { //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0857: Unknown result type (might be due to invalid IL or missing references) //IL_0863: Unknown result type (might be due to invalid IL or missing references) //IL_0868: Unknown result type (might be due to invalid IL or missing references) //IL_086d: Unknown result type (might be due to invalid IL or missing references) //IL_087e: Unknown result type (might be due to invalid IL or missing references) //IL_0885: Unknown result type (might be due to invalid IL or missing references) //IL_0890: 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_015e: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_03d0: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_048b: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_0599: Unknown result type (might be due to invalid IL or missing references) //IL_05a4: Unknown result type (might be due to invalid IL or missing references) //IL_04bd: Unknown result type (might be due to invalid IL or missing references) //IL_05c8: Unknown result type (might be due to invalid IL or missing references) //IL_0748: Unknown result type (might be due to invalid IL or missing references) //IL_0753: Unknown result type (might be due to invalid IL or missing references) //IL_0770: Unknown result type (might be due to invalid IL or missing references) //IL_0775: Unknown result type (might be due to invalid IL or missing references) //IL_06a4: Unknown result type (might be due to invalid IL or missing references) //IL_06af: Unknown result type (might be due to invalid IL or missing references) //IL_0790: Unknown result type (might be due to invalid IL or missing references) //IL_0796: Unknown result type (might be due to invalid IL or missing references) //IL_06d3: Unknown result type (might be due to invalid IL or missing references) ObserveState(); PlayerControllerB val2 = null; try { val2 = ((EnemyAI)this).GetClosestPlayer(false, true, true); } catch (Exception ex) { if (!(ex is NullReferenceException)) { } } switch (base.currentBehaviourStateIndex) { case 0: if ((Object)(object)val2 != (Object)null && Mathf.Abs(((Component)val2).transform.position.y - ((Component)this).transform.position.y) + 2f > 2f && (double)Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position) < 1.5) { Vector3 val3 = ((Component)this).transform.position - ((Component)val2).transform.position; TargetServerRpc(val2.playerClientId, ((Component)val2).transform.position - ((Vector3)(ref val3)).normalized * touchOvershoot); } else { if (ProximitySensePlayers()) { break; } if (IsLocalPlayerClosestWithLight()) { TargetServerRpc(StartOfRound.Instance.localPlayerController.playerClientId, ((Component)StartOfRound.Instance.localPlayerController).transform.position); } if (playerScanned) { playerScannedTimer += Time.fixedDeltaTime; if (playerScannedTimer > playerScannedDuration) { currentEyeColor = eyeColorScan; audioSource.PlayOneShot(AudioClipPing, 1.5f * Config.LockerVolumeAdjustment.Value); playerScanning.JumpToFearLevel(0.2f, true); Vector3 val4 = ((Component)this).transform.position - ((Component)playerScanning).transform.position; TargetServerRpc(playerScanning.playerClientId, ((Component)playerScanning).transform.position - ((Vector3)(ref val4)).normalized * scanOvershoot); playerScanned = false; playerScannedTimer = 0f; playerScannedDuration = 0f; } } } break; case 1: activationTimer += Time.fixedDeltaTime; if (activationTimer > activationDuration) { SwitchState(State.Chasing); } break; case 2: { if (IsLocalPlayerClosestWithLight()) { TargetServerRpc(StartOfRound.Instance.localPlayerController.playerClientId, ((Component)StartOfRound.Instance.localPlayerController).transform.position); } if (playerScanned) { playerScannedTimer += Time.fixedDeltaTime; if (playerScannedTimer > playerScannedDuration) { audioSource.PlayOneShot(AudioClipPing, 1.5f * Config.LockerVolumeAdjustment.Value); playerScanning.JumpToFearLevel(0.5f, true); currentEyeColor = eyeColorScan; TargetServerRpc(playerScanning.playerClientId, ((Component)playerScanning).transform.position); playerScanned = false; playerScannedTimer = 0f; playerScannedDuration = 0f; } } if ((Object)(object)val2 != (Object)null && Mathf.Abs(((Component)val2).transform.position.y - ((Component)this).transform.position.y) + 2f > 2f && Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position) < 2f) { ConsumeServerRpc(val2.playerClientId); break; } DoorLock[] array = doors; foreach (DoorLock door in array) { if (!Object.op_Implicit((Object)(object)door)) { doors = doors.Where((DoorLock val) => (Object)(object)val != (Object)(object)door).ToArray(); break; } if (!Object.op_Implicit((Object)(object)((Component)door).GetComponent<Rigidbody>()) && Vector3.Distance(((Component)door).transform.position, ((Component)this).transform.position) < 3f) { Utilities.Explode(((Component)door).transform.position, 2f, 4f, 100f, 0); Object.Destroy((Object)(object)((Component)((Component)door).transform.parent).gameObject); doors = doors.Where((DoorLock val) => (Object)(object)val != (Object)(object)door).ToArray(); } } Turret[] array2 = turrets; foreach (Turret turret in array2) { if (!Object.op_Implicit((Object)(object)turret)) { turrets = turrets.Where((Turret val) => (Object)(object)val != (Object)(object)turret).ToArray(); break; } if (Vector3.Distance(((Component)turret).transform.position, ((Component)this).transform.position) < 3f) { Utilities.Explode(((Component)turret).transform.position, 2f, 4f, 100f, 0); Object.Destroy((Object)(object)((Component)((Component)turret).transform.parent).gameObject); turrets = turrets.Where((Turret val) => (Object)(object)val != (Object)(object)turret).ToArray(); } } Landmine[] array3 = landmines; foreach (Landmine landmine in array3) { if (!Object.op_Implicit((Object)(object)landmine)) { landmines = landmines.Where((Landmine val) => (Object)(object)val != (Object)(object)landmine).ToArray(); break; } if (Vector3.Distance(((Component)landmine).transform.position, ((Component)this).transform.position) < 3f) { Utilities.Explode(((Component)landmine).transform.position, 2f, 4f, 100f, 0); Object.Destroy((Object)(object)((Component)((Component)landmine).transform.parent).gameObject); landmines = landmines.Where((Landmine val) => (Object)(object)val != (Object)(object)landmine).ToArray(); } } chaseMovementAverage = (chaseMovementAverage + Vector3.Distance(lastChasePosition, ((Component)this).transform.position)) / 2f; lastChasePosition = ((Component)this).transform.position; if (((NetworkBehaviour)this).IsServer && (Vector3.Distance(((Component)this).transform.position, targetPosition) <= 1f || chaseMovementAverage < chaseMovementAverageMinimum)) { if (chaseMovementAverage > chaseMovementAverageMinimum && Random.Range(0f, 100f) < Config.LockerMechanicsReactivationChance.Value) { ReactivateServerRpc(); } else { ResetServerRpc(); } } break; } case 3: reactivationTimer += Time.fixedDeltaTime; if (reactivationTimer > reactivationDuration) { PlayerControllerB closestPlayer = ((EnemyAI)this).GetClosestPlayer(true, false, false); if (Object.op_Implicit((Object)(object)closestPlayer)) { Vector3 val5 = ((Component)this).transform.position - ((Component)closestPlayer).transform.position; TargetServerRpc(closestPlayer.playerClientId, ((Component)closestPlayer).transform.position - ((Vector3)(ref val5)).normalized * reactivationOvershoot); } else { ResetServerRpc(); } } break; case 5: consumeTimer += Time.fixedDeltaTime; if (consumeTimer > consumeDuration) { SwitchState(State.Dormant); } break; case 4: resetTimer += Time.fixedDeltaTime; if (resetTimer > resetDuration) { SwitchState(State.Dormant); } break; } } public override void KillEnemy(bool destroy = false) { ((EnemyAI)this).KillEnemy(destroy); if (((NetworkBehaviour)this).IsServer) { ExplodeServerRpc(); } } public override void OnCollideWithEnemy(Collider other, EnemyAI enemy) { ((EnemyAI)this).OnCollideWithEnemy(other, enemy); int currentBehaviourStateIndex = base.currentBehaviourStateIndex; int num = currentBehaviourStateIndex; if (num == 2) { if (enemy.enemyType.canDie && !enemy.isEnemyDead) { enemy.KillEnemy(false); } if ((Object)(object)enemy.enemyType == (Object)(object)base.enemyType) { ((EnemyAI)this).KillEnemy(false); } } } public void OnTriggerEnter(Collider collider) { int currentBehaviourStateIndex = base.currentBehaviourStateIndex; int num = currentBehaviourStateIndex; if (num == 2) { PlayerControllerB component = ((Component)collider).gameObject.GetComponent<PlayerControllerB>(); if ((Object)(object)component != (Object)null) { ConsumeServerRpc(component.playerClientId); } } } public void SwitchState(State state) { ((EnemyAI)this).SwitchToBehaviourState((int)state); } public void ObserveState() { //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0356: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) //IL_0424: Unknown result type (might be due to invalid IL or missing references) if (base.currentBehaviourStateIndex == observedState) { return; } activationTimer = 0f; reactivationTimer = 0f; consumeTimer = 0f; resetTimer = 0f; switch (base.currentBehaviourStateIndex) { case 6: TargetServerRpc(0uL, new Vector3((float)Random.Range(-25, 25), ((Component)this).transform.position.y, (float)Random.Range(-25, 25))); break; case 0: { audioSource.loop = false; currentRotationSpeed = 0f; foreach (Light scrapeLight in scrapeLights) { scrapeLight.intensity = 0f; ((Behaviour)scrapeLight).enabled = false; } animationController.SetTrigger("Deactivate"); animationController.SetBool("Chasing", false); VisualEffect[] array2 = visualEffects; foreach (VisualEffect val2 in array2) { val2.SendEvent(consumeVFXEndTrigger.name); val2.SendEvent(chaseVFXEndTrigger.name); } consumeBloodTriggered = false; break; } case 1: audioSource.PlayOneShot(AudioClipActivate, Config.LockerVolumeAdjustment.Value); animationController.SetTrigger("Activate"); break; case 2: { if (((NetworkBehaviour)this).IsServer && base.agent.isOnNavMesh) { ((EnemyAI)this).SetDestinationToPosition(targetPosition, true); } base.agent.speed = chaseMovementSpeed; lastChasePosition = ((Component)this).transform.position; chaseMovementAverage = chaseMovementAverageInitial; audioSource.pitch = 1f; audioSource.clip = AudioClipChase; audioSource.loop = true; audioSource.volume = Config.LockerVolumeAdjustment.Value; audioSource.Play(); animationController.SetTrigger("OpenDoors"); foreach (Light scrapeLight2 in scrapeLights) { ((Behaviour)scrapeLight2).enabled = true; } animationController.SetTrigger("Chase"); animationController.SetBool("Chasing", true); VisualEffect[] array3 = visualEffects; foreach (VisualEffect val3 in array3) { val3.SendEvent(chaseVFXBeginTrigger.name); } break; } case 3: case 4: case 5: { base.agent.speed = 0f; currentRotationSpeed = 0f; audioSource.Stop(); audioSource.loop = false; ((Component)this).transform.rotation = ((Component)this).transform.rotation * Quaternion.Euler(Vector3.forward * 10f); animationController.SetBool("Chasing", false); animationController.SetTrigger("CloseDoors"); VisualEffect[] array = visualEffects; foreach (VisualEffect val in array) { val.SendEvent(chaseVFXEndTrigger.name); } if ((Object)(object)StartOfRound.Instance != (Object)null) { PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController; float num = Vector3.Distance(((Component)this).transform.position, ((Component)localPlayerController).transform.position); if (num < 7f) { Utilities.ApplyLocalPlayerScreenshake(((Component)this).transform.position, 4f, 7f); if (num < 4f) { if (base.currentBehaviourStateIndex == 5) { localPlayerController.JumpToFearLevel(1f, true); } else { localPlayerController.JumpToFearLevel(0.7f, true); } } } } if (base.currentBehaviourStateIndex == 5) { audioSource.PlayOneShot(AudioClipConsume, Config.LockerVolumeAdjustment.Value); } else if (base.currentBehaviourStateIndex == 3) { audioSource.PlayOneShot(AudioClipReactivate, Config.LockerVolumeAdjustment.Value); } else { audioSource.PlayOneShot(AudioClipReset, Config.LockerVolumeAdjustment.Value); } break; } } observedState = base.currentBehaviourStateIndex; } private bool IsLocalPlayerClosestWithLight() { //IL_0053: 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_0069: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB val = null; float num = float.PositiveInfinity; PlayerControllerB[] allPlayersInLineOfSight = ((EnemyAI)this).GetAllPlayersInLineOfSight(360f, 15, (Transform)null, -1f, -1); if (allPlayersInLineOfSight == null || allPlayersInLineOfSight.Length == 0) { return false; } PlayerControllerB[] array = allPlayersInLineOfSight; foreach (PlayerControllerB val2 in array) { bool flag = false; Vector3 val3 = ((Component)this).transform.position - ((Component)val2).transform.position; float num2 = Vector3.Angle(((Component)val2).transform.forward, val3); if ((Object)(object)val2.pocketedFlashlight != (Object)null && val2.pocketedFlashlight.isBeingUsed && Mathf.Abs(num2) < 30f) { flag = true; } GrabbableObject currentlyHeldObjectServer = val2.currentlyHeldObjectServer; if (!flag && val2.isHoldingObject && (Object)(object)currentlyHeldObjectServer != (Object)null) { bool flag2 = ((object)currentlyHeldObjectServer).GetType() == typeof(FlashlightItem); Light[] componentsInChildren = ((Component)currentlyHeldObjectServer).gameObject.GetComponentsInChildren<Light>(); Light[] array2 = componentsInChildren; foreach (Light val4 in array2) { if (!((Behaviour)val4).enabled || !(val4.intensity > 0f) || !(val4.range > 0f)) { continue; } if (flag2) { if (Mathf.Abs(num2) < 30f) { flag = true; } } else { flag = true; } } } if (flag) { float num3 = Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position); if (num3 < num) { num = num3; val = val2; } } } if ((Object)(object)val != (Object)null && (Object)(object)val == (Object)(object)StartOfRound.Instance.localPlayerController) { return true; } return false; } public PlayerControllerB GetClosestVisiblePlayer() { //IL_004a: 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) PlayerControllerB[] allPlayersInLineOfSight = ((EnemyAI)this).GetAllPlayersInLineOfSight(360f, 30, (Transform)null, -1f, -1); float num = float.PositiveInfinity; PlayerControllerB result = null; if (allPlayersInLineOfSight != null) { if (allPlayersInLineOfSight.Length != 0) { PlayerControllerB[] array = allPlayersInLineOfSight; foreach (PlayerControllerB val in array) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); if (num2 < num) { num = num2; result = val; } } } return result; } return null; } [ServerRpc(RequireOwnership = false)] public void TargetServerRpc(ulong clientId, Vector3 position) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1408573431u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1408573431u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; TargetClientRpc(clientId, position); } } } [ClientRpc] public void TargetClientRpc(ulong clientId, Vector3 position) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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) //IL_00db: 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_013b: 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_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: 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_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1018811517u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1018811517u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (!(Time.time - lastTargetTimeframe > lastTargetTime) || (base.currentBehaviourStateIndex != 0 && base.currentBehaviourStateIndex != 6 && (base.currentBehaviourStateIndex != 2 || clientId != base.targetPlayer.playerClientId) && base.currentBehaviourStateIndex != 3)) { return; } targetPosition = position; targetRotation = Quaternion.LookRotation(new Vector3(targetPosition.x, ((Component)this).transform.position.y, targetPosition.z) - ((Component)this).transform.position); targetRotation *= Quaternion.Euler(Vector3.up * 90f); lastTargetTime = Time.time; base.targetPlayer = StartOfRound.Instance.allPlayerScripts[clientId]; if (base.currentBehaviourStateIndex == 0 || base.currentBehaviourStateIndex == 6) { SwitchState(State.Activating); } else if ((base.currentBehaviourStateIndex == 2 || base.currentBehaviourStateIndex == 3) && base.currentBehaviourStateIndex == 3) { if (((NetworkBehaviour)this).IsServer && base.agent.isOnNavMesh) { ((EnemyAI)this).SetDestinationToPosition(targetPosition, true); } SwitchState(State.Chasing); } } [ServerRpc(RequireOwnership = false)] public void ReactivateServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1126862929u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1126862929u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; targetPosition = ((Component)this).transform.position; if (((NetworkBehaviour)this).IsServer && base.agent.isOnNavMesh) { ((EnemyAI)this).SetDestinationToPosition(targetPosition, true); } ReactivateClientRpc(); } } [ClientRpc] public void ReactivateClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: 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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1648224205u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1648224205u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB closestVisiblePlayer = GetClosestVisiblePlayer(); if ((Object)(object)closestVisiblePlayer != (Object)null) { currentRotationSpeed = 0f; targetRotation = Quaternion.LookRotation(new Vector3(((Component)closestVisiblePlayer).transform.position.x, ((Component)this).transform.position.y, ((Component)closestVisiblePlayer).transform.position.z) - ((Component)this).transform.position); targetRotation *= Quaternion.Euler(Vector3.up * 90f); } SwitchState(State.Reactivating); } } [ServerRpc(RequireOwnership = false)] public void ConsumeServerRpc(ulong clientid) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == 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(2082259863u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientid); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2082259863u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; targetPosition = ((Component)this).transform.position; if (((NetworkBehaviour)this).IsServer && base.agent.isOnNavMesh) { ((EnemyAI)this).SetDestinationToPosition(targetPosition, false); } ConsumeClientRpc(clientid); } } [ClientRpc] public void ConsumeClientRpc(ulong id) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2705739593u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, id); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2705739593u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; ((MonoBehaviour)this).StartCoroutine(KillPlayer(id)); SwitchState(State.Consuming); } } } [ServerRpc(RequireOwnership = false)] public void ResetServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3735075229u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3735075229u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsServer && base.agent.isOnNavMesh) { targetPosition = ((Component)this).transform.position; ((EnemyAI)this).SetDestinationToPosition(targetPosition, false); } ResetClientRpc(); } } [ClientRpc] public void ResetClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3355973848u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3355973848u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; SwitchState(State.Resetting); } } } [ServerRpc(RequireOwnership = true)] public void ExplodeServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Invalid comparison between Unknown and I4 //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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_0084: Invalid comparison between Unknown and I4 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2667453085u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2667453085u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; ExplodeClientRpc(); } } [ClientRpc] public void ExplodeClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(707895878u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 707895878u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Utilities.Explode(((Component)this).transform.position, explosionMinRange, explosionMaxRange, explosionDamage, explosionEnemyDamage); Object.Destroy((Object)(object)((Component)this).gameObject); } } } [IteratorStateMachine(typeof(<KillPlayer>d__93))] public IEnumerator KillPlayer(ulong id) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <KillPlayer>d__93(0) { <>4__this = this, id = id }; } public void PlayerScan(PlayerControllerB player) { //IL_002c: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) if (base.currentBehaviourStateIndex != 0 && base.currentBehaviourStateIndex != 6 && base.currentBehaviourStateIndex != 2) { return; } float num = Vector3.Distance(((Component)this).transform.position, ((Component)player).transform.position); if ((!(num < 2f) || !(Mathf.Abs(((Component)player).transform.position.y - ((Component)this).transform.position.y) + 2f > 2f)) && num < 90f && !Physics.Linecast(((Component)this).transform.position + Vector3.up * 2f + Vector3.right * 0.2f, ((Component)player).transform.position + Vector3.up * 2f + Vector3.right * 0.2f, StartOfRound.Instance.collidersAndRoomMask)) { playerScanning = player; if (!playerScanned) { playerScanned = true; playerScannedTimer = 0f; playerScannedDuration = num / 30f; } else if (playerScannedDuration - playerScannedTimer < num / 30f) { playerScannedDuration = num / 30f; } } } protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1408573431u, new RpcReceiveHandler(__rpc_handler_1408573431), "TargetServerRpc"); ((NetworkBehaviour)this).__registerRpc(1018811517u, new RpcReceiveHandler(__rpc_handler_1018811517), "TargetClientRpc"); ((NetworkBehaviour)this).__registerRpc(1126862929u, new RpcReceiveHandler(__rpc_handler_1126862929), "ReactivateServerRpc"); ((NetworkBehaviour)this).__registerRpc(1648224205u, new RpcReceiveHandler(__rpc_handler_1648224205), "ReactivateClientRpc"); ((NetworkBehaviour)this).__registerRpc(2082259863u, new RpcReceiveHandler(__rpc_handler_2082259863), "ConsumeServerRpc"); ((NetworkBehaviour)this).__registerRpc(2705739593u, new RpcReceiveHandler(__rpc_handler_2705739593), "ConsumeClientRpc"); ((NetworkBehaviour)this).__registerRpc(3735075229u, new RpcReceiveHandler(__rpc_handler_3735075229), "ResetServerRpc"); ((NetworkBehaviour)this).__registerRpc(3355973848u, new RpcReceiveHandler(__rpc_handler_3355973848), "ResetClientRpc"); ((NetworkBehaviour)this).__registerRpc(2667453085u, new RpcReceiveHandler(__rpc_handler_2667453085), "ExplodeServerRpc"); ((NetworkBehaviour)this).__registerRpc(707895878u, new RpcReceiveHandler(__rpc_handler_707895878), "ExplodeClientRpc"); ((EnemyAI)this).__initializeRpcs(); } private static void __rpc_handler_1408573431(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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 (networkManager != null && networkManager.IsListening) { ulong clientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).TargetServerRpc(clientId, position); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1018811517(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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 (networkManager != null && networkManager.IsListening) { ulong clientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).TargetClientRpc(clientId, position); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1126862929(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ReactivateServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1648224205(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ReactivateClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2082259863(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong clientid = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientid); target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ConsumeServerRpc(clientid); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2705739593(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong id = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref id); target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ConsumeClientRpc(id); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3735075229(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ResetServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3355973848(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ResetClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2667453085(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_0055: Invalid comparison between Unknown and I4 NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } } else { target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ExplodeServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_707895878(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((LockerAI)(object)target).ExplodeClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "LockerAI"; } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace Locker.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }