using 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 LegaFusionCore.Managers; using LegaFusionCore.Managers.NetworkManagers; using LegaFusionCore.Registries; using LegaFusionCore.Utilities; using LethalLib.Modules; using LethalStatus.Managers; using LethalStatus.StatusEffects; using LightEater.Behaviours; using LightEater.Behaviours.LightSystem.Factories; using LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers; using LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers; using LightEater.Behaviours.LightSystem.Interfaces; using LightEater.Managers; using LightEater.NetcodePatcher; using LightEater.Patches; using LightEater.Values; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("LightEater")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LightEater")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("4f6e7a3d-9f39-4466-b505-b6ce2e3133d4")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("DunGen")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.ASPP")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.UnityNav")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.XR.CoreUtils")] [assembly: IgnoresAccessChecksTo("Unity.XR.Management")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MetaQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.OculusQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.RuntimeDebugger")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.SpatialTracking")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.XR.LegacyInputHelpers")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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 LightEater { public class Constants { public const string GLOBAL = "_Global_"; public const string ENEMIES_INTERACTIONS = "Enemies Interactions"; public const string SHIP_INTERACTIONS = "Ship Interactions"; public const string LIGHT_EATER = "Light Eater"; public const string OLD_BIRD_NAME = "RadMech"; public const string DELUMINATOR = "Deluminator"; public const string IMPOSSIBLE_ACTION = "Impossible Action"; public const string INFORMATION = "Information"; public const string MESSAGE_INFO_WAIT_SHIP = "Cannot be used until the ship has landed"; public const string MESSAGE_INFO_NO_LIGHT = "No targeted light source or unavailable charge"; public const string MESSAGE_INFO_ABSORPTION_CANCELED = "Light source absorption cancelled out"; public const string MESSAGE_INFO_MAX_CHARGES = "You have already reached the maximum number of charges for this item"; public const string MESSAGE_DEFAULT_ITEM_CHARGER = "(Requires battery-powered item)"; public const string SHIP_LIGHTS = "ShipElectricLights"; } [BepInPlugin("Lega.LightEater", "Light Eater", "1.1.1")] public class LightEater : BaseUnityPlugin { internal const string modGUID = "Lega.LightEater"; internal const string modName = "Light Eater"; internal const string modVersion = "1.1.1"; private readonly Harmony harmony = new Harmony("Lega.LightEater"); private static readonly AssetBundle bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "lighteater")); internal static ManualLogSource mls; public static ConfigFile configFile; public static GameObject deluminatorObj; public void Awake() { mls = Logger.CreateLogSource("LightEater"); configFile = ((BaseUnityPlugin)this).Config; ConfigManager.Load(); ConfigManager.GetEnemiesValues(); NetcodePatcher(); LoadEnemies(); LoadItems(); harmony.PatchAll(typeof(StartOfRoundPatch)); } private static void NetcodePatcher() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } public static void LoadEnemies() { EnemyType val = bundle.LoadAsset("Assets/LightEater/LightEaterEnemy.asset"); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); var (dictionary, dictionary2) = ConfigManager.GetEnemiesSpawns(); Enemies.RegisterEnemy(val, dictionary, dictionary2, bundle.LoadAsset("Assets/LightEater/LightEaterTN.asset"), bundle.LoadAsset("Assets/LightEater/LightEaterTK.asset")); } public void LoadItems() { if (ConfigManager.isDeluminator.Value) { deluminatorObj = LFCObjectsManager.RegisterObject(typeof(Deluminator), bundle.LoadAsset("Assets/Deluminator/DeluminatorItem.asset")).spawnPrefab; } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "LightEater"; public const string PLUGIN_NAME = "LightEater"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace LightEater.Values { public class EnemyValue { public string EnemyName { get; internal set; } public int AbsorbDistance { get; internal set; } public int AbsorbCharge { get; internal set; } public bool Destroy { get; internal set; } public EnemyValue(string enemyName, int absorbDistance, int absorbCharge, bool destroy) { EnemyName = enemyName; AbsorbDistance = absorbDistance; AbsorbCharge = absorbCharge; Destroy = destroy; base..ctor(); } } } namespace LightEater.Patches { internal class StartOfRoundPatch { [HarmonyPatch(typeof(StartOfRound), "ShipLeave")] [HarmonyPostfix] private static void ShipLeave() { Deluminator[] array = Object.FindObjectsOfType(); foreach (Deluminator deluminator in array) { deluminator.energyNetwork.StopHandleLightCoroutine(showMsg: false); } LightEaterAI[] array2 = Object.FindObjectsOfType(); foreach (LightEaterAI lightEaterAI in array2) { lightEaterAI.energyNetwork.StopHandleLightCoroutine(showMsg: false); } } } } namespace LightEater.Managers { public class ConfigManager { public static List enemiesValues = new List(); public static ConfigEntry spawnWeights; public static ConfigEntry isDeluminator; public static ConfigEntry damage; public static ConfigEntry absorbedEnemies; public static ConfigEntry shipMinHour; public static ConfigEntry disableShipLights; public static ConfigEntry disableShipScreen; public static ConfigEntry disableShipDoors; public static ConfigEntry disableShipLever; public static ConfigEntry disableTerminal; public static ConfigEntry disableItemCharger; public static ConfigEntry disableShipTV; public static ConfigEntry disableShipTeleporters; public static ConfigEntry disableSmartCupboard; public static void Load() { spawnWeights = LightEater.configFile.Bind("_Global_", "Spawn weights", "Vanilla:20,Modded:20", "Light Eater spawn weights"); isDeluminator = LightEater.configFile.Bind("_Global_", "Enable Deluminator", true, "Is Deluminator item enabled?"); damage = LightEater.configFile.Bind("_Global_", "Damage", 30, "Light Eater damage"); absorbedEnemies = LightEater.configFile.Bind("Enemies Interactions", "Enemies list", "RadMech:20:100:True,Boomba:5:20:False,Cleaning Drone:5:20:False,Mobile Turret:5:20:True,Shockwave Drone:5:20:True", "List of enemies that can be absorbed.\nThe format is 'EnemyName:AbsorbDistance:AbsorbCharge'."); shipMinHour = LightEater.configFile.Bind("Ship Interactions", "Min hour", 9, "Hour at which the Light Eater can absorb the ship (between 1 and 18)"); disableShipLights = LightEater.configFile.Bind("Ship Interactions", "Disable lights", true, "Disable ship lights"); disableShipScreen = LightEater.configFile.Bind("Ship Interactions", "Disable screen", true, "Disable ship screen"); disableShipDoors = LightEater.configFile.Bind("Ship Interactions", "Disable doors", true, "Disable ship doors"); disableShipLever = LightEater.configFile.Bind("Ship Interactions", "Disable lever", false, "Disable ship lever"); disableTerminal = LightEater.configFile.Bind("Ship Interactions", "Disable terminal", true, "Disable terminal"); disableItemCharger = LightEater.configFile.Bind("Ship Interactions", "Disable item charger", true, "Disable item charger"); disableShipTV = LightEater.configFile.Bind("Ship Interactions", "Disable TV", true, "Disable TV"); disableShipTeleporters = LightEater.configFile.Bind("Ship Interactions", "Disable teleporters", true, "Disable ship teleporters"); disableSmartCupboard = LightEater.configFile.Bind("Ship Interactions", "Disable smart cupboard", true, "Disable smart cupboard (from SelfSortingStorage)"); } public static (Dictionary spawnRateByLevelType, Dictionary spawnRateByCustomLevelType) GetEnemiesSpawns() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) Dictionary dictionary = new Dictionary(); Dictionary dictionary2 = new Dictionary(); foreach (string item in from s in spawnWeights.Value.Split(',') select s.Trim()) { string[] array = item.Split(':'); if (array.Length != 2) { continue; } string text = array[0]; if (int.TryParse(array[1], out var result)) { if (Enum.TryParse(text, ignoreCase: true, out LevelTypes result2)) { dictionary[result2] = result; } else { dictionary2[text] = result; } } } return (dictionary, dictionary2); } public static void GetEnemiesValues() { string[] array = absorbedEnemies.Value.Split(','); string[] array2 = array; foreach (string text in array2) { string[] array3 = text.Split(':'); if (array3.Length == 4) { enemiesValues.Add(new EnemyValue(array3[0], int.Parse(array3[1]), int.Parse(array3[2]), bool.Parse(array3[3]))); } } } } public class LightEnergyManager { public static object DetermineLightSource(GameObject lightSource) { ShipLights componentInChildren = lightSource.GetComponentInChildren(); if (componentInChildren == null) { GrabbableObject result = default(GrabbableObject); if (!lightSource.TryGetComponent(ref result)) { Turret componentInChildren2 = lightSource.GetComponentInChildren(); if (componentInChildren2 == null) { Landmine componentInChildren3 = lightSource.GetComponentInChildren(); if (componentInChildren3 == null) { EnemyAI componentInChildren4 = lightSource.GetComponentInChildren(); if (componentInChildren4 == null) { return RoundManager.Instance.allPoweredLightsAnimators?.FirstOrDefault((Func)((Animator l) => (Object)(object)((l != null) ? ((Component)l).gameObject : null) == (Object)(object)lightSource)); } return componentInChildren4; } return componentInChildren3; } return componentInChildren2; } return result; } return componentInChildren; } public static bool CanBeAbsorbed(GrabbableObject grabbableObject, Vector3 position, float distance) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)grabbableObject != (Object)null && grabbableObject.itemProperties.requiresBattery) { Battery insertedBattery = grabbableObject.insertedBattery; if (insertedBattery != null && insertedBattery.charge > 0f) { return IsObjectClose(grabbableObject, position, distance); } } return false; } public static bool IsObjectClose(GrabbableObject grabbableObject, Vector3 position, float distance) { //IL_000d: 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_0046: 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) if (Vector3.Distance(position, ((Component)grabbableObject).transform.position) <= distance) { return true; } foreach (BeltBagItem allA in LFCSpawnRegistry.GetAllAs()) { if (!((Object)(object)allA == (Object)null) && !(Vector3.Distance(position, ((Component)allA).transform.position) > distance) && (Object)(object)((IEnumerable)allA.objectsInBag).FirstOrDefault((Func)((GrabbableObject o) => (Object)(object)o == (Object)(object)grabbableObject)) != (Object)null) { return true; } } return false; } public static void StunExplosion(Vector3 position, bool applyStatus, PlayerControllerB playerHeldBy = null, EnemyAI enemyWhoExplode = null) { //IL_00b9: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_016c: 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) PlayerControllerB val = GameNetworkManager.Instance.localPlayerController; if (val.isPlayerDead && (Object)(object)val.spectatedPlayerScript != (Object)null) { val = GameNetworkManager.Instance.localPlayerController.spectatedPlayerScript; } if ((Object)(object)val != (Object)(object)playerHeldBy && val.HasLineOfSightToPosition(position, 60f, 12, 4f, -1)) { if (applyStatus) { LSNetworkManager.Instance.ApplyStatusEveryoneRpc(((Object)(object)playerHeldBy != (Object)null) ? ((int)playerHeldBy.playerClientId) : (-1), (int)val.playerClientId, 3, 10, 10, NetworkObjectReference.op_Implicit(((Object)(object)enemyWhoExplode != (Object)null) ? ((NetworkBehaviour)enemyWhoExplode).NetworkObject : null)); } HUDManager.Instance.flashFilter = 1f; SoundManager.Instance.earsRingingTimer = 1f; } Collider[] array = (Collider[])(object)new Collider[64]; int num = Physics.OverlapSphereNonAlloc(position, 12f, array, 524288, (QueryTriggerInteraction)2); EnemyAICollisionDetect val3 = default(EnemyAICollisionDetect); for (int i = 0; i < num; i++) { Collider val2 = array[i]; if (!((Object)(object)val2 != (Object)null) || !LFCUtilities.TryGetComponentInParent(((Component)val2).gameObject, ref val3)) { continue; } EnemyAI mainScript = val3.mainScript; if ((Object)(object)mainScript != (Object)null && (Object)(object)mainScript != (Object)(object)enemyWhoExplode && !mainScript.isEnemyDead && (Object)(object)((NetworkBehaviour)mainScript).NetworkObject != (Object)null && mainScript.CheckLineOfSightForPosition(position, 120f, 15, 4f, (Transform)null)) { if (applyStatus) { LSNetworkManager.Instance.ApplyStatusEveryoneRpc(((Object)(object)playerHeldBy != (Object)null) ? ((int)playerHeldBy.playerClientId) : (-1), NetworkObjectReference.op_Implicit(((NetworkBehaviour)mainScript).NetworkObject), 3, 10, 100, NetworkObjectReference.op_Implicit(((Object)(object)enemyWhoExplode != (Object)null) ? ((NetworkBehaviour)enemyWhoExplode).NetworkObject : null)); } mainScript.SetEnemyStunned(true, 1f, playerHeldBy); } } } } public class LightEnergyNetworkManager : NetworkBehaviour { [CompilerGenerated] private sealed class d__10 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LightEnergyNetworkManager <>4__this; private ILightSource 5__2; private bool 5__3; private float 5__4; private float 5__5; private float 5__6; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Expected O, but got Unknown int num = <>1__state; LightEnergyNetworkManager lightEnergyNetworkManager = <>4__this; if (num != 0) { if (num != 1) { return false; } <>1__state = -1; 5__6 += 0.5f; if (!5__2.HandleLightConsumption(5__4, 5__5, 5__6)) { 5__3 = false; goto IL_010f; } } else { <>1__state = -1; object obj = LightEnergyManager.DetermineLightSource(lightEnergyNetworkManager.closestLightSource); 5__2 = LightSourceFactory.GetLightHandler(obj, lightEnergyNetworkManager); if (5__2 == null) { lightEnergyNetworkManager.StopHandleLightCoroutine(showMsg: false); return false; } 5__3 = true; 5__4 = ((obj is EnemyAI) ? 10f : 5f); 5__5 = 5__4; 5__6 = 0f; lightEnergyNetworkManager.PlayActionSound?.Invoke(); 5__2.HandleLightInitialization(ref 5__5); } if (5__6 < 5__5) { <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; } goto IL_010f; IL_010f: 5__2.HandleInterruptAction(); if (5__3) { 5__2.HandleLightDepletion(); } lightEnergyNetworkManager.ResetAction?.Invoke(); lightEnergyNetworkManager.StopHandleLightCoroutine(showMsg: false); 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 int currentCharge; public GameObject closestLightSource; public Coroutine handleLightCoroutine; public Action PlayActionSound; public Action StopActionSound; public Action ResetAction; public void HandleLight(GameObject lightSource) { //IL_0026: 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) if (handleLightCoroutine == null) { NetworkObject val = default(NetworkObject); if (LFCUtilities.TryGetComponentInParent(lightSource, ref val)) { HandleLightEveryoneRpc(NetworkObjectReference.op_Implicit(val)); } else { HandleLightEveryoneRpc(lightSource.transform.position); } } } [Rpc(/*Could not decode attribute arguments.*/)] public void HandleLightEveryoneRpc(NetworkObjectReference obj) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00a0: 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) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(1400556278u, val2, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref obj, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendRpc(ref val3, 1400556278u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val4 = default(NetworkObject); if (((NetworkObjectReference)(ref obj)).TryGet(ref val4, (NetworkManager)null)) { closestLightSource = ((Component)val4).gameObject; handleLightCoroutine = ((MonoBehaviour)this).StartCoroutine(HandleLightCoroutine()); } } } [Rpc(/*Could not decode attribute arguments.*/)] public void HandleLightEveryoneRpc(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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(1142273148u, val2, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendRpc(ref val3, 1142273148u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; closestLightSource = GetPoweredLightByPosition(position); handleLightCoroutine = ((MonoBehaviour)this).StartCoroutine(HandleLightCoroutine()); } } } public GameObject GetPoweredLightByPosition(Vector3 position) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) List allPoweredLightsAnimators = RoundManager.Instance.allPoweredLightsAnimators; if (allPoweredLightsAnimators == null) { return null; } return ((Component)allPoweredLightsAnimators.OrderBy((Animator p) => (!((Object)(object)p != (Object)null)) ? float.MaxValue : Vector3.Distance(position, ((Component)p).transform.position)).FirstOrDefault()).gameObject; } [IteratorStateMachine(typeof(d__10))] public IEnumerator HandleLightCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__10(0) { <>4__this = this }; } [Rpc(/*Could not decode attribute arguments.*/)] public void StopHandleLightEveryoneRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: 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_0085: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(349786453u, val2, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val3, 349786453u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; StopHandleLightCoroutine(); } } } public void StopHandleLightCoroutine(bool showMsg = true) { if (handleLightCoroutine != null) { StopActionSound?.Invoke(); if ((Object)(object)closestLightSource != (Object)null) { LightSourceFactory.GetLightHandler(LightEnergyManager.DetermineLightSource(closestLightSource), this)?.HandleInterruptAction(); closestLightSource = null; } if (showMsg && LFCUtilities.ShouldBeLocalPlayer(((GrabbableObject)(((Component)this).GetComponentInParent()?)).playerHeldBy)) { HUDManager.Instance.DisplayTip("Information", "Light source absorption cancelled out", false, false, "LC_Tip1"); } ((MonoBehaviour)this).StopCoroutine(handleLightCoroutine); handleLightCoroutine = null; } } protected override void __initializeVariables() { ((NetworkBehaviour)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 ((NetworkBehaviour)this).__registerRpc(1400556278u, new RpcReceiveHandler(__rpc_handler_1400556278), "HandleLightEveryoneRpc"); ((NetworkBehaviour)this).__registerRpc(1142273148u, new RpcReceiveHandler(__rpc_handler_1142273148), "HandleLightEveryoneRpc"); ((NetworkBehaviour)this).__registerRpc(349786453u, new RpcReceiveHandler(__rpc_handler_349786453), "StopHandleLightEveryoneRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1400556278(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference obj = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe(ref obj, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)1; ((LightEnergyNetworkManager)(object)target).HandleLightEveryoneRpc(obj); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1142273148(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0036: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)1; ((LightEnergyNetworkManager)(object)target).HandleLightEveryoneRpc(position); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_349786453(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; ((LightEnergyNetworkManager)(object)target).StopHandleLightEveryoneRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "LightEnergyNetworkManager"; } } } namespace LightEater.Behaviours { public class Deluminator : PhysicsProp { public LightEnergyNetworkManager energyNetwork; public AudioSource ActionAudio; public AudioClip ActionSound; public override void Start() { ((GrabbableObject)this).Start(); energyNetwork.PlayActionSound = delegate { ActionAudio.PlayOneShot(ActionSound); ActionAudio.pitch = 1f; }; energyNetwork.StopActionSound = ActionAudio.Stop; energyNetwork.ResetAction = delegate { if (LFCUtilities.ShouldBeLocalPlayer(((GrabbableObject)this).playerHeldBy)) { ((GrabbableObject)this).SetControlTipsForItem(); } }; } public override void EquipItem() { ((PhysicsProp)this).EquipItem(); ((GrabbableObject)this).playerHeldBy.equippedUsableItemQE = true; } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { ((GrabbableObject)this).playerHeldBy.activatingItem = false; ((GrabbableObject)this).playerHeldBy.equippedUsableItemQE = false; } energyNetwork.StopHandleLightEveryoneRpc(); } public override void DiscardItem() { energyNetwork.StopHandleLightEveryoneRpc(); ((GrabbableObject)this).DiscardItem(); } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (buttonDown && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { StartAbsorption(); } } public override void ItemInteractLeftRight(bool right) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemInteractLeftRight(right); if (!right && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null && energyNetwork.currentCharge >= 100) { energyNetwork.currentCharge = Mathf.Max(0, energyNetwork.currentCharge - 100); LightEnergyManager.StunExplosion(((Component)this).transform.position, applyStatus: true, ((GrabbableObject)this).playerHeldBy); StunExplosionEveryoneRpc(((Component)this).transform.position); ((GrabbableObject)this).SetControlTipsForItem(); } } [Rpc(/*Could not decode attribute arguments.*/)] public void StunExplosionEveryoneRpc(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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(883547727u, val2, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendRpc(ref val3, 883547727u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (LFCUtilities.ShouldNotBeLocalPlayer(((GrabbableObject)this).playerHeldBy)) { LightEnergyManager.StunExplosion(position, applyStatus: true, ((GrabbableObject)this).playerHeldBy); energyNetwork.currentCharge = Mathf.Max(0, energyNetwork.currentCharge - 100); } } } public void StartAbsorption() { if (!StartOfRound.Instance.shipHasLanded) { HUDManager.Instance.DisplayTip("Impossible Action", "Cannot be used until the ship has landed", false, false, "LC_Tip1"); return; } if (energyNetwork.handleLightCoroutine != null) { energyNetwork.StopHandleLightEveryoneRpc(); return; } if (energyNetwork.currentCharge >= 200) { HUDManager.Instance.DisplayTip("Impossible Action", "You have already reached the maximum number of charges for this item", false, false, "LC_Tip1"); return; } energyNetwork.closestLightSource = GetClosestLightSourceInView(); if ((Object)(object)energyNetwork.closestLightSource == (Object)null) { HUDManager.Instance.DisplayTip("Impossible Action", "No targeted light source or unavailable charge", false, false, "LC_Tip1"); } else { energyNetwork.HandleLight(energyNetwork.closestLightSource); } } public GameObject GetClosestLightSourceInView() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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) RaycastHit[] array = Physics.SphereCastAll(new Ray(((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.forward), 2f, 5f); for (int i = 0; i < array.Length; i++) { RaycastHit hit = array[i]; List allAs = LFCSpawnRegistry.GetAllAs(); object obj; if (allAs == null) { obj = null; } else { EnemyAI? obj2 = ((IEnumerable)allAs).FirstOrDefault((Func)((EnemyAI e) => !e.isEnemyDead && ConfigManager.enemiesValues.Select((EnemyValue v) => v.EnemyName).Contains(e.enemyType.enemyName) && (Object)(object)e == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent())); obj = ((obj2 != null) ? ((Component)obj2).gameObject : null); } if (obj == null) { List allAs2 = LFCSpawnRegistry.GetAllAs(); if (allAs2 == null) { obj = null; } else { GrabbableObject? obj3 = ((IEnumerable)allAs2).FirstOrDefault((Func)((GrabbableObject g) => CanBeAbsorbed(g) && (Object)(object)g == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent())); obj = ((obj3 != null) ? ((Component)obj3).gameObject : null); } if (obj == null) { HashSet setExact = LFCSpawnRegistry.GetSetExact(); if (setExact == null) { obj = null; } else { IEnumerable enumerable = setExact.Cast(); if (enumerable == null) { obj = null; } else { Turret? obj4 = enumerable.FirstOrDefault((Func)((Turret t) => (Object)(object)t != (Object)null && t.turretActive && (Object)(object)t == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent())); obj = ((obj4 != null) ? ((Component)obj4).gameObject : null); } } if (obj == null) { HashSet setExact2 = LFCSpawnRegistry.GetSetExact(); if (setExact2 == null) { obj = null; } else { IEnumerable enumerable2 = setExact2.Cast(); if (enumerable2 == null) { obj = null; } else { Landmine? obj5 = enumerable2.FirstOrDefault((Func)((Landmine l) => (Object)(object)l != (Object)null && l.mineActivated && (Object)(object)l == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent())); obj = ((obj5 != null) ? ((Component)obj5).gameObject : null); } } if (obj == null) { List allPoweredLightsAnimators = RoundManager.Instance.allPoweredLightsAnimators; if (allPoweredLightsAnimators == null) { obj = null; } else { Animator? obj6 = ((IEnumerable)allPoweredLightsAnimators).FirstOrDefault((Func)((Animator p) => (Object)(object)p != (Object)null && !LFCPoweredLightsRegistry.IsLocked(p) && (Object)(object)p == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent())); obj = ((obj6 != null) ? ((Component)obj6).gameObject : null); } } } } } GameObject val = (GameObject)obj; if ((Object)(object)val != (Object)null) { return val; } } return null; } public bool CanBeAbsorbed(GrabbableObject grabbableObject) { if ((Object)(object)grabbableObject != (Object)null && grabbableObject.itemProperties.requiresBattery && grabbableObject.insertedBattery != null) { return grabbableObject.insertedBattery.charge > 0f; } return false; } public override void SetControlTipsForItem() { ((GrabbableObject)this).itemProperties.toolTips[2] = $"[Charges : {energyNetwork.currentCharge}]"; HUDManager.Instance.ChangeControlTipMultiple(((GrabbableObject)this).itemProperties.toolTips, true, ((GrabbableObject)this).itemProperties); } protected override void __initializeVariables() { ((PhysicsProp)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 ((NetworkBehaviour)this).__registerRpc(883547727u, new RpcReceiveHandler(__rpc_handler_883547727), "StunExplosionEveryoneRpc"); ((PhysicsProp)this).__initializeRpcs(); } private static void __rpc_handler_883547727(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0036: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)1; ((Deluminator)(object)target).StunExplosionEveryoneRpc(position); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "Deluminator"; } } public class LightEaterAI : EnemyAI { public enum State { WANDERING, HUNTING, ABSORBING, CHASING } public enum Sound { ABSORPTION, SWING, CHARGE, EXPLOSION } [CompilerGenerated] private sealed class d__22 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LightEaterAI <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__22(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; LightEaterAI lightEaterAI = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; lightEaterAI.DoAnimationEveryoneRpc("startExplode"); lightEaterAI.PlayAudioEveryoneRpc(2); <>2__current = LFCEnemyManager.WaitForFullAnimation((EnemyAI)(object)lightEaterAI, "explode", 10f, 0); <>1__state = 1; return true; case 1: <>1__state = -1; lightEaterAI.PlayAudioEveryoneRpc(3); lightEaterAI.DoAnimationEveryoneRpc("startMove"); lightEaterAI.StunExplosionEveryoneRpc(((EnemyAI)lightEaterAI).eye.position, applyStatus: true); lightEaterAI.stunCoroutine = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__26 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LightEaterAI <>4__this; public int playerId; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__26(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_00a3: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; LightEaterAI lightEaterAI = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; lightEaterAI.DoAnimationEveryoneRpc("startSwing"); lightEaterAI.PlayAudioEveryoneRpc(1); <>2__current = LFCEnemyManager.WaitForFullAnimation((EnemyAI)(object)lightEaterAI, "swing", 10f, 0); <>1__state = 1; return true; case 1: <>1__state = -1; LFCNetworkManager.Instance.DamagePlayerEveryoneRpc(playerId, ConfigManager.damage.Value, true, true, 8); lightEaterAI.DoAnimationEveryoneRpc("startMove"); if (StartOfRound.Instance.allPlayerObjects[playerId].GetComponent().isPlayerDead) { ((EnemyAI)lightEaterAI).StartSearch(((Component)lightEaterAI).transform.position, (AISearchRoutine)null); ((EnemyAI)lightEaterAI).SwitchToBehaviourClientRpc(0); } lightEaterAI.swingCoroutine = null; 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 LightEnergyNetworkManager energyNetwork; public Transform TurnCompass; public AudioClip[] MoveSounds = Array.Empty(); public AudioClip[] LightEaterSounds = Array.Empty(); public int absorbDistance = 5; public float moveTimer; public Coroutine stunCoroutine; public Coroutine swingCoroutine; public override void Start() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Start(); energyNetwork.PlayActionSound = delegate { base.creatureSFX.PlayOneShot(LightEaterSounds[0]); base.creatureSFX.pitch = 1f; }; energyNetwork.StopActionSound = base.creatureSFX.Stop; base.currentBehaviourStateIndex = 0; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); } public override void Update() { //IL_004e: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (!base.isEnemyDead && !StartOfRound.Instance.allPlayersDead) { PlayMoveSound(); if ((Object)(object)base.targetPlayer != (Object)null && base.currentBehaviourStateIndex == 3) { TurnCompass.LookAt(((Component)base.targetPlayer.gameplayCamera).transform.position); ((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(new Vector3(0f, TurnCompass.eulerAngles.y, 0f)), 4f * Time.deltaTime); } } } public void PlayMoveSound() { if (base.currentBehaviourStateIndex != 2) { moveTimer -= Time.deltaTime; if (MoveSounds.Length != 0 && moveTimer <= 0f) { base.creatureSFX.PlayOneShot(MoveSounds[Random.Range(0, MoveSounds.Length)]); moveTimer = 3f; } } } public override void DoAIInterval() { ((EnemyAI)this).DoAIInterval(); if (!base.isEnemyDead && !StartOfRound.Instance.allPlayersDead) { switch (base.currentBehaviourStateIndex) { case 0: DoWandering(); break; case 1: DoHunting(); break; case 2: DoAbsorbing(); break; case 3: DoChasing(); break; } } } public void DoWandering() { base.agent.speed = 2f; if (LFCEnemyManager.FoundClosestPlayerInRange((EnemyAI)(object)this, 25, 10, 60f, false)) { energyNetwork.closestLightSource = null; ((EnemyAI)this).StopSearch(base.currentSearch, true); ((EnemyAI)this).SwitchToBehaviourClientRpc(3); } else if (FoundLightSource()) { ((EnemyAI)this).StopSearch(base.currentSearch, true); ((EnemyAI)this).SwitchToBehaviourClientRpc(1); } } public bool FoundLightSource() { //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown if (CrossingLight()) { return true; } if (CanAbsorbShip()) { absorbDistance = 20; energyNetwork.closestLightSource = ((Component)StartOfRound.Instance.shipRoomLights).gameObject; return (Object)(object)energyNetwork.closestLightSource != (Object)null; } IEnumerable source = LFCSpawnRegistry.GetAllAs()?.Where((EnemyAI e) => !e.isEnemyDead && ConfigManager.enemiesValues.Select((EnemyValue v) => v.EnemyName).Contains(e.enemyType.enemyName)); if (source.Any()) { EnemyAI closestEnemy = source.OrderBy((EnemyAI r) => Vector3.Distance(((Component)this).transform.position, ((Component)r).transform.position)).FirstOrDefault(); absorbDistance = ConfigManager.enemiesValues.FirstOrDefault((EnemyValue e) => e.EnemyName.Equals(closestEnemy.enemyType.enemyName))?.AbsorbDistance ?? 5; energyNetwork.closestLightSource = ((Component)closestEnemy).gameObject; return (Object)(object)energyNetwork.closestLightSource != (Object)null; } absorbDistance = 5; if (!base.isOutside) { base.path1 = new NavMeshPath(); LightEnergyNetworkManager lightEnergyNetworkManager = energyNetwork; List allPoweredLightsAnimators = RoundManager.Instance.allPoweredLightsAnimators; object closestLightSource; if (allPoweredLightsAnimators == null) { closestLightSource = null; } else { Animator? obj = (from p in allPoweredLightsAnimators where (Object)(object)p != (Object)null && !LFCPoweredLightsRegistry.IsLocked(p) && base.agent.CalculatePath(((EnemyAI)this).ChooseClosestNodeToPosition(((Component)p).transform.position, false, 0).position, base.path1) orderby Vector3.Distance(((Component)this).transform.position, ((Component)p).transform.position) select p).FirstOrDefault(); closestLightSource = ((obj != null) ? ((Component)obj).gameObject : null); } lightEnergyNetworkManager.closestLightSource = (GameObject)closestLightSource; } else { LightEnergyNetworkManager lightEnergyNetworkManager2 = energyNetwork; List allPoweredLightsAnimators2 = RoundManager.Instance.allPoweredLightsAnimators; object closestLightSource2; if (allPoweredLightsAnimators2 == null) { closestLightSource2 = null; } else { Animator? obj2 = (from p in allPoweredLightsAnimators2 where (Object)(object)p != (Object)null && !LFCPoweredLightsRegistry.IsLocked(p) orderby (!Object.op_Implicit((Object)(object)p)) ? float.MaxValue : Vector3.Distance(LFCEnemyManager.GetEntranceExitPosition(LFCEnemyManager.GetClosestEntrance((EnemyAI)(object)this)), ((Component)p).transform.position) select p).FirstOrDefault(); closestLightSource2 = ((obj2 != null) ? ((Component)obj2).gameObject : null); } lightEnergyNetworkManager2.closestLightSource = (GameObject)closestLightSource2; } return (Object)(object)energyNetwork.closestLightSource != (Object)null; } public bool CanAbsorbShip() { if (TimeOfDay.Instance.hour >= ConfigManager.shipMinHour.Value) { if ((!ConfigManager.disableShipLights.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)0)) && (!ConfigManager.disableShipScreen.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)1)) && (!ConfigManager.disableShipDoors.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)2)) && (!ConfigManager.disableShipLever.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)3)) && (!ConfigManager.disableTerminal.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)4)) && (!ConfigManager.disableItemCharger.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)5)) && (!ConfigManager.disableShipTV.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)6)) && (!ConfigManager.disableShipTeleporters.Value || LFCShipFeatureRegistry.IsLocked((ShipFeatureType)7))) { if (ConfigManager.disableSmartCupboard.Value) { return !LFCShipFeatureRegistry.IsLocked((ShipFeatureType)8); } return false; } return true; } return false; } public void DoHunting() { base.agent.speed = 4f; if (LFCEnemyManager.FoundClosestPlayerInRange((EnemyAI)(object)this, 25, 10, 60f, false)) { energyNetwork.closestLightSource = null; ((EnemyAI)this).SwitchToBehaviourClientRpc(3); } else if (CloseToLightSource()) { DoAnimationEveryoneRpc("startAbsorb"); ((EnemyAI)this).SwitchToBehaviourClientRpc(2); } } public bool CloseToLightSource() { //IL_0067: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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) CrossingLight(); object obj = LightEnergyManager.DetermineLightSource(energyNetwork.closestLightSource); if (!(obj is ShipLights) || base.isOutside) { EnemyAI val = (EnemyAI)((obj is EnemyAI) ? obj : null); if ((val == null || val.isOutside == base.isOutside) && (!(obj is Animator) || !base.isOutside)) { ILightSource lightHandler = LightSourceFactory.GetLightHandler(obj, this); if (lightHandler == null) { return false; } ((EnemyAI)this).SetDestinationToPosition(lightHandler.GetClosestNodePosition(), false); if (!(Vector3.Distance(((Component)base.eye).transform.position, lightHandler.GetClosestLightPosition()) < (float)absorbDistance)) { return Vector3.Distance(((Component)this).transform.position, lightHandler.GetClosestNodePosition()) < 1f; } return true; } } LFCEnemyManager.GoTowardsEntrance((EnemyAI)(object)this); return false; } public void DoAbsorbing() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) base.agent.speed = 0f; if ((Object)(object)energyNetwork.closestLightSource == (Object)null || !StartOfRound.Instance.shipHasLanded) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); DoAnimationEveryoneRpc("startMove"); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } else { energyNetwork.HandleLight(energyNetwork.closestLightSource); } } public void DoChasing() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) if (stunCoroutine != null || swingCoroutine != null) { return; } base.agent.speed = 5f; if (LFCEnemyManager.TargetOutsideChasedPlayer((EnemyAI)(object)this)) { return; } float num = default(float); if (!LFCEnemyManager.TargetClosestPlayerInAnyCase((EnemyAI)(object)this, ref num, false) || (num > 20f && !((EnemyAI)this).CheckLineOfSightForPosition(((Component)base.targetPlayer).transform.position, 45f, 60, -1f, (Transform)null))) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); return; } if (!LSStatusEffectRegistry.HasStatus(((Component)base.targetPlayer).gameObject, (StatusEffectType)3)) { if (StunExplosion()) { return; } if (CrossingLight()) { DoAnimationEveryoneRpc("startAbsorb"); ((EnemyAI)this).SwitchToBehaviourClientRpc(2); return; } } ((EnemyAI)this).SetMovingTowardsTargetPlayer(base.targetPlayer); } public bool StunExplosion() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (energyNetwork.currentCharge >= 100 && base.targetPlayer.HasLineOfSightToPosition(base.eye.position, 60f, 12, 2f, -1)) { base.agent.speed = 0f; energyNetwork.currentCharge -= 100; stunCoroutine = ((MonoBehaviour)this).StartCoroutine(StunExplosionCoroutine()); return true; } return false; } [IteratorStateMachine(typeof(d__22))] public IEnumerator StunExplosionCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__22(0) { <>4__this = this }; } [Rpc(/*Could not decode attribute arguments.*/)] public void StunExplosionEveryoneRpc(Vector3 position, bool applyStatus) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(2747428478u, val2, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref position); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref applyStatus, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendRpc(ref val3, 2747428478u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; LightEnergyManager.StunExplosion(position, applyStatus, null, (EnemyAI)(object)this); } } } public override void OnCollideWithPlayer(Collider other) { ((EnemyAI)this).OnCollideWithPlayer(other); if (!base.isEnemyDead && base.currentBehaviourStateIndex == 3 && stunCoroutine == null && swingCoroutine == null) { PlayerControllerB val = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, false, false); if (LFCUtilities.ShouldBeLocalPlayer(val)) { SwingServerRpc((int)val.playerClientId); } } } [ServerRpc(RequireOwnership = false)] public void SwingServerRpc(int playerId) { //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) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1448657909u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1448657909u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (swingCoroutine == null) { swingCoroutine = ((MonoBehaviour)this).StartCoroutine(SwingCoroutine(playerId)); } } } [IteratorStateMachine(typeof(d__26))] public IEnumerator SwingCoroutine(int playerId) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__26(0) { <>4__this = this, playerId = playerId }; } public bool CrossingLight() { List allPoweredLightsAnimators = RoundManager.Instance.allPoweredLightsAnimators; object obj; if (allPoweredLightsAnimators == null) { obj = null; } else { Animator? obj2 = ((IEnumerable)allPoweredLightsAnimators).FirstOrDefault((Func)((Animator p) => (Object)(object)p != (Object)null && !LFCPoweredLightsRegistry.IsLocked(p) && Vector3.Distance(((Component)this).transform.position, ((Component)p).transform.position) <= 10f)); obj = ((obj2 != null) ? ((Component)obj2).gameObject : null); } if (obj == null) { List allAs = LFCSpawnRegistry.GetAllAs(); if (allAs == null) { obj = null; } else { GrabbableObject? obj3 = ((IEnumerable)allAs).FirstOrDefault((Func)((GrabbableObject g) => LightEnergyManager.CanBeAbsorbed(g, ((Component)this).transform.position, 10f))); obj = ((obj3 != null) ? ((Component)obj3).gameObject : null); } if (obj == null) { HashSet setExact = LFCSpawnRegistry.GetSetExact(); if (setExact == null) { obj = null; } else { IEnumerable enumerable = setExact.Cast(); if (enumerable == null) { obj = null; } else { Turret? obj4 = enumerable.FirstOrDefault((Func)((Turret t) => (Object)(object)t != (Object)null && t.turretActive && Vector3.Distance(((Component)this).transform.position, ((Component)t).transform.position) <= 10f)); obj = ((obj4 != null) ? ((Component)obj4).gameObject : null); } } if (obj == null) { HashSet setExact2 = LFCSpawnRegistry.GetSetExact(); if (setExact2 == null) { obj = null; } else { IEnumerable enumerable2 = setExact2.Cast(); if (enumerable2 == null) { obj = null; } else { Landmine? obj5 = enumerable2.FirstOrDefault((Func)((Landmine l) => (Object)(object)l != (Object)null && l.mineActivated && Vector3.Distance(((Component)this).transform.position, ((Component)l).transform.position) <= 10f)); obj = ((obj5 != null) ? ((Component)obj5).gameObject : null); } } } } } GameObject val = (GameObject)obj; if ((Object)(object)val != (Object)null) { absorbDistance = 5; energyNetwork.closestLightSource = val; } return (Object)(object)energyNetwork.closestLightSource != (Object)null; } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (base.isEnemyDead) { return; } ((EnemyAI)this).HitEnemy(force, playerWhoHit, playHitSFX, hitID); base.enemyHP -= force; if (((NetworkBehaviour)this).IsOwner) { if (energyNetwork.currentCharge > 0) { StunExplosionEveryoneRpc(base.eye.position, energyNetwork.currentCharge >= 100); } if (base.enemyHP <= 0) { ((EnemyAI)this).KillEnemyOnOwnerClient(false); } energyNetwork.currentCharge = 0; } } public override void KillEnemy(bool destroy = false) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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) ((EnemyAI)this).KillEnemy(false); if (LFCUtilities.IsServer && ConfigManager.isDeluminator.Value) { LFCObjectsManager.SpawnObjectForServer(LightEater.deluminatorObj, ((Component)this).transform.position + Vector3.up * 0.5f); } } [Rpc(/*Could not decode attribute arguments.*/)] public void PlayAudioEveryoneRpc(int enemySound) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(453609561u, val2, val, (SendTo)6, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val3, enemySound); ((NetworkBehaviour)this).__endSendRpc(ref val3, 453609561u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (LightEaterSounds.Length != 0) { base.creatureSFX.PlayOneShot(LightEaterSounds[enemySound]); } } } [Rpc(/*Could not decode attribute arguments.*/)] public void DoAnimationEveryoneRpc(string animationState) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val2 = default(RpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendRpc(40964250u, val2, val, (SendTo)6, (RpcDelivery)0); bool flag = animationState != null; ((FastBufferWriter)(ref val3)).WriteValueSafe(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val3)).WriteValueSafe(animationState, false); } ((NetworkBehaviour)this).__endSendRpc(ref val3, 40964250u, val2, val, (SendTo)6, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; base.creatureAnimator.SetTrigger(animationState); } } 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 ((NetworkBehaviour)this).__registerRpc(2747428478u, new RpcReceiveHandler(__rpc_handler_2747428478), "StunExplosionEveryoneRpc"); ((NetworkBehaviour)this).__registerRpc(1448657909u, new RpcReceiveHandler(__rpc_handler_1448657909), "SwingServerRpc"); ((NetworkBehaviour)this).__registerRpc(453609561u, new RpcReceiveHandler(__rpc_handler_453609561), "PlayAudioEveryoneRpc"); ((NetworkBehaviour)this).__registerRpc(40964250u, new RpcReceiveHandler(__rpc_handler_40964250), "DoAnimationEveryoneRpc"); ((EnemyAI)this).__initializeRpcs(); } private static void __rpc_handler_2747428478(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); bool applyStatus = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref applyStatus, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((LightEaterAI)(object)target).StunExplosionEveryoneRpc(position, applyStatus); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1448657909(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) { int playerId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); target.__rpc_exec_stage = (__RpcExecStage)1; ((LightEaterAI)(object)target).SwingServerRpc(playerId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_453609561(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) { int enemySound = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref enemySound); target.__rpc_exec_stage = (__RpcExecStage)1; ((LightEaterAI)(object)target).PlayAudioEveryoneRpc(enemySound); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_40964250(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref flag, default(ForPrimitives)); string animationState = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref animationState, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((LightEaterAI)(object)target).DoAnimationEveryoneRpc(animationState); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "LightEaterAI"; } } } namespace LightEater.Behaviours.LightSystem.Interfaces { public interface ILightSource { void HandleLightInitialization(ref float remainingDuration); bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed); void HandleLightDepletion(); void HandleInterruptAction(); Vector3 GetClosestNodePosition(); Vector3 GetClosestLightPosition(); } } namespace LightEater.Behaviours.LightSystem.Handlers { public class AnimatorHandler : ILightSource { protected readonly Animator animator; protected AnimatorHandler(Animator animator) { this.animator = animator; } public virtual void HandleLightInitialization(ref float remainingDuration) { } public virtual bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { Animator obj = animator; if (obj != null) { obj.SetTrigger("Flicker"); } return true; } public virtual void HandleLightDepletion() { LFCPoweredLightsRegistry.AddLock(animator, "Light Eater"); } public virtual void HandleInterruptAction() { } public virtual Vector3 GetClosestNodePosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)animator).transform.position; } public virtual Vector3 GetClosestLightPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)animator).transform.position; } } public class EnemyHandler : ILightSource { protected readonly EnemyAI enemy; protected EnemyHandler(EnemyAI enemy) { this.enemy = enemy; } public virtual void HandleLightInitialization(ref float remainingDuration) { } public virtual bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { EnemyAI obj = enemy; RadMechAI val = (RadMechAI)(object)((obj is RadMechAI) ? obj : null); if (val != null) { val.FlickerFace(); if (val.inFlyingMode) { return false; } } return !enemy.isEnemyDead; } public virtual void HandleLightDepletion() { //IL_0053: 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 (LFCUtilities.IsServer && !enemy.isEnemyDead) { string enemyName = enemy.enemyType.enemyName; if (enemyName == "RadMech") { GameObject val = Object.Instantiate(enemy.enemyType.nestSpawnPrefab, ((Component)enemy).transform.position, ((Component)enemy).transform.rotation); val.GetComponentInChildren().Spawn(true); } EnemyValue enemyValue = ConfigManager.enemiesValues.FirstOrDefault((EnemyValue e) => e.EnemyName.Equals(enemy.enemyType.enemyName)); enemy.KillEnemyOnOwnerClient(enemyValue?.Destroy ?? true); } } public virtual void HandleInterruptAction() { } public virtual Vector3 GetClosestNodePosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)enemy).transform.position; } public virtual Vector3 GetClosestLightPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)enemy).transform.position; } } public class GrabbableObjectHandler : ILightSource { protected readonly GrabbableObject grabbableObject; protected GrabbableObjectHandler(GrabbableObject grabbableObject) { this.grabbableObject = grabbableObject; } public virtual void HandleLightInitialization(ref float remainingDuration) { remainingDuration *= grabbableObject.insertedBattery.charge; GrabbableObject obj = grabbableObject; FlashlightItem val = (FlashlightItem)(object)((obj is FlashlightItem) ? obj : null); if (val != null) { LFCObjectStateRegistry.AddFlickeringFlashlight(val, "Light Eater"); } } public virtual bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { grabbableObject.insertedBattery.charge = Mathf.Max(0f, 1f - (timePassed + (absorbDuration - remainingDuration)) / absorbDuration); return true; } public virtual void HandleLightDepletion() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown grabbableObject.insertedBattery = new Battery(true, 0f); grabbableObject.ChargeBatteries(); grabbableObject.isBeingUsed = false; } public virtual void HandleInterruptAction() { GrabbableObject obj = grabbableObject; FlashlightItem val = (FlashlightItem)(object)((obj is FlashlightItem) ? obj : null); if (val != null) { LFCObjectStateRegistry.RemoveFlickeringFlashlight(val, "Light Eater"); val.SwitchFlashlight(false); } } public virtual Vector3 GetClosestNodePosition() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return GetObjectPosition(); } public virtual Vector3 GetClosestLightPosition() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return GetObjectPosition(); } protected Vector3 GetObjectPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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) Vector3 position = ((Component)grabbableObject).transform.position; foreach (BeltBagItem allA in LFCSpawnRegistry.GetAllAs()) { if ((Object)(object)allA != (Object)null && (Object)(object)((IEnumerable)allA.objectsInBag).FirstOrDefault((Func)((GrabbableObject o) => (Object)(object)o == (Object)(object)grabbableObject)) != (Object)null) { position = ((Component)allA).transform.position; } } return position; } } public class LandmineHandler : ILightSource { protected readonly Landmine landmine; protected LandmineHandler(Landmine landmine) { this.landmine = landmine; } public virtual void HandleLightInitialization(ref float remainingDuration) { } public virtual bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { return true; } public virtual void HandleLightDepletion() { landmine.ToggleMineEnabledLocalClient(false); } public virtual void HandleInterruptAction() { } public virtual Vector3 GetClosestNodePosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)landmine).transform.position; } public virtual Vector3 GetClosestLightPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)landmine).transform.position; } } public class ShipLightsHandler : ILightSource { protected Animator shipAnimator; protected Animator shipDoorsAnimator; protected AudioSource shipDoorsAudio; protected Vector3 shipPosition; protected ShipLightsHandler() { //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) shipAnimator = ((Component)StartOfRound.Instance.shipAnimatorObject).gameObject.GetComponent(); shipDoorsAnimator = StartOfRound.Instance.shipDoorsAnimator; shipDoorsAudio = StartOfRound.Instance.shipDoorAudioSource; shipPosition = StartOfRound.Instance.shipLandingPosition.position; } public virtual void HandleLightInitialization(ref float remainingDuration) { StartOfRound.Instance.PowerSurgeShip(); shipAnimator.SetBool("AlarmRinging", true); shipDoorsAudio.PlayOneShot(StartOfRound.Instance.alarmSFX); } public virtual bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { shipDoorsAnimator.SetBool("Closed", !shipDoorsAnimator.GetBool("Closed")); return true; } public virtual void HandleLightDepletion() { if (ConfigManager.disableShipLights.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)0, "Light Eater"); } if (ConfigManager.disableShipScreen.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)1, "Light Eater"); } if (ConfigManager.disableShipDoors.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)2, "Light Eater"); } if (ConfigManager.disableShipLever.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)3, "Light Eater"); } if (ConfigManager.disableTerminal.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)4, "Light Eater"); } if (ConfigManager.disableItemCharger.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)5, "Light Eater"); } if (ConfigManager.disableShipTV.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)6, "Light Eater"); } if (ConfigManager.disableShipTeleporters.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)7, "Light Eater"); } if (ConfigManager.disableSmartCupboard.Value) { LFCShipFeatureRegistry.AddLock((ShipFeatureType)8, "Light Eater"); } HandleInterruptAction(); } public virtual void HandleInterruptAction() { shipAnimator.SetBool("Closed", false); shipDoorsAudio.Stop(); shipAnimator.SetBool("AlarmRinging", false); } public virtual Vector3 GetClosestNodePosition() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return shipPosition; } public virtual Vector3 GetClosestLightPosition() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return shipPosition; } } public class TurretHandler : ILightSource { protected readonly Turret turret; protected TurretHandler(Turret turret) { this.turret = turret; } public virtual void HandleLightInitialization(ref float remainingDuration) { } public virtual bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { turret.SwitchTurretMode(3); return true; } public virtual void HandleLightDepletion() { turret.ToggleTurretEnabledLocalClient(false); turret.mainAudio.Stop(); turret.farAudio.Stop(); turret.berserkAudio.Stop(); if (turret.fadeBulletAudioCoroutine != null) { ((MonoBehaviour)turret).StopCoroutine(turret.fadeBulletAudioCoroutine); } turret.fadeBulletAudioCoroutine = ((MonoBehaviour)turret).StartCoroutine(turret.FadeBulletAudio()); turret.bulletParticles.Stop(true, (ParticleSystemStopBehavior)1); turret.turretAnimator.SetInteger("TurretMode", 0); } public virtual void HandleInterruptAction() { } public virtual Vector3 GetClosestNodePosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)turret).transform.position; } public virtual Vector3 GetClosestLightPosition() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((Component)turret).transform.position; } } } namespace LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers { public class AnimatorHandler : global::LightEater.Behaviours.LightSystem.Handlers.AnimatorHandler { private readonly LightEaterAI lightEater; public AnimatorHandler(LightEaterAI lightEater, Animator animator) { this.lightEater = lightEater; base..ctor(animator); } public override void HandleLightDepletion() { base.HandleLightDepletion(); lightEater.energyNetwork.currentCharge += 20; } public override Vector3 GetClosestNodePosition() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) return ((EnemyAI)lightEater).ChooseClosestNodeToPosition(lightEater.energyNetwork.closestLightSource.transform.position, false, 0).position; } public override Vector3 GetClosestLightPosition() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) return lightEater.energyNetwork.closestLightSource.transform.position; } } public class EnemyHandler : global::LightEater.Behaviours.LightSystem.Handlers.EnemyHandler { private readonly LightEaterAI lightEater; public EnemyHandler(LightEaterAI lightEater, EnemyAI enemy) { this.lightEater = lightEater; base..ctor(enemy); } public override void HandleLightDepletion() { base.HandleLightDepletion(); EnemyValue enemyValue = ConfigManager.enemiesValues.FirstOrDefault((EnemyValue e) => e.EnemyName.Equals(enemy.enemyType.enemyName)); lightEater.energyNetwork.currentCharge += enemyValue?.AbsorbCharge ?? 20; } } public class GrabbableObjectHandler : global::LightEater.Behaviours.LightSystem.Handlers.GrabbableObjectHandler { private readonly LightEaterAI lightEater; public GrabbableObjectHandler(LightEaterAI lightEater, GrabbableObject grabbableObject) { this.lightEater = lightEater; base..ctor(grabbableObject); } public override bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (base.HandleLightConsumption(absorbDuration, remainingDuration, timePassed)) { if (grabbableObject.insertedBattery.charge > 0f) { return LightEnergyManager.CanBeAbsorbed(grabbableObject, ((Component)lightEater).transform.position, 15f); } return true; } return false; } public override void HandleLightDepletion() { base.HandleLightDepletion(); lightEater.energyNetwork.currentCharge += 20; } public override Vector3 GetClosestNodePosition() { //IL_0007: 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) return ((EnemyAI)lightEater).ChooseClosestNodeToPosition(GetObjectPosition(), false, 0).position; } } public class LandmineHandler : global::LightEater.Behaviours.LightSystem.Handlers.LandmineHandler { private readonly LightEaterAI lightEater; public LandmineHandler(LightEaterAI lightEater, Landmine landmine) { this.lightEater = lightEater; base..ctor(landmine); } public override void HandleLightDepletion() { base.HandleLightDepletion(); lightEater.energyNetwork.currentCharge += 20; } public override Vector3 GetClosestNodePosition() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) return ((EnemyAI)lightEater).ChooseClosestNodeToPosition(lightEater.energyNetwork.closestLightSource.transform.position, false, 0).position; } } public class ShipLightsHandler : global::LightEater.Behaviours.LightSystem.Handlers.ShipLightsHandler { private readonly LightEaterAI lightEater; public ShipLightsHandler(LightEaterAI lightEater) { this.lightEater = lightEater; base..ctor(); } public override void HandleLightDepletion() { base.HandleLightDepletion(); lightEater.energyNetwork.currentCharge += 200; } } public class TurretHandler : global::LightEater.Behaviours.LightSystem.Handlers.TurretHandler { private readonly LightEaterAI lightEater; public TurretHandler(LightEaterAI lightEater, Turret turret) { this.lightEater = lightEater; base..ctor(turret); } public override void HandleLightDepletion() { base.HandleLightDepletion(); lightEater.energyNetwork.currentCharge += 20; } public override Vector3 GetClosestNodePosition() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) return ((EnemyAI)lightEater).ChooseClosestNodeToPosition(lightEater.energyNetwork.closestLightSource.transform.position, false, 0).position; } } } namespace LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers { public class AnimatorHandler : global::LightEater.Behaviours.LightSystem.Handlers.AnimatorHandler { private readonly Deluminator deluminator; public AnimatorHandler(Deluminator deluminator, Animator animator) { this.deluminator = deluminator; base..ctor(animator); } public override bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { //IL_0026: 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) if (base.HandleLightConsumption(absorbDuration, remainingDuration, timePassed)) { PlayerControllerB playerHeldBy = ((GrabbableObject)deluminator).playerHeldBy; if ((Object)(object)playerHeldBy != (Object)null) { return Vector3.Distance(((Component)playerHeldBy).transform.position, ((Component)animator).transform.position) <= 7.5f; } return false; } return false; } public override void HandleLightDepletion() { base.HandleLightDepletion(); deluminator.energyNetwork.currentCharge = Mathf.Min(200, deluminator.energyNetwork.currentCharge + 20); } } public class EnemyHandler : global::LightEater.Behaviours.LightSystem.Handlers.EnemyHandler { private readonly Deluminator deluminator; public EnemyHandler(Deluminator deluminator, EnemyAI enemy) { this.deluminator = deluminator; base..ctor(enemy); } public override bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) if (base.HandleLightConsumption(absorbDuration, remainingDuration, timePassed)) { if (LFCUtilities.IsServer && (Object)(object)enemy.targetPlayer == (Object)null && (Object)(object)((GrabbableObject)deluminator).playerHeldBy != (Object)null) { enemy.SetMovingTowardsTargetPlayer(((GrabbableObject)deluminator).playerHeldBy); } return Vector3.Distance(((Component)deluminator).transform.position, ((Component)enemy).transform.position) <= 7.5f; } return false; } public override void HandleLightDepletion() { base.HandleLightDepletion(); EnemyValue enemyValue = ConfigManager.enemiesValues.FirstOrDefault((EnemyValue e) => e.EnemyName.Equals(enemy.enemyType.enemyName)); deluminator.energyNetwork.currentCharge = Mathf.Min(200, (deluminator.energyNetwork.currentCharge + enemyValue?.AbsorbCharge).GetValueOrDefault(20)); } } public class GrabbableObjectHandler : global::LightEater.Behaviours.LightSystem.Handlers.GrabbableObjectHandler { private readonly Deluminator deluminator; public GrabbableObjectHandler(Deluminator deluminator, GrabbableObject grabbableObject) { this.deluminator = deluminator; base..ctor(grabbableObject); } public override bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (base.HandleLightConsumption(absorbDuration, remainingDuration, timePassed)) { if (grabbableObject.insertedBattery.charge > 0f) { return LightEnergyManager.CanBeAbsorbed(grabbableObject, ((Component)deluminator).transform.position, 7.5f); } return true; } return false; } public override void HandleLightDepletion() { base.HandleLightDepletion(); deluminator.energyNetwork.currentCharge = Mathf.Min(200, deluminator.energyNetwork.currentCharge + 20); } } public class LandmineHandler : global::LightEater.Behaviours.LightSystem.Handlers.LandmineHandler { private readonly Deluminator deluminator; public LandmineHandler(Deluminator deluminator, Landmine landmine) { this.deluminator = deluminator; base..ctor(landmine); } public override bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { //IL_0026: 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) if (base.HandleLightConsumption(absorbDuration, remainingDuration, timePassed)) { PlayerControllerB playerHeldBy = ((GrabbableObject)deluminator).playerHeldBy; if ((Object)(object)playerHeldBy != (Object)null) { return Vector3.Distance(((Component)playerHeldBy).transform.position, ((Component)landmine).transform.position) <= 7.5f; } return false; } return false; } public override void HandleLightDepletion() { base.HandleLightDepletion(); deluminator.energyNetwork.currentCharge = Mathf.Min(200, deluminator.energyNetwork.currentCharge + 20); } } public class TurretHandler : global::LightEater.Behaviours.LightSystem.Handlers.TurretHandler { private readonly Deluminator deluminator; public TurretHandler(Deluminator deluminator, Turret turret) { this.deluminator = deluminator; base..ctor(turret); } public override bool HandleLightConsumption(float absorbDuration, float remainingDuration, float timePassed) { //IL_0026: 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) if (base.HandleLightConsumption(absorbDuration, remainingDuration, timePassed)) { PlayerControllerB playerHeldBy = ((GrabbableObject)deluminator).playerHeldBy; if ((Object)(object)playerHeldBy != (Object)null) { return Vector3.Distance(((Component)playerHeldBy).transform.position, ((Component)turret).transform.position) <= 7.5f; } return false; } return false; } public override void HandleLightDepletion() { base.HandleLightDepletion(); deluminator.energyNetwork.currentCharge = Mathf.Min(200, deluminator.energyNetwork.currentCharge + 20); } } } namespace LightEater.Behaviours.LightSystem.Factories { public class LightSourceFactory { public static ILightSource GetLightHandler(object lightSource, LightEnergyNetworkManager absorptionNetwork) { object obj = ((object)((Component)absorptionNetwork).GetComponentInParent()) ?? ((object)((Component)absorptionNetwork).GetComponentInParent()); if (!(obj is LightEaterAI lightEater)) { if (obj is Deluminator deluminator) { return GetLightHandler(lightSource, deluminator); } return null; } return GetLightHandler(lightSource, lightEater); } public static ILightSource GetLightHandler(object lightSource, LightEaterAI lightEater) { if (!(lightSource is ShipLights)) { EnemyAI val = (EnemyAI)((lightSource is EnemyAI) ? lightSource : null); if (val == null) { GrabbableObject val2 = (GrabbableObject)((lightSource is GrabbableObject) ? lightSource : null); if (val2 == null) { Turret val3 = (Turret)((lightSource is Turret) ? lightSource : null); if (val3 == null) { Landmine val4 = (Landmine)((lightSource is Landmine) ? lightSource : null); if (val4 == null) { Animator val5 = (Animator)((lightSource is Animator) ? lightSource : null); if (val5 != null) { return new global::LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers.AnimatorHandler(lightEater, val5); } return null; } return new global::LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers.LandmineHandler(lightEater, val4); } return new global::LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers.TurretHandler(lightEater, val3); } return new global::LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers.GrabbableObjectHandler(lightEater, val2); } return new global::LightEater.Behaviours.LightSystem.Handlers.LightEaterHandlers.EnemyHandler(lightEater, val); } return new ShipLightsHandler(lightEater); } public static ILightSource GetLightHandler(object lightSource, Deluminator deluminator) { EnemyAI val = (EnemyAI)((lightSource is EnemyAI) ? lightSource : null); if (val == null) { GrabbableObject val2 = (GrabbableObject)((lightSource is GrabbableObject) ? lightSource : null); if (val2 == null) { Turret val3 = (Turret)((lightSource is Turret) ? lightSource : null); if (val3 == null) { Landmine val4 = (Landmine)((lightSource is Landmine) ? lightSource : null); if (val4 == null) { Animator val5 = (Animator)((lightSource is Animator) ? lightSource : null); if (val5 != null) { return new global::LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers.AnimatorHandler(deluminator, val5); } return null; } return new global::LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers.LandmineHandler(deluminator, val4); } return new global::LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers.TurretHandler(deluminator, val3); } return new global::LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers.GrabbableObjectHandler(deluminator, val2); } return new global::LightEater.Behaviours.LightSystem.Handlers.DeluminatorHandlers.EnemyHandler(deluminator, val); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace LightEater.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }