Please disclose if your mod was created primarily 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 Soul Devourer Enemy v1.3.5
SoulDev.dll
Decompiled 4 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using LethalLib.Modules; using Microsoft.CodeAnalysis; using SolidLib.Registry; using SolidLib.Utils; using SoulDev.NetcodePatcher; using Soul_Devourer_Enemy; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("bcs4313")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Soul Devourer Enemy for Lethal Company.")] [assembly: AssemblyFileVersion("1.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+de30a7b4fd06f505c14721da353043ab3517b186")] [assembly: AssemblyProduct("Soul Devourer Enemy")] [assembly: AssemblyTitle("SoulDev")] [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 SoulDev { internal class EntityWarp { public struct entrancePack { public EntranceTeleport tele; public Vector3 navPosition; } public static EntranceTeleport[] mapEntrances; public static entrancePack findNearestEntrance(EnemyAI __instance) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) float num = 100000000f; EntranceTeleport val = null; EntranceTeleport[] array = mapEntrances; for (int i = 0; i < array.Length; i++) { if (__instance.isOutside == array[i].isEntranceToBuilding && Vector3.Distance(((Component)__instance).transform.position, ((Component)array[i]).transform.position) < num) { num = Vector3.Distance(((Component)__instance).transform.position, ((Component)array[i]).transform.position); val = array[i]; } } entrancePack result = default(entrancePack); NavMeshHit val2 = default(NavMeshHit); if ((Object)(object)val != (Object)null && NavMesh.SamplePosition(((Component)val).transform.position, ref val2, 10f, -1)) { result.navPosition = ((NavMeshHit)(ref val2)).position; } result.tele = val; return result; } public static void SendEnemyInside(EnemyAI __instance) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) __instance.isOutside = false; __instance.allAINodes = GameObject.FindGameObjectsWithTag("AINode"); EntranceTeleport tele = findNearestEntrance(__instance).tele; if (!Object.op_Implicit((Object)(object)tele)) { Debug.LogError((object)"MOAI EntranceTeleport: Failed to find entrance teleport."); } Transform entrancePoint = tele.entrancePoint; if (!Object.op_Implicit((Object)(object)entrancePoint)) { Debug.LogError((object)"MOAI EntranceTeleport: Failed to find best exit position."); } NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)entrancePoint).transform.position, ref val, 10f, -1)) { __instance.serverPosition = ((NavMeshHit)(ref val)).position; ((Component)__instance).transform.position = ((NavMeshHit)(ref val)).position; __instance.agent.Warp(__instance.serverPosition); __instance.SyncPositionToClients(); } else { Debug.LogError((object)"MOAI EntranceTeleport: Failed to find exit NavmeshHit position"); } } public static void SendEnemyOutside(EnemyAI __instance, bool SpawnOnDoor = true) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) __instance.isOutside = true; __instance.allAINodes = GameObject.FindGameObjectsWithTag("OutsideAINode"); EntranceTeleport tele = findNearestEntrance(__instance).tele; if (!Object.op_Implicit((Object)(object)tele)) { Debug.LogError((object)"MOAI EntranceTeleport: Failed to find entrance teleport."); } Transform entrancePoint = tele.entrancePoint; if (!Object.op_Implicit((Object)(object)entrancePoint)) { Debug.LogError((object)"MOAI EntranceTeleport: Failed to find best exit position."); } NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)entrancePoint).transform.position, ref val, 10f, -1)) { __instance.serverPosition = ((NavMeshHit)(ref val)).position; ((Component)__instance).transform.position = ((NavMeshHit)(ref val)).position; __instance.agent.Warp(__instance.serverPosition); __instance.SyncPositionToClients(); } else { Debug.LogError((object)"MOAI EntranceTeleport: Failed to find exit NavmeshHit position"); } } } internal class SoulDevourerAI : EnemyAI { public enum State { SearchingForPlayer, Staring, HeadingToEntrance, Attacking, Shredding, Leaping, Fleeing, HeadingToMusic, Crying } protected Animator animator; protected float starePoints = 0f; protected float angerRate = 110f; protected int attackState = 0; private bool proccedRoar = false; private bool proccedCrouch = false; private bool proccedRun = false; private bool proceedShred = false; private bool proceedLeap = false; private PlayerControllerB shreddedPlayer = null; public Collider uprightCollider; public Collider foursCollider; public Transform mouth; protected bool thrashingCorpse = false; protected PlayerControllerB attachedPlayer = null; private float attachTime = 0f; private bool isOutSwitch = false; private float lastThrashTime = 0f; public Transform legCastPoint; protected float baseLeapChance = 100f; protected float leaptime = 0f; protected Vector3 leapPos; protected EntranceTeleport nearestEntrance = null; public Vector3 nearestEntranceNavPosition = Vector3.zero; protected PlayerControllerB mostRecentPlayer = null; protected int entranceDelay = 0; protected float chanceToLocateEntrancePlayerBonus = 0f; protected float chanceToLocateEntrance = 0f; public List<EnemyAI> unreachableEnemies = new List<EnemyAI>(); public Vector3 itemNavmeshPosition = Vector3.zero; protected int sourcecycle = 75; protected float stamina = 0f; protected bool recovering = false; public int provokePoints = 0; public Transform turnCompass; protected float timeSinceHittingLocalPlayer; protected float timeSinceNewRandPos; protected Vector3 positionRandomness; protected Vector3 StalkPos; protected Random enemyRandom; protected bool isDeadAnimationDone; private float timeSinceFleeStart = 0f; private Vector3 fleeDestination = Vector3.zero; public ParticleSystem shadowParticles; private bool awaitingShadowMode = false; private bool shadowEnable = false; private bool isVisible = true; public GameObject meshRenderRoot; private float timeControl = 1f; public AudioSource creatureRoar; public AudioSource creatureHit1; public AudioSource creatureHit2; private int hitRotation = 1; public AudioSource creatureStare; public AudioSource creatureExtract; public AudioSource creatureLeap; public AudioSource creatureDeath; public AudioSource creatureFlee; private bool markDead = false; public Volume postProcessVolume; protected float processScalar = 0.2f; protected float runAnimationCoefficient = 14f; protected float walkAnimationCoefficient = 3f; private bool musicPresent = false; private Vector3 musicDest = Vector3.zero; private float musicDist = 9999f; private int musicDelay = 0; public AudioSource creatureCrying; public float cryTime = 0f; public void LogDebug(string text) { Plugin.Logger.LogInfo((object)text); } public void facePosition(Vector3 pos) { //IL_0001: 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) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) Vector3 val = pos - ((Component)this).transform.position; val.y = 0f; if (val != Vector3.zero) { Quaternion val2 = Quaternion.LookRotation(val); ((Component)this).transform.rotation = Quaternion.Euler(0f, ((Quaternion)(ref val2)).eulerAngles.y, 0f); } } public override void OnDestroy() { ((EnemyAI)this).OnDestroy(); } public PlayerControllerB getNearestPlayer() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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) PlayerControllerB[] allPlayerScripts = RoundManager.Instance.playersManager.allPlayerScripts; PlayerControllerB result = null; float num = 1E+09f; foreach (PlayerControllerB val in allPlayerScripts) { if (Object.op_Implicit((Object)(object)val) && !val.isPlayerDead && val.isPlayerControlled && Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) < num) { num = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); result = val; } } return result; } public void listenForMusic() { //IL_00a2: 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_0037: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: 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_0079: 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_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) try { GameObject val = GameObject.Find("ItemShip"); musicPresent = false; if ((Object)(object)val != (Object)null) { if (base.currentBehaviourStateIndex == 8) { if (Vector3.Distance(val.transform.position, ((Component)this).transform.position) < 9f) { musicPresent = true; musicDest = val.transform.position; musicDist = Vector3.Distance(val.transform.position, ((Component)this).transform.position); return; } } else if (Vector3.Distance(val.transform.position, ((Component)this).transform.position) < 90f) { musicPresent = true; musicDest = val.transform.position; musicDist = Vector3.Distance(val.transform.position, ((Component)this).transform.position); return; } } BoomboxItem[] array = Object.FindObjectsOfType<BoomboxItem>(); foreach (BoomboxItem val2 in array) { if (base.currentBehaviourStateIndex == 8) { if (Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position) < 9f && val2.isPlayingMusic) { musicPresent = true; musicDest = ((Component)val2).transform.position; musicDist = Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position); break; } } else if (Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position) < 34f && val2.isPlayingMusic) { musicPresent = true; musicDest = ((Component)val2).transform.position; musicDist = Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position); break; } } } catch (Exception ex) { Debug.Log((object)ex); } } public void baseHeadingToMusic() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Invalid comparison between Unknown and I4 //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) base.targetPlayer = null; Vector3 velocity = base.agent.velocity; if (((Vector3)(ref velocity)).magnitude > base.agent.speed / 4f) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { DoAnimationClientRpc(1); } velocity = base.agent.velocity; setAnimationSpeedClientRpc(((Vector3)(ref velocity)).magnitude / walkAnimationCoefficient); } else { velocity = base.agent.velocity; if (((Vector3)(ref velocity)).magnitude <= base.agent.speed / 8f) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { DoAnimationClientRpc(0); } setAnimationSpeedClientRpc(1f); } } ((EnemyAI)this).SetDestinationToPosition(musicDest, false); if ((int)base.agent.pathStatus == 1) { musicDelay = 300; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } if ((double)Vector3.Distance(((Component)this).transform.position, musicDest) < 7.0 + (double)((Component)this).gameObject.transform.localScale.x) { musicDelay = 300; cryTime = (float)(enemyRandom.NextDouble() * 60.0 + 15.0); ((EnemyAI)this).SwitchToBehaviourClientRpc(8); } if (provokePoints > 0) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } if (!musicPresent) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } } public void forceVol() { base.creatureVoice.volume = Plugin.moaiGlobalMusicVol.Value; base.creatureSFX.volume = Plugin.moaiGlobalMusicVol.Value; creatureRoar.volume = Plugin.moaiGlobalMusicVol.Value; creatureDeath.volume = Plugin.moaiGlobalMusicVol.Value; creatureExtract.volume = Plugin.moaiGlobalMusicVol.Value; creatureFlee.volume = Plugin.moaiGlobalMusicVol.Value; creatureHit1.volume = Plugin.moaiGlobalMusicVol.Value; creatureHit2.volume = Plugin.moaiGlobalMusicVol.Value; creatureStare.volume = Plugin.moaiGlobalMusicVol.Value; creatureCrying.volume = Plugin.moaiGlobalMusicVol.Value; } public override void Start() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Start(); EntityWarp.mapEntrances = Object.FindObjectsOfType<EntranceTeleport>(false); mostRecentPlayer = getNearestPlayer(); animator = ((Component)this).gameObject.GetComponent<Animator>(); if (((NetworkBehaviour)RoundManager.Instance).IsHost) { DoAnimationClientRpc(0); } stamina += 60f; forceVol(); timeSinceHittingLocalPlayer = 0f; timeSinceNewRandPos = 0f; positionRandomness = new Vector3(0f, 0f, 0f); enemyRandom = new Random(StartOfRound.Instance.randomMapSeed + base.thisEnemyIndex); isDeadAnimationDone = false; base.currentBehaviourStateIndex = 0; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); moaiSoundPlayClientRpc("creatureVoice"); base.enemyHP = Plugin.health.Value; float num = Plugin.moaiGlobalSize.Value; if (base.enemyType.enemyName.ToLower().Contains("inside")) { num *= 0.4f; } if (enemyRandom.NextDouble() <= (double)Plugin.moaiGlobalSizeVar.Value && base.isOutside) { num = ((!(Random.Range(0f, 1f) < 0.5f)) ? ((1f + Random.Range(0f, 2f)) * num) : ((1f - Random.Range(0f, 0.95f)) * num)); } modifySizeClientRpc(num); if (((NetworkBehaviour)RoundManager.Instance).IsHost) { SoulDevourerAI[] array = Object.FindObjectsOfType<SoulDevourerAI>(); if (array.Length > Plugin.maxCount.Value) { Debug.Log((object)"Soul Devourer: Destroyed Self (max count reached)"); Object.Destroy((Object)(object)((Component)this).gameObject); } } } [ClientRpc] public void modifySizeClientRpc(float size) { //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_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_007d: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(107833227u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref size, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 107833227u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; float num = (float)Math.Pow(size, 0.3); Transform transform = ((Component)this).gameObject.transform; transform.localScale *= size * Plugin.moaiGlobalSize.Value; NavMeshAgent component = ((Component)this).gameObject.GetComponent<NavMeshAgent>(); component.height *= size; AudioSource creatureVoice = base.creatureVoice; creatureVoice.pitch /= num; AudioSource creatureSFX = base.creatureSFX; creatureSFX.pitch /= num; AudioSource obj = creatureRoar; obj.pitch /= num; AudioSource obj2 = creatureHit1; obj2.pitch /= num; AudioSource obj3 = creatureHit2; obj3.pitch /= num; AudioSource obj4 = creatureStare; obj4.pitch /= num; AudioSource obj5 = creatureExtract; obj5.pitch /= num; AudioSource obj6 = creatureLeap; obj6.pitch /= num; AudioSource obj7 = creatureDeath; obj7.pitch /= num; AudioSource obj8 = creatureFlee; obj8.pitch /= num; AudioSource obj9 = creatureCrying; obj9.pitch /= num; timeControl /= num; } } } public void LateUpdate() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0108: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB localPlayerController = RoundManager.Instance.playersManager.localPlayerController; float num = Vector3.Distance(((Component)this).transform.position, ((Component)localPlayerController).transform.position); if (num > 40f || !Plugin.pulseFX.Value) { postProcessVolume.weight = 0f; } else { Volume obj = postProcessVolume; obj.weight /= 1f + 0.2f * num * processScalar; } if (Object.op_Implicit((Object)(object)attachedPlayer) && Math.Abs(Time.time - attachTime) > 1.2f && ((NetworkBehaviour)RoundManager.Instance).IsHost) { letGoOfPlayerClientRpc(((NetworkBehaviour)attachedPlayer).NetworkObject.NetworkObjectId); } if (Object.op_Implicit((Object)(object)attachedPlayer) && !thrashingCorpse) { ((Component)attachedPlayer).transform.position = mouth.position; if ((float)enemyRandom.Next() < 0.25f) { attachedPlayer.DropBlood(default(Vector3), true, false); attachedPlayer.AddBloodToBody(); attachedPlayer.bloodParticle.Play(); attachedPlayer.deadBody.bloodSplashParticle.Play(); } } if (Object.op_Implicit((Object)(object)attachedPlayer) && thrashingCorpse) { ((Component)attachedPlayer.deadBody).transform.position = mouth.position; if ((float)enemyRandom.Next() < 0.25f) { attachedPlayer.deadBody.bloodSplashParticle.Play(); attachedPlayer.deadBody.MakeCorpseBloody(); } } } public override void Update() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (base.creatureVoice.volume != Plugin.moaiGlobalMusicVol.Value) { forceVol(); } if (!base.isEnemyDead && base.enemyHP <= 0 && !markDead) { animator.speed = 1f; ((EnemyAI)this).KillEnemyOnOwnerClient(false); stopAllSound(); AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Death")) { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Exit")) { animator.Play("Death"); } } base.isEnemyDead = true; base.enemyHP = 0; moaiSoundPlayClientRpc("creatureDeath"); deadEventClientRpc(); markDead = true; } if (base.isEnemyDead) { if (!isDeadAnimationDone) { animator.speed = 1f; isDeadAnimationDone = true; stopAllSound(); base.creatureVoice.PlayOneShot(base.dieSFX); } return; } if ((Object)(object)base.targetPlayer != (Object)null && base.targetPlayer.isPlayerDead) { base.targetPlayer = null; } base.movingTowardsTargetPlayer = (Object)(object)base.targetPlayer != (Object)null; timeSinceHittingLocalPlayer += Time.deltaTime; timeSinceNewRandPos += Time.deltaTime; if ((Object)(object)base.targetPlayer != (Object)null && ((EnemyAI)this).PlayerIsTargetable(base.targetPlayer, false, false, true)) { turnCompass.LookAt(((Component)base.targetPlayer.gameplayCamera).transform.position); } if (base.stunNormalizedTimer > 0f && ((NetworkBehaviour)RoundManager.Instance).IsHost) { base.stunNormalizedTimer = 0f; moaiSoundPlayClientRpc("creatureFlee"); base.agent.speed = 0f; timeSinceFleeStart = Time.time; shadowEnable = false; awaitingShadowMode = true; fleeDestination = Vector3.zero; ((EnemyAI)this).StopSearch(base.currentSearch, true); setAnimationSpeedClientRpc(1f * timeControl); animPlayClientRpc("StandingStun"); ((EnemyAI)this).SwitchToBehaviourClientRpc(6); } if (awaitingShadowMode && !shadowEnable && ((NetworkBehaviour)RoundManager.Instance).IsHost) { base.agent.speed = 0f; setAnimationSpeedClientRpc(1f * timeControl); if (creatureFlee.time > 2.41f) { SetVisibleClientRpc(visible: false); shadowEnable = true; } } else if (base.currentBehaviourStateIndex != 6) { shadowEnable = false; awaitingShadowMode = false; } if (base.currentBehaviourStateIndex != 2) { return; } if (base.currentBehaviourStateIndex == 5) { if (((Component)foursCollider).gameObject.activeInHierarchy) { ((Component)foursCollider).gameObject.SetActive(false); } if (((Component)uprightCollider).gameObject.activeInHierarchy) { ((Component)uprightCollider).gameObject.SetActive(false); } } else if (base.currentBehaviourStateIndex == 4) { if (((Component)foursCollider).gameObject.activeInHierarchy) { ((Component)foursCollider).gameObject.SetActive(false); } if (((Component)uprightCollider).gameObject.activeInHierarchy) { ((Component)uprightCollider).gameObject.SetActive(false); } } else if (base.currentBehaviourStateIndex == 3) { if (!((Component)foursCollider).gameObject.activeInHierarchy) { ((Component)foursCollider).gameObject.SetActive(true); } if (((Component)uprightCollider).gameObject.activeInHierarchy) { ((Component)uprightCollider).gameObject.SetActive(false); } } else { if (((Component)foursCollider).gameObject.activeInHierarchy) { ((Component)foursCollider).gameObject.SetActive(false); } if (!((Component)uprightCollider).gameObject.activeInHierarchy) { ((Component)uprightCollider).gameObject.SetActive(true); } } } public override void DoAIInterval() { //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).DoAIInterval(); if (provokePoints > 0) { provokePoints--; } if (entranceDelay > 0) { entranceDelay--; } if (musicDelay > 0) { musicDelay--; } if (sourcecycle > 0) { sourcecycle--; } else { sourcecycle = 75; unreachableEnemies.Clear(); } if (stamina <= 0f) { recovering = true; } else if (stamina > 60f) { recovering = false; } if (sourcecycle % 5 == 0) { EntityWarp.entrancePack entrancePack = EntityWarp.findNearestEntrance((EnemyAI)(object)this); listenForMusic(); nearestEntrance = entrancePack.tele; nearestEntranceNavPosition = entrancePack.navPosition; if (stamina < 120f) { stamina += 8f; } mostRecentPlayer = getNearestPlayer(); } if ((Object)(object)base.targetPlayer != (Object)null) { mostRecentPlayer = base.targetPlayer; } if (!isVisible && base.currentBehaviourStateIndex != 6) { SetVisibleClientRpc(visible: true); } AIInterval(); } public void AIInterval() { switch (base.currentBehaviourStateIndex) { case 0: baseSearchingForPlayer(); break; case 2: baseHeadingToEntrance(); break; case 1: baseStaring(); break; case 3: baseAttacking(32f); break; case 4: baseShredding(); break; case 6: baseFleeing(); break; case 7: baseHeadingToMusic(); break; case 8: baseCrying(); break; default: LogDebug("This Behavior State doesn't exist!"); break; } } public void baseFleeing() { //IL_0044: 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) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) if (!shadowEnable) { base.agent.speed = 0f; return; } base.agent.speed = 15f * Plugin.moaiGlobalSpeed.Value; if (fleeDestination == Vector3.zero) { fleeDestination = pickFleeDestination(); return; } base.targetPlayer = null; ((EnemyAI)this).SetDestinationToPosition(fleeDestination, false); if ((double)Vector3.Distance(fleeDestination, ((Component)this).transform.position) < 2.0 + (double)((Component)this).gameObject.transform.localScale.x || Time.time - timeSinceFleeStart > 9f) { stamina = 120f; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); shadowParticles.Stop(); shadowEnable = false; awaitingShadowMode = false; base.targetPlayer = null; SetVisibleClientRpc(visible: true); animPlayClientRpc("Walk"); DoAnimationClientRpc(1); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } } [ClientRpc] private void SetVisibleClientRpc(bool visible) { //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_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_007d: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(12838872u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref visible, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 12838872u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Renderer[] componentsInChildren = meshRenderRoot.GetComponentsInChildren<Renderer>(true); foreach (Renderer val3 in componentsInChildren) { val3.enabled = visible; } isVisible = visible; if (!visible) { shadowParticles.Play(); } else { shadowParticles.Stop(); } } } public Vector3 pickFleeDestination() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) GameObject[] array = GameObject.FindGameObjectsWithTag("OutsideAINode"); if (!base.isOutside) { array = GameObject.FindGameObjectsWithTag("AINode"); } List<GameObject> list = new List<GameObject>(); GameObject[] array2 = array; foreach (GameObject val in array2) { if (Vector3.Distance(val.transform.position, ((Component)this).transform.position) > 60f) { list.Add(val); } } if (list.Count > 0) { return list[enemyRandom.Next(0, list.Count)].transform.position; } return array[enemyRandom.Next(0, array.Length)].transform.position; } public void baseShredding() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) if (!creatureHit1.isPlaying && !creatureHit2.isPlaying) { if (hitRotation == 1) { moaiSoundPlayClientRpc("creatureHit1"); hitRotation = 2; } else { moaiSoundPlayClientRpc("creatureHit2"); hitRotation = 1; } } AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Thrash") && !proceedShred) { animPlayClientRpc("Thrash"); DoAnimationClientRpc(6); proceedShred = true; } setAnimationSpeedClientRpc(1f); currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if ((double)((AnimatorStateInfo)(ref currentAnimatorStateInfo)).normalizedTime >= 0.8) { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Thrash")) { attackState = 2; DoAnimationClientRpc(5); animPlayClientRpc("Run"); ((EnemyAI)this).SwitchToBehaviourClientRpc(3); } } } public void baseStaring() { //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) base.agent.speed = 0f; setAnimationSpeedClientRpc(1f); if (animator.GetInteger("state") != 2) { starePoints = 0f; DoAnimationClientRpc(2); animPlayClientRpc("Stare"); if (!creatureStare.isPlaying) { moaiSoundPlayClientRpc("creatureStare"); } } if (FoundClosestPlayerInRange(stamina, needLineOfSight: true)) { starePoints += angerRate / Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position); facePosition(((Component)base.targetPlayer).transform.position); } else { starePoints -= 2f; } AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Stare")) { return; } currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).normalizedTime >= 1f) { if ((double)starePoints > enemyRandom.NextDouble() * 100.0) { attackState = 0; ((EnemyAI)this).StopSearch(base.currentSearch, true); proccedRoar = false; proccedCrouch = false; proccedRun = false; ((EnemyAI)this).SwitchToBehaviourClientRpc(3); } else { stamina -= 80f; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } } } public void baseCrying() { //IL_003d: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) base.agent.speed = 0f * Plugin.moaiGlobalSpeed.Value; animator.speed = 1f; DoAnimationClientRpc(7); AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Cry")) { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Walk")) { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Stand")) { animPlayClientRpc("Cry"); } } } if (!creatureCrying.isPlaying) { moaiSoundPlayClientRpc("creatureCrying"); } cryTime -= 0.2f; if (cryTime <= 0f) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } if (provokePoints > 0) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } if (musicPresent) { return; } PlayerControllerB nearestPlayer = getNearestPlayer(); if (Vector3.Distance(((Component)nearestPlayer).transform.position, musicDest) > 6f) { base.stunNormalizedTimer = 0f; moaiSoundPlayClientRpc("creatureFlee"); base.agent.speed = 0f; timeSinceFleeStart = Time.time; shadowEnable = false; awaitingShadowMode = true; fleeDestination = Vector3.zero; ((EnemyAI)this).StopSearch(base.currentSearch, true); setAnimationSpeedClientRpc(1f * timeControl); animPlayClientRpc("StandingStun"); ((EnemyAI)this).SwitchToBehaviourClientRpc(6); return; } provokePoints += 100; base.targetPlayer = nearestPlayer; stamina = 100f; recovering = false; ((EnemyAI)this).SwitchToBehaviourClientRpc(3); if (((NetworkBehaviour)this).IsOwner) { if (base.enemyHP <= 0 && !markDead) { ((EnemyAI)this).KillEnemyOnOwnerClient(false); stopAllSound(); base.isEnemyDead = true; moaiSoundPlayClientRpc("creatureDeath"); deadEventClientRpc(); markDead = true; } else { moaiSoundPlayClientRpc("creatureHit"); } } } public void baseSearchingForPlayer(float lineOfSightRange = 28f) { //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) //IL_009b: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) base.agent.speed = 6f * Plugin.moaiGlobalSpeed.Value; base.agent.angularSpeed = 120f; Vector3 velocity = base.agent.velocity; if (((Vector3)(ref velocity)).magnitude > base.agent.speed / 4f) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { DoAnimationClientRpc(1); } velocity = base.agent.velocity; setAnimationSpeedClientRpc(((Vector3)(ref velocity)).magnitude / walkAnimationCoefficient); } else { velocity = base.agent.velocity; if (((Vector3)(ref velocity)).magnitude <= base.agent.speed / 8f) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { DoAnimationClientRpc(0); } setAnimationSpeedClientRpc(1f); } } if (!base.creatureVoice.isPlaying) { moaiSoundPlayClientRpc("creatureVoice"); } updateEntranceChance(); if (enemyRandom.NextDouble() < (double)chanceToLocateEntrance && ((Component)this).gameObject.transform.localScale.x <= 2.2f && Plugin.canEnterIndoors.Value) { Debug.Log((object)"Soul Devourer: entrance state switch"); ((EnemyAI)this).StopSearch(base.currentSearch, true); ((EnemyAI)this).SwitchToBehaviourClientRpc(2); } if ((FoundClosestPlayerInRange(lineOfSightRange, needLineOfSight: true) && stamina >= 120f) || provokePoints > 0) { ((EnemyAI)this).StopSearch(base.currentSearch, true); ((EnemyAI)this).SwitchToBehaviourClientRpc(1); return; } if (stamina < 100f) { base.targetPlayer = null; } if (musicPresent && musicDelay <= 0) { ((EnemyAI)this).SwitchToBehaviourClientRpc(7); } } public void baseHeadingToEntrance() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Invalid comparison between Unknown and I4 //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) base.targetPlayer = null; Vector3 velocity = base.agent.velocity; if (((Vector3)(ref velocity)).magnitude > base.agent.speed / 4f) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { DoAnimationClientRpc(1); } velocity = base.agent.velocity; setAnimationSpeedClientRpc(((Vector3)(ref velocity)).magnitude / walkAnimationCoefficient); } else { velocity = base.agent.velocity; if (((Vector3)(ref velocity)).magnitude <= base.agent.speed / 8f) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { DoAnimationClientRpc(0); } setAnimationSpeedClientRpc(1f); } } ((EnemyAI)this).SetDestinationToPosition(nearestEntranceNavPosition, false); if (base.isOutside != nearestEntrance.isEntranceToBuilding || (int)base.agent.pathStatus == 1) { entranceDelay = 150; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } if ((double)Vector3.Distance(((Component)this).transform.position, nearestEntranceNavPosition) < 2.0 + (double)((Component)this).gameObject.transform.localScale.x) { if (nearestEntrance.isEntranceToBuilding) { Debug.Log((object)"SoulDev: Warp in"); EntityWarp.SendEnemyInside((EnemyAI)(object)this); modifySizeClientRpc(0.4f); nearestEntrance.PlayAudioAtTeleportPositions(); } else { Debug.Log((object)"SoulDev: Warp out"); EntityWarp.SendEnemyOutside((EnemyAI)(object)this); nearestEntrance.PlayAudioAtTeleportPositions(); } entranceDelay = 150; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } if (provokePoints > 0) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } } public void baseLeaping() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).SetDestinationToPosition(leapPos, false); if (!creatureLeap.isPlaying && !proceedLeap) { moaiSoundPlayClientRpc("creatureLeap"); } setAnimationSpeedClientRpc(1f); if (Time.time - leaptime >= 1f) { attackState = 2; proccedRun = false; if (stamina < 10f) { stamina = 10f; } DoAnimationClientRpc(5); animPlayClientRpc("Run"); attackState = 2; proccedRun = false; base.agent.acceleration = 14.5f * Plugin.moaiGlobalSpeed.Value; base.agent.speed = 14f * Plugin.moaiGlobalSpeed.Value; base.agent.angularSpeed = 145f; ((EnemyAI)this).SwitchToBehaviourClientRpc(3); } } public Vector3 getLeapPos() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)base.targetPlayer).transform.position; Vector3 val = default(Vector3); NavMeshHit val2 = default(NavMeshHit); for (int i = 0; i < 10; i++) { int num = enemyRandom.Next(-10, 10); int num2 = enemyRandom.Next(-35, 35); int num3 = enemyRandom.Next(-35, 35); ((Vector3)(ref val))..ctor(position.x + (float)num2, position.y + (float)num, position.z + (float)num3); bool flag = NavMesh.SamplePosition(val, ref val2, 60f, -1); float num4 = Vector3.Distance(position, ((NavMeshHit)(ref val2)).position); if (flag && num4 > 13f) { return ((NavMeshHit)(ref val2)).position; } } return ((Component)base.targetPlayer).transform.position; } public void baseAttacking(float range = 22f, float noLOSDivisor = 1.8f) { //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: 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) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) AnimatorStateInfo currentAnimatorStateInfo; if (attackState == 0) { if (!creatureRoar.isPlaying) { moaiSoundPlayClientRpc("creatureRoar"); } currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Roar") && !proccedRoar) { animPlayClientRpc("Roar"); DoAnimationClientRpc(3); proccedRoar = true; } setAnimationSpeedClientRpc(1f); currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if ((double)((AnimatorStateInfo)(ref currentAnimatorStateInfo)).normalizedTime >= 0.8) { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Roar")) { attackState = 1; } } } if (attackState == 1) { DoAnimationClientRpc(4); setAnimationSpeedClientRpc(2.5f); currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Prepare") && !proccedCrouch) { animPlayClientRpc("Prepare"); DoAnimationClientRpc(3); proccedCrouch = true; } currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if ((double)((AnimatorStateInfo)(ref currentAnimatorStateInfo)).normalizedTime >= 0.8) { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Prepare")) { attackState = 2; } } } if (attackState == 2) { if (!base.creatureSFX.isPlaying) { moaiSoundPlayClientRpc("creatureSFX"); } base.agent.speed = 20f * Plugin.moaiGlobalSpeed.Value; base.agent.acceleration = 14.5f * Plugin.moaiGlobalSpeed.Value; base.agent.angularSpeed = 140f; Vector3 velocity = base.agent.velocity; setAnimationSpeedClientRpc(((Vector3)(ref velocity)).magnitude / runAnimationCoefficient); DoAnimationClientRpc(5); currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Run") && !proccedRun) { animPlayClientRpc("Run"); DoAnimationClientRpc(5); proccedRun = true; } } else { base.agent.speed = 0f * Plugin.moaiGlobalSpeed.Value; } updateEntranceChance(); stamina -= 2.8f; if (!FoundClosestPlayerInRange(stamina / noLOSDivisor, needLineOfSight: false) && !FoundClosestPlayerInRange(stamina, needLineOfSight: true)) { base.targetPlayer = null; starePoints = 0f; ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); base.agent.acceleration = 14.5f * Plugin.moaiGlobalSpeed.Value; } else { StickingInFrontOfPlayer(); } } public void updateEntranceChance() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)nearestEntrance)) { return; } float num = Vector3.Distance(((Component)this).transform.position, ((Component)nearestEntrance).transform.position); chanceToLocateEntrancePlayerBonus = 1f; if (Object.op_Implicit((Object)(object)mostRecentPlayer)) { if (Object.op_Implicit((Object)(object)mostRecentPlayer) == base.isOutside) { chanceToLocateEntrancePlayerBonus = 1f; } else { chanceToLocateEntrancePlayerBonus = 1.5f; } } int num2 = 1; if (num < 20f) { num2 = 4; } if (num < 15f) { num2 = 6; } if (num < 10f) { num2 = 7; } if (num < 5f) { num2 = 10; } if (Object.op_Implicit((Object)(object)nearestEntrance)) { chanceToLocateEntrance = (float)(1.0 / Math.Pow(num, 2.0)) * (float)num2 * chanceToLocateEntrancePlayerBonus - (float)entranceDelay; } } public bool FoundClosestPlayerInRange(float r, bool needLineOfSight) { if (recovering) { return false; } moaiTargetClosestPlayer(r, needLineOfSight); if ((Object)(object)base.targetPlayer == (Object)null) { return false; } return (Object)(object)base.targetPlayer != (Object)null; } public bool moaiTargetClosestPlayer(float range, bool requireLineOfSight) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if (recovering) { return false; } base.mostOptimalDistance = range; PlayerControllerB targetPlayer = base.targetPlayer; base.targetPlayer = null; for (int i = 0; i < StartOfRound.Instance.connectedPlayersAmount + 1; i++) { if (((EnemyAI)this).PlayerIsTargetable(StartOfRound.Instance.allPlayerScripts[i], false, false, true) && (!requireLineOfSight || ((EnemyAI)this).CheckLineOfSightForPosition(((Component)StartOfRound.Instance.allPlayerScripts[i].gameplayCamera).transform.position, Plugin.LOSWidth.Value, 80, -1f, (Transform)null))) { base.tempDist = Vector3.Distance(((Component)this).transform.position, ((Component)StartOfRound.Instance.allPlayerScripts[i]).transform.position); if (base.tempDist < base.mostOptimalDistance) { base.mostOptimalDistance = base.tempDist; base.targetPlayer = StartOfRound.Instance.allPlayerScripts[i]; } } } if ((Object)(object)base.targetPlayer != (Object)null && (Object)(object)targetPlayer != (Object)null) { base.targetPlayer = targetPlayer; } return (Object)(object)base.targetPlayer != (Object)null; } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { ((EnemyAI)this).HitEnemy(force, playerWhoHit, playHitSFX, -1); if (base.isEnemyDead || (hitID == -1 && (Object)(object)playerWhoHit == (Object)null)) { return; } base.enemyHP -= force; if ((Object)(object)playerWhoHit != (Object)null) { provokePoints += 20 * force; base.targetPlayer = playerWhoHit; } stamina = 60f; recovering = false; ((EnemyAI)this).SwitchToBehaviourClientRpc(3); if (((NetworkBehaviour)this).IsOwner) { if (base.enemyHP <= 0 && !markDead) { ((EnemyAI)this).KillEnemyOnOwnerClient(false); stopAllSound(); base.isEnemyDead = true; moaiSoundPlayClientRpc("creatureDeath"); deadEventClientRpc(); markDead = true; } else { moaiSoundPlayClientRpc("creatureHit"); } } } [ClientRpc] public void deadEventClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(815579584u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 815579584u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; animator.Play("Death"); base.isEnemyDead = true; } } } [ServerRpc(RequireOwnership = false)] public void letGoOfPlayerServerRpc(ulong 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) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3542143556u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3542143556u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; letGoOfPlayerClientRpc(playerId); } } } [ClientRpc] public void letGoOfPlayerClientRpc(ulong 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) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1919010792u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1919010792u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB val3 = null; RoundManager instance = RoundManager.Instance; PlayerControllerB[] allPlayerScripts = instance.playersManager.allPlayerScripts; foreach (PlayerControllerB val4 in allPlayerScripts) { if (((NetworkBehaviour)val4).NetworkObject.NetworkObjectId == playerId) { val3 = val4; } } val3.playerCollider.enabled = true; NavMeshHit val5 = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)val3).transform.position, ref val5, 15f, -1)) { ((Component)val3).transform.position = ((NavMeshHit)(ref val5)).position; } attachedPlayer = null; } private void StickingInFrontOfPlayer() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)base.targetPlayer == (Object)null) && ((NetworkBehaviour)this).IsOwner) { StalkPos = ((Component)base.targetPlayer).transform.position; ((EnemyAI)this).SetDestinationToPosition(StalkPos, false); } } public override void OnCollideWithEnemy(Collider other, EnemyAI collidedEnemy = null) { if (!(timeSinceHittingLocalPlayer < 0.5f) && !collidedEnemy.isEnemyDead && !base.isEnemyDead && !((Object)(object)collidedEnemy.enemyType == (Object)(object)base.enemyType)) { string text = ((Object)collidedEnemy.enemyType).name.ToLower(); if ((!text.Contains("mouth") || !text.Contains("dog")) && !collidedEnemy.enemyType.enemyName.ToLower().Contains("soul")) { timeSinceHittingLocalPlayer = 0f; collidedEnemy.HitEnemy(1, (PlayerControllerB)null, true, -1); } } } public override void OnCollideWithPlayer(Collider other) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) if (timeSinceHittingLocalPlayer < 1.7f) { return; } PlayerControllerB val = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, false, false); if (lastThrashTime > Time.time + Plugin.thrashCooldown.Value || !((Object)(object)val != (Object)null)) { return; } Vector3 position = ((Component)this).transform.position; Vector3 val2 = ((Component)val).transform.position + Vector3.up * 0.5f; Debug.Log((object)"LOSCHECK"); RaycastHit val3 = default(RaycastHit); if (Physics.Linecast(position, val2, ref val3, LayerMask.GetMask(new string[3] { "Default", "Room", "Terrain" })) && !((Component)((RaycastHit)(ref val3)).collider).transform.IsChildOf(((Component)val).transform)) { return; } timeSinceHittingLocalPlayer = 0f; if (val.health <= 45) { val.KillPlayer(val.velocityLastFrame, true, (CauseOfDeath)6, 0, default(Vector3), false); if (((NetworkBehaviour)RoundManager.Instance).IsHost) { attachPlayerClientRpc(((NetworkBehaviour)val).NetworkObject.NetworkObjectId, lastHit: true, 20); lastThrashTime = Time.time; } else { attachPlayerServerRpc(((NetworkBehaviour)val).NetworkObject.NetworkObjectId, lastHit: true, 20); lastThrashTime = Time.time; } } else { val.DamagePlayer(45, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); if (((NetworkBehaviour)RoundManager.Instance).IsHost) { attachPlayerClientRpc(((NetworkBehaviour)val).NetworkObject.NetworkObjectId, lastHit: false, 10); lastThrashTime = Time.time; } else { attachPlayerServerRpc(((NetworkBehaviour)val).NetworkObject.NetworkObjectId, lastHit: false, 10); lastThrashTime = Time.time; } } } [ServerRpc(RequireOwnership = false)] public void attachPlayerServerRpc(ulong uid, bool lastHit, int staminaGrant) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3820758844u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, uid); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref lastHit, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, staminaGrant); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3820758844u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; attachPlayerClientRpc(uid, lastHit, staminaGrant); } } } [ClientRpc] public void attachPlayerClientRpc(ulong uid, bool lastHit, int staminaGrant) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(158514313u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, uid); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref lastHit, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, staminaGrant); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 158514313u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; stamina += staminaGrant; proceedShred = false; attachTime = Time.time; if (((NetworkBehaviour)RoundManager.Instance).IsHost) { ((EnemyAI)this).SwitchToBehaviourClientRpc(4); } RoundManager instance = RoundManager.Instance; PlayerControllerB[] allPlayerScripts = instance.playersManager.allPlayerScripts; foreach (PlayerControllerB val3 in allPlayerScripts) { if (((NetworkBehaviour)val3).NetworkObject.NetworkObjectId == uid) { shreddedPlayer = val3; if (!lastHit) { ((Component)val3).transform.position = mouth.position; val3.playerCollider.enabled = false; attachedPlayer = val3; thrashingCorpse = false; } else { ((Component)val3.deadBody).transform.position = mouth.position; attachedPlayer = val3; thrashingCorpse = true; } break; } } } public virtual void playSoundId(string id) { } public void stopAllSound() { base.creatureSFX.Stop(); base.creatureVoice.Stop(); creatureRoar.Stop(); creatureStare.Stop(); creatureFlee.Stop(); } [ClientRpc] public void moaiSoundPlayClientRpc(string soundName) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_0088: 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_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2548432240u, val, (RpcDelivery)0); bool flag = soundName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(soundName, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2548432240u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; switch (soundName) { case "creatureSFX": stopAllSound(); base.creatureSFX.Play(); break; case "creatureVoice": { stopAllSound(); double[] array = new double[10] { 0.0, 0.8244, 11.564, 29.11, 34.491, 37.84, 48.689, 64.518, 89.535, 92.111 }; int num = Random.Range(0, array.Length); base.creatureVoice.Play(); base.creatureVoice.SetScheduledStartTime(array[num]); base.creatureVoice.time = (float)array[num]; break; } case "creatureRoar": stopAllSound(); creatureRoar.Play(); break; case "creatureHit1": creatureHit1.Play(); break; case "creatureHit2": creatureHit2.Play(); break; case "creatureStare": creatureStare.Play(); break; case "creatureLeap": creatureLeap.Play(); break; case "creatureDeath": creatureDeath.Play(); break; case "creatureFlee": stopAllSound(); creatureFlee.Play(); break; case "creatureCrying": stopAllSound(); creatureCrying.Play(); break; } } } [ClientRpc] public void setAnimationSpeedClientRpc(float speed) { //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_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_007d: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2069716591u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref speed, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2069716591u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; animator.speed = speed; } } } [ClientRpc] public void DoAnimationClientRpc(int index) { //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.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(571941155u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, index); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 571941155u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (Object.op_Implicit((Object)(object)animator)) { animator.SetInteger("state", index); } } } [ClientRpc] public void animPlayClientRpc(string name) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_0088: 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_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2747754932u, val, (RpcDelivery)0); bool flag = name != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(name, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2747754932u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; animator.Play(name); } } protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Expected O, but got Unknown //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(107833227u, new RpcReceiveHandler(__rpc_handler_107833227), "modifySizeClientRpc"); ((NetworkBehaviour)this).__registerRpc(12838872u, new RpcReceiveHandler(__rpc_handler_12838872), "SetVisibleClientRpc"); ((NetworkBehaviour)this).__registerRpc(815579584u, new RpcReceiveHandler(__rpc_handler_815579584), "deadEventClientRpc"); ((NetworkBehaviour)this).__registerRpc(3542143556u, new RpcReceiveHandler(__rpc_handler_3542143556), "letGoOfPlayerServerRpc"); ((NetworkBehaviour)this).__registerRpc(1919010792u, new RpcReceiveHandler(__rpc_handler_1919010792), "letGoOfPlayerClientRpc"); ((NetworkBehaviour)this).__registerRpc(3820758844u, new RpcReceiveHandler(__rpc_handler_3820758844), "attachPlayerServerRpc"); ((NetworkBehaviour)this).__registerRpc(158514313u, new RpcReceiveHandler(__rpc_handler_158514313), "attachPlayerClientRpc"); ((NetworkBehaviour)this).__registerRpc(2548432240u, new RpcReceiveHandler(__rpc_handler_2548432240), "moaiSoundPlayClientRpc"); ((NetworkBehaviour)this).__registerRpc(2069716591u, new RpcReceiveHandler(__rpc_handler_2069716591), "setAnimationSpeedClientRpc"); ((NetworkBehaviour)this).__registerRpc(571941155u, new RpcReceiveHandler(__rpc_handler_571941155), "DoAnimationClientRpc"); ((NetworkBehaviour)this).__registerRpc(2747754932u, new RpcReceiveHandler(__rpc_handler_2747754932), "animPlayClientRpc"); ((EnemyAI)this).__initializeRpcs(); } private static void __rpc_handler_107833227(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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float size = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref size, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).modifySizeClientRpc(size); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_12838872(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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool visibleClientRpc = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref visibleClientRpc, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).SetVisibleClientRpc(visibleClientRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_815579584(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; ((SoulDevourerAI)(object)target).deadEventClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3542143556(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).letGoOfPlayerServerRpc(playerId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1919010792(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).letGoOfPlayerClientRpc(playerId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3820758844(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong uid = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref uid); bool lastHit = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref lastHit, default(ForPrimitives)); int staminaGrant = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref staminaGrant); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).attachPlayerServerRpc(uid, lastHit, staminaGrant); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_158514313(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong uid = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref uid); bool lastHit = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref lastHit, default(ForPrimitives)); int staminaGrant = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref staminaGrant); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).attachPlayerClientRpc(uid, lastHit, staminaGrant); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2548432240(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 soundName = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref soundName, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).moaiSoundPlayClientRpc(soundName); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2069716591(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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float animationSpeedClientRpc = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref animationSpeedClientRpc, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).setAnimationSpeedClientRpc(animationSpeedClientRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_571941155(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 index = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref index); target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).DoAnimationClientRpc(index); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2747754932(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 name = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref name, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((SoulDevourerAI)(object)target).animPlayClientRpc(name); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "SoulDevourerAI"; } } } namespace Soul_Devourer_Enemy { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("SoulDev", "Soul Devourer Enemy", "1.0.0")] public class Plugin : BaseUnityPlugin { public static class Assets { public static AssetBundle MainAssetBundle; public static void PopulateAssets() { string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); MainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "souldevbundle")); if ((Object)(object)MainAssetBundle == (Object)null) { Logger.LogError((object)"Failed to load custom assets."); } } } public static Harmony _harmony; public static ManualLogSource Logger; public static float rawSpawnMultiplier; public static ConfigEntry<float> moaiGlobalSize; public static ConfigEntry<float> moaiGlobalSizeVar; public static ConfigEntry<float> moaiSizeCap; public static ConfigEntry<float> moaiGlobalMusicVol; public static ConfigEntry<float> moaiGlobalSpeed; public static ConfigEntry<float> soulRarity; public static ConfigEntry<float> soulRarityIndoors; public static ConfigEntry<string> devourerSpawnDist; public static ConfigEntry<bool> spawnsOutside; public static ConfigEntry<bool> daytimeSpawn; public static ConfigEntry<float> LOSWidth; public static ConfigEntry<bool> pulseFX; public static ConfigEntry<float> thrashCooldown; public static ConfigEntry<int> maxCount; public static ConfigEntry<int> health; public static ConfigEntry<bool> canEnterIndoors; public static void LogDebug(string text) { Logger.LogInfo((object)text); } public static void LogProduction(string text) { Logger.LogInfo((object)text); } private void Awake() { //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Expected O, but got Unknown //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; bindVars(); 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), inheri