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 MaskedAIRevamp v0.2.1
MaskedAIRevamp.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalNetworkAPI; using MaskedAIRevamp.Patches; using Microsoft.CodeAnalysis; using SkinwalkerMod; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("RadiationIsCool")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("RadiationIsCool")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("8ee335db-0cbe-470c-8fbc-69263f01b35a")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] 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 MaskedAIRevamp { [BepInPlugin("Piggy.MaskedAIRevamp", "MaskedAIRevamp", "0.2.1")] public class Plugin : BaseUnityPlugin { private const string modGUID = "Piggy.MaskedAIRevamp"; private const string modName = "MaskedAIRevamp"; private const string modVersion = "0.2.1"; private readonly Harmony harmony = new Harmony("Piggy.MaskedAIRevamp"); private static Plugin Instance; public static ManualLogSource mls; public static AssetBundle Bundle; public static bool enableExperimentalFeatures; public static bool enableSkinWalkers; public static bool useTerminal; public static bool useTerminalCredit; public static bool maskedShipDeparture; public static GameObject MapDotPrefab; public static RuntimeAnimatorController MaskedAnimController; public static RuntimeAnimatorController MapDotRework; public static string PluginDirectory; public static bool skinWalkersIntergrated; public static bool moreEmotesIntergrated; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } PluginDirectory = ((BaseUnityPlugin)this).Info.Location; LoadAssets(); mls = Logger.CreateLogSource("Piggy.MaskedAIRevamp"); mls.LogInfo((object)"Masked AI Revamp is loaded!"); enableExperimentalFeatures = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Experimental Features", true, "Turn on experimental features. If this feature is disabled, it will only change Masked's radar movement. *This option must be enabled to change Masked's AI.*").Value; enableSkinWalkers = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "SkinWalkers mod Compatibility", true, "Enables compatibility with the SkinWalkers mod. (Requires SkinWalkers mod installed, automatically disables on launch if not installed)").Value; useTerminal = ((BaseUnityPlugin)this).Config.Bind<bool>("Masked", "Masked terminal access", true, "Allows Masked to use the terminal.").Value; useTerminalCredit = ((BaseUnityPlugin)this).Config.Bind<bool>("Masked", "Masked uses credits", false, "(Not working rn) Allows Masked to use the terminal to spend credits.").Value; maskedShipDeparture = ((BaseUnityPlugin)this).Config.Bind<bool>("Masked", "Masked pulls the brake lever", false, "(Not working rn) Allows Masked to pull the brake lever. Um... really...?").Value; harmony.PatchAll(typeof(Plugin)); harmony.PatchAll(typeof(MaskedPlayerEnemyPatch)); harmony.PatchAll(typeof(ShotgunItemPatch)); harmony.PatchAll(typeof(GrabbableObjectPatch)); harmony.PatchAll(typeof(StartOfRoundPatch)); } private void Start() { if (enableExperimentalFeatures) { mls.LogInfo((object)"Experimental feature has been enabled! Masked AI's behavior changes."); } else { mls.LogInfo((object)"Experimental feature has been disabled! This does not change the behavior of the Masked AI."); } if (Chainloader.PluginInfos.Keys.Any((string k) => k == "RugbugRedfern.SkinwalkerMod")) { mls.LogInfo((object)"Masked AI Revamp <-> SkinWalker Intergrated!"); skinWalkersIntergrated = true; } } private void LoadAssets() { try { Bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(PluginDirectory), "mapdotanimpack")); } catch (Exception ex) { mls.LogError((object)("Couldn't load asset bundle: " + ex.Message)); return; } try { MapDotRework = Bundle.LoadAsset<RuntimeAnimatorController>("MapDotRework.controller"); MapDotPrefab = Bundle.LoadAsset<GameObject>("MaskedMapDot.prefab"); MaskedAnimController = Bundle.LoadAsset<RuntimeAnimatorController>("MaskedMetarig.controller"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Successfully loaded assets!"); } catch (Exception ex2) { ((BaseUnityPlugin)this).Logger.LogError((object)("Couldn't load assets: " + ex2.Message)); } } } } namespace MaskedAIRevamp.Patches { public class BushSystem : MonoBehaviour { public bool bushWithItem; } public class GlobalItemList : MonoBehaviour { public List<GrabbableObject> allitems = new List<GrabbableObject>(); private List<GrabbableObject> previtems = new List<GrabbableObject>(); public List<WalkieTalkie> allWalkieTalkies = new List<WalkieTalkie>(); public bool isShotgun; public bool isShovel; public bool isWalkie; public static GlobalItemList Instance { get; private set; } private void Awake() { Instance = this; } private void Update() { if (allitems != previtems) { CheckItem(1); CheckItem(2); CheckItem(3); previtems = allitems; } } private void CheckItem(int id) { foreach (GrabbableObject allitem in allitems) { if (id == 1) { if (allitem is ShotgunItem) { isShotgun = true; break; } isShotgun = false; } if (id == 2) { if (allitem is Shovel) { isShovel = true; break; } isShovel = false; } if (id == 3) { if (allitem is WalkieTalkie) { isWalkie = true; break; } isWalkie = false; } } } } public class SyncConfiguration : NetworkBehaviour { } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake_Postfix() { if (Plugin.enableExperimentalFeatures) { ((Component)StartOfRound.Instance).gameObject.AddComponent<SyncConfiguration>(); ((Component)StartOfRound.Instance).gameObject.AddComponent<GlobalItemList>(); } } } public class CheckItemCollision : MonoBehaviour { public bool hidedByMasked; } [HarmonyPatch(typeof(GrabbableObject))] internal class GrabbableObjectPatch { [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(GrabbableObject __instance) { if (Plugin.enableExperimentalFeatures) { ((Component)__instance).gameObject.AddComponent<CheckItemCollision>(); GlobalItemList.Instance.allitems.Add(__instance); if (__instance is WalkieTalkie) { GlobalItemList.Instance.allWalkieTalkies.Add(((Component)__instance).GetComponent<WalkieTalkie>()); } } } [HarmonyPostfix] [HarmonyPatch("DestroyObjectInHand")] private static void DestroyObjectInHand_Postfix(GrabbableObject __instance) { if (Plugin.enableExperimentalFeatures) { GlobalItemList.Instance.allitems.Remove(__instance); if (__instance is WalkieTalkie) { GlobalItemList.Instance.allWalkieTalkies.Remove(((Component)__instance).GetComponent<WalkieTalkie>()); } } } } public class MaskedRevamp : NetworkBehaviour { public enum Personality { None, Aggressive, Stealthy, Cunning, Deceiving } public Personality maskedPersonality; public AISearchRoutine seachForItems; public float stopAndTbagTimer = 1.1f; public float stopAndTbagCooldown; public int randomPose; public bool isHoldingObject; public bool heldTwoHanded; public bool moveSpecial; public EnemyAI __instance; public MaskedPlayerEnemy maskedEnemy; public Animator creatureAnimator; public NavMeshAgent agent; public bool checkDestination; public bool wantItems = true; public GrabbableObject closestGrabbable; public CheckItemCollision itemSystem; public float enterTerminalCodeTimer; public int enterTermianlSpecialCodeTime; public LethalNetworkVariable<int> enterTermianlSpecialCodeInt = new LethalNetworkVariable<int>("enterTermianlSpecialCodeInt"); public LethalNetworkVariable<bool> isCrouched = new LethalNetworkVariable<bool>("isCrouched"); public LethalNetworkVariable<bool> dropItem = new LethalNetworkVariable<bool>("dropItem"); public LethalNetworkVariable<bool> isDancing = new LethalNetworkVariable<bool>("isDancing"); public LethalNetworkVariable<bool> useWalkie = new LethalNetworkVariable<bool>("useWalkie"); public LethalNetworkVariable<bool> isJumped = new LethalNetworkVariable<bool>("isJumped"); public LethalNetworkVariable<int> SelectPersonalityInt = new LethalNetworkVariable<int>("SelectPersonalityInt"); public LethalNetworkVariable<int> maxDanceCount = new LethalNetworkVariable<int>("maxDanceCount"); public LethalNetworkVariable<float> terminalTimeFloat = new LethalNetworkVariable<float>("terminalTimeFloat"); public float jumpTime = 1f; private float dropTimerB; private Vector3 prevPos; private float velX; private float velZ; public float closetTimer; private bool enableDance; public float shovelTimer; public float hornTimer; public bool stunThrowed; public float angle1; public float angle2; public float dropTimer; public float shootTimer; public float rotationTimer; public float rotationCooldown; public bool itemDroped; public bool droppingItem; public Terminal terminal; public bool isUsingTerminal; public bool noMoreTerminal; public float dropShipTimer; public bool isDeliverEmptyDropship; public GameObject itemHolder; public float upperBodyAnimationsWeight; public float grabbableTime; public float distanceToPlayer = 1000f; private float breakerBoxDistance = 1000f; private float bushDistance = 1000f; public bool isStaminaDowned; public Vector3 originDestination; public bool walkieUsed; public bool walkieVoiceTransmitted; public float walkieTimer; public float walkieCooldown; public float originTimer; private BreakerBox breakerBox; private AnimatedObjectTrigger powerBox; private GameObject[] bushes; private ItemDropship dropship; private TerminalAccessibleObject[] terminalAccessibleObject; private float lookTimer; private bool lookedPlayer; public bool notGrabClosestItem; public bool isReeledWithShovel; public bool isHittedWithShovel; public bool shovelHitConfirm; public PlayerControllerB nearestPlayer; public bool canGoThroughItem; public bool isDroppedShotgunAvailable; public void Start() { //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) if (GameNetworkManager.Instance.isHostingGame) { enterTermianlSpecialCodeInt.Value = Random.Range(0, 4); } if ((Object)(object)GameObject.FindGameObjectWithTag("Bush") != (Object)null) { if (bushes != GameObject.FindGameObjectsWithTag("Bush")) { bushes = GameObject.FindGameObjectsWithTag("Bush"); } GameObject[] array = bushes; foreach (GameObject val in array) { if ((Object)(object)val.GetComponent<BushSystem>() == (Object)null) { val.AddComponent<BushSystem>(); } } } terminal = Object.FindObjectOfType<Terminal>(); __instance = (EnemyAI)(object)((Component)this).GetComponent<MaskedPlayerEnemy>(); maskedEnemy = ((Component)this).GetComponent<MaskedPlayerEnemy>(); creatureAnimator = ((Component)((Component)this).transform.GetChild(0).GetChild(3)).GetComponent<Animator>(); itemHolder = new GameObject("ItemHolder"); itemHolder.transform.parent = ((Component)__instance).transform.GetChild(0).GetChild(3).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(1) .GetChild(0) .GetChild(0) .GetChild(0); itemHolder.transform.localPosition = new Vector3(-0.002f, 0.036f, -0.042f); itemHolder.transform.localRotation = Quaternion.Euler(-3.616f, -2.302f, 0.145f); if (GameNetworkManager.Instance.isHostingGame) { maxDanceCount.Value = Random.Range(2, 4); } if ((Object)(object)creatureAnimator.runtimeAnimatorController != (Object)(object)Plugin.MaskedAnimController) { creatureAnimator.runtimeAnimatorController = Plugin.MaskedAnimController; } if ((Object)(object)((Component)((Component)__instance).transform.GetChild(3).GetChild(0)).GetComponent<Animator>().runtimeAnimatorController != (Object)(object)Plugin.MapDotRework) { ((Component)((Component)__instance).transform.GetChild(3).GetChild(0)).GetComponent<Animator>().runtimeAnimatorController = Plugin.MapDotRework; } dropship = Object.FindObjectOfType<ItemDropship>(); TerminalAccessibleObject[] array2 = Object.FindObjectsOfType<TerminalAccessibleObject>(); } private void Jump(bool enable) { if (jumpTime > 0f && !isJumped.Value) { jumpTime -= Time.deltaTime; } if (!isCrouched.Value && !isJumped.Value && jumpTime < 1f && jumpTime > 0.9f) { isJumped.Value = true; creatureAnimator.SetTrigger("FakeJump"); } } private void Dance(bool enabled) { if (enabled) { isDancing.Value = true; __instance.movingTowardsTargetPlayer = false; agent.speed = 0f; } else { isDancing.Value = false; } } private void InvokeAllClientsSynced() { Plugin.mls.LogWarning((object)"InvokeAllClientsSynced"); } private void InvokeOtherClientsSynced() { Plugin.mls.LogWarning((object)"InvokeOtherClientsSynced"); } private void SelectPersonality(int num) { switch (num) { case 0: maskedPersonality = Personality.Aggressive; break; case 1: maskedPersonality = Personality.Cunning; break; case 2: maskedPersonality = Personality.Deceiving; break; case 3: maskedPersonality = Personality.Stealthy; break; } } private void SyncTermianlInt(int num) { enterTermianlSpecialCodeTime = num; } public void Update() { //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_04ab: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_03ba: Unknown result type (might be due to invalid IL or missing references) //IL_060c: 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_0adb: Unknown result type (might be due to invalid IL or missing references) //IL_0af0: Unknown result type (might be due to invalid IL or missing references) //IL_0b06: Unknown result type (might be due to invalid IL or missing references) //IL_0b0b: Unknown result type (might be due to invalid IL or missing references) //IL_0b10: Unknown result type (might be due to invalid IL or missing references) //IL_0b17: Unknown result type (might be due to invalid IL or missing references) //IL_0d67: Unknown result type (might be due to invalid IL or missing references) //IL_0d4b: Unknown result type (might be due to invalid IL or missing references) //IL_0b6e: Unknown result type (might be due to invalid IL or missing references) //IL_0b73: Unknown result type (might be due to invalid IL or missing references) //IL_0b57: Unknown result type (might be due to invalid IL or missing references) //IL_0b5c: Unknown result type (might be due to invalid IL or missing references) //IL_0b76: Unknown result type (might be due to invalid IL or missing references) //IL_0b78: Unknown result type (might be due to invalid IL or missing references) //IL_0b7d: Unknown result type (might be due to invalid IL or missing references) //IL_0b8f: Unknown result type (might be due to invalid IL or missing references) //IL_0b91: Unknown result type (might be due to invalid IL or missing references) //IL_0b96: Unknown result type (might be due to invalid IL or missing references) //IL_0b9b: Unknown result type (might be due to invalid IL or missing references) //IL_0ba2: Unknown result type (might be due to invalid IL or missing references) //IL_0bfb: Unknown result type (might be due to invalid IL or missing references) //IL_0c00: Unknown result type (might be due to invalid IL or missing references) //IL_0bd0: Unknown result type (might be due to invalid IL or missing references) //IL_0bd5: Unknown result type (might be due to invalid IL or missing references) //IL_0bdf: Unknown result type (might be due to invalid IL or missing references) //IL_0be4: Unknown result type (might be due to invalid IL or missing references) //IL_0be9: Unknown result type (might be due to invalid IL or missing references) //IL_0da6: Unknown result type (might be due to invalid IL or missing references) //IL_0db6: Unknown result type (might be due to invalid IL or missing references) //IL_0c69: Unknown result type (might be due to invalid IL or missing references) //IL_0c6e: Unknown result type (might be due to invalid IL or missing references) //IL_0c73: Unknown result type (might be due to invalid IL or missing references) //IL_0c8e: Unknown result type (might be due to invalid IL or missing references) //IL_0c90: Unknown result type (might be due to invalid IL or missing references) //IL_0c95: Unknown result type (might be due to invalid IL or missing references) //IL_0e2e: Unknown result type (might be due to invalid IL or missing references) //IL_10ef: Unknown result type (might be due to invalid IL or missing references) //IL_1155: Unknown result type (might be due to invalid IL or missing references) if (__instance.isEnemyDead) { ((Behaviour)agent).enabled = false; } if (useWalkie.Value) { HoldWalkie(); useWalkie.Value = false; } if (GameNetworkManager.Instance.isHostingGame) { if (maskedPersonality == Personality.None) { SelectPersonalityInt.Value = Random.Range(0, 4); } if (SelectPersonalityInt.Value == 0) { maskedPersonality = Personality.Aggressive; } else if (SelectPersonalityInt.Value == 1) { maskedPersonality = Personality.Cunning; } else if (SelectPersonalityInt.Value == 2) { maskedPersonality = Personality.Deceiving; } else if (SelectPersonalityInt.Value == 3) { maskedPersonality = Personality.Stealthy; } } if (!((Component)this).TryGetComponent<NavMeshAgent>(ref agent)) { agent = ((Component)this).GetComponent<NavMeshAgent>(); } if (Plugin.skinWalkersIntergrated && ((NetworkBehaviour)this).IsHost && maskedPersonality == Personality.Deceiving) { useWalkie.Value = true; } if ((Object)(object)creatureAnimator == (Object)null) { Plugin.mls.LogError((object)"VariableDeclarationClass.Update(): creatureAnimator is null!"); return; } if ((Object)(object)agent == (Object)null) { Plugin.mls.LogError((object)"VariableDeclarationClass.Update(): __agent is null!"); return; } if ((Object)(object)__instance == (Object)null) { Plugin.mls.LogError((object)"VariableDeclarationClass.Update(): __instance is null!"); return; } if (maskedPersonality == Personality.Cunning) { MaskedCunning(); } if (Plugin.useTerminal && (maskedPersonality == Personality.Cunning || maskedPersonality == Personality.Deceiving)) { UsingTerminal(); } if (((EnemyAI)maskedEnemy).isInsidePlayerShip && isHoldingObject && maskedPersonality == Personality.Cunning) { dropItem.Value = true; } if ((Object)(object)__instance.targetPlayer != (Object)null) { distanceToPlayer = Vector3.Distance(((Component)creatureAnimator).transform.position, ((Component)__instance.targetPlayer).transform.position); maskedEnemy.lookAtPositionTimer = 0f; } if (!__instance.isEnemyDead) { if (isCrouched.Value) { creatureAnimator.SetTrigger("Crouching"); } else { creatureAnimator.ResetTrigger("Crouching"); } if (isCrouched.Value && !maskedEnemy.running) { agent.speed = 1.9f; } else if (maskedEnemy.running) { ((EnemyAI)maskedEnemy).creatureAnimator.SetBool("Running", true); MaskedPlayerEnemy obj = maskedEnemy; obj.staminaTimer -= Time.deltaTime * 0.05f; agent.speed = 7f; } if (isDancing.Value) { creatureAnimator.ResetTrigger("Crouching"); creatureAnimator.SetTrigger("Dancing"); __instance.SetDestinationToPosition(((Component)__instance).transform.position, false); agent.speed = 0f; Plugin.mls.LogInfo((object)"Dancing"); } else if (!maskedEnemy.running && !isCrouched.Value) { agent.speed = 3.8f; creatureAnimator.ResetTrigger("Dancing"); } } if (!((EnemyAI)maskedEnemy).isEnemyDead && !isUsingTerminal && (maskedPersonality != Personality.Aggressive || !isHoldingObject || (!(closestGrabbable is Shovel) && !(closestGrabbable is ShotgunItem)))) { PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { float num = Vector3.Distance(((Component)val).transform.position, ((Component)this).transform.position); if (num < 1f) { maskedEnemy.KillPlayerAnimationServerRpc((int)val.playerClientId); maskedEnemy.startingKillAnimationLocalClient = true; if (val.isCrouching) { val.Crouch(false); } } } } if (!__instance.isEnemyDead) { if (((NetworkBehaviour)this).IsHost && maskedPersonality == Personality.Stealthy) { AwayFromPlayer(); } if (((NetworkBehaviour)this).IsHost && maskedPersonality == Personality.Stealthy) { PlayerLikeAction(); } } if (maskedPersonality == Personality.Deceiving || maskedPersonality == Personality.Cunning) { __instance.targetPlayer = null; if (__instance.isOutside && !__instance.isInsidePlayerShip && !__instance.isEnemyDead) { maskedEnemy.lostLOSTimer = 0f; maskedEnemy.stopAndStareTimer = 0f; __instance.SetDestinationToPosition(GameObject.Find("LockerAudio").transform.position, true); if (maskedEnemy.staminaTimer >= 5f && !isStaminaDowned) { if (!isJumped.Value) { isJumped.Value = true; } else { creatureAnimator.ResetTrigger("FakeJump"); } maskedEnemy.running = true; return; } if (maskedEnemy.staminaTimer < 0f) { isStaminaDowned = true; maskedEnemy.running = false; ((EnemyAI)maskedEnemy).creatureAnimator.SetTrigger("Tired"); } if (isStaminaDowned) { MaskedPlayerEnemy obj2 = maskedEnemy; obj2.staminaTimer += Time.deltaTime * 0.2f; if (maskedEnemy.staminaTimer < 3f) { isStaminaDowned = false; ((EnemyAI)maskedEnemy).creatureAnimator.ResetTrigger("Tired"); } } } } if (!((EnemyAI)maskedEnemy).isEnemyDead) { if (maskedPersonality == Personality.Aggressive && GlobalItemList.Instance.isShotgun) { FindAndGrabShotgun(); if (isHoldingObject && closestGrabbable is ShotgunItem) { UseItem(((EnemyAI)maskedEnemy).targetPlayer, distanceToPlayer); } } else if (!__instance.isInsidePlayerShip && !isHoldingObject) { GrabItem(); } } if (((EnemyAI)maskedEnemy).isEnemyDead && isHoldingObject) { closestGrabbable.parentObject = null; closestGrabbable.isHeld = false; closestGrabbable.isHeldByEnemy = false; isHoldingObject = false; } if ((Object)(object)__instance.targetPlayer == (Object)null && isHoldingObject) { dropTimer = 0f; } if (maskedPersonality != Personality.Cunning && (Object)(object)__instance.targetPlayer != (Object)null && isHoldingObject && !(closestGrabbable is Shovel) && !(closestGrabbable is ShotgunItem) && maskedPersonality == Personality.Aggressive) { dropTimer += Time.deltaTime; if (((NetworkBehaviour)this).IsHost) { if (!itemDroped) { dropTimerB = Random.Range(0.2f, 4f); itemDroped = true; } if (dropTimer > dropTimerB) { dropItem.Value = true; } } } else if ((Object)(object)__instance.targetPlayer != (Object)null && isHoldingObject && maskedPersonality != Personality.Aggressive && maskedPersonality != Personality.Stealthy && maskedPersonality != Personality.Cunning) { dropTimer += Time.deltaTime; if (((NetworkBehaviour)this).IsHost) { if (!itemDroped) { dropTimerB = Random.Range(0.2f, 4f); itemDroped = true; } if (dropTimer > dropTimerB) { dropItem.Value = true; } } } if (isHoldingObject && (Object)(object)__instance.targetPlayer != (Object)null && closestGrabbable is StunGrenadeItem && maskedPersonality == Personality.Aggressive) { StunGrenadeItem component = ((Component)closestGrabbable).GetComponent<StunGrenadeItem>(); if (distanceToPlayer < 8f && !stunThrowed) { stunThrowed = true; creatureAnimator.SetTrigger("StunPin"); component.inPullingPinAnimation = true; ((GrabbableObject)component).playerHeldBy.activatingItem = true; ((GrabbableObject)component).playerHeldBy.doingUpperBodyEmote = 1.16f; component.itemAnimator.SetTrigger("pullPin"); component.itemAudio.PlayOneShot(component.pullPinSFX); WalkieTalkie.TransmitOneShotAudio(component.itemAudio, component.pullPinSFX, 0.8f); component.inPullingPinAnimation = false; component.pinPulled = true; ((GrabbableObject)component).itemUsedUp = true; ((GrabbableObject)component).grabbable = false; Vector3 position = ((Component)component).transform.position; component.grenadeThrowRay = new Ray(((Component)((GrabbableObject)component).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)component).playerHeldBy.gameplayCamera).transform.forward); position = ((!Physics.Raycast(component.grenadeThrowRay, ref component.grenadeHit, 12f, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) ? ((Ray)(ref component.grenadeThrowRay)).GetPoint(10f) : ((Ray)(ref component.grenadeThrowRay)).GetPoint(((RaycastHit)(ref component.grenadeHit)).distance - 0.05f)); Debug.DrawRay(position, Vector3.down, Color.blue, 15f); component.grenadeThrowRay = new Ray(position, Vector3.down); Vector3 val2 = ((!Physics.Raycast(component.grenadeThrowRay, ref component.grenadeHit, 30f, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) ? ((Ray)(ref component.grenadeThrowRay)).GetPoint(30f) : (((RaycastHit)(ref component.grenadeHit)).point + Vector3.up * 0.05f)); closestGrabbable.parentObject = null; ((Component)closestGrabbable).transform.SetParent(StartOfRound.Instance.propsContainer, true); closestGrabbable.EnablePhysics(true); closestGrabbable.fallTime = 0f; closestGrabbable.startFallingPosition = ((Component)closestGrabbable).transform.parent.InverseTransformPoint(((Component)closestGrabbable).transform.position); closestGrabbable.targetFloorPosition = ((Component)closestGrabbable).transform.parent.InverseTransformPoint(val2); closestGrabbable.floorYRot = -1; isHoldingObject = false; closestGrabbable.DiscardItemFromEnemy(); } } IdleAnimationSelector(creatureAnimator, __instance); if (!__instance.isEnemyDead && isHoldingObject && (Object)(object)__instance.targetPlayer != (Object)null && (maskedPersonality != Personality.Aggressive || (!(closestGrabbable is Shovel) && !(closestGrabbable is ShotgunItem)))) { if (__instance.isOutside) { __instance.SetDestinationToPosition(maskedEnemy.shipHidingSpot, false); } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, false); } } if (__instance.isInsidePlayerShip && maskedPersonality != Personality.Aggressive && isHoldingObject) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)terminal).transform.position); if (num2 < 6f) { dropItem.Value = true; } } if (noMoreTerminal && !__instance.isEnemyDead) { maskedEnemy.LookAndRunRandomly(true, true); if (((EnemyAI)maskedEnemy).isOutside) { ((EnemyAI)maskedEnemy).SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); } } if (maskedEnemy.stopAndStareTimer >= 0f && stopAndTbagCooldown <= 0f && !__instance.isEnemyDead) { if (GameNetworkManager.Instance.isHostingGame) { if (stopAndTbagTimer <= 0f) { randomPose = Random.Range(0, 4); } stopAndTbagTimer -= Time.deltaTime; if (randomPose == 0) { if (stopAndTbagTimer < 1f && stopAndTbagTimer > 0.8f) { isCrouched.Value = true; } else if (stopAndTbagTimer < 0.8f && stopAndTbagTimer > 0.6f) { isCrouched.Value = false; } else if (stopAndTbagTimer < 0.6f && stopAndTbagTimer > 0.4f) { isCrouched.Value = true; } else if (stopAndTbagTimer > 0f && stopAndTbagTimer < 0.4f) { isCrouched.Value = false; stopAndTbagCooldown = 10f; } } else if (randomPose == 1 && maskedPersonality != Personality.Aggressive) { if (stopAndTbagTimer < 1.1f && stopAndTbagTimer > 0.8f) { isDancing.Value = true; } else if (stopAndTbagTimer < 0.7f && stopAndTbagTimer > 0.2f) { isDancing.Value = false; isCrouched.Value = true; } else if (stopAndTbagTimer > 0f && stopAndTbagTimer < 0.2f) { stopAndTbagCooldown = 10f; isCrouched.Value = false; } } } } else { stopAndTbagTimer = 2.5f; if (stopAndTbagCooldown > 0f) { stopAndTbagCooldown -= Time.deltaTime; } } if (!((Object)(object)__instance.targetPlayer != (Object)null)) { return; } LookAtPos(((Component)((EnemyAI)maskedEnemy).targetPlayer).transform.position, 0.5f); if (maskedPersonality == Personality.Cunning) { lookTimer += Time.deltaTime; if (lookTimer < 1f && !lookedPlayer) { LookAtPos(((Component)((EnemyAI)maskedEnemy).targetPlayer).transform.position, 2.5f); lookedPlayer = true; } if (lookTimer > 5f) { lookTimer = 0f; lookedPlayer = false; } } if (enableDance) { isDancing.Value = true; maskedEnemy.stopAndStareTimer = 0.9f; agent.speed = 0f; } if (distanceToPlayer < 17f && __instance.targetPlayer.performingEmote && maxDanceCount.Value > 0) { if (GameNetworkManager.Instance.isHostingGame && !enableDance) { LethalNetworkVariable<int> obj3 = maxDanceCount; obj3.Value -= 1; randomPose = 1; enableDance = true; } stopAndTbagTimer = 0.9f; __instance.agent.speed = 0f; } else if (isDancing.Value && GameNetworkManager.Instance.isHostingGame) { isDancing.Value = false; stopAndTbagTimer = 0.4f; randomPose = 1; enableDance = false; } } public void UseItem(PlayerControllerB target, float distance) { //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_0478: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Unknown result type (might be due to invalid IL or missing references) //IL_04ae: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04f0: Unknown result type (might be due to invalid IL or missing references) //IL_04f2: Unknown result type (might be due to invalid IL or missing references) //IL_0514: Unknown result type (might be due to invalid IL or missing references) //IL_0516: Unknown result type (might be due to invalid IL or missing references) shovelTimer += Time.deltaTime; if (isHoldingObject) { if (closestGrabbable is FlashlightItem) { if (shovelTimer < 0.7f) { ((GrabbableObject)((Component)closestGrabbable).GetComponent<FlashlightItem>()).ItemActivate(false, true); } else if (shovelTimer > 0.7f && shovelTimer < 1.4f) { ((GrabbableObject)((Component)closestGrabbable).GetComponent<FlashlightItem>()).ItemActivate(true, true); } else if (shovelTimer > 1f) { shovelTimer = 0f; } } if (closestGrabbable is Shovel) { if (shovelTimer < 0.5f) { if (!isReeledWithShovel) { creatureAnimator.SetTrigger("ShovelUp"); ((Component)closestGrabbable).GetComponent<Shovel>().shovelAudio.PlayOneShot(((Component)closestGrabbable).GetComponent<Shovel>().reelUp); isReeledWithShovel = true; } } else if (shovelTimer > 0.5f && shovelTimer < 0.7f) { if (!isHittedWithShovel) { creatureAnimator.ResetTrigger("ShovelUp"); if (distance < 3f) { target.movementAudio.PlayOneShot(StartOfRound.Instance.hitPlayerSFX); if (target.health > 20) { target.DamagePlayer(20, true, true, (CauseOfDeath)1, 0, false, default(Vector3)); Plugin.mls.LogInfo((object)"Damage With Shovel"); } else { target.KillPlayer(Vector3.zero, true, (CauseOfDeath)1, 0); ((EnemyAI)maskedEnemy).targetPlayer = null; maskedEnemy.lastPlayerKilled = null; ((EnemyAI)maskedEnemy).inSpecialAnimation = false; Plugin.mls.LogInfo((object)"Killed With Shovel"); } } ((Component)closestGrabbable).GetComponent<Shovel>().shovelAudio.PlayOneShot(((Component)closestGrabbable).GetComponent<Shovel>().swing); isHittedWithShovel = true; } } else if ((double)shovelTimer > 1.5) { shovelTimer = 0f; isReeledWithShovel = false; isHittedWithShovel = false; } } if ((Object)(object)((EnemyAI)maskedEnemy).targetPlayer != (Object)null && closestGrabbable is ShotgunItem && maskedPersonality == Personality.Aggressive) { Plugin.mls.LogInfo((object)"Shotgun Guy targeted player"); ShotgunItem component = ((Component)closestGrabbable).GetComponent<ShotgunItem>(); if (component.shellsLoaded > 0) { if (((Component)closestGrabbable).GetComponent<ShotgunItem>().shellsLoaded > 0) { if (shootTimer > 0f) { shootTimer -= Time.deltaTime; } float num = Vector3.Distance(((Component)creatureAnimator).transform.position, ((Component)__instance.targetPlayer).transform.position); if (component.safetyOn && num < 8f) { component.safetyOn = false; component.gunAudio.PlayOneShot(component.switchSafetyOffSFX); WalkieTalkie.TransmitOneShotAudio(component.gunAudio, component.switchSafetyOffSFX, 1f); Plugin.mls.LogInfo((object)"Safety On"); } else if (!component.safetyOn && num > 12f) { component.safetyOn = true; component.gunAudio.PlayOneShot(component.switchSafetyOnSFX); WalkieTalkie.TransmitOneShotAudio(component.gunAudio, component.switchSafetyOnSFX, 1f); Plugin.mls.LogInfo((object)"Safety Off"); } if (num < 10f && shootTimer <= 0f) { Vector3 val = ((Component)((Component)__instance).transform.GetChild(0).GetChild(3).GetChild(3)).transform.position - ((Component)((Component)__instance).transform.GetChild(0).GetChild(3).GetChild(3)).transform.up * 0.45f; Vector3 forward = ((Component)((Component)__instance).transform.GetChild(0).GetChild(3).GetChild(3)).transform.forward; Plugin.mls.LogInfo((object)"Calling shoot gun...."); component.ShootGun(val, forward); Plugin.mls.LogInfo((object)"Calling shoot gun and sync"); component.localClientSendingShootGunRPC = true; component.ShootGunServerRpc(val, forward); shootTimer = 3f; } if ((Object)(object)__instance.targetPlayer != (Object)null && num > 10f && shootTimer <= 0f) { maskedEnemy.running = true; } } else if (!component.safetyOn && component.shellsLoaded > 0 && (Object)(object)__instance.targetPlayer == (Object)null) { component.safetyOn = true; component.gunAudio.PlayOneShot(component.switchSafetyOnSFX); WalkieTalkie.TransmitOneShotAudio(component.gunAudio, component.switchSafetyOnSFX, 1f); } } } } if (dropItem.Value) { DropItem(); } } private void DropItem() { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)closestGrabbable != (Object)null && isHoldingObject) { closestGrabbable.parentObject = null; ((Component)closestGrabbable).transform.SetParent(StartOfRound.Instance.propsContainer, true); closestGrabbable.EnablePhysics(true); closestGrabbable.fallTime = 0f; closestGrabbable.startFallingPosition = ((Component)closestGrabbable).transform.parent.InverseTransformPoint(((Component)closestGrabbable).transform.position); closestGrabbable.targetFloorPosition = ((Component)closestGrabbable).transform.parent.InverseTransformPoint(closestGrabbable.GetItemFloorPosition(default(Vector3))); closestGrabbable.floorYRot = -1; closestGrabbable.isHeld = false; closestGrabbable.isHeldByEnemy = false; isHoldingObject = false; closestGrabbable.DiscardItemFromEnemy(); PlayerControllerB targetPlayer = __instance.CheckLineOfSightForClosestPlayer(70f, 50, 1, 3f); __instance.movingTowardsTargetPlayer = true; __instance.targetPlayer = targetPlayer; __instance.SwitchToBehaviourState(2); } } [HarmonyPatch(typeof(MaskedPlayerEnemy), "OnCollideWithPlayer")] [HarmonyPrefix] private static bool OnCollideWithPlayer_Prefix() { return false; } [HarmonyPatch(typeof(MaskedPlayerEnemy), "LookAtPosition")] [HarmonyPrefix] private static bool LookAtPosition_Prefix() { return false; } public void LookAtPos(Vector3 pos, float lookAtTime = 1f) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)$"Look at position {pos} called! lookatpositiontimer setting to {lookAtTime}"); maskedEnemy.focusOnPosition = pos; maskedEnemy.lookAtPositionTimer = lookAtTime; float num = Vector3.Angle(((Component)this).transform.forward, pos - ((Component)this).transform.position); if (pos.y - maskedEnemy.headTiltTarget.position.y < 0f) { num *= -1f; } maskedEnemy.verticalLookAngle = num; } [HarmonyPatch(typeof(MaskedPlayerEnemy), "LookAtPlayerServerRpc")] [HarmonyPrefix] private static bool LookAtPlayerServerRpc_Prefix() { return false; } public void GrabItem() { //IL_0045: 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_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) if (isHoldingObject || !wantItems) { return; } float num = float.PositiveInfinity; foreach (GrabbableObject allitem in GlobalItemList.Instance.allitems) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)allitem).transform.position); if (!(num2 < num) || !(num2 <= 10f) || allitem.isHeld || allitem.isHeldByEnemy || notGrabClosestItem) { continue; } num = num2; closestGrabbable = allitem; if ((Object)(object)closestGrabbable != (Object)null && (Object)(object)((Component)closestGrabbable).GetComponent<CheckItemCollision>() != (Object)null) { itemSystem = ((Component)closestGrabbable).GetComponent<CheckItemCollision>(); } if (itemSystem.hidedByMasked || closestGrabbable.isHeld || closestGrabbable.isHeldByEnemy) { continue; } if (((NetworkBehaviour)this).IsHost) { if (num2 > 0.5f) { __instance.SetDestinationToPosition(((Component)closestGrabbable).transform.position, true); __instance.moveTowardsDestination = true; __instance.movingTowardsTargetPlayer = false; } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); __instance.moveTowardsDestination = false; } } if (num2 > 0.5f && num2 < 3f) { maskedEnemy.focusOnPosition = ((Component)closestGrabbable).transform.position; maskedEnemy.lookAtPositionTimer = 1.5f; } if (num2 < 0.9f) { float num3 = Vector3.Angle(((Component)__instance).transform.forward, ((Component)closestGrabbable).transform.position - ((Component)__instance).transform.position); if (((Component)closestGrabbable).transform.position.y - maskedEnemy.headTiltTarget.position.y < 0f) { num3 *= -1f; } maskedEnemy.verticalLookAngle = num3; closestGrabbable.parentObject = itemHolder.transform; closestGrabbable.hasHitGround = false; closestGrabbable.isHeld = true; closestGrabbable.isHeldByEnemy = true; closestGrabbable.grabbable = false; isHoldingObject = true; itemDroped = false; closestGrabbable.GrabItemFromEnemy(__instance); } if (num2 < 4f && !isHoldingObject && ((NetworkBehaviour)this).IsHost) { isCrouched.Value = true; } } } public void GrabShotgunItem() { //IL_0058: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: 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_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) if (isHoldingObject || !wantItems) { return; } float num = float.PositiveInfinity; foreach (GrabbableObject allitem in GlobalItemList.Instance.allitems) { if (!(allitem is ShotgunItem)) { continue; } float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)allitem).transform.position); if (!(num2 < num) || !(num2 <= 10f) || allitem.isHeld || allitem.isHeldByEnemy || notGrabClosestItem) { continue; } num = num2; closestGrabbable = allitem; if ((Object)(object)closestGrabbable != (Object)null && (Object)(object)((Component)closestGrabbable).GetComponent<CheckItemCollision>() != (Object)null) { itemSystem = ((Component)closestGrabbable).GetComponent<CheckItemCollision>(); } if (itemSystem.hidedByMasked) { continue; } if (((NetworkBehaviour)this).IsHost) { if (num2 > 0.5f) { __instance.SetDestinationToPosition(((Component)closestGrabbable).transform.position, true); __instance.moveTowardsDestination = true; __instance.movingTowardsTargetPlayer = false; } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); __instance.moveTowardsDestination = false; } } if (num2 > 0.5f && num2 < 3f) { maskedEnemy.focusOnPosition = ((Component)closestGrabbable).transform.position; maskedEnemy.lookAtPositionTimer = 1.5f; } if (num2 < 0.9f) { float num3 = Vector3.Angle(((Component)__instance).transform.forward, ((Component)closestGrabbable).transform.position - ((Component)__instance).transform.position); if (((Component)closestGrabbable).transform.position.y - maskedEnemy.headTiltTarget.position.y < 0f) { num3 *= -1f; } maskedEnemy.verticalLookAngle = num3; closestGrabbable.parentObject = itemHolder.transform; closestGrabbable.hasHitGround = false; closestGrabbable.isHeld = true; closestGrabbable.isHeldByEnemy = true; closestGrabbable.grabbable = false; isHoldingObject = true; itemDroped = false; closestGrabbable.GrabItemFromEnemy(__instance); } if (num2 < 4f && !isHoldingObject && maskedPersonality != Personality.Aggressive && ((NetworkBehaviour)this).IsHost) { isCrouched.Value = true; } } } public void DetectEnemy() { //IL_0026: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) foreach (GrabbableObject allitem in GlobalItemList.Instance.allitems) { float num = Vector3.Distance(((Component)this).transform.position, ((Component)allitem).transform.position); if (num < float.PositiveInfinity && num <= 10f && ((NetworkBehaviour)this).IsHost) { if (num > 0.5f) { __instance.SetDestinationToPosition(((Component)closestGrabbable).transform.position, true); __instance.moveTowardsDestination = true; __instance.movingTowardsTargetPlayer = false; } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); __instance.moveTowardsDestination = false; } } } } public void ManuelGrabItem(GrabbableObject item) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) if (isHoldingObject) { return; } float num = Vector3.Distance(((Component)this).transform.position, ((Component)item).transform.position); if (num < 0.9f) { float num2 = Vector3.Angle(((Component)__instance).transform.forward, ((Component)closestGrabbable).transform.position - ((Component)__instance).transform.position); if (((Component)closestGrabbable).transform.position.y - maskedEnemy.headTiltTarget.position.y < 0f) { num2 *= -1f; } maskedEnemy.verticalLookAngle = num2; item.parentObject = itemHolder.transform; item.hasHitGround = false; item.isHeld = true; item.isHeldByEnemy = true; item.grabbable = false; isHoldingObject = true; itemDroped = false; item.GrabItemFromEnemy(__instance); } if (num < 4f && !isHoldingObject && maskedPersonality != Personality.Aggressive && ((NetworkBehaviour)this).IsHost) { isCrouched.Value = true; } } public void ForceGrabCustomItem(GrabbableObject item) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0031: 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_005c: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Angle(((Component)__instance).transform.forward, ((Component)closestGrabbable).transform.position - ((Component)__instance).transform.position); if (((Component)closestGrabbable).transform.position.y - maskedEnemy.headTiltTarget.position.y < 0f) { num *= -1f; } maskedEnemy.verticalLookAngle = num; item.parentObject = itemHolder.transform; item.hasHitGround = false; item.isHeld = true; item.isHeldByEnemy = true; item.grabbable = false; isHoldingObject = true; itemDroped = false; item.GrabItemFromEnemy(__instance); } public void IdleAnimationSelector(Animator creatureAnimator, EnemyAI __instance) { if (isHoldingObject) { upperBodyAnimationsWeight = Mathf.Lerp(upperBodyAnimationsWeight, 0.9f, 25f * Time.deltaTime); creatureAnimator.SetLayerWeight(creatureAnimator.GetLayerIndex("Item"), upperBodyAnimationsWeight); } else { upperBodyAnimationsWeight = Mathf.Lerp(upperBodyAnimationsWeight, 0f, 25f * Time.deltaTime); creatureAnimator.SetLayerWeight(creatureAnimator.GetLayerIndex("Item"), upperBodyAnimationsWeight); creatureAnimator.SetLayerWeight(creatureAnimator.GetLayerIndex("Item"), upperBodyAnimationsWeight); } if (isHoldingObject && closestGrabbable.itemProperties.twoHandedAnimation && !(closestGrabbable is ShotgunItem)) { creatureAnimator.SetTrigger("HoldLung"); creatureAnimator.ResetTrigger("HoldFlash"); creatureAnimator.ResetTrigger("HoldShotgun"); creatureAnimator.ResetTrigger("HoldOneItem"); } else if (isHoldingObject && !closestGrabbable.itemProperties.twoHandedAnimation && closestGrabbable is FlashlightItem) { creatureAnimator.SetTrigger("HoldFlash"); creatureAnimator.ResetTrigger("HoldLung"); creatureAnimator.ResetTrigger("HoldShotgun"); creatureAnimator.ResetTrigger("HoldOneItem"); } else if (isHoldingObject && !closestGrabbable.itemProperties.twoHandedAnimation && !(closestGrabbable is ShotgunItem) && !(closestGrabbable is FlashlightItem) && !(closestGrabbable is Shovel)) { creatureAnimator.SetTrigger("HoldOneItem"); creatureAnimator.ResetTrigger("HoldFlash"); creatureAnimator.ResetTrigger("HoldLung"); creatureAnimator.ResetTrigger("HoldShotgun"); } else if (isHoldingObject && !closestGrabbable.itemProperties.twoHandedAnimation && closestGrabbable is Shovel) { creatureAnimator.SetTrigger("HoldLung"); creatureAnimator.ResetTrigger("HoldOneItem"); creatureAnimator.ResetTrigger("HoldFlash"); creatureAnimator.ResetTrigger("HoldShotgun"); } else if (isHoldingObject && closestGrabbable is ShotgunItem) { creatureAnimator.SetTrigger("HoldShotgun"); creatureAnimator.ResetTrigger("HoldFlash"); creatureAnimator.ResetTrigger("HoldLung"); creatureAnimator.ResetTrigger("HoldOneItem"); } else if (!isHoldingObject) { creatureAnimator.ResetTrigger("HoldFlash"); creatureAnimator.ResetTrigger("HoldLung"); creatureAnimator.ResetTrigger("HoldShotgun"); creatureAnimator.ResetTrigger("HoldOneItem"); } } public void CheckPathRotating(NavMeshAgent agent, EnemyAI __instance) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_01aa: 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_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)this).IsHost) { return; } NavMeshPath val = new NavMeshPath(); int num = 1; if (agent.pathPending) { return; } if (agent.remainingDistance < agent.stoppingDistance) { if (!agent.hasPath) { return; } Vector3 velocity = agent.velocity; if (((Vector3)(ref velocity)).sqrMagnitude == 0f) { return; } } if (num >= agent.path.corners.Length || !((NetworkBehaviour)this).IsHost) { return; } Vector3 val2 = agent.path.corners[num] - ((Component)agent).transform.position; if (num + 1 < agent.path.corners.Length) { Vector3 val3 = agent.path.corners[num + 1] - agent.path.corners[num]; float num2 = Vector3.Angle(val2, val3); if (num2 > 30f) { rotationTimer += Time.deltaTime; if (rotationTimer > 0f && rotationTimer < 0.5f) { if (angle1 == 0f) { angle1 = ((Component)__instance).transform.localEulerAngles.y + 10f; } Plugin.mls.LogInfo((object)("angle1: " + angle1)); ((Component)__instance).transform.localEulerAngles = new Vector3(((Component)__instance).transform.localEulerAngles.x, angle1, ((Component)__instance).transform.localEulerAngles.z); } else if ((double)rotationTimer > 0.5 && rotationTimer < 1.1f) { if (angle2 == 0f) { angle1 = ((Component)__instance).transform.localEulerAngles.y - 5f; } Plugin.mls.LogInfo((object)("angle2: " + angle2)); ((Component)__instance).transform.localEulerAngles = new Vector3(((Component)__instance).transform.localEulerAngles.x, angle1, ((Component)__instance).transform.localEulerAngles.z); } Plugin.mls.LogWarning((object)"곧 30도이상 회전"); } else { rotationTimer = 0f; angle1 = 0f; angle2 = 0f; } } if (((Vector3)(ref val2)).magnitude <= agent.stoppingDistance) { Plugin.mls.LogWarning((object)"코너에 거의 도착했으며 다음 코너를 검사하기 위해 인덱스 증가"); num++; } } private void HoldWalkie() { if (Plugin.skinWalkersIntergrated && isHoldingObject && closestGrabbable is WalkieTalkie) { WalkieTalkie component = ((Component)closestGrabbable).GetComponent<WalkieTalkie>(); walkieCooldown += Time.deltaTime; if (walkieCooldown < 1f) { creatureAnimator.ResetTrigger("UseWalkie"); walkieUsed = false; walkieVoiceTransmitted = false; walkieTimer = 0f; } else if (walkieCooldown < 4f && walkieCooldown > 3f && !((GrabbableObject)component).isBeingUsed) { ((GrabbableObject)component).isBeingUsed = true; } if (walkieCooldown > 10f) { UseWalkie(); } } } public void UseWalkie() { if (!Plugin.skinWalkersIntergrated || !isHoldingObject || !(closestGrabbable is WalkieTalkie)) { return; } walkieTimer += Time.deltaTime; WalkieTalkie component = ((Component)closestGrabbable).GetComponent<WalkieTalkie>(); if (walkieTimer > 1f && !walkieUsed) { if (!((GrabbableObject)component).isBeingUsed) { ((GrabbableObject)component).isBeingUsed = true; component.EnableWalkieTalkieListening(true); ((Renderer)((GrabbableObject)component).mainObjectRenderer).sharedMaterial = component.onMaterial; ((Behaviour)component.walkieTalkieLight).enabled = true; component.thisAudio.PlayOneShot(component.switchWalkieTalkiePowerOn); } walkieUsed = true; } if (walkieTimer > 1.5f && !walkieVoiceTransmitted) { Plugin.mls.LogInfo((object)"Walkie Voice Transmitted!"); foreach (WalkieTalkie allWalkieTalky in GlobalItemList.Instance.allWalkieTalkies) { if (((GrabbableObject)allWalkieTalky).isBeingUsed) { allWalkieTalky.thisAudio.PlayOneShot(allWalkieTalky.startTransmissionSFX[Random.Range(0, allWalkieTalky.startTransmissionSFX.Length + 1)]); } if ((Object)(object)((Component)closestGrabbable).gameObject != (Object)(object)((Component)allWalkieTalky).gameObject && ((GrabbableObject)allWalkieTalky).isBeingUsed) { allWalkieTalky.target.PlayOneShot(SkinwalkerModPersistent.Instance.GetSample()); } } creatureAnimator.SetTrigger("UseWalkie"); walkieVoiceTransmitted = true; } if (!(walkieTimer > 5f)) { return; } foreach (WalkieTalkie allWalkieTalky2 in GlobalItemList.Instance.allWalkieTalkies) { if (((GrabbableObject)allWalkieTalky2).isBeingUsed) { allWalkieTalky2.thisAudio.PlayOneShot(allWalkieTalky2.stopTransmissionSFX[Random.Range(0, allWalkieTalky2.stopTransmissionSFX.Length + 1)]); } if ((Object)(object)((Component)closestGrabbable).gameObject == (Object)(object)((Component)allWalkieTalky2).gameObject && ((GrabbableObject)allWalkieTalky2).isBeingUsed) { ((GrabbableObject)component).isBeingUsed = false; component.EnableWalkieTalkieListening(false); ((Renderer)((GrabbableObject)component).mainObjectRenderer).sharedMaterial = component.offMaterial; ((Behaviour)component.walkieTalkieLight).enabled = false; component.thisAudio.PlayOneShot(component.switchWalkieTalkiePowerOff); } } creatureAnimator.ResetTrigger("UseWalkie"); walkieCooldown = 0f; walkieTimer = 0f; } public void AwayFromPlayer() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: 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_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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { float num = Vector3.Distance(((Component)__instance).transform.position, ((Component)val).transform.position); if (!(num < float.PositiveInfinity)) { continue; } nearestPlayer = val; float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); if (num2 < 4f && (Object)(object)__instance.targetPlayer != (Object)null) { Vector3 val2 = ((Component)this).transform.position - ((Component)val).transform.position; Vector3 val3 = ((Component)this).transform.position + ((Vector3)(ref val2)).normalized * 5f; if (originDestination != agent.destination) { originDestination = agent.destination; } if (Vector3.Distance(originDestination, agent.destination) < 1.5f) { originTimer += Time.deltaTime; } if (originTimer > 3.5f) { if (__instance.isOutside) { __instance.SetDestinationToPosition(maskedEnemy.shipHidingSpot, true); } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); } originTimer = 0f; } __instance.SetDestinationToPosition(val3, true); } else { __instance.SetDestinationToPosition(originDestination, true); } } } public void PlayerLikeAction() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Distance(((Component)this).transform.position, ((Component)nearestPlayer).transform.position); if (num < 4f && (Object)(object)__instance.targetPlayer != (Object)null) { Vector3 val = ((Component)this).transform.position - ((Component)nearestPlayer).transform.position; Vector3 val2 = ((Component)this).transform.position + ((Vector3)(ref val)).normalized * 5f; if (originDestination != agent.destination) { originDestination = agent.destination; } if (Vector3.Distance(originDestination, agent.destination) < 1.5f) { originTimer += Time.deltaTime; } if (originTimer > 3.5f) { if (__instance.isOutside) { __instance.SetDestinationToPosition(maskedEnemy.shipHidingSpot, true); } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); } originTimer = 0f; } __instance.SetDestinationToPosition(val2, true); } else { __instance.SetDestinationToPosition(originDestination, true); } } private void UsingTerminal() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Distance(((Component)this).transform.position, ((Component)terminal).transform.position); if (num < 40f) { dropItem.Value = true; if (!terminal.terminalInUse && !noMoreTerminal && num < 3.5f) { if (!isUsingTerminal) { terminal.terminalAudio.PlayOneShot(terminal.enterTerminalSFX); } isUsingTerminal = true; } if (!terminal.terminalInUse && !noMoreTerminal && !__instance.isEnemyDead) { __instance.SetDestinationToPosition(((Component)terminal).transform.position, true); } } if (isUsingTerminal) { creatureAnimator.SetTrigger("Terminal"); __instance.inSpecialAnimation = true; terminal.placeableObject.inUse = true; ((Behaviour)terminal.terminalLight).enabled = true; __instance.movingTowardsTargetPlayer = false; __instance.targetPlayer = null; ((Component)maskedEnemy.headTiltTarget).gameObject.SetActive(false); isCrouched.Value = false; agent.speed = 0f; creatureAnimator.ResetTrigger("IsMoving"); ((Component)this).transform.LookAt(new Vector3(((Component)terminal).transform.position.x, ((Component)this).transform.position.y, ((Component)terminal).transform.position.z)); ((Component)this).transform.localPosition = new Vector3(((Component)terminal).transform.localPosition.x + 7f, ((Component)terminal).transform.localPosition.y + 0.25f, ((Component)terminal).transform.localPosition.z + -14.8f); if (maskedPersonality == Personality.Cunning) { if (terminal.numberOfItemsInDropship <= 0 && !dropship.shipLanded && dropship.shipTimer <= 0f && !isDeliverEmptyDropship && !noMoreTerminal) { dropShipTimer += Time.deltaTime; if (dropShipTimer > 10f) { dropship.LandShipOnServer(); isDeliverEmptyDropship = true; } } else if (isDeliverEmptyDropship && dropShipTimer <= 12f && !noMoreTerminal) { dropShipTimer += Time.deltaTime; } if (dropShipTimer > 12f) { dropShipTimer = 0f; terminal.terminalAudio.PlayOneShot(terminal.leaveTerminalSFX); isUsingTerminal = false; noMoreTerminal = true; __instance.SwitchToBehaviourState(2); } } else { if (maskedPersonality != Personality.Deceiving) { return; } float num2 = Random.Range(0.2f, 1.5f); enterTerminalCodeTimer += Time.deltaTime; if (enterTerminalCodeTimer > terminalTimeFloat.Value && enterTermianlSpecialCodeTime > 0) { if (GameNetworkManager.Instance.isHostingGame) { terminalTimeFloat.Value = Random.Range(0.2f, 1.5f); } terminal.CallFunctionInAccessibleTerminalObject(terminalAccessibleObject[Random.Range(0, terminalAccessibleObject.Length)].objectCode); terminal.terminalAudio.PlayOneShot(terminal.codeBroadcastSFX); enterTermianlSpecialCodeTime--; enterTerminalCodeTimer = 0f; } if (enterTermianlSpecialCodeTime == 0) { isUsingTerminal = false; noMoreTerminal = true; __instance.SwitchToBehaviourState(2); } } } else if (!((Component)maskedEnemy.headTiltTarget).gameObject.activeSelf) { terminal.placeableObject.inUse = false; ((Behaviour)terminal.terminalLight).enabled = false; creatureAnimator.ResetTrigger("Terminal"); ((Component)maskedEnemy.headTiltTarget).gameObject.SetActive(true); } } public void MaskedCunning() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) if (!isHoldingObject || !((EnemyAI)maskedEnemy).isOutside || !((NetworkBehaviour)this).IsHost || bushes == null) { return; } GameObject[] array = bushes; foreach (GameObject val in array) { bushDistance = Vector3.Distance(((Component)__instance).transform.position, val.transform.position); if (bushDistance < float.PositiveInfinity && !val.GetComponent<BushSystem>().bushWithItem) { if (bushDistance > 2f && bushDistance < float.PositiveInfinity && !val.GetComponent<BushSystem>().bushWithItem && breakerBoxDistance < 20f) { moveSpecial = true; } if (bushDistance < 2f) { val.GetComponent<BushSystem>().bushWithItem = true; itemSystem.hidedByMasked = true; dropItem.Value = true; } } } } private void FindAndGrabShotgun() { //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) if (!(closestGrabbable is ShotgunItem) && isHoldingObject && !isDroppedShotgunAvailable) { Plugin.mls.LogInfo((object)"Drop Item!"); dropItem.Value = true; } foreach (GrabbableObject allitem in GlobalItemList.Instance.allitems) { if (!(allitem is ShotgunItem)) { continue; } if (allitem.isHeld) { if (!allitem.isHeldByEnemy) { HandleShotgunHeldByPlayer(); Plugin.mls.LogInfo((object)"Held Shotgun Found!"); isDroppedShotgunAvailable = false; } } else { GrabShotgunItem(); isDroppedShotgunAvailable = true; } } if (!isHoldingObject || !(closestGrabbable is Shovel)) { return; } foreach (GrabbableObject allitem2 in GlobalItemList.Instance.allitems) { if (allitem2 is ShotgunItem && (Object)(object)allitem2.playerHeldBy != (Object)null) { __instance.SetDestinationToPosition(((Component)allitem2.playerHeldBy).transform.position, true); float num = Vector3.Distance(((Component)this).transform.position, ((Component)allitem2.playerHeldBy).transform.position); maskedEnemy.stopAndStareTimer = 0f; if (num < float.PositiveInfinity && num < 4f) { maskedEnemy.headTiltTarget.LookAt(((Component)allitem2.playerHeldBy).transform); LookAtPos(((Component)allitem2.playerHeldBy).transform.position, 0.2f); } if (num < 3.2f) { UseItem(allitem2.playerHeldBy, num); } else { maskedEnemy.running = true; } } } } private void HandleShotgunHeldByPlayer() { //IL_0048: 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_0158: 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_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: 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) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) if (isHoldingObject) { return; } foreach (GrabbableObject allitem in GlobalItemList.Instance.allitems) { if (!(allitem is Shovel)) { continue; } float num = Vector3.Distance(((Component)this).transform.position, ((Component)allitem).transform.position); if (!(num < float.PositiveInfinity) || !(num <= 10f) || allitem.isHeld || allitem.isHeldByEnemy || notGrabClosestItem) { continue; } closestGrabbable = allitem; if ((Object)(object)closestGrabbable != (Object)null && (Object)(object)((Component)closestGrabbable).GetComponent<CheckItemCollision>() != (Object)null) { itemSystem = ((Component)closestGrabbable).GetComponent<CheckItemCollision>(); } if (itemSystem.hidedByMasked) { continue; } if (((NetworkBehaviour)this).IsHost) { if ((double)num > 0.5) { __instance.SetDestinationToPosition(((Component)closestGrabbable).transform.position, true); __instance.moveTowardsDestination = true; __instance.movingTowardsTargetPlayer = false; } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); __instance.moveTowardsDestination = false; } } if (num > 0.5f && num < 3f) { maskedEnemy.focusOnPosition = ((Component)closestGrabbable).transform.position; maskedEnemy.lookAtPositionTimer = 1.5f; } if (num < 0.9f) { float num2 = Vector3.Angle(((Component)__instance).transform.forward, ((Component)closestGrabbable).transform.position - ((Component)__instance).transform.position); if (((Component)closestGrabbable).transform.position.y - maskedEnemy.headTiltTarget.position.y < 0f) { num2 *= -1f; } maskedEnemy.verticalLookAngle = num2; closestGrabbable.parentObject = itemHolder.transform; closestGrabbable.hasHitGround = false; closestGrabbable.isHeld = true; closestGrabbable.isHeldByEnemy = true; closestGrabbable.grabbable = false; isHoldingObject = true; itemDroped = false; closestGrabbable.GrabItemFromEnemy(__instance); } if (num < 4f && !isHoldingObject && maskedPersonality != Personality.Aggressive && GameNetworkManager.Instance.isHostingGame) { isCrouched.Value = true; } } } private void HandleShotgunNotHeld() { //IL_003e: 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_014a: 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_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0210: 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_0225: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) notGrabClosestItem = true; foreach (GrabbableObject allitem in GlobalItemList.Instance.allitems) { if (!(allitem is ShotgunItem)) { continue; } float num = Vector3.Distance(((Component)this).transform.position, ((Component)allitem).transform.position); if (!(num < float.PositiveInfinity) || !(num <= 10f) || allitem.isHeld || allitem.isHeldByEnemy || notGrabClosestItem) { continue; } closestGrabbable = allitem; if ((Object)(object)closestGrabbable != (Object)null && (Object)(object)((Component)closestGrabbable).GetComponent<CheckItemCollision>() != (Object)null) { itemSystem = ((Component)closestGrabbable).GetComponent<CheckItemCollision>(); } if (itemSystem.hidedByMasked) { continue; } if (((NetworkBehaviour)this).IsHost) { if ((double)num > 0.5) { __instance.SetDestinationToPosition(((Component)closestGrabbable).transform.position, true); __instance.moveTowardsDestination = true; __instance.movingTowardsTargetPlayer = false; } else { __instance.SetDestinationToPosition(maskedEnemy.mainEntrancePosition, true); __instance.moveTowardsDestination = false; } } if (num < 3f && isHoldingObject && !(closestGrabbable is ShotgunItem)) { dropItem.Value = true; } if (num > 0.5f && num < 3f) { maskedEnemy.focusOnPosition = ((Component)closestGrabbable).transform.position; maskedEnemy.lookAtPositionTimer = 1.5f; } if (num < 0.9f) { float num2 = Vector3.Angle(((Component)__instance).transform.forward, ((Component)closestGrabbable).transform.position - ((Component)__instance).transform.position); if (((Component)closestGrabbable).transform.position.y - maskedEnemy.headTiltTarget.position.y < 0f) { num2 *= -1f; } maskedEnemy.verticalLookAngle = num2; closestGrabbable.parentObject = itemHolder.transform; closestGrabbable.hasHitGround = false; closestGrabbable.isHeld = true; closestGrabbable.isHeldByEnemy = true; closestGrabbable.grabbable = false; isHoldingObject = true; itemDroped = false; closestGrabbable.GrabItemFromEnemy(__instance); } if (num < 4f && !isHoldingObject && maskedPersonality != Personality.Aggressive && ((NetworkBehaviour)this).IsHost) { isCrouched.Value = true; } } } } [HarmonyPatch(typeof(ShotgunItem))] internal class ShotgunItemPatch { public bool GetVar(ref bool ___localClientSendingShootGunRPC) { return ___localClientSendingShootGunRPC; } } [HarmonyPatch(typeof(MaskedPlayerEnemy))] internal class MaskedPlayerEnemyPatch { public static MaskedRevamp vd; [HarmonyPrefix] [HarmonyPatch("Awake")] private static void Awake_Prefix(EnemyAI __instance) { if (Plugin.enableExperimentalFeatures) { vd = ((Component)__instance).gameObject.AddComponent<MaskedRevamp>(); } else if ((Object)(object)((Component)((Component)__instance).transform.GetChild(3).GetChild(0)).GetComponent<Animator>().runtimeAnimatorController != (Object)(object)Plugin.MapDotRework) { ((Component)((Component)__instance).transform.GetChild(3).GetChild(0)).GetComponent<Animator>().runtimeAnimatorController = Plugin.MapDotRework; } } } }