Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LightEater v1.1.1
LightEater.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.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<EnemyType>("Assets/LightEater/LightEaterEnemy.asset"); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); var (dictionary, dictionary2) = ConfigManager.GetEnemiesSpawns(); Enemies.RegisterEnemy(val, dictionary, dictionary2, bundle.LoadAsset<TerminalNode>("Assets/LightEater/LightEaterTN.asset"), bundle.LoadAsset<TerminalKeyword>("Assets/LightEater/LightEaterTK.asset")); } public void LoadItems() { if (ConfigManager.isDeluminator.Value) { deluminatorObj = LFCObjectsManager.RegisterObject(typeof(Deluminator), bundle.LoadAsset<Item>("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<Deluminator>(); foreach (Deluminator deluminator in array) { deluminator.energyNetwork.StopHandleLightCoroutine(showMsg: false); } LightEaterAI[] array2 = Object.FindObjectsOfType<LightEaterAI>(); foreach (LightEaterAI lightEaterAI in array2) { lightEaterAI.energyNetwork.StopHandleLightCoroutine(showMsg: false); } } } } namespace LightEater.Managers { public class ConfigManager { public static List<EnemyValue> enemiesValues = new List<EnemyValue>(); public static ConfigEntry<string> spawnWeights; public static ConfigEntry<bool> isDeluminator; public static ConfigEntry<int> damage; public static ConfigEntry<string> absorbedEnemies; public static ConfigEntry<int> shipMinHour; public static ConfigEntry<bool> disableShipLights; public static ConfigEntry<bool> disableShipScreen; public static ConfigEntry<bool> disableShipDoors; public static ConfigEntry<bool> disableShipLever; public static ConfigEntry<bool> disableTerminal; public static ConfigEntry<bool> disableItemCharger; public static ConfigEntry<bool> disableShipTV; public static ConfigEntry<bool> disableShipTeleporters; public static ConfigEntry<bool> disableSmartCupboard; public static void Load() { spawnWeights = LightEater.configFile.Bind<string>("_Global_", "Spawn weights", "Vanilla:20,Modded:20", "Light Eater spawn weights"); isDeluminator = LightEater.configFile.Bind<bool>("_Global_", "Enable Deluminator", true, "Is Deluminator item enabled?"); damage = LightEater.configFile.Bind<int>("_Global_", "Damage", 30, "Light Eater damage"); absorbedEnemies = LightEater.configFile.Bind<string>("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<int>("Ship Interactions", "Min hour", 9, "Hour at which the Light Eater can absorb the ship (between 1 and 18)"); disableShipLights = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable lights", true, "Disable ship lights"); disableShipScreen = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable screen", true, "Disable ship screen"); disableShipDoors = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable doors", true, "Disable ship doors"); disableShipLever = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable lever", false, "Disable ship lever"); disableTerminal = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable terminal", true, "Disable terminal"); disableItemCharger = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable item charger", true, "Disable item charger"); disableShipTV = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable TV", true, "Disable TV"); disableShipTeleporters = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable teleporters", true, "Disable ship teleporters"); disableSmartCupboard = LightEater.configFile.Bind<bool>("Ship Interactions", "Disable smart cupboard", true, "Disable smart cupboard (from SelfSortingStorage)"); } public static (Dictionary<LevelTypes, int> spawnRateByLevelType, Dictionary<string, int> spawnRateByCustomLevelType) GetEnemiesSpawns() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) Dictionary<LevelTypes, int> dictionary = new Dictionary<LevelTypes, int>(); Dictionary<string, int> dictionary2 = new Dictionary<string, int>(); 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<LevelTypes>(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<ShipLights>(); if (componentInChildren == null) { GrabbableObject result = default(GrabbableObject); if (!lightSource.TryGetComponent<GrabbableObject>(ref result)) { Turret componentInChildren2 = lightSource.GetComponentInChildren<Turret>(); if (componentInChildren2 == null) { Landmine componentInChildren3 = lightSource.GetComponentInChildren<Landmine>(); if (componentInChildren3 == null) { EnemyAI componentInChildren4 = lightSource.GetComponentInChildren<EnemyAI>(); if (componentInChildren4 == null) { return RoundManager.Instance.allPoweredLightsAnimators?.FirstOrDefault((Func<Animator, bool>)((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<BeltBagItem>()) { if (!((Object)(object)allA == (Object)null) && !(Vector3.Distance(position, ((Component)allA).transform.position) > distance) && (Object)(object)((IEnumerable<GrabbableObject>)allA.objectsInBag).FirstOrDefault((Func<GrabbableObject, bool>)((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<EnemyAICollisionDetect>(((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 <HandleLightCoroutine>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LightEnergyNetworkManager <>4__this; private ILightSource <lightHandler>5__2; private bool <completed>5__3; private float <duration>5__4; private float <remainingDuration>5__5; private float <timePassed>5__6; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <HandleLightCoroutine>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <lightHandler>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; <timePassed>5__6 += 0.5f; if (!<lightHandler>5__2.HandleLightConsumption(<duration>5__4, <remainingDuration>5__5, <timePassed>5__6)) { <completed>5__3 = false; goto IL_010f; } } else { <>1__state = -1; object obj = LightEnergyManager.DetermineLightSource(lightEnergyNetworkManager.closestLightSource); <lightHandler>5__2 = LightSourceFactory.GetLightHandler(obj, lightEnergyNetworkManager); if (<lightHandler>5__2 == null) { lightEnergyNetworkManager.StopHandleLightCoroutine(showMsg: false); return false; } <completed>5__3 = true; <duration>5__4 = ((obj is EnemyAI) ? 10f : 5f); <remainingDuration>5__5 = <duration>5__4; <timePassed>5__6 = 0f; lightEnergyNetworkManager.PlayActionSound?.Invoke(); <lightHandler>5__2.HandleLightInitialization(ref <remainingDuration>5__5); } if (<timePassed>5__6 < <remainingDuration>5__5) { <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; } goto IL_010f; IL_010f: <lightHandler>5__2.HandleInterruptAction(); if (<completed>5__3) { <lightHandler>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<NetworkObject>(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<NetworkObjectReference>(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<Animator> 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(<HandleLightCoroutine>d__10))] public IEnumerator HandleLightCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <HandleLightCoroutine>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<Deluminator>()?)).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<NetworkObjectReference>(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<EnemyAI> allAs = LFCSpawnRegistry.GetAllAs<EnemyAI>(); object obj; if (allAs == null) { obj = null; } else { EnemyAI? obj2 = ((IEnumerable<EnemyAI>)allAs).FirstOrDefault((Func<EnemyAI, bool>)((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<EnemyAI>())); obj = ((obj2 != null) ? ((Component)obj2).gameObject : null); } if (obj == null) { List<GrabbableObject> allAs2 = LFCSpawnRegistry.GetAllAs<GrabbableObject>(); if (allAs2 == null) { obj = null; } else { GrabbableObject? obj3 = ((IEnumerable<GrabbableObject>)allAs2).FirstOrDefault((Func<GrabbableObject, bool>)((GrabbableObject g) => CanBeAbsorbed(g) && (Object)(object)g == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent<GrabbableObject>())); obj = ((obj3 != null) ? ((Component)obj3).gameObject : null); } if (obj == null) { HashSet<Component> setExact = LFCSpawnRegistry.GetSetExact<Turret>(); if (setExact == null) { obj = null; } else { IEnumerable<Turret> enumerable = setExact.Cast<Turret>(); if (enumerable == null) { obj = null; } else { Turret? obj4 = enumerable.FirstOrDefault((Func<Turret, bool>)((Turret t) => (Object)(object)t != (Object)null && t.turretActive && (Object)(object)t == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent<Turret>())); obj = ((obj4 != null) ? ((Component)obj4).gameObject : null); } } if (obj == null) { HashSet<Component> setExact2 = LFCSpawnRegistry.GetSetExact<Landmine>(); if (setExact2 == null) { obj = null; } else { IEnumerable<Landmine> enumerable2 = setExact2.Cast<Landmine>(); if (enumerable2 == null) { obj = null; } else { Landmine? obj5 = enumerable2.FirstOrDefault((Func<Landmine, bool>)((Landmine l) => (Object)(object)l != (Object)null && l.mineActivated && (Object)(object)l == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent<Landmine>())); obj = ((obj5 != null) ? ((Component)obj5).gameObject : null); } } if (obj == null) { List<Animator> allPoweredLightsAnimators = RoundManager.Instance.allPoweredLightsAnimators; if (allPoweredLightsAnimators == null) { obj = null; } else { Animator? obj6 = ((IEnumerable<Animator>)allPoweredLightsAnimators).FirstOrDefault((Func<Animator, bool>)((Animator p) => (Object)(object)p != (Object)null && !LFCPoweredLightsRegistry.IsLocked(p) && (Object)(object)p == (Object)(object)((Component)((RaycastHit)(ref hit)).collider).GetComponent<Animator>())); 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 <StunExplosionCoroutine>d__22 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LightEaterAI <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <StunExplosionCoroutine>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 <SwingCoroutine>d__26 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LightEaterAI <>4__this; public int playerId; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SwingCoroutine>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<PlayerControllerB>().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<AudioClip>(); public AudioClip[] LightEaterSounds = Array.Empty<AudioClip>(); 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<EnemyAI> source = LFCSpawnRegistry.GetAllAs<EnemyAI>()?.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<Animator> 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<Animator> 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(<StunExplosionCoroutine>d__22))] public IEnumerator StunExplosionCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <StunExplosionCoroutine>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<bool>(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(<SwingCoroutine>d__26))] public IEnumerator SwingCoroutine(int playerId) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SwingCoroutine>d__26(0) { <>4__this = this, playerId = playerId }; } public bool CrossingLight() { List<Animator> allPoweredLightsAnimators = RoundManager.Instance.allPoweredLightsAnimators; object obj; if (allPoweredLightsAnimators == null) { obj = null; } else { Animator? obj2 = ((IEnumerable<Animator>)allPoweredLightsAnimators).FirstOrDefault((Func<Animator, bool>)((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<GrabbableObject> allAs = LFCSpawnRegistry.GetAllAs<GrabbableObject>(); if (allAs == null) { obj = null; } else { GrabbableObject? obj3 = ((IEnumerable<GrabbableObject>)allAs).FirstOrDefault((Func<GrabbableObject, bool>)((GrabbableObject g) => LightEnergyManager.CanBeAbsorbed(g, ((Component)this).transform.position, 10f))); obj = ((obj3 != null) ? ((Component)obj3).gameObject : null); } if (obj == null) { HashSet<Component> setExact = LFCSpawnRegistry.GetSetExact<Turret>(); if (setExact == null) { obj = null; } else { IEnumerable<Turret> enumerable = setExact.Cast<Turret>(); if (enumerable == null) { obj = null; } else { Turret? obj4 = enumerable.FirstOrDefault((Func<Turret, bool>)((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<Component> setExact2 = LFCSpawnRegistry.GetSetExact<Landmine>(); if (setExact2 == null) { obj = null; } else { IEnumerable<Landmine> enumerable2 = setExact2.Cast<Landmine>(); if (enumerable2 == null) { obj = null; } else { Landmine? obj5 = enumerable2.FirstOrDefault((Func<Landmine, bool>)((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<bool>(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<bool>(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<bool>(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<GameObject>(enemy.enemyType.nestSpawnPrefab, ((Component)enemy).transform.position, ((Component)enemy).transform.rotation); val.GetComponentInChildren<NetworkObject>().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<BeltBagItem>()) { if ((Object)(object)allA != (Object)null && (Object)(object)((IEnumerable<GrabbableObject>)allA.objectsInBag).FirstOrDefault((Func<GrabbableObject, bool>)((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<Animator>(); 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.HandleLight