Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of MelsEnemyPack v1.0.7
plugins/MelsEnemyPack/MelsEnemyPack.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using MelsEnemyPack.NetcodePatcher; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("MelsEnemyPack")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Mels enemies for Lethal Company.")] [assembly: AssemblyFileVersion("1.0.7.0")] [assembly: AssemblyInformationalVersion("1.0.7")] [assembly: AssemblyProduct("MelsEnemyPack")] [assembly: AssemblyTitle("MelsEnemyPack")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.7.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } 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 MelsEnemyPack { internal class ExampleEnemeyAI : EnemyAI { private enum State { SearchingForPlayer, StickingInFrontOfPlayer, HeadSwingAttackInProgress } public Transform turnCompass; public Transform attackArea; public AISearchRoutine scoutingSearchRoutine; private float timeSinceHittingLocalPlayer; private float timeSinceNewRandPos; private Vector3 positionRandomness; private Vector3 StalkPos; private Random enemyRandom; private bool isDeadAnimationDone; private void LogIfDebugBuild(string text) { } public override void Start() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Start(); LogIfDebugBuild("Example Enemy Spawned"); timeSinceHittingLocalPlayer = 0f; base.creatureAnimator.SetTrigger("startWalk"); timeSinceNewRandPos = 0f; positionRandomness = new Vector3(0f, 0f, 0f); enemyRandom = new Random(StartOfRound.Instance.randomMapSeed + base.thisEnemyIndex); isDeadAnimationDone = false; base.currentBehaviourStateIndex = 0; } public override void Update() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (base.isEnemyDead) { if (!isDeadAnimationDone) { LogIfDebugBuild("Stopping enemy voice with janky code."); isDeadAnimationDone = true; base.creatureVoice.Stop(); base.creatureVoice.PlayOneShot(base.dieSFX); } return; } timeSinceHittingLocalPlayer += Time.deltaTime; timeSinceNewRandPos += Time.deltaTime; if ((Object)(object)base.targetPlayer != (Object)null && ((EnemyAI)this).PlayerIsTargetable(base.targetPlayer, false, false) && !scoutingSearchRoutine.inProgress) { turnCompass.LookAt(((Component)base.targetPlayer.gameplayCamera).transform.position); ((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(new Vector3(0f, turnCompass.eulerAngles.y, 0f)), 4f * Time.deltaTime); } if (base.stunNormalizedTimer > 0f) { base.agent.speed = 0f; } } public override void DoAIInterval() { ((EnemyAI)this).DoAIInterval(); if (!base.isEnemyDead && !StartOfRound.Instance.allPlayersDead) { KeepSearchingForPlayerUnlessInRange(25f, ref scoutingSearchRoutine); switch (base.currentBehaviourStateIndex) { case 0: base.agent.speed = 3f; break; case 1: base.agent.speed = 5f; StickingInFrontOfPlayer(); break; default: LogIfDebugBuild("This Behavior State doesn't exist!"); break; case 2: break; } } } private void KeepSearchingForPlayerUnlessInRange(float range, ref AISearchRoutine routine) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).TargetClosestPlayer(1.5f, false, 70f); if ((Object)(object)base.targetPlayer != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position) <= range) { if (routine.inProgress) { LogIfDebugBuild("Start Target Player"); ((EnemyAI)this).StopSearch(routine, true); ((EnemyAI)this).SwitchToBehaviourClientRpc(1); } } else if (!routine.inProgress) { LogIfDebugBuild("Stop Target Player"); ((EnemyAI)this).StartSearch(((Component)this).transform.position, routine); ((EnemyAI)this).SwitchToBehaviourClientRpc(0); } } private void StickingInFrontOfPlayer() { //IL_0074: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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) if (!((Object)(object)base.targetPlayer == (Object)null) && ((NetworkBehaviour)this).IsOwner && timeSinceNewRandPos > 0.7f) { timeSinceNewRandPos = 0f; if (enemyRandom.Next(0, 5) == 0) { ((MonoBehaviour)this).StartCoroutine(SwingAttack()); } else { positionRandomness = new Vector3((float)enemyRandom.Next(-2, 2), 0f, (float)enemyRandom.Next(-2, 2)); StalkPos = ((Component)base.targetPlayer).transform.position - Vector3.Scale(new Vector3(-5f, 0f, -5f), ((Component)base.targetPlayer).transform.forward) + positionRandomness; } ((EnemyAI)this).SetDestinationToPosition(StalkPos, false); } } private IEnumerator SwingAttack() { ((EnemyAI)this).SwitchToBehaviourClientRpc(2); StalkPos = ((Component)base.targetPlayer).transform.position; ((EnemyAI)this).SetDestinationToPosition(StalkPos, false); yield return (object)new WaitForSeconds(0.5f); if (!base.isEnemyDead) { DoAnimationClientRpc("swingAttack"); yield return (object)new WaitForSeconds(0.24f); SwingAttackHitClientRpc(); if (base.currentBehaviourStateIndex == 2) { ((EnemyAI)this).SwitchToBehaviourClientRpc(1); } } } public override void OnCollideWithPlayer(Collider other) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (!(timeSinceHittingLocalPlayer < 1f)) { PlayerControllerB val = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, false, false); if ((Object)(object)val != (Object)null) { LogIfDebugBuild("Example Enemy Collision with Player!"); timeSinceHittingLocalPlayer = 0f; val.DamagePlayer(20, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); } } } 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) { base.enemyHP -= force; if (((NetworkBehaviour)this).IsOwner && base.enemyHP <= 0 && !base.isEnemyDead) { ((MonoBehaviour)this).StopCoroutine(SwingAttack()); ((EnemyAI)this).KillEnemyOnOwnerClient(false); } } } [ClientRpc] public void DoAnimationClientRpc(string animationName) { //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_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 != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2216770801u, val, (RpcDelivery)0); bool flag = animationName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(animationName, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2216770801u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { LogIfDebugBuild("Animation: " + animationName); base.creatureAnimator.SetTrigger(animationName); } } [ClientRpc] public void SwingAttackHitClientRpc() { //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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0136: 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 != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2322635522u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2322635522u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } LogIfDebugBuild("SwingAttackHitClientRPC"); int num = 8; Collider[] array = Physics.OverlapBox(attackArea.position, attackArea.localScale, Quaternion.identity, num); if (array.Length == 0) { return; } Collider[] array2 = array; foreach (Collider val3 in array2) { PlayerControllerB val4 = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(val3, false, false); if ((Object)(object)val4 != (Object)null) { LogIfDebugBuild("Swing attack hit player!"); timeSinceHittingLocalPlayer = 0f; val4.DamagePlayer(40, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); } } } protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_ExampleEnemeyAI() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2216770801u, new RpcReceiveHandler(__rpc_handler_2216770801)); NetworkManager.__rpc_func_table.Add(2322635522u, new RpcReceiveHandler(__rpc_handler_2322635522)); } private static void __rpc_handler_2216770801(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 animationName = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref animationName, false); } target.__rpc_exec_stage = (__RpcExecStage)2; ((ExampleEnemeyAI)(object)target).DoAnimationClientRpc(animationName); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2322635522(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)2; ((ExampleEnemeyAI)(object)target).SwingAttackHitClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "ExampleEnemeyAI"; } } internal class LegSolver : MonoBehaviour { [SerializeField] private LayerMask terrainLayer; [SerializeField] private Transform body; [SerializeField] private LegSolver otherFoot; [SerializeField] private float speed = 1f; [SerializeField] private float stepDistance = 4f; [SerializeField] private float stepLength = 4f; [SerializeField] private float stepHeight = 1f; [SerializeField] private Vector3 footOffset; private float footSpacing; private Vector3 oldPosition; private Vector3 currentPosition; private Vector3 newPosition; private Vector3 oldNormal; private Vector3 currentNormal; private Vector3 newNormal; private float lerp; private void Start() { //IL_0007: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_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_0034: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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) footSpacing = ((Component)this).transform.localPosition.x; currentPosition = (newPosition = (oldPosition = ((Component)this).transform.position)); currentNormal = (newNormal = (oldNormal = ((Component)this).transform.up)); lerp = 1f; } private void Update() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_0048: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0182: 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_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010a: 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_0115: 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_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.position = currentPosition; ((Component)this).transform.up = currentNormal; RaycastHit val = default(RaycastHit); if (Physics.Raycast(new Ray(body.position + body.right * footSpacing, Vector3.down), ref val, 10f, ((LayerMask)(ref terrainLayer)).value) && Vector3.Distance(newPosition, ((RaycastHit)(ref val)).point) > stepDistance && !otherFoot.IsMoving() && lerp >= 1f) { lerp = 0f; int num = ((body.InverseTransformPoint(((RaycastHit)(ref val)).point).z > body.InverseTransformPoint(newPosition).z) ? 1 : (-1)); newPosition = ((RaycastHit)(ref val)).point + body.forward * stepLength * (float)num + footOffset; newNormal = ((RaycastHit)(ref val)).normal; } if (lerp < 1f) { Vector3 val2 = Vector3.Lerp(oldPosition, newPosition, lerp); val2.y += Mathf.Sin(lerp * MathF.PI) * stepHeight; currentPosition = val2; currentNormal = Vector3.Lerp(oldNormal, newNormal, lerp); lerp += Time.deltaTime * speed; } else { oldPosition = newPosition; oldNormal = newNormal; } } private void OnDrawGizmos() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) Gizmos.color = Color.red; Gizmos.DrawSphere(newPosition, 0.5f); } public bool IsMoving() { return lerp < 1f; } } [BepInPlugin("MelsEnemyPack", "MelsEnemyPack", "1.0.7")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static Harmony _harmony; public static EnemyType SampleEnemy; public static EnemyType ReplicatorEnemy; public static AnomalyType SpringAnomaly; internal static ManualLogSource Logger; internal static PluginConfig BoundConfig { get; private set; } private void Awake() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Assets.PopulateAssets(); _harmony = new Harmony("MelsEnemyPack"); _harmony.PatchAll(); BoundConfig = new PluginConfig((BaseUnityPlugin)(object)this); ReplicatorEnemy = Assets.MainAssetBundle.LoadAsset<EnemyType>("ReplicatorEnemy"); SpringAnomaly = Assets.MainAssetBundle.LoadAsset<AnomalyType>("SpringMine"); TerminalNode val = Assets.MainAssetBundle.LoadAsset<TerminalNode>("ReplicatorEnemyTN"); TerminalKeyword val2 = Assets.MainAssetBundle.LoadAsset<TerminalKeyword>("ReplicatorEnemyTK"); Logger.LogInfo((object)$"repl {ReplicatorEnemy} !"); Logger.LogInfo((object)$"repl-pf {ReplicatorEnemy.enemyPrefab} !"); Logger.LogInfo((object)$"stat {SpringAnomaly.anomalyName} {SpringAnomaly.anomalyPrefab} !"); Type[] types = Assembly.GetExecutingAssembly().GetTypes(); for (int i = 0; i < types.Length; i++) { MethodInfo[] methods = types[i].GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } NetworkPrefabs.RegisterNetworkPrefab(ReplicatorEnemy.enemyPrefab); Enemies.RegisterEnemy(ReplicatorEnemy, BoundConfig.SpawnWeight.Value, (LevelTypes)(-1), (SpawnType)0, val, val2); Logger.LogInfo((object)"Plugin MelsEnemyPack is loaded!"); Assets.MainAssetBundle.Unload(false); } } public static class Assets { public static AssetBundle MainAssetBundle; public static void PopulateAssets() { string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if ((Object)(object)MainAssetBundle == (Object)null) { MainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "mels.lethalbundle")); } if ((Object)(object)MainAssetBundle == (Object)null) { Plugin.Logger.LogError((object)"Failed to load custom assets."); } } } [HarmonyPatch(typeof(RoundManager))] internal class MapObjectRoundManagerPatch { public static bool AddCustomStaticToMap(RoundManager __instance, string[] RequiredNames, AnomalyType ToSpawn, bool bSpawnFacingAwayFromWall = true, int AmountToSpawn = 1) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_0058: 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) if ((Object)(object)ToSpawn == (Object)null || (Object)(object)ToSpawn.anomalyPrefab == (Object)null) { return false; } if (AddToRandomMapObjects(RequiredNames, ToSpawn.anomalyPrefab)) { SpawnableMapObject val = new SpawnableMapObject(); val.prefabToSpawn = ToSpawn.anomalyPrefab; val.spawnFacingAwayFromWall = bSpawnFacingAwayFromWall; AnimationCurve val2; if (ToSpawn.probabilityCurve.length == 0) { val2 = new AnimationCurve(); Keyframe val3 = default(Keyframe); ((Keyframe)(ref val3)).value = AmountToSpawn; ((Keyframe)(ref val3)).time = 0f; val2.AddKey(val3); } else { val2 = ToSpawn.probabilityCurve; } val.numberToSpawn = val2; SpawnableMapObject[] array = (SpawnableMapObject[])(object)new SpawnableMapObject[__instance.currentLevel.spawnableMapObjects.Length + 1]; for (int i = 0; i < __instance.currentLevel.spawnableMapObjects.Length; i++) { array[i] = __instance.currentLevel.spawnableMapObjects[i]; } array[^1] = val; __instance.currentLevel.spawnableMapObjects = array; return true; } return false; } public static bool AddToRandomMapObjects(string[] RequiredNames, GameObject Prefab) { bool result = false; RandomMapObject[] array = Object.FindObjectsOfType<RandomMapObject>(); for (int i = 0; i < array.Length; i++) { if ((Object)(object)array[i] == (Object)null) { continue; } for (int j = 0; j < array[i].spawnablePrefabs.Count; j++) { bool flag = false; if (RequiredNames.Length == 0) { flag = true; } else { for (int k = 0; k < RequiredNames.Length; k++) { if (((Object)array[i].spawnablePrefabs[j]).name.ToLower() == RequiredNames[k].ToLower()) { flag = true; } } } if (flag) { result = true; array[i].spawnablePrefabs.Add(Prefab); } } } return result; } [HarmonyPatch("SpawnMapObjects")] [HarmonyPrefix] private static void SpawnMapObjectsPrefix(RoundManager __instance) { } } public class PluginConfig { public ConfigEntry<int> SpawnWeight; public ConfigEntry<int> DamageLevel; public ConfigEntry<int> ConsumesRessourceValueToReplicate; public ConfigEntry<bool> bAutowakeupSuntimer; public PluginConfig(BaseUnityPlugin bindingPlugin) { SpawnWeight = bindingPlugin.Config.Bind<int>("Replicator", "Spawning weight", 100, "The weight for the replicator spawn-wise (rarity)"); DamageLevel = bindingPlugin.Config.Bind<int>("Replicator", "Damage-tier", 0, "0: default damage (Recommended), 1: reduced damage, 2: Reduced damage and no collision damage"); ConsumesRessourceValueToReplicate = bindingPlugin.Config.Bind<int>("Replicator", "Scrap-value-replicate", 3, "How much scrap value must be consumed in order to replicate (DO NOT set this to 0)"); bAutowakeupSuntimer = bindingPlugin.Config.Bind<bool>("Replicator", "Awake on daytime end", true, "Should the enemy activate when daytime enemies leaves?"); } } internal class ReplicatorEnemyAI : EnemyAI { private struct ClaimedObjects { public GrabbableObject claimedObject; public float time; } public enum State { SearchingForPlayer, StickingInFrontOfPlayer, HeadSwingAttackInProgress, ReplicatorStateDocile, ReplicatorStateActive, ReplicatorStateNomming, ReplicatorStateRoaming, ReplicatorStateFleeing, ReplicatorStateDefending, ReplicatorStateSpawnAnim, ReplicatorStateFindDocileLocation, ReplicatorStateReplicating } public Transform turnCompass; public Transform attackArea; public AISearchRoutine scoutingSearchRoutine; private float timeSinceHittingLocalPlayer; private float timeSinceNewRandPos; private Vector3 positionRandomness; private Vector3 StalkPos; private Random enemyRandom; private bool isDeadAnimationDone; private bool bStartDocile = true; private int MaxSpawns = 3; private bool bAutowakeupSuntimer = true; private int DamageLevel; private int ConsumesRessourceValueToReplicate = 3; private bool bPersonallyAggroed; private bool bGroupAggroed; private GrabbableObject ObjectOfInterest; private List<ClaimedObjects> grabbableClaimed = new List<ClaimedObjects>(); private GrabbableObject lastClaim; private int PersonallySpawned; private ReplicatorEnemyAI Parent; private int CurrentlyConsumedScrap; private int MyMaxSpawns; private bool bPlayedSpawnAnimation; private bool bLurking; private float EnteredStateTime; public float FriendlyAggroRange = 30f; private bool bCaresAboutPlayer; public GameObject PrefabToSpawn; public AnimationCurve fallToGroundCurve; private Vector3[] legPositions = (Vector3[])(object)new Vector3[4]; private Vector3[] oldLegPositions = (Vector3[])(object)new Vector3[4]; private Vector3[] newLegPositions = (Vector3[])(object)new Vector3[4]; private Vector3[] oldLegNormal = (Vector3[])(object)new Vector3[4]; private Vector3[] currentLegNormal = (Vector3[])(object)new Vector3[4]; private Vector3[] newLegNormal = (Vector3[])(object)new Vector3[4]; [SerializeField] private LayerMask terrainLayer; [SerializeField] private Vector3[] footOffset; private float[] legLerp = new float[4]; public Transform body; public float stepHeight = 0.3f; public Transform[] legDefaultPositions; public Transform[] legTargets; public Transform debugSphere1; public Transform debugSphere2; public AudioSource footstepAudio; public AudioClip[] footstepSFX; public AudioClip AttackSFX; public AudioClip ConsumeSFX; public AudioClip CallForHelpSFX; public AudioClip StartupSFX; public AudioClip hitGroundSFX; public AudioClip DeathSound; private float LastConsumeSFX; public Vector3 DesiredDestination; public ParticleSystem Poof; public ParticleSystem Grind; public ParticleSystem Death; private float updateOffsetPositionInterval; private Vector3 offsetTargetPos; private bool clingingToCeiling; public Transform modelContainer; private Ray ray; private Coroutine ceilingAnimationCoroutine; public Vector3 ceilingHidingPoint; private int offsetNodeAmount = 6; private Vector3 propelVelocity = Vector3.zero; private RaycastHit rayHit; private bool startedCeilingAnimationCoroutine; private Vector3 wallPosition; private Vector3 wallNormal; private bool bDesiresCeiling; private bool bDesiresWall; private Vector3 defaultGravity; private int EnemyMask = 524288; private Vector3[] legSpacing = (Vector3[])(object)new Vector3[4]; private float[] legDistances = new float[4] { 0.5f, 0.5f, 0.35f, 0.35f }; private float timeSinceActuallySpawned; private float PossiblyStuckTime; private float timeSinceLastCheck; private ObstacleAvoidanceType defaultObstacleAvoidanceType; public static List<GameObject> grabbableObjectsInMap = new List<GameObject>(); public void Awake() { DamageLevel = Plugin.BoundConfig.DamageLevel.Value; ConsumesRessourceValueToReplicate = Plugin.BoundConfig.ConsumesRessourceValueToReplicate.Value; bAutowakeupSuntimer = Plugin.BoundConfig.bAutowakeupSuntimer.Value; Debug.Log((object)(".." + DamageLevel + ".." + ConsumesRessourceValueToReplicate + ".." + bAutowakeupSuntimer)); } public void LateUpdate() { MoveLegsProcedurally(); } public int GetDamageForAction(bool bDirectHit = false, bool bCollision = false) { if (DamageLevel == 0) { if (bDirectHit) { return 40; } return 20; } if (DamageLevel == 1) { if (bDirectHit) { return 20; } if (bCollision) { return 10; } } else if (DamageLevel == 2) { if (bDirectHit) { return 20; } if (bCollision) { return 0; } } return 20; } [ClientRpc] public void SyncConfigClientRPC(int repRessourcesDemand, int repDamageLevel, bool repSunset) { //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_007e: 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_009d: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(10916840u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, repRessourcesDemand); BytePacker.WriteValueBitPacked(val2, repDamageLevel); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref repSunset, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 10916840u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ConsumesRessourceValueToReplicate = repRessourcesDemand; DamageLevel = repDamageLevel; bAutowakeupSuntimer = repSunset; } } } public override void Start() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_00d0: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_012d: 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) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Invalid comparison between Unknown and I4 //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Start(); LogIfDebugBuild("Replicator Enemy Spawned"); timeSinceHittingLocalPlayer = 0f; base.creatureAnimator.SetTrigger("startWalk"); timeSinceNewRandPos = 0f; positionRandomness = new Vector3(0f, 0f, 0f); enemyRandom = new Random(StartOfRound.Instance.randomMapSeed + base.thisEnemyIndex); isDeadAnimationDone = false; base.currentBehaviourStateIndex = 0; if (((NetworkBehaviour)this).IsServer) { SyncConfigClientRPC(ConsumesRessourceValueToReplicate, DamageLevel, bAutowakeupSuntimer); } for (int i = 0; i < legDefaultPositions.Length; i++) { if ((Object)(object)legDefaultPositions[i] == (Object)null) { Debug.Log((object)"wtf"); } legPositions[i] = legDefaultPositions[i].position; newLegPositions[i] = legDefaultPositions[i].position; oldLegPositions[i] = legDefaultPositions[i].position; legSpacing[i] = legDefaultPositions[i].position; currentLegNormal[i] = ((Component)this).transform.up; newLegNormal[i] = ((Component)this).transform.up; oldLegNormal[i] = ((Component)this).transform.up; legLerp[i] = 1f; } base.openDoorSpeedMultiplier = 0.6f; if ((Object)(object)body == (Object)null) { body = ((Component)this).gameObject.transform; } defaultGravity = Physics.gravity; defaultObstacleAvoidanceType = base.agent.obstacleAvoidanceType; if ((Object)(object)Parent == (Object)null) { MyMaxSpawns = MaxSpawns; PersonallySpawned = 0; Parent = null; CurrentlyConsumedScrap = 0; ObjectOfInterest = null; bGroupAggroed = false; bPersonallyAggroed = false; } if ((Object)(object)Poof != (Object)null) { Poof.Stop(); } if ((Object)(object)Grind != (Object)null) { Grind.Stop(); } if ((Object)(object)Death != (Object)null) { Death.Stop(); } if (bStartDocile && (int)TimeOfDay.Instance.currentLevelWeather != 5) { SetCurrentBehaviourState(State.ReplicatorStateFindDocileLocation); } else { SetCurrentBehaviourState(State.ReplicatorStateSpawnAnim); } RefreshGrabbableObjectsInMapList(); } public void TryReplicate() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_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_0107: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)this).IsServer || PersonallySpawned >= MyMaxSpawns || CurrentlyConsumedScrap < ConsumesRessourceValueToReplicate) { return; } CurrentlyConsumedScrap -= ConsumesRessourceValueToReplicate; PersonallySpawned++; LogIfDebugBuild("Spawning new replicator enemy"); NetworkObjectReference val = RoundManager.Instance.SpawnEnemyGameObject(((Component)this).transform.position, ((Component)this).transform.rotation.y, -1, base.enemyType); NetworkObject val2 = default(NetworkObject); if (((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null)) { ReplicatorEnemyAI component = ((Component)val2).gameObject.GetComponent<ReplicatorEnemyAI>(); if ((Object)(object)component != (Object)null) { component.SpawnedByParent(MyMaxSpawns - 1, this); } } ulong repPlayerOfInterest = 0uL; if ((Object)(object)base.targetPlayer != (Object)null) { repPlayerOfInterest = base.targetPlayer.playerClientId; } ReplicateValuesClientRpc(PersonallySpawned, CurrentlyConsumedScrap, bGroupAggroed, bPersonallyAggroed, MyMaxSpawns, repPlayerOfInterest); if ((Object)(object)GetObjectOfInterest() != (Object)null) { ReplicateObjectOfInterestClientRpc(NetworkObjectReference.op_Implicit(GetObjectOfInterest())); } } [ClientRpc] public void DesiresCeilingWallClientRPC(bool bNewDesiresCeiling, bool bNewDesiresWall, Vector3 NewCeilingPoint, Vector3 NewDesiredPosition) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: 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 != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1031894649u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref bNewDesiresCeiling, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref bNewDesiresWall, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref NewCeilingPoint); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref NewDesiredPosition); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1031894649u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } bDesiresCeiling = bNewDesiresCeiling; bDesiresWall = bNewDesiresWall; if (bDesiresCeiling || bDesiresWall) { startedCeilingAnimationCoroutine = true; if (bDesiresCeiling) { ceilingAnimationCoroutine = ((MonoBehaviour)this).StartCoroutine(clingToCeiling()); } } else { startedCeilingAnimationCoroutine = false; } } public NetworkObject GetObjectOfInterest() { if ((Object)(object)ObjectOfInterest == (Object)null) { return null; } return ((Component)ObjectOfInterest).GetComponent<NetworkObject>(); } public NetworkObject GetReplicatorEnemyAI(ReplicatorEnemyAI a) { if ((Object)(object)a == (Object)null) { return null; } return ((Component)a).GetComponent<NetworkObject>(); } [ClientRpc] public void ReplicateObjectOfInterestClientRpc(NetworkObjectReference RepObjectOfInterest) { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(237264681u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref RepObjectOfInterest, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 237264681u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ObjectOfInterest = null; NetworkObject val3 = default(NetworkObject); if (((NetworkObjectReference)(ref RepObjectOfInterest)).TryGet(ref val3, (NetworkManager)null)) { if ((Object)(object)val3 == (Object)null || (Object)(object)((Component)val3).gameObject == (Object)null || (Object)(object)((Component)val3).GetComponent<GrabbableObject>() == (Object)null) { ObjectOfInterest = null; } else { ObjectOfInterest = ((Component)val3).gameObject.GetComponent<GrabbableObject>(); } } } [ClientRpc] public void ReplicateValuesClientRpc(int RepPersonallySpawned, int RepConsumedScrap, bool RepGroupAggro, bool RepSelfAggro, int RepMaxSpawns, ulong RepPlayerOfInterest) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_007e: 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_009d: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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 != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(776576605u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, RepPersonallySpawned); BytePacker.WriteValueBitPacked(val2, RepConsumedScrap); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref RepGroupAggro, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref RepSelfAggro, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, RepMaxSpawns); BytePacker.WriteValueBitPacked(val2, RepPlayerOfInterest); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 776576605u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } PersonallySpawned = RepPersonallySpawned; CurrentlyConsumedScrap = RepConsumedScrap; bGroupAggroed = RepGroupAggro; bPersonallyAggroed = RepSelfAggro; MyMaxSpawns = RepMaxSpawns; base.targetPlayer = null; for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { if (StartOfRound.Instance.allPlayerScripts[i].actualClientId == RepPlayerOfInterest) { base.targetPlayer = StartOfRound.Instance.allPlayerScripts[i]; break; } } } public void SpawnedByParent(int MaxSpawns, ReplicatorEnemyAI Source) { //IL_009d: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)this).IsServer) { return; } PersonallySpawned = 0; Parent = Source; CurrentlyConsumedScrap = 0; ObjectOfInterest = null; bGroupAggroed = false; bPersonallyAggroed = false; MyMaxSpawns = MaxSpawns; if ((Object)(object)Source != (Object)null) { bGroupAggroed = Source.bGroupAggroed; if (!bGroupAggroed) { bGroupAggroed = Source.bPersonallyAggroed; } } base.ventAnimationFinished = true; if ((Object)(object)base.creatureAnimator != (Object)null) { base.creatureAnimator.SetBool("inSpawningAnimation", false); } SpawnedByParentClientRPC(MyMaxSpawns, bGroupAggroed, NetworkObjectReference.op_Implicit(GetReplicatorEnemyAI(Source))); } [ClientRpc] public void SpawnedByParentClientRPC(int RepMaxSpawns, bool bRepGroupAggroed, NetworkObjectReference Source) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: 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_00a5: 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_00bf: 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 != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(629129375u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, RepMaxSpawns); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref bRepGroupAggroed, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref Source, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 629129375u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } Parent = null; NetworkObject val3 = default(NetworkObject); if (((NetworkObjectReference)(ref Source)).TryGet(ref val3, (NetworkManager)null)) { if ((Object)(object)val3 == (Object)null || (Object)(object)((Component)val3).gameObject == (Object)null || (Object)(object)((Component)val3).GetComponent<ReplicatorEnemyAI>() == (Object)null) { Parent = null; } else { Parent = ((Component)val3).gameObject.GetComponent<ReplicatorEnemyAI>(); } } base.ventAnimationFinished = true; if ((Object)(object)base.creatureAnimator != (Object)null) { base.creatureAnimator.SetBool("inSpawningAnimation", false); } PersonallySpawned = 0; CurrentlyConsumedScrap = 0; ObjectOfInterest = null; bGroupAggroed = bRepGroupAggroed; bPersonallyAggroed = false; MyMaxSpawns = RepMaxSpawns; } private void LogIfDebugBuild(string text) { } public static void RefreshGrabbableObjectsInMapList() { grabbableObjectsInMap.Clear(); GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>(); for (int i = 0; i < array.Length; i++) { if ((Object)(object)array[i] != (Object)null && array[i].grabbable) { grabbableObjectsInMap.Add(((Component)array[i]).gameObject); } } } public void ClaimObject(GrabbableObject grab) { //IL_0015: 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) if ((Object)(object)grab == (Object)(object)lastClaim) { return; } Collider[] array = Physics.OverlapSphere(((Component)this).transform.position, 80f, EnemyMask); ReplicatorEnemyAI replicatorEnemyAI = null; for (int i = 0; i < array.Length; i++) { if (!((Object)(object)array[i] == (Object)null)) { replicatorEnemyAI = ((Component)array[i]).gameObject.GetComponent<ReplicatorEnemyAI>(); if ((Object)(object)replicatorEnemyAI == (Object)null) { replicatorEnemyAI = ((Component)array[i]).gameObject.GetComponentInParent<ReplicatorEnemyAI>(); } if (!((Object)(object)replicatorEnemyAI == (Object)null) && !((Object)(object)replicatorEnemyAI == (Object)(object)this)) { replicatorEnemyAI.ClaimObjectClientRPC(NetworkObjectReference.op_Implicit(((NetworkBehaviour)grab).NetworkObject)); } } } } [ClientRpc] public void ClaimObjectClientRPC(NetworkObjectReference claim) { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4196267238u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref claim, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4196267238u, val, (RpcDelivery)0); } NetworkObject val3 = default(NetworkObject); if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost) || !((NetworkObjectReference)(ref claim)).TryGet(ref val3, (NetworkManager)null) || (Object)(object)val3 == (Object)null || (Object)(object)((Component)val3).gameObject == (Object)null || (Object)(object)((Component)val3).GetComponent<GrabbableObject>() == (Object)null) { return; } GrabbableObject component = ((Component)val3).gameObject.GetComponent<GrabbableObject>(); if ((Object)(object)component == (Object)null) { return; } ClaimedObjects claimedObjects = default(ClaimedObjects); for (int i = 0; i < grabbableClaimed.Count; i++) { if ((Object)(object)grabbableClaimed[i].claimedObject == (Object)(object)component) { claimedObjects = grabbableClaimed[i]; claimedObjects.time = Time.time; grabbableClaimed[i] = claimedObjects; if ((Object)(object)ObjectOfInterest == (Object)(object)component) { ObjectOfInterest = null; } return; } } claimedObjects.time = Time.time; claimedObjects.claimedObject = component; CollectionExtensions.AddItem<ClaimedObjects>((IEnumerable<ClaimedObjects>)grabbableClaimed, claimedObjects); if ((Object)(object)component == (Object)(object)ObjectOfInterest) { ObjectOfInterest = null; } } public bool CheckIfObjectClaimed(GrabbableObject grab) { for (int i = 0; i < grabbableClaimed.Count; i++) { if (Time.time - grabbableClaimed[i].time < 20f && (Object)(object)grab == (Object)(object)grabbableClaimed[i].claimedObject) { return true; } } return false; } public void SetCurrentBehaviourState(State NewState, Vector3 NewPOI = default(Vector3)) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (((NetworkBehaviour)this).IsServer) { if (base.currentBehaviourStateIndex != (int)NewState) { DesiredDestination = NewPOI; LogIfDebugBuild("Replicator Enemy entering new state " + NewState.ToString() + " Old state: " + base.currentBehaviourStateIndex); base.currentBehaviourStateIndex = (int)NewState; EnteredStateTime = timeSinceActuallySpawned; SetBehaviourStateClientRpc(base.currentBehaviourStateIndex, NewPOI); bDesiresCeiling = false; bDesiresWall = false; } else { LogIfDebugBuild("Replicator Enemy tried entering " + NewState.ToString() + " but was already doing it"); } } } [ClientRpc] public void SetBehaviourStateClientRpc(int NewState, Vector3 NewPOI = default(Vector3)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2523502834u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, NewState); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref NewPOI); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2523502834u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { base.currentBehaviourStateIndex = NewState; DesiredDestination = NewPOI; LogIfDebugBuild("(client) Replicator Enemy entering new state " + NewState + " Old state: " + base.currentBehaviourStateIndex); ((EnemyAI)this).SwitchToBehaviourClientRpc(NewState); } } } public override void Update() { //IL_00a4: 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_00ba: 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_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (base.isEnemyDead) { if (!isDeadAnimationDone) { LogIfDebugBuild("Stopping enemy voice with janky code."); isDeadAnimationDone = true; base.creatureVoice.Stop(); base.creatureVoice.PlayOneShot(base.dieSFX); } return; } timeSinceHittingLocalPlayer += Time.deltaTime; timeSinceNewRandPos += Time.deltaTime; if (base.stunNormalizedTimer > 0f) { base.agent.speed = 0f; } if (bDesiresCeiling) { ((Component)this).gameObject.transform.position = Vector3.SmoothDamp(((Component)this).gameObject.transform.position, ceilingHidingPoint, ref propelVelocity, 0.1f); ((Component)this).transform.eulerAngles = new Vector3(0f, 0f, 180f); } else if (bDesiresWall) { ((Component)this).gameObject.transform.position = Vector3.SmoothDamp(((Component)this).gameObject.transform.position, wallPosition, ref propelVelocity, 0.1f); } if ((bDesiresCeiling || bDesiresWall) && timeSinceActuallySpawned - timeSinceLastCheck > base.AIIntervalTime) { timeSinceLastCheck = timeSinceActuallySpawned; base.targetPlayer = ((EnemyAI)this).GetClosestPlayer(false, false, false); if (NearbyTargetWithLoot(bCheckLOS: true, bAnyLoot: true) || (bAutowakeupSuntimer && !((Object)(object)TimeOfDay.Instance == (Object)null) && TimeOfDay.Instance.normalizedTimeOfDay > base.enemyType.normalizedTimeInDayToLeave)) { base.inSpecialAnimation = false; ((Behaviour)base.agent).enabled = true; bDesiresCeiling = false; bDesiresWall = false; DesiresCeilingWallClientRPC(bDesiresCeiling, bDesiresWall, ceilingHidingPoint, DesiredDestination); SetCurrentBehaviourState(State.ReplicatorStateActive); } } timeSinceActuallySpawned += Time.deltaTime; } private IEnumerator DoDeath() { if ((Object)(object)Death != (Object)null) { Death.Play(); } if ((Object)(object)Grind != (Object)null) { Grind.Stop(); } if ((Object)(object)DeathSound != (Object)null && (Object)(object)base.creatureSFX != (Object)null) { base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(DeathSound, Random.Range(0.7f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, DeathSound, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } DoDeathClientRpc(); for (float deathTime = 0f; deathTime < 1f; deathTime += Time.deltaTime) { yield return null; } Object.Destroy((Object)(object)((Component)this).gameObject); } [ClientRpc] public void DoDeathClientRpc() { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1017313517u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1017313517u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((MonoBehaviour)this).StartCoroutine(DoDeathClient()); } } } private IEnumerator DoDeathClient() { if ((Object)(object)Death != (Object)null) { Death.Play(); } if ((Object)(object)Grind != (Object)null) { Grind.Stop(); } if ((Object)(object)DeathSound != (Object)null && (Object)(object)base.creatureSFX != (Object)null) { base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(DeathSound, Random.Range(0.1f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, DeathSound, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } for (float deathTime = 0f; deathTime < 1f; deathTime += Time.deltaTime) { yield return null; } Object.Destroy((Object)(object)((Component)this).gameObject); } private void StopCreatureSFX(bool bSound = true) { if (bSound) { base.creatureSFX.Stop(); } if ((Object)(object)Grind != (Object)null) { Grind.Stop(); } if (((NetworkBehaviour)this).IsServer) { StopCreatureSFXClientRPC(); } } [ClientRpc] private void StopCreatureSFXClientRPC(bool bSound = true) { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3364030128u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref bSound, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3364030128u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { if (bSound) { base.creatureSFX.Stop(); } if ((Object)(object)Grind != (Object)null) { Grind.Stop(); } } } private void PlayWakeSFX() { if (!((Object)(object)StartupSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(StartupSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, StartupSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); if (((NetworkBehaviour)this).IsServer) { PlayWakeSFXClientRPC(); } } } [ClientRpc] private void PlayWakeSFXClientRPC() { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1601373250u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1601373250u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)StartupSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(StartupSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, StartupSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } } } private void PlayHitGroundSFX() { if (!((Object)(object)hitGroundSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(hitGroundSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, hitGroundSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); if (((NetworkBehaviour)this).IsServer) { PlayHitGroundSFXClientRPC(); } } } [ClientRpc] private void PlayHitGroundSFXClientRPC() { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4147499191u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4147499191u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)hitGroundSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(hitGroundSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, hitGroundSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } } } private void PlayAlertSFX() { if (!((Object)(object)CallForHelpSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(CallForHelpSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, CallForHelpSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); if (((NetworkBehaviour)this).IsServer) { PlayAlertSFXClientRPC(); } } } [ClientRpc] private void PlayAlertSFXClientRPC() { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2086105730u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2086105730u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)CallForHelpSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(CallForHelpSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, CallForHelpSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } } } private void PlayEatingFX() { if (!((Object)(object)ConsumeSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null) && !(timeSinceActuallySpawned - LastConsumeSFX < ConsumeSFX.length)) { base.creatureSFX.Stop(); if ((Object)(object)Grind != (Object)null) { Grind.Play(); } LastConsumeSFX = timeSinceActuallySpawned; base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(ConsumeSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, ConsumeSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); if (((NetworkBehaviour)this).IsServer) { PlayEatingFXClientRPC(); } } } [ClientRpc] private void PlayEatingFXClientRPC() { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3445709125u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3445709125u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)ConsumeSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null) && !(timeSinceActuallySpawned - LastConsumeSFX < ConsumeSFX.length)) { base.creatureSFX.Stop(); if ((Object)(object)Grind != (Object)null) { Grind.Play(); } LastConsumeSFX = timeSinceActuallySpawned; base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(ConsumeSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, ConsumeSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } } private void PlayAttackFX() { if (!((Object)(object)AttackSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(AttackSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, AttackSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); if (((NetworkBehaviour)this).IsServer) { PlayAttackFXClientRPC(); } } } [ClientRpc] private void PlayAttackFXClientRPC() { //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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2471009619u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2471009619u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((Object)(object)AttackSFX == (Object)null) && !((Object)(object)base.creatureSFX == (Object)null)) { base.creatureSFX.Stop(); base.creatureSFX.pitch = Random.Range(0.6f, 1.2f); base.creatureSFX.PlayOneShot(AttackSFX, Random.Range(0.6f, 1f)); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, AttackSFX, Mathf.Clamp(Random.Range(-0.4f, 0.8f), 0f, 1f)); } } } public bool IsHostile() { if (!bGroupAggroed) { return bPersonallyAggroed; } return true; } public float MatchTargetSpeed(bool bWantsFaster = false) { float num = 0f; if (bWantsFaster) { num = 5f; } if ((Object)(object)base.targetPlayer != (Object)null) { if (base.targetPlayer.isSprinting) { return 20f + num; } if (base.targetPlayer.isCrouching) { return 5f + num; } return 10f + num; } return 10f + num; } public bool NearbyTargetWithLoot(bool bCheckLOS = false, bool bAnyLoot = false) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.targetPlayer != (Object)null) { if ((Object)(object)base.targetPlayer.currentlyHeldObject != (Object)null || (Object)(object)base.targetPlayer.currentlyHeldObjectServer != (Object)null) { if (!bCheckLOS) { return true; } if (CanSeePoint(((Component)base.targetPlayer.gameplayCamera).transform.position, 80f)) { return true; } } else if (bAnyLoot) { for (int i = 0; i < base.targetPlayer.ItemSlots.Length; i++) { if ((Object)(object)base.targetPlayer.ItemSlots[i] != (Object)null && base.targetPlayer.ItemSlots[i].grabbable && base.targetPlayer.ItemSlots[i].itemProperties.isConductiveMetal) { if (!bCheckLOS) { return true; } if (CanSeePoint(((Component)base.targetPlayer.gameplayCamera).transform.position, 80f)) { return true; } } } } } return false; } public bool CanSeePoint(Vector3 Point, float Range) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)this).transform.position; if ((Object)(object)base.eye != (Object)null) { position = base.eye.position; } if (Vector3.Distance(position, Point) < Range && !Physics.Linecast(position, Point, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { return true; } return false; } public GrabbableObject TryFindNearbyScrap(int range = 20, bool bOmniPotent = false) { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0068: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) float num = range; GrabbableObject val = null; if (bOmniPotent) { for (int i = 0; i < grabbableObjectsInMap.Count; i++) { if (!((Object)(object)grabbableObjectsInMap[i] != (Object)null)) { continue; } GrabbableObject component = grabbableObjectsInMap[i].GetComponent<GrabbableObject>(); if (Object.op_Implicit((Object)(object)component) && !component.isHeld) { Vector3 val2 = grabbableObjectsInMap[i].transform.position - ((Component)this).transform.position; if (((Vector3)(ref val2)).magnitude < num) { val = component; num = range; } } } if ((Object)(object)val != (Object)null && CheckIfObjectClaimed(val)) { val = null; } if ((Object)(object)val != (Object)null) { Vector3 position = ((Component)val).transform.position; position = RoundManager.Instance.GetNavMeshPosition(position, RoundManager.Instance.navHit, 1.75f, -1); base.path1 = new NavMeshPath(); if (!base.agent.CalculatePath(position, base.path1)) { val = null; } if ((Object)(object)val != (Object)null && Vector3.Distance(base.path1.corners[base.path1.corners.Length - 1], RoundManager.Instance.GetNavMeshPosition(position, RoundManager.Instance.navHit, 2.7f, -1)) > 1.55f) { val = null; } } return val; } GameObject val3 = ((EnemyAI)this).CheckLineOfSight(grabbableObjectsInMap, 60f, range, 5f, (Transform)null, (int[])null); if (Object.op_Implicit((Object)(object)val3)) { GrabbableObject component2 = val3.GetComponent<GrabbableObject>(); if (Object.op_Implicit((Object)(object)component2) && !component2.isHeld) { return component2; } } return null; } public override void DoAIInterval() { //IL_098f: Unknown result type (might be due to invalid IL or missing references) //IL_0994: Unknown result type (might be due to invalid IL or missing references) //IL_0c17: Unknown result type (might be due to invalid IL or missing references) //IL_0c1c: Unknown result type (might be due to invalid IL or missing references) //IL_0d81: Unknown result type (might be due to invalid IL or missing references) //IL_0d86: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) //IL_07e7: Unknown result type (might be due to invalid IL or missing references) //IL_07ed: Unknown result type (might be due to invalid IL or missing references) //IL_0b1f: Unknown result type (might be due to invalid IL or missing references) //IL_0b24: Unknown result type (might be due to invalid IL or missing references) //IL_0cf8: Unknown result type (might be due to invalid IL or missing references) //IL_0cfd: Unknown result type (might be due to invalid IL or missing references) //IL_0c2d: Unknown result type (might be due to invalid IL or missing references) //IL_0c38: Unknown result type (might be due to invalid IL or missing references) //IL_0c48: Unknown result type (might be due to invalid IL or missing references) //IL_0c4d: Unknown result type (might be due to invalid IL or missing references) //IL_0c52: Unknown result type (might be due to invalid IL or missing references) //IL_0d94: Unknown result type (might be due to invalid IL or missing references) //IL_0d9f: Unknown result type (might be due to invalid IL or missing references) //IL_0daf: Unknown result type (might be due to invalid IL or missing references) //IL_0db4: Unknown result type (might be due to invalid IL or missing references) //IL_0db9: 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_0170: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_096a: Unknown result type (might be due to invalid IL or missing references) //IL_0970: Unknown result type (might be due to invalid IL or missing references) //IL_0e40: Unknown result type (might be due to invalid IL or missing references) //IL_0e46: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_073f: Unknown result type (might be due to invalid IL or missing references) //IL_0744: Unknown result type (might be due to invalid IL or missing references) //IL_0a59: Unknown result type (might be due to invalid IL or missing references) //IL_0a5e: Unknown result type (might be due to invalid IL or missing references) //IL_09c6: Unknown result type (might be due to invalid IL or missing references) //IL_09d6: Unknown result type (might be due to invalid IL or missing references) //IL_09db: Unknown result type (might be due to invalid IL or missing references) //IL_09e1: Unknown result type (might be due to invalid IL or missing references) //IL_09e6: Unknown result type (might be due to invalid IL or missing references) //IL_0d21: Unknown result type (might be due to invalid IL or missing references) //IL_0d2e: Unknown result type (might be due to invalid IL or missing references) //IL_0d33: Unknown result type (might be due to invalid IL or missing references) //IL_0d18: Unknown result type (might be due to invalid IL or missing references) //IL_0d1d: Unknown result type (might be due to invalid IL or missing references) //IL_0c83: Unknown result type (might be due to invalid IL or missing references) //IL_0c88: Unknown result type (might be due to invalid IL or missing references) //IL_0c62: Unknown result type (might be due to invalid IL or missing references) //IL_0c67: Unknown result type (might be due to invalid IL or missing references) //IL_0c70: Unknown result type (might be due to invalid IL or missing references) //IL_0c76: Unknown result type (might be due to invalid IL or missing references) //IL_0de9: Unknown result type (might be due to invalid IL or missing references) //IL_0def: Unknown result type (might be due to invalid IL or missing references) //IL_0dcc: Unknown result type (might be due to invalid IL or missing references) //IL_0dd1: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_07a9: Unknown result type (might be due to invalid IL or missing references) //IL_07af: Unknown result type (might be due to invalid IL or missing references) //IL_0752: Unknown result type (might be due to invalid IL or missing references) //IL_075d: Unknown result type (might be due to invalid IL or missing references) //IL_076d: Unknown result type (might be due to invalid IL or missing references) //IL_0772: Unknown result type (might be due to invalid IL or missing references) //IL_0777: Unknown result type (might be due to invalid IL or missing references) //IL_051e: Unknown result type (might be due to invalid IL or missing references) //IL_0523: Unknown result type (might be due to invalid IL or missing references) //IL_0529: Unknown result type (might be due to invalid IL or missing references) //IL_052e: Unknown result type (might be due to invalid IL or missing references) //IL_080d: Unknown result type (might be due to invalid IL or missing references) //IL_0813: Unknown result type (might be due to invalid IL or missing references) //IL_0b70: Unknown result type (might be due to invalid IL or missing references) //IL_0b80: Unknown result type (might be due to invalid IL or missing references) //IL_0b85: Unknown result type (might be due to invalid IL or missing references) //IL_0b8a: Unknown result type (might be due to invalid IL or missing references) //IL_0b58: Unknown result type (might be due to invalid IL or missing references) //IL_0b5d: Unknown result type (might be due to invalid IL or missing references) //IL_0a95: Unknown result type (might be due to invalid IL or missing references) //IL_0a9a: Unknown result type (might be due to invalid IL or missing references) //IL_0a76: Unknown result type (might be due to invalid IL or missing references) //IL_0a82: Unknown result type (might be due to invalid IL or missing references) //IL_0a88: Unknown result type (might be due to invalid IL or missing references) //IL_0a8a: Unknown result type (might be due to invalid IL or missing references) //IL_0a8f: Unknown result type (might be due to invalid IL or missing references) //IL_0a25: Unknown result type (might be due to invalid IL or missing references) //IL_0a2a: Unknown result type (might be due to invalid IL or missing references) //IL_09fe: Unknown result type (might be due to invalid IL or missing references) //IL_0a0e: Unknown result type (might be due to invalid IL or missing references) //IL_0a13: Unknown result type (might be due to invalid IL or missing references) //IL_0d5c: Unknown result type (might be due to invalid IL or missing references) //IL_0d62: Unknown result type (might be due to invalid IL or missing references) //IL_0d4d: Unknown result type (might be due to invalid IL or missing references) //IL_0d52: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_078a: Unknown result type (might be due to invalid IL or missing references) //IL_078f: Unknown result type (might be due to invalid IL or missing references) //IL_0798: Unknown result type (might be due to invalid IL or missing references) //IL_079e: Unknown result type (might be due to invalid IL or missing references) //IL_065f: Unknown result type (might be due to invalid IL or missing references) //IL_0664: Unknown result type (might be due to invalid IL or missing references) //IL_066b: Unknown result type (might be due to invalid IL or missing references) //IL_0676: Unknown result type (might be due to invalid IL or missing references) //IL_0686: Unknown result type (might be due to invalid IL or missing references) //IL_068b: Unknown result type (might be due to invalid IL or missing references) //IL_0690: Unknown result type (might be due to invalid IL or missing references) //IL_0646: Unknown result type (might be due to invalid IL or missing references) //IL_064c: Unknown result type (might be due to invalid IL or missing references) //IL_053f: Unknown result type (might be due to invalid IL or missing references) //IL_054a: Unknown result type (might be due to invalid IL or missing references) //IL_055a: Unknown result type (might be due to invalid IL or missing references) //IL_055f: Unknown result type (might be due to invalid IL or missing references) //IL_0564: Unknown result type (might be due to invalid IL or missing references) //IL_084e: Unknown result type (might be due to invalid IL or missing references) //IL_0854: Unknown result type (might be due to invalid IL or missing references) //IL_0b9a: Unknown result type (might be due to invalid IL or missing references) //IL_0b9f: Unknown result type (might be due to invalid IL or missing references) //IL_0ad1: Unknown result type (might be due to invalid IL or missing references) //IL_0ad6: Unknown result type (might be due to invalid IL or missing references) //IL_0ab2: Unknown result type (might be due to invalid IL or missing references) //IL_0abe: Unknown result type (might be due to invalid IL or missing references) //IL_0ac4: Unknown result type (might be due to invalid IL or missing references) //IL_0ac6: Unknown result type (might be due to invalid IL or missing references) //IL_0acb: Unknown result type (might be due to invalid IL or missing references) //IL_0a3e: Unknown result type (might be due to invalid IL or missing references) //IL_0a4e: Unknown result type (might be due to invalid IL or missing references) //IL_0a53: Unknown result type (might be due to invalid IL or missing references) //IL_0cbf: Unknown result type (might be due to invalid IL or missing references) //IL_0cc4: Unknown result type (might be due to invalid IL or missing references) //IL_0cd4: Unknown result type (might be due to invalid IL or missing references) //IL_0cda: Unknown result type (might be due to invalid IL or missing references) //IL_0595: Unknown result type (might be due to invalid IL or missing references) //IL_059a: Unknown result type (might be due to invalid IL or missing references) //IL_0574: Unknown result type (might be due to invalid IL or missing references) //IL_0579: Unknown result type (might be due to invalid IL or missing references) //IL_0582: Unknown result type (might be due to invalid IL or missing references) //IL_0588: Unknown result type (might be due to invalid IL or missing references) //IL_0bb5: Unknown result type (might be due to invalid IL or missing references) //IL_0bbb: Unknown result type (might be due to invalid IL or missing references) //IL_0b0e: Unknown result type (might be due to invalid IL or missing references) //IL_0aee: Unknown result type (might be due to invalid IL or missing references) //IL_0afa: Unknown result type (might be due to invalid IL or missing references) //IL_0b00: U