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 LC Shrimp v1.0.5
Shrimp.dll
Decompiled a year 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.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Shrimp.NetcodePatcher; using Shrimp.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Animations.Rigging; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("LcOffice")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LcOffice")] [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: AssemblyVersion("1.0.0.0")] [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 Shrimp { [BepInPlugin("Piggy.Shrimp", "Shrimp", "1.0.5")] public class Plugin : BaseUnityPlugin { private const string modGUID = "Piggy.Shrimp"; private const string modName = "Shrimp"; private const string modVersion = "1.0.5"; private readonly Harmony harmony = new Harmony("Piggy.Shrimp"); private static Plugin Instance; public static ManualLogSource mls; public static AssetBundle Bundle; public static AudioClip[] footsteps; public static AudioClip footstep1; public static AudioClip footstep2; public static AudioClip footstep3; public static AudioClip footstep4; public static AudioClip dogEatItem; public static AudioClip dogEatPlayer; public static AudioClip bigGrowl; public static AudioClip enragedScream; public static AudioClip dogSprint; public static AudioClip ripPlayerApart; public static AudioClip cry1; public static AudioClip dogHowl; public static AudioClip stomachGrowl; public static AudioClip eatenExplode; public static AudioClip dogSneeze; public static AudioClip dogSatisfied; public static GameObject shrimpPrefab; public static EnemyType shrimpEnemy; public static GameObject shrimpItemManager; public static TerminalNode shrimpTerminalNode; public static TerminalKeyword shrimpTerminalKeyword; public static string PluginDirectory; private ConfigEntry<int> shrimpSpawnWeight; public static bool setKorean; public static bool debugLog; private void Awake() { //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Expected O, but got Unknown if ((Object)(object)Instance == (Object)null) { Instance = this; } PluginDirectory = ((BaseUnityPlugin)this).Info.Location; mls = Logger.CreateLogSource("Piggy.Shrimp"); try { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } catch (Exception ex) { mls.LogError((object)ex); } mls.LogInfo((object)"[Shrimp] Loaded!"); string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); Bundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "shrimp")); if ((Object)(object)Bundle == (Object)null) { mls.LogError((object)"Failed to load Shrimp assets."); return; } shrimpSpawnWeight = ((BaseUnityPlugin)this).Config.Bind<int>("Spawn", "ShrimpSpawnWeight", 5, new ConfigDescription("Sets the shrimp spawn weight for every moons.", (AcceptableValueBase)null, Array.Empty<object>())); setKorean = ((BaseUnityPlugin)this).Config.Bind<bool>("Translation", "Enable Korean", false, "Set language to Korean.").Value; debugLog = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "Enable Debug Log", false, "Outputs logs for debugging purposes").Value; shrimpPrefab = Bundle.LoadAsset<GameObject>("Shrimp.prefab"); shrimpEnemy = Bundle.LoadAsset<EnemyType>("ShrimpEnemy.asset"); shrimpItemManager = Bundle.LoadAsset<GameObject>("ShrimpItemManager.prefab"); footstep1 = Bundle.LoadAsset<AudioClip>("Footstep1.ogg"); footstep2 = Bundle.LoadAsset<AudioClip>("Footstep2.ogg"); footstep3 = Bundle.LoadAsset<AudioClip>("Footstep3.ogg"); footstep4 = Bundle.LoadAsset<AudioClip>("Footstep4.ogg"); List<AudioClip> list = new List<AudioClip>(); list.Add(footstep1); list.Add(footstep2); list.Add(footstep3); list.Add(footstep4); footsteps = list.ToArray(); dogEatItem = Bundle.LoadAsset<AudioClip>("DogEatObject.ogg"); dogEatPlayer = Bundle.LoadAsset<AudioClip>("EatPlayer.ogg"); bigGrowl = Bundle.LoadAsset<AudioClip>("BigGrowl.ogg"); enragedScream = Bundle.LoadAsset<AudioClip>("DogRage.ogg"); dogSprint = Bundle.LoadAsset<AudioClip>("DogSprint.ogg"); ripPlayerApart = Bundle.LoadAsset<AudioClip>("RipPlayerApart.ogg"); cry1 = Bundle.LoadAsset<AudioClip>("Cry1.ogg"); dogHowl = Bundle.LoadAsset<AudioClip>("DogHowl.ogg"); stomachGrowl = Bundle.LoadAsset<AudioClip>("StomachGrowl.ogg"); eatenExplode = Bundle.LoadAsset<AudioClip>("eatenExplode.ogg"); dogSneeze = Bundle.LoadAsset<AudioClip>("Sneeze.ogg"); dogSatisfied = Bundle.LoadAsset<AudioClip>("PlayBow.ogg"); shrimpTerminalKeyword = Bundle.LoadAsset<TerminalKeyword>("shrimpTK.asset"); if (!setKorean) { shrimpTerminalNode = Bundle.LoadAsset<TerminalNode>("ShrimpFile.asset"); shrimpTerminalNode.creatureName = "Shrimp"; shrimpTerminalKeyword.word = "shrimp"; } else { shrimpTerminalNode = Bundle.LoadAsset<TerminalNode>("ShrimpKoreanFile.asset"); shrimpTerminalNode.creatureName = "쉬림프"; shrimpTerminalKeyword.word = "쉬림프"; } ShrimpEnemyAI shrimpEnemyAI = shrimpPrefab.AddComponent<ShrimpEnemyAI>(); ((EnemyAI)shrimpEnemyAI).enemyType = shrimpEnemy; ((EnemyAI)shrimpEnemyAI).creatureAnimator = ((Component)shrimpPrefab.transform.GetChild(0).GetChild(1)).GetComponent<Animator>(); ((EnemyAI)shrimpEnemyAI).creatureVoice = ((Component)shrimpPrefab.transform.GetChild(0).GetChild(3).GetChild(0)).GetComponent<AudioSource>(); shrimpEnemyAI.growlAudio = ((Component)shrimpPrefab.transform.GetChild(0).GetChild(3).GetChild(1)).GetComponent<AudioSource>(); shrimpEnemyAI.dogRageAudio = ((Component)shrimpPrefab.transform.GetChild(0).GetChild(3).GetChild(2)).GetComponent<AudioSource>(); shrimpEnemyAI.hungerAudio = ((Component)shrimpPrefab.transform.GetChild(0).GetChild(3).GetChild(3)).GetComponent<AudioSource>(); shrimpEnemyAI.sprintAudio = ((Component)shrimpPrefab.transform.GetChild(0).GetChild(3).GetChild(4)).GetComponent<AudioSource>(); shrimpEnemyAI.mouthTransform = shrimpPrefab.transform.GetChild(0).GetChild(1).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(4); ((EnemyAI)shrimpEnemyAI).creatureSFX = shrimpPrefab.GetComponent<AudioSource>(); ((EnemyAI)shrimpEnemyAI).dieSFX = dogSneeze; ((EnemyAI)shrimpEnemyAI).AIIntervalTime = 0.2f; ((EnemyAI)shrimpEnemyAI).updatePositionThreshold = 1f; ((EnemyAI)shrimpEnemyAI).syncMovementSpeed = 0.22f; shrimpEnemyAI.chitterSFX = (AudioClip[])(object)new AudioClip[1]; shrimpEnemyAI.chitterSFX[0] = dogSatisfied; shrimpEnemyAI.angryScreechSFX = (AudioClip[])(object)new AudioClip[1]; shrimpEnemyAI.angryScreechSFX[0] = dogEatItem; shrimpEnemyAI.angryVoiceSFX = dogHowl; shrimpEnemyAI.bugFlySFX = footstep4; shrimpEnemyAI.hitPlayerSFX = dogEatItem; ((Component)shrimpPrefab.transform.GetChild(0)).GetComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)shrimpEnemyAI; shrimpItemManager.AddComponent<ShrimpItemManager>(); shrimpEnemy.enemyPrefab = shrimpPrefab; NetworkPrefabs.RegisterNetworkPrefab(shrimpPrefab); NetworkPrefabs.RegisterNetworkPrefab(shrimpItemManager); Enemies.RegisterEnemy(shrimpEnemy, shrimpSpawnWeight.Value, (LevelTypes)(-1), (SpawnType)0, shrimpTerminalNode, shrimpTerminalKeyword); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Successfully loaded assets!"); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } } } namespace Shrimp.Patches { public class ItemGrabChecker : NetworkBehaviour { public bool isInElevatorB; public bool droppedItemMoment; private bool droppedItemAppended; public float dogEatTimer; public bool isHeldBefore; public GrabbableObject grabbableObject; private void Start() { grabbableObject = ((Component)this).GetComponent<GrabbableObject>(); } private void Update() { if (grabbableObject.deactivated) { return; } if (grabbableObject.isHeld) { if (!isHeldBefore) { isHeldBefore = true; } dogEatTimer = 0f; droppedItemMoment = true; droppedItemAppended = false; ShrimpItemManager.Instance.droppedItems.Remove(grabbableObject); ShrimpItemManager.Instance.droppedObjects.Remove(((Component)this).gameObject); return; } if (droppedItemMoment && grabbableObject.reachedFloorTarget && !droppedItemAppended) { ShrimpItemManager.Instance.droppedItems.Add(grabbableObject); ShrimpItemManager.Instance.droppedObjects.Add(((Component)this).gameObject); droppedItemAppended = true; } dogEatTimer += Time.deltaTime; if (dogEatTimer > 3f) { ShrimpItemManager.Instance.droppedItems.Remove(grabbableObject); ShrimpItemManager.Instance.droppedObjects.Remove(((Component)this).gameObject); dogEatTimer = 0f; droppedItemMoment = false; droppedItemAppended = false; } } private void OnDestroy() { ShrimpItemManager.Instance.droppedItems.Remove(grabbableObject); ShrimpItemManager.Instance.droppedObjects.Remove(((Component)this).gameObject); } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected internal override string __getTypeName() { return "ItemGrabChecker"; } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPrefix] [HarmonyPatch("Start")] private static void Start_Prefix(GrabbableObject __instance) { GameObject val = Object.Instantiate<GameObject>(Plugin.shrimpItemManager); val.GetComponent<NetworkObject>().Spawn(false); } } public class ShrimpItemManager : NetworkBehaviour { public List<GrabbableObject> droppedItems = new List<GrabbableObject>(); public List<GameObject> droppedObjects = new List<GameObject>(); public static ShrimpItemManager Instance { get; private set; } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } else if ((Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); } Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected internal override string __getTypeName() { return "ShrimpItemManager"; } } public class ShrimpEnemyAI : EnemyAI { public AISearchRoutine searchForItems; public AISearchRoutine searchForPlayer; public bool seePlayerFirstTime; public float hungerValue; public Transform mouthTransform; private Vector3 mouthOriginalScale; public AudioSource growlAudio; public AudioSource dogRageAudio; public AudioSource hungerAudio; public AudioSource sprintAudio; public bool inKillAnimation; public bool startingKillAnimationLocalClient; private float scaredBackingAway; private Ray backAwayRay; private RaycastHit hitInfo; private RaycastHit hitInfoB; private PlayerControllerB lastHitPlayer; [Space(3f)] public float angryTimer; public GrabbableObject targetItem; public HoarderBugItem heldItem; private Light lungLight; [Header("Animations")] [Space(5f)] private Transform rightEye; private Transform leftEye; private Vector3 scaleOfEyesNormally; private Vector3 agentLocalVelocity; private Vector3 previousPosition; private float velX; private float velZ; public Transform turnCompass; private float armsHoldLayerWeight; [Space(5f)] public Transform animationContainer; public Transform grabTarget; public TwoBoneIKConstraint headLookRig; public Transform headLookTarget; [Header("Special behaviour states")] private float annoyanceMeter; public bool watchingPlayerNearPosition; public PlayerControllerB watchingPlayer; public Transform lookTarget; public bool lookingAtPositionOfInterest; private Vector3 positionOfInterest; private bool isAngry; [Header("Misc logic")] private bool sendingGrabOrDropRPC; private float waitingAtNestTimer; private bool waitingAtNest; private float timeSinceSeeingAPlayer; [Header("Chase logic")] private bool lostPlayerInChase; private float noticePlayerTimer; public PlayerControllerB angryAtPlayer; private bool inChase; [Header("Audios")] public AudioClip[] chitterSFX; [Header("Audios")] public AudioClip[] angryScreechSFX; public AudioClip angryVoiceSFX; public AudioClip bugFlySFX; public AudioClip hitPlayerSFX; private float timeSinceHittingPlayer; private float timeSinceLookingTowardsNoise; private float timeSinceLookingTowardsItem; private float detectPlayersInterval; private bool inReturnToNestMode; private float footStepTime; [ServerRpc(RequireOwnership = false)] private void SyncHungerValueServerRpc(float value) { //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) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2235873628u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref value, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2235873628u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { SyncHungerValueClientRpc(value); } } } [ClientRpc] private void SyncHungerValueClientRpc(float value) { //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) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3241092987u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref value, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3241092987u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { hungerValue = value; } } } private void SetVariables() { //IL_00fe: 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_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Expected O, but got Unknown //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Expected O, but got Unknown //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Expected O, but got Unknown base.agent = ((Component)this).GetComponent<NavMeshAgent>(); base.eye = ((Component)this).transform.GetChild(0).GetChild(1).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(1); leftEye = ((Component)this).transform.GetChild(0).GetChild(1).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2); rightEye = ((Component)this).transform.GetChild(0).GetChild(1).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(3); scaleOfEyesNormally = leftEye.localScale; headLookRig = ((Component)((Component)this).transform.GetChild(0).GetChild(1).GetChild(2) .GetChild(0)).GetComponent<TwoBoneIKConstraint>(); animationContainer = ((Component)this).transform.GetChild(0); grabTarget = ((Component)this).transform.GetChild(0).GetChild(1).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(5); headLookTarget = ((Component)this).transform.GetChild(0).GetChild(1).GetChild(2) .GetChild(0) .GetChild(0); lookTarget = ((Component)this).transform.GetChild(2); turnCompass = ((Component)this).transform.GetChild(3); lungLight = GameObject.Find("LungFlash").GetComponent<Light>(); lungLight.intensity = 0f; List<EnemyBehaviourState> list = new List<EnemyBehaviourState>(); EnemyBehaviourState val = new EnemyBehaviourState(); val.name = "Roaming"; list.Add(val); EnemyBehaviourState val2 = new EnemyBehaviourState(); val2.name = "Following"; list.Add(val2); EnemyBehaviourState val3 = new EnemyBehaviourState(); val3.name = "Chasing"; list.Add(val3); base.enemyBehaviourStates = list.ToArray(); } public override void Start() { //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) SetVariables(); ((EnemyAI)this).Start(); lastHitPlayer = StartOfRound.Instance.allPlayerScripts[0]; dogRageAudio.volume = 0f; dogRageAudio.loop = true; dogRageAudio.clip = Plugin.enragedScream; dogRageAudio.pitch = 0f; dogRageAudio.Play(); growlAudio.volume = 0f; growlAudio.loop = true; growlAudio.clip = Plugin.bigGrowl; growlAudio.Play(); hungerAudio.volume = 0f; hungerAudio.loop = true; hungerAudio.clip = Plugin.stomachGrowl; hungerAudio.Play(); sprintAudio.volume = 0f; sprintAudio.loop = true; sprintAudio.clip = Plugin.dogSprint; sprintAudio.Play(); mouthOriginalScale = mouthTransform.localScale; heldItem = null; base.creatureAnimator.SetTrigger("Walk"); lungLight.intensity = 0f; } private bool EatTargetItemIfClose() { //IL_001d: 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_0062: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)targetItem != (Object)null && heldItem == null && Vector3.Distance(((Component)this).transform.position, ((Component)targetItem).transform.position) < 0.75f && !targetItem.deactivated) { NetworkObject component = ((Component)targetItem).GetComponent<NetworkObject>(); EatItemServerRpc(NetworkObjectReference.op_Implicit(component)); return true; } return false; } public override void DoAIInterval() { //IL_006c: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_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_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: 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_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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_037e: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0175: 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_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_07ba: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: 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_0254: 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_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0269: 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_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0224: 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_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_054e: Unknown result type (might be due to invalid IL or missing references) //IL_055e: Unknown result type (might be due to invalid IL or missing references) //IL_0583: Unknown result type (might be due to invalid IL or missing references) //IL_0593: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).DoAIInterval(); if (base.isEnemyDead || StartOfRound.Instance.allPlayersDead) { return; } CalculateAnimationDirection(); if (base.currentBehaviourStateIndex != 2 && scaredBackingAway > 0.003f && hungerValue < 40f) { Vector3 position = ((Component)lastHitPlayer).transform.position; position.y = ((Component)this).transform.position.y; Vector3 val = position - ((Component)this).transform.position; backAwayRay = new Ray(((Component)this).transform.position, val * -1f); if (Physics.Raycast(backAwayRay, ref hitInfo, 60f, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { if (((RaycastHit)(ref hitInfo)).distance < 4f) { if (Physics.Linecast(((Component)this).transform.position, ((RaycastHit)(ref hitInfo)).point + Vector3.Cross(val, Vector3.up) * 25.5f, ref hitInfoB, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { float distance = ((RaycastHit)(ref hitInfoB)).distance; if (Physics.Linecast(((Component)this).transform.position, ((RaycastHit)(ref hitInfo)).point + Vector3.Cross(val, Vector3.up) * -25.5f, ref hitInfoB, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { float distance2 = ((RaycastHit)(ref hitInfoB)).distance; if (Mathf.Abs(distance - distance2) < 5f) { base.agent.destination = ((RaycastHit)(ref hitInfo)).point + Vector3.Cross(val, Vector3.up) * -4.5f; } else if (distance < distance2) { base.agent.destination = ((RaycastHit)(ref hitInfo)).point + Vector3.Cross(val, Vector3.up) * -4.5f; } else { base.agent.destination = ((RaycastHit)(ref hitInfo)).point + Vector3.Cross(val, Vector3.up) * 4.5f; } } } } else { base.agent.destination = ((RaycastHit)(ref hitInfo)).point; } } base.agent.stoppingDistance = 0f; Quaternion val2 = Quaternion.Slerp(((Component)this).transform.rotation, Quaternion.LookRotation(val), 3f * Time.deltaTime); ((Component)this).transform.eulerAngles = new Vector3(0f, ((Quaternion)(ref val2)).eulerAngles.y, 0f); base.agent.speed = 13f; base.creatureAnimator.SetFloat("walkSpeed", -3.5f); return; } switch (base.currentBehaviourStateIndex) { case 0: if (inKillAnimation) { break; } base.movingTowardsTargetPlayer = false; if (!searchForPlayer.inProgress) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, searchForPlayer); } else if (hungerValue > 0f && (Object.op_Implicit((Object)(object)((EnemyAI)this).CheckLineOfSightForPlayer(65f, 80, -1)) || (Object)(object)base.targetPlayer != (Object)null)) { if (!seePlayerFirstTime) { seePlayerFirstTime = true; } base.targetPlayer = ((EnemyAI)this).CheckLineOfSightForPlayer(65f, 80, -1); ((EnemyAI)this).SwitchToBehaviourState(1); } break; case 1: { if (inKillAnimation) { break; } ((EnemyAI)this).StopSearch(searchForPlayer, true); if (hungerValue <= 0f) { ((EnemyAI)this).SwitchToBehaviourState(0); } if ((Object)(object)targetItem != (Object)null && heldItem == null && Vector3.Distance(((Component)this).transform.position, ((Component)targetItem).transform.position) < 0.75f && !targetItem.deactivated) { if (ShrimpItemManager.Instance.droppedItems.Count > 0) { GameObject val4 = ((EnemyAI)this).CheckLineOfSight(ShrimpItemManager.Instance.droppedObjects, 60f, 40, 5f, (Transform)null, (int[])null); if (Object.op_Implicit((Object)(object)val4)) { GrabbableObject component2 = val4.GetComponent<GrabbableObject>(); if (Object.op_Implicit((Object)(object)component2) && !component2.isHeld && !component2.isPocketed && !component2.deactivated) { SetGoTowardsTargetObject(val4); } } } base.movingTowardsTargetPlayer = false; } else if (((Object)(object)base.targetPlayer != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position) < 2.5f) || ((Object)(object)watchingPlayer != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)watchingPlayer).transform.position) < 2.5f)) { base.agent.stoppingDistance = 4.5f; base.movingTowardsTargetPlayer = false; BackAway(); } else if ((Object)(object)((EnemyAI)this).CheckLineOfSight(ShrimpItemManager.Instance.droppedObjects, 160f, 40, 5f, (Transform)null, (int[])null) != (Object)null) { base.agent.stoppingDistance = 0f; base.movingTowardsTargetPlayer = false; if (ShrimpItemManager.Instance.droppedItems.Count > 0) { GameObject val5 = ((EnemyAI)this).CheckLineOfSight(ShrimpItemManager.Instance.droppedObjects, 160f, 40, 5f, (Transform)null, (int[])null); if (Object.op_Implicit((Object)(object)val5)) { GrabbableObject component3 = val5.GetComponent<GrabbableObject>(); if (Object.op_Implicit((Object)(object)component3) && !component3.isHeld && !component3.isPocketed && !component3.deactivated) { SetGoTowardsTargetObject(val5); } } } } else { base.agent.stoppingDistance = 4.5f; base.movingTowardsTargetPlayer = true; } PlayerControllerB val6 = ((EnemyAI)this).CheckLineOfSightForPlayer(65f, 80, -1); if ((Object)(object)val6 != (Object)null) { noticePlayerTimer = 0f; } else { noticePlayerTimer += 0.075f; if (noticePlayerTimer > 3f) { lostPlayerInChase = true; } } if (lostPlayerInChase && (Object)(object)targetItem == (Object)null) { ((EnemyAI)this).SwitchToBehaviourState(0); } break; } case 2: if (inKillAnimation) { break; } inReturnToNestMode = false; if (heldItem != null) { } if (lostPlayerInChase) { if (!searchForPlayer.inProgress) { searchForPlayer.searchWidth = 30f; ((EnemyAI)this).StartSearch(((Component)base.targetPlayer).transform.position, searchForPlayer); Debug.Log((object)(((Object)((Component)this).gameObject).name + ": Lost player in chase; beginning search where the player was last seen")); } break; } if ((Object)(object)((EnemyAI)this).CheckLineOfSight(ShrimpItemManager.Instance.droppedObjects, 160f, 40, 5f, (Transform)null, (int[])null) != (Object)null) { base.agent.stoppingDistance = 0f; base.movingTowardsTargetPlayer = false; if (ShrimpItemManager.Instance.droppedItems.Count > 0) { GameObject val3 = ((EnemyAI)this).CheckLineOfSight(ShrimpItemManager.Instance.droppedObjects, 160f, 40, 5f, (Transform)null, (int[])null); if (Object.op_Implicit((Object)(object)val3)) { GrabbableObject component = val3.GetComponent<GrabbableObject>(); if (Object.op_Implicit((Object)(object)component) && !component.isHeld && !component.isPocketed && !component.deactivated) { SetGoTowardsTargetObject(val3); } } } } if (hungerValue < 40f) { ((EnemyAI)this).SwitchToBehaviourState(0); } if ((Object)(object)base.targetPlayer == (Object)null) { Debug.LogError((object)"TargetPlayer is null even though bug is in chase; setting targetPlayer to watchingPlayer"); if ((Object)(object)watchingPlayer != (Object)null) { if (!seePlayerFirstTime) { seePlayerFirstTime = true; } base.targetPlayer = watchingPlayer; } } if (searchForPlayer.inProgress) { ((EnemyAI)this).StopSearch(searchForPlayer, true); Debug.Log((object)(((Object)((Component)this).gameObject).name + ": Found player during chase; stopping search coroutine and moving after target player")); } break; case 3: break; } } private void SetGoTowardsTargetObject(GameObject foundObject) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) base.agent.stoppingDistance = 0f; if (((EnemyAI)this).SetDestinationToPosition(foundObject.transform.position, true) && ShrimpItemManager.Instance.droppedObjects.Contains(foundObject)) { Debug.Log((object)(((Object)((Component)this).gameObject).name + ": Setting target object and going towards it.")); targetItem = foundObject.GetComponent<GrabbableObject>(); EatTargetItemIfClose(); ((EnemyAI)this).StopSearch(searchForItems, false); } else { targetItem = null; Debug.Log((object)(((Object)((Component)this).gameObject).name + ": i found an object but cannot reach it (or it has been taken by another bug): " + ((Object)foundObject).name)); } } private void ExitChaseMode() { if (inChase) { inChase = false; Debug.Log((object)(((Object)((Component)this).gameObject).name + ": Exiting chase mode")); if (searchForPlayer.inProgress) { ((EnemyAI)this).StopSearch(searchForPlayer, true); } base.movingTowardsTargetPlayer = false; base.creatureAnimator.SetBool("Chase", false); base.creatureSFX.Stop(); } } private void LateUpdate() { if (base.currentBehaviourStateIndex != 2 && scaredBackingAway > 0.003f && hungerValue < 40f) { scaredBackingAway -= Time.deltaTime; } if (!base.inSpecialAnimation && !base.isEnemyDead && !StartOfRound.Instance.allPlayersDead) { if (detectPlayersInterval <= 0f) { detectPlayersInterval = 0.2f; DetectAndLookAtPlayers(); } else { detectPlayersInterval -= Time.deltaTime; } AnimateLooking(); } } private void CalculateAnimationDirection(float maxSpeed = 1f) { //IL_000e: 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_0019: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) agentLocalVelocity = animationContainer.InverseTransformDirection(Vector3.ClampMagnitude(((Component)this).transform.position - previousPosition, 1f) / (Time.deltaTime * 4f)); base.creatureAnimator.SetFloat("walkSpeed", Mathf.Clamp(((Vector3)(ref agentLocalVelocity)).magnitude / 5f, 0f, 3f)); base.creatureAnimator.SetFloat("runSpeed", Mathf.Clamp(((Vector3)(ref agentLocalVelocity)).magnitude / 2.7f, 3f, 4f)); CalculateAnimationDirectionServerRpc(agentLocalVelocity, base.creatureAnimator.GetFloat("walkSpeed"), base.creatureAnimator.GetFloat("runSpeed")); } [ServerRpc] private void CalculateAnimationDirectionServerRpc(Vector3 localVel, float walkSp, float runSp) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Invalid comparison between Unknown and I4 //IL_0146: 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_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_00d0: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0105: 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_0084: Invalid comparison between Unknown and I4 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2756366285u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref localVel); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref walkSp, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref runSp, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2756366285u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { CalculateAnimationDirectionClientRpc(localVel, walkSp, runSp); } } [ClientRpc] private void CalculateAnimationDirectionClientRpc(Vector3 localVel, float walkSp, float runSp) { //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_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) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010d: 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) 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(1326862066u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref localVel); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref walkSp, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref runSp, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1326862066u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { agentLocalVelocity = localVel; previousPosition = ((Component)this).transform.position; base.creatureAnimator.SetFloat("walkSpeed", walkSp); base.creatureAnimator.SetFloat("runSpeed", runSp); } } } private void AnimateLooking() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: 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_01cc: 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_027e: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: 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_020f: 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) if (hungerValue < 47f) { base.agent.angularSpeed = 100f; } else { base.agent.angularSpeed = 1000f; } if ((Object)(object)targetItem != (Object)null) { lookTarget.position = ((Component)targetItem).transform.position; lookingAtPositionOfInterest = true; if (targetItem.isHeld) { if ((Object)(object)base.targetPlayer != (Object)null) { lookTarget.position = ((Component)base.targetPlayer).transform.position; } else { lookingAtPositionOfInterest = false; } targetItem = null; } } if ((Object)(object)lookTarget != (Object)null && !lookingAtPositionOfInterest && (Object)(object)watchingPlayer != (Object)null) { lookTarget.position = ((Component)watchingPlayer.gameplayCamera).transform.position; } else if (!lookingAtPositionOfInterest) { ((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)headLookRig).weight = Mathf.Lerp(((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)headLookRig).weight, 0f, 10f); return; } if (((NetworkBehaviour)this).IsOwner) { } if ((Object)(object)watchingPlayer != (Object)null && !lookingAtPositionOfInterest) { float num = Vector3.Angle(((Component)this).transform.forward, lookTarget.position - ((Component)this).transform.position); Vector3 val = ((Component)watchingPlayer).transform.position - ((Component)this).transform.position; if (num > 22f) { Quaternion val2 = Quaternion.Slerp(((Component)this).transform.rotation, Quaternion.LookRotation(val), 3f * Time.deltaTime); ((Component)this).transform.eulerAngles = new Vector3(0f, ((Quaternion)(ref val2)).eulerAngles.y, 0f); } } else { lookTarget.position = positionOfInterest; } ((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)headLookRig).weight = Mathf.Lerp(((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)headLookRig).weight, 0.5f, 7f); headLookTarget.position = Vector3.Lerp(headLookTarget.position, lookTarget.position, 8f * Time.deltaTime); } private void DetectAndLookAtPlayers() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_017d: 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) Vector3 position = ((Component)this).transform.position; PlayerControllerB[] allPlayersInLineOfSight = ((EnemyAI)this).GetAllPlayersInLineOfSight(70f, 30, base.eye, 1.2f, -1); if (allPlayersInLineOfSight != null) { PlayerControllerB val = watchingPlayer; timeSinceSeeingAPlayer = 0f; float num = 500f; bool flag = false; if ((Object)(object)base.stunnedByPlayer != (Object)null) { flag = true; angryAtPlayer = base.stunnedByPlayer; } for (int i = 0; i < allPlayersInLineOfSight.Length; i++) { if (IsHoarderBugAngry() && (Object)(object)allPlayersInLineOfSight[i] == (Object)(object)angryAtPlayer) { watchingPlayer = angryAtPlayer; } else { float num2 = Vector3.Distance(((Component)allPlayersInLineOfSight[i]).transform.position, position); if (num2 < num) { num = num2; watchingPlayer = allPlayersInLineOfSight[i]; } } float num3 = Vector3.Distance(((Component)allPlayersInLineOfSight[i]).transform.position, ((Component)this).transform.position); if (ShrimpItemManager.Instance.droppedItems.Count > 0 && (num3 < 4f || (inChase && num3 < 8f)) && angryTimer < 3.25f) { angryAtPlayer = allPlayersInLineOfSight[i]; watchingPlayer = allPlayersInLineOfSight[i]; angryTimer = 3.25f; break; } if (base.currentBehaviourStateIndex != 2 && Vector3.Distance(((Component)this).transform.position, ((Component)allPlayersInLineOfSight[i]).transform.position) < 2.5f) { annoyanceMeter += 0.2f; if (annoyanceMeter > 2.5f) { angryAtPlayer = allPlayersInLineOfSight[i]; watchingPlayer = allPlayersInLineOfSight[i]; angryTimer = 3.25f; } } } watchingPlayerNearPosition = num < 6f; if (!((NetworkBehaviour)this).IsOwner) { return; } if (base.currentBehaviourStateIndex != 2) { if (IsHoarderBugAngry()) { lostPlayerInChase = false; if (!seePlayerFirstTime) { seePlayerFirstTime = true; } base.targetPlayer = watchingPlayer; } } else { if (!seePlayerFirstTime) { seePlayerFirstTime = true; } base.targetPlayer = watchingPlayer; if (lostPlayerInChase) { lostPlayerInChase = false; } } return; } timeSinceSeeingAPlayer += 0.2f; watchingPlayerNearPosition = false; if (base.currentBehaviourStateIndex != 2) { if (timeSinceSeeingAPlayer > 1.5f) { watchingPlayer = null; } return; } if (timeSinceSeeingAPlayer > 1.25f) { watchingPlayer = null; } if (((NetworkBehaviour)this).IsOwner && timeSinceSeeingAPlayer > 2.5f) { lostPlayerInChase = true; } } private bool IsHoarderBugAngry() { if (base.stunNormalizedTimer > 0f) { angryTimer = 4f; if (Object.op_Implicit((Object)(object)base.stunnedByPlayer)) { angryAtPlayer = base.stunnedByPlayer; } return true; } int num = 0; int num2 = 0; if (!(angryTimer > 0f)) { return num2 > 0; } return true; } public override void Update() { //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_020a: 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_021a: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0247: 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) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_03e7: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: Unknown result type (might be due to invalid IL or missing references) //IL_034d: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_05d9: Unknown result type (might be due to invalid IL or missing references) //IL_05de: Unknown result type (might be due to invalid IL or missing references) //IL_06e3: Unknown result type (might be due to invalid IL or missing references) //IL_06e8: Unknown result type (might be due to invalid IL or missing references) //IL_07c3: Unknown result type (might be due to invalid IL or missing references) //IL_07c8: Unknown result type (might be due to invalid IL or missing references) //IL_07d2: Unknown result type (might be due to invalid IL or missing references) //IL_07d7: Unknown result type (might be due to invalid IL or missing references) //IL_0630: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); footStepTime += Time.deltaTime * ((Vector3)(ref agentLocalVelocity)).magnitude / 8f; if (footStepTime > 0.25f) { base.creatureVoice.PlayOneShot(Plugin.footsteps[Random.Range(0, 5)], Random.Range(0.8f, 1f)); footStepTime = 0f; } if (Plugin.debugLog) { Plugin.mls.LogInfo((object)$"hungerValue: {hungerValue}, currentBehaviourState: {base.currentBehaviourStateIndex}"); } timeSinceHittingPlayer += Time.deltaTime; timeSinceLookingTowardsNoise += Time.deltaTime; if (timeSinceLookingTowardsNoise > 0.6f && !Object.op_Implicit((Object)(object)CheckLineOfSightForItem(120f, 40))) { lookingAtPositionOfInterest = false; } if (base.inSpecialAnimation || base.isEnemyDead || StartOfRound.Instance.allPlayersDead) { return; } if (((Object)(object)base.targetPlayer != (Object)null || hungerValue <= 0f) && ((NetworkBehaviour)this).IsOwner) { SyncHungerValueServerRpc(hungerValue += Time.deltaTime); } if (hungerValue > 34f) { hungerAudio.volume = Mathf.Lerp(hungerAudio.volume, 1f, Time.deltaTime * 2f); } else { hungerAudio.volume = Mathf.Lerp(hungerAudio.volume, 0f, Time.deltaTime * 2f); } if (hungerValue > 40f) { leftEye.localScale = Vector3.Lerp(leftEye.localScale, scaleOfEyesNormally * 0.4f, 20f * Time.deltaTime); rightEye.localScale = Vector3.Lerp(rightEye.localScale, scaleOfEyesNormally * 0.4f, 20f * Time.deltaTime); growlAudio.volume = 1f; } else { leftEye.localScale = Vector3.Lerp(leftEye.localScale, scaleOfEyesNormally, 20f * Time.deltaTime); rightEye.localScale = Vector3.Lerp(rightEye.localScale, scaleOfEyesNormally, 20f * Time.deltaTime); growlAudio.volume = Mathf.Lerp(growlAudio.volume, 0f, Time.deltaTime * 5f); } if (hungerValue > 45f) { dogRageAudio.volume = 1f; dogRageAudio.pitch = 0.8f; mouthTransform.localScale = Vector3.Lerp(mouthTransform.localScale, new Vector3(0.005590725f, 0.01034348f, 0.02495567f), 30f * Time.deltaTime); } else { dogRageAudio.volume = Mathf.Lerp(dogRageAudio.volume, 0f, Time.deltaTime * 10f); dogRageAudio.pitch = Mathf.Lerp(dogRageAudio.pitch, 0f, Time.deltaTime * 10f); mouthTransform.localScale = Vector3.Lerp(mouthTransform.localScale, mouthOriginalScale, 20f * Time.deltaTime); } if (hungerValue > 48f) { sprintAudio.volume = Mathf.Lerp(sprintAudio.volume, 1f, Time.deltaTime * 10f); base.creatureAnimator.SetBool("running", true); if (base.currentBehaviourStateIndex != 2) { ((EnemyAI)this).SwitchToBehaviourState(2); } } else { sprintAudio.volume = Mathf.Lerp(sprintAudio.volume, 0f, Time.deltaTime * 10f); base.creatureAnimator.SetBool("running", false); if (base.currentBehaviourStateIndex == 2) { ((EnemyAI)this).SwitchToBehaviourState(0); } } base.creatureAnimator.SetBool("stunned", base.stunNormalizedTimer > 0f); bool flag = IsHoarderBugAngry(); if (!isAngry && flag) { isAngry = true; base.creatureVoice.clip = angryVoiceSFX; base.creatureVoice.Play(); } else if (isAngry && !flag) { isAngry = false; angryAtPlayer = null; base.creatureVoice.Stop(); } switch (base.currentBehaviourStateIndex) { case 0: if (inKillAnimation) { break; } if (Object.op_Implicit((Object)(object)CheckLineOfSightForItem(160f, 40))) { timeSinceLookingTowardsItem = 0f; positionOfInterest = ((Component)CheckLineOfSightForItem(160f, 40)).transform.position; lookingAtPositionOfInterest = true; } else if (timeSinceLookingTowardsItem < 0.6f) { timeSinceLookingTowardsItem += Time.deltaTime; } if (!searchForPlayer.inProgress) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, searchForPlayer); break; } base.addPlayerVelocityToDestination = 0f; if (base.stunNormalizedTimer > 0f) { base.agent.speed = 0f; } else { base.agent.speed = 6f; } break; case 1: if (!inKillAnimation) { if (Object.op_Implicit((Object)(object)CheckLineOfSightForItem(160f, 40))) { timeSinceLookingTowardsItem = 0f; positionOfInterest = ((Component)CheckLineOfSightForItem(160f, 40)).transform.position; lookingAtPositionOfInterest = true; } else if (timeSinceLookingTowardsItem < 0.6f) { timeSinceLookingTowardsItem += Time.deltaTime; } base.addPlayerVelocityToDestination = 0f; if (base.stunNormalizedTimer > 0f) { base.agent.speed = 0f; } else { base.agent.speed = 6f; } base.agent.acceleration = 30f; } break; case 2: if (inKillAnimation) { break; } base.agent.stoppingDistance = 0f; if (!inChase) { inChase = true; if (GameNetworkManager.Instance.localPlayerController.HasLineOfSightToPosition(((Component)this).transform.position + Vector3.up * 0.75f, 60f, 15, -1f)) { GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.7f, true); } } base.addPlayerVelocityToDestination = 2f; if (((NetworkBehaviour)this).IsOwner) { if (base.stunNormalizedTimer > 0f) { base.agent.speed = 0f; } else { base.agent.speed = 18f; } base.agent.acceleration = 100f; } break; } } public override void DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot = 0, int noiseID = 0) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).DetectNoise(noisePosition, noiseLoudness, timesPlayedInOneSpot, noiseID); if (base.currentBehaviourStateIndex == 0 && timesPlayedInOneSpot <= 10 && !(timeSinceLookingTowardsNoise < 0.6f)) { timeSinceLookingTowardsNoise = 0f; float num = Vector3.Distance(noisePosition, ((Component)this).transform.position); positionOfInterest = noisePosition; lookingAtPositionOfInterest = true; } } private void DropItemAndCallDropRPC(NetworkObject dropItemNetworkObject, bool droppedInNest = true) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0031: 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) Vector3 targetFloorPosition = RoundManager.Instance.RandomlyOffsetPosition(heldItem.itemGrabbableObject.GetItemFloorPosition(default(Vector3)), 1.2f, 0.4f); DropItem(dropItemNetworkObject, targetFloorPosition); sendingGrabOrDropRPC = true; DropItemServerRpc(NetworkObjectReference.op_Implicit(dropItemNetworkObject), targetFloorPosition, droppedInNest); } [ServerRpc] public void DropItemServerRpc(NetworkObjectReference objectRef, Vector3 targetFloorPosition, bool droppedInNest) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Invalid comparison between Unknown and I4 //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0148: 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_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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3273023761u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref objectRef, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref targetFloorPosition); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref droppedInNest, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3273023761u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { DropItemClientRpc(objectRef, targetFloorPosition, droppedInNest); } } [ClientRpc] public void DropItemClientRpc(NetworkObjectReference objectRef, Vector3 targetFloorPosition, bool droppedInNest) { //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_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_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) //IL_0111: 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(118616207u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref objectRef, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref targetFloorPosition); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref droppedInNest, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 118616207u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkObject item = default(NetworkObject); if (((NetworkObjectReference)(ref objectRef)).TryGet(ref item, (NetworkManager)null)) { DropItem(item, targetFloorPosition, droppedInNest); } else { Debug.LogError((object)(((Object)((Component)this).gameObject).name + ": Failed to get network object from network object reference (Drop item RPC)")); } } } [ServerRpc] public void EatItemServerRpc(NetworkObjectReference objectRef) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Invalid comparison between Unknown and I4 //IL_011f: 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_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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3300887884u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref objectRef, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3300887884u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { EatItemClientRpc(objectRef); } } [ClientRpc] public void EatItemClientRpc(NetworkObjectReference objectRef) { //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(489629970u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref objectRef, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 489629970u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkObject item = default(NetworkObject); if (((NetworkObjectReference)(ref objectRef)).TryGet(ref item, (NetworkManager)null)) { EatItem(item); } else { Debug.LogError((object)(((Object)((Component)this).gameObject).name + ": Failed to get network object from network object reference (Grab item RPC)")); } } } private void DropItem(NetworkObject item, Vector3 targetFloorPosition, bool droppingInNest = true) { //IL_0085: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) if (sendingGrabOrDropRPC) { sendingGrabOrDropRPC = false; return; } if (heldItem == null) { Debug.LogError((object)"Hoarder bug: my held item is null when attempting to drop it!!"); return; } GrabbableObject itemGrabbableObject = heldItem.itemGrabbableObject; itemGrabbableObject.parentObject = null; ((Component)itemGrabbableObject).transform.SetParent(StartOfRound.Instance.propsContainer, true); itemGrabbableObject.EnablePhysics(true); itemGrabbableObject.fallTime = 0f; itemGrabbableObject.startFallingPosition = ((Component)itemGrabbableObject).transform.parent.InverseTransformPoint(((Component)itemGrabbableObject).transform.position); itemGrabbableObject.targetFloorPosition = ((Component)itemGrabbableObject).transform.parent.InverseTransformPoint(targetFloorPosition); itemGrabbableObject.floorYRot = -1; itemGrabbableObject.DiscardItemFromEnemy(); heldItem = null; if (!droppingInNest && ShrimpItemManager.Instance.droppedObjects.Count != 0) { ShrimpItemManager.Instance.droppedObjects.Add(((Component)itemGrabbableObject).gameObject); } } private void EatItem(NetworkObject item) { SyncHungerValueServerRpc(hungerValue - 120f); targetItem = null; base.creatureAnimator.SetTrigger("eat"); base.creatureSFX.PlayOneShot(Plugin.dogEatItem); GrabbableObject component = ((Component)item).gameObject.GetComponent<GrabbableObject>(); ((NetworkBehaviour)component).NetworkObject.Despawn(true); } public override void OnCollideWithPlayer(Collider other) { ((EnemyAI)this).OnCollideWithPlayer(other); if (base.currentBehaviourStateIndex == 2 && !base.isEnemyDead) { PlayerControllerB val = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, inKillAnimation || startingKillAnimationLocalClient, false); if ((Object)(object)val != (Object)null) { KillPlayerAnimationServerRpc((int)val.playerClientId); startingKillAnimationLocalClient = true; } } } [ServerRpc(RequireOwnership = false)] public void KillPlayerAnimationServerRpc(int playerObjectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(684832026u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerObjectId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 684832026u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { if (!inKillAnimation) { inKillAnimation = true; KillPlayerAnimationClientRpc(playerObjectId); } else { CancelKillAnimationClientRpc(playerObjectId); } } } [ClientRpc] public void KillPlayerAnimationClientRpc(int playerObjectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) 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(380405851u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerObjectId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 380405851u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((MonoBehaviour)this).StartCoroutine(KillPlayerAnimation(playerObjectId)); } } } [ClientRpc] public void CancelKillAnimationClientRpc(int playerObjectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) 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(3353791596u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerObjectId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3353791596u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && (int)GameNetworkManager.Instance.localPlayerController.playerClientId == playerObjectId) { startingKillAnimationLocalClient = false; } } } public IEnumerator KillPlayerAnimation(int playerId) { base.creatureSFX.PlayOneShot(Plugin.ripPlayerApart); base.agent.speed = 0f; base.agent.angularSpeed = 0f; PlayerControllerB killPlayer = StartOfRound.Instance.allPlayerScripts[playerId]; killPlayer.KillPlayer(Vector3.zero, true, (CauseOfDeath)6, 0, default(Vector3)); base.creatureAnimator.SetTrigger("RipObject"); float startTime = Time.realtimeSinceStartup; yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)killPlayer.deadBody != (Object)null || Time.realtimeSinceStartup - startTime > 2f)); DeadBodyInfo body = killPlayer.deadBody; if ((Object)(object)body != (Object)null && (Object)(object)body.attachedTo == (Object)null) { body.attachedLimb = body.bodyParts[5]; body.attachedTo = grabTarget; body.matchPositionExactly = true; } yield return (object)new WaitForSeconds(0.03f); SyncHungerValueServerRpc(-20f); yield return (object)new WaitForSeconds(4f); base.creatureAnimator.SetTrigger("eat"); base.creatureSFX.PlayOneShot(Plugin.dogEatPlayer); ((NetworkBehaviour)killPlayer.deadBody.grabBodyObject).NetworkObject.Despawn(true); yield return (object)new WaitForSeconds(1.7f); base.agent.speed = 6f; base.agent.angularSpeed = 10f; inKillAnimation = false; } [ServerRpc(RequireOwnership = false)] public void HitPlayerServerRpc() { //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 != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1477397876u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1477397876u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { HitPlayerClientRpc(); } } } [ClientRpc] public void HitPlayerClientRpc() { //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(2399613090u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2399613090u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !base.isEnemyDead) { base.creatureAnimator.SetTrigger("HitPlayer"); base.creatureSFX.PlayOneShot(hitPlayerSFX); WalkieTalkie.TransmitOneShotAudio(base.creatureSFX, hitPlayerSFX, 1f); } } } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { if (hungerValue < 40f) { ((MonoBehaviour)this).StartCoroutine(stunnedTimer()); lastHitPlayer = playerWhoHit; } } private IEnumerator stunnedTimer() { base.agent.speed = 0f; base.creatureAnimator.SetTrigger("Recoil"); base.creatureVoice.PlayOneShot(Plugin.cry1, 1f); yield return (object)new WaitForSeconds(0.5f); scaredBackingAway = 2.2f; yield return (object)new WaitForSeconds(0.3f); } public override void KillEnemy(bool destroy = false) { ((EnemyAI)this).KillEnemy(false); base.agent.speed = 0f; base.creatureVoice.Stop(); base.creatureSFX.Stop(); } public GrabbableObject CheckLineOfSightForItem(float width = 45f, int range = 60, float proximityAwareness = 3f) { //IL_005b: 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) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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) List<GrabbableObject> droppedItems = ShrimpItemManager.Instance.droppedItems; for (int i = 0; i < droppedItems.Count; i++) { if (!droppedItems[i].grabbableToEnemies || !droppedItems[i].isHeld || ShrimpItemManager.Instance.droppedItems.Count > 0) { continue; } Vector3 position = ((Component)droppedItems[i]).transform.position; if (!Physics.Linecast(base.eye.position, position, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { Vector3 val = position - base.eye.position; if (Vector3.Angle(base.eye.forward, val) < width || Vector3.Distance(((Component)this).transform.position, position) < proximityAwareness) { return droppedItems[i]; } } } return null; } private void BackAway() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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_00c8: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: 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_0122: 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) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_030e: 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_0315: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0339: 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_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0179: 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_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_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: 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_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_0227: 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_022e: 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) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: 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_026b: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_027c: 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) PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { float num = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); if (Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) < float.PositiveInfinity && num < 30f && !val.isPlayerDead) { if (!seePlayerFirstTime) { seePlayerFirstTime = true; } base.targetPlayer = val; } } base.agent.destination = ((Component)base.targetPlayer).transform.position; Vector3 position = ((Component)base.targetPlayer).transform.position; position.y = ((Component)this).transform.position.y; Vector3 val2 = position - ((Component)this).transform.position; Ray val3 = default(Ray); ((Ray)(ref val3))..ctor(((Component)this).transform.position, val2 * -1f); RaycastHit val4 = default(RaycastHit); if (Physics.Raycast(val3, ref val4, 60f, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { if (((RaycastHit)(ref val4)).distance < 4f) { RaycastHit val5 = default(RaycastHit); if (Physics.Linecast(((Component)this).transform.position, ((RaycastHit)(ref val4)).point + Vector3.Cross(val2, Vector3.up) * 25.5f, ref val5, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { float distance = ((RaycastHit)(ref val5)).distance; if (Physics.Linecast(((Component)this).transform.position, ((RaycastHit)(ref val4)).point + Vector3.Cross(val2, Vector3.up) * -25.5f, ref val5, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { float distance2 = ((RaycastHit)(ref val5)).distance; if (Mathf.Abs(distance - distance2) < 5f) { base.agent.destination = ((RaycastHit)(ref val4)).point + Vector3.Cross(val2, Vector3.up) * -4.5f; } else if (distance < distance2) { base.agent.destination = ((RaycastHit)(ref val4)).point + Vector3.Cross(val2, Vector3.up) * -4.5f; } else { base.agent.destination = ((RaycastHit)(ref val4)).point + Vector3.Cross(val2, Vector3.up) * 4.5f; } } } } else { base.agent.destination = ((RaycastHit)(ref val4)).point; } } else { base.agent.destination = ((Ray)(ref val3)).GetPoint(2.3f); } base.agent.stoppingDistance = 0.2f; Quaternion val6 = Quaternion.Slerp(((Component)this).transform.rotation, Quaternion.LookRotation(val2), 3f * Time.deltaTime); ((Component)this).transform.eulerAngles = new Vector3(0f, ((Quaternion)(ref val6)).eulerAngles.y, 0f); base.agent.speed = 8f; base.agent.acceleration = 50000f; base.creatureAnimator.SetFloat("walkSpeed", -2.2f); } protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_ShrimpEnemyAI() { //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 //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Expected O, but got Unknown //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Expected O, but got Unknown //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2235873628u, new RpcReceiveHandler(__rpc_handler_2235873628)); NetworkManager.__rpc_func_table.Add(3241092987u, new RpcReceiveHandler(__rpc_handler_3241092987)); NetworkManager.__rpc_func_table.Add(2756366285u, new RpcReceiveHandler(__rpc_handler_2756366285)); NetworkManager.__rpc_func_table.Add(1326862066u, new RpcReceiveHandler(__rpc_handler_1326862066)); NetworkManager.__rpc_func_table.Add(3273023761u, new RpcReceiveHandler(__rpc_handler_3273023761)); NetworkManager.__rpc_func_table.Add(118616207u, new RpcReceiveHandler(__rpc_handler_118616207)); NetworkManager.__rpc_func_table.Add(3300887884u, new RpcReceiveHandler(__rpc_handler_3300887884)); NetworkManager.__rpc_func_table.Add(489629970u, new RpcReceiveHandler(__rpc_handler_489629970)); NetworkManager.__rpc_func_table.Add(684832026u, new RpcReceiveHandler(__rpc_handler_684832026)); NetworkManager.__rpc_func_table.Add(380405851u, new RpcReceiveHandler(__rpc_handler_380405851)); NetworkManager.__rpc_func_table.Add(3353791596u, new RpcReceiveHandler(__rpc_handler_3353791596)); NetworkManager.__rpc_func_table.Add(1477397876u, new RpcReceiveHandler(__rpc_handler_1477397876)); NetworkManager.__rpc_func_table.Add(2399613090u, new RpcReceiveHandler(__rpc_handler_2399613090)); } private static void __rpc_handler_2235873628(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float value = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref value, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ShrimpEnemyAI)(object)target).SyncHungerValueServerRpc(value); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3241092987(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float value = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref value, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)2; ((ShrimpEnemyAI)(object)target).SyncHungerValueClientRpc(value); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2756366285(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //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_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_00db: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Invalid comparison between Unknown and I4 NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } Vector3 localVel = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref localVel); float walkSp = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref walkSp, default(ForPrimitives)); float runSp = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref runSp, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ShrimpEnemyAI)(object)target).CalculateAnimationDirectionServerRpc(localVel, walkSp, runSp); target.__rpc_exec_stage = (__RpcExecStage)0; } private static void __rpc_handler_1326862066(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 localVel = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref localVel); float walkSp = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref walkSp, default(ForPrimitives)); float runSp = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref runSp, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)2; ((ShrimpEnemyAI)(object)target).CalculateAnimationDirectionClientRpc(localVel, walkSp, runSp); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3273023761(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //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_0029: Unknown result type (might be