Decompiled source of StandaloneBlindPup v2.0.0

BlindPups.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using BlindPups.NetcodePatcher;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BlindPups")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BlindPups")]
[assembly: AssemblyTitle("BlindPups")]
[assembly: AssemblyVersion("1.0.0.0")]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace BlindPups
{
	[BepInPlugin("JacobG5.BlindPups", "BlindPups", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		private const string modGUID = "JacobG5.BlindPups";

		private const string modName = "BlindPups";

		private const string modVersion = "1.0.0";

		private readonly Harmony harmony = new Harmony("JacobG5.BlindPups");

		public static Plugin Instance;

		internal ManualLogSource mls;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = Logger.CreateLogSource("JacobG5.BlindPups");
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			foreach (Type type in types)
			{
				try
				{
					MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
					MethodInfo[] array = methods;
					foreach (MethodInfo methodInfo in array)
					{
						object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
						if (customAttributes.Length != 0)
						{
							methodInfo.Invoke(null, null);
						}
					}
				}
				catch
				{
					mls.LogInfo((object)"Skipping Netcode Class");
				}
			}
			mls.LogInfo((object)"Netcode Successfully Patched!");
		}
	}
}
namespace BlindPups.Components
{
	public class BlindPupAI : EnemyAI, INoiseListener, IVisibleThreat
	{
		[Header("Blind Pup")]
		public int playerDamage = 50;

		public int enemyDamage = 2;

		public float hearingThreshold = 18f;

		[Header("Vanilla Mouth Dog")]
		public float noiseApproximation = 14f;

		public int suspicionLevel;

		private Vector3 previousPosition;

		public DampedTransform neckDampedTransform;

		private float AITimer;

		private bool hasEnteredChaseModeFully;

		private bool startedChaseModeCoroutine;

		public AudioClip screamSFX;

		public AudioClip breathingSFX;

		public AudioClip killPlayerSFX;

		private float hearNoiseCooldown;

		private bool inLunge;

		private float lungeCooldown;

		private bool inKillAnimation;

		public Transform mouthGrip;

		public bool endingLunge;

		private Ray ray;

		private RaycastHit rayHit;

		private Vector3 lastHeardNoisePosition;

		private Vector3 noisePositionGuess;

		private float lastHeardNoiseDistanceWhenHeard;

		private bool heardOtherHowl;

		private DeadBodyInfo? carryingBody;

		private Coroutine killPlayerCoroutine;

		public AISearchRoutine roamPlanet;

		private Collider debugCollider;

		private float timeSinceHittingOtherEnemy;

		private float coweringMeter;

		private bool coweringOnFloor;

		private bool coweringOnFloorDebounce;

		ThreatType IVisibleThreat.type => (ThreatType)3;

		int IVisibleThreat.SendSpecialBehaviour(int id)
		{
			return 0;
		}

		int IVisibleThreat.GetThreatLevel(Vector3 seenByPosition)
		{
			int num = ((base.enemyHP >= 2) ? 5 : 3);
			if (base.creatureAnimator.GetBool("StartedChase"))
			{
				num += 3;
			}
			return num;
		}

		int IVisibleThreat.GetInterestLevel()
		{
			return 0;
		}

		Transform IVisibleThreat.GetThreatLookTransform()
		{
			return base.eye;
		}

		Transform IVisibleThreat.GetThreatTransform()
		{
			return ((Component)this).transform;
		}

		Vector3 IVisibleThreat.GetThreatVelocity()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			if (((NetworkBehaviour)this).IsOwner)
			{
				return base.agent.velocity;
			}
			return Vector3.zero;
		}

		float IVisibleThreat.GetVisibility()
		{
			if (base.isEnemyDead)
			{
				return 0f;
			}
			if (base.creatureAnimator.GetBool("StartedChase"))
			{
				return 1f;
			}
			return 0.75f;
		}

		public override void DoAIInterval()
		{
			((EnemyAI)this).DoAIInterval();
			_ = StartOfRound.Instance.livingPlayers;
		}

		public override void Start()
		{
			((EnemyAI)this).Start();
			base.useSecondaryAudiosOnAnimatedObjects = true;
			if (Random.Range(0, 10) < 2)
			{
				base.creatureVoice.pitch = Random.Range(0.6f, 1.3f);
			}
			else
			{
				base.creatureVoice.pitch = Random.Range(0.9f, 1.1f);
			}
		}

		public override void Update()
		{
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_020e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: 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_02b1: 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_05fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0604: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).Update();
			if (base.isEnemyDead)
			{
				base.creatureAnimator.SetLayerWeight(1, 0f);
			}
			else
			{
				if (!base.ventAnimationFinished)
				{
					return;
				}
				if (base.stunNormalizedTimer > 0f && !base.isEnemyDead)
				{
					if ((Object)(object)base.stunnedByPlayer != (Object)null && base.currentBehaviourStateIndex != 2 && ((NetworkBehaviour)this).IsOwner)
					{
						EnrageDogOnLocalClient(((Component)base.stunnedByPlayer).transform.position, Vector3.Distance(((Component)this).transform.position, ((Component)base.stunnedByPlayer).transform.position));
					}
					base.creatureAnimator.SetLayerWeight(1, 1f);
				}
				else
				{
					base.creatureAnimator.SetLayerWeight(1, 0f);
				}
				base.hitsPhysicsObjects = base.currentBehaviourStateIndex >= 2;
				if (!coweringOnFloor)
				{
					if (!coweringOnFloorDebounce)
					{
						coweringOnFloorDebounce = true;
						base.creatureAnimator.SetBool("Cower", false);
					}
					if (coweringMeter >= 0f)
					{
						coweringMeter -= Time.deltaTime;
					}
				}
				else
				{
					if (coweringOnFloorDebounce)
					{
						coweringOnFloorDebounce = false;
						base.creatureAnimator.SetBool("Cower", true);
						base.creatureAnimator.SetTrigger("StartCowering");
					}
					if (coweringMeter < 0.7f)
					{
						coweringMeter += Time.deltaTime;
					}
				}
				hearNoiseCooldown -= Time.deltaTime;
				timeSinceHittingOtherEnemy += Time.deltaTime;
				Animator creatureAnimator = base.creatureAnimator;
				Vector3 val = Vector3.ClampMagnitude(((Component)this).transform.position - previousPosition, 1f);
				creatureAnimator.SetFloat("speedMultiplier", ((Vector3)(ref val)).sqrMagnitude / (Time.deltaTime / 4f));
				previousPosition = ((Component)this).transform.position;
				if (base.currentBehaviourStateIndex == 2 || base.currentBehaviourStateIndex == 3)
				{
					if (GameNetworkManager.Instance.localPlayerController.HasLineOfSightToPosition(((Component)this).transform.position, 50f, 25, 10f))
					{
						GameNetworkManager.Instance.localPlayerController.IncreaseFearLevelOverTime(0.4f, 0.5f);
					}
				}
				else if (GameNetworkManager.Instance.localPlayerController.HasLineOfSightToPosition(((Component)this).transform.position, 50f, 30, 5f))
				{
					GameNetworkManager.Instance.localPlayerController.IncreaseFearLevelOverTime(0.25f, 0.3f);
				}
				switch (base.currentBehaviourStateIndex)
				{
				case 0:
					((RigConstraint<DampedTransformJob, DampedTransformData, DampedTransformJobBinder<DampedTransformData>>)(object)neckDampedTransform).weight = 1f;
					base.creatureAnimator.SetInteger("BehaviourState", 0);
					if (((NetworkBehaviour)this).IsOwner)
					{
						base.agent.speed = 3.5f;
						if (base.stunNormalizedTimer > 0f || coweringOnFloor)
						{
							base.agent.speed = 0f;
						}
						if (((NetworkBehaviour)this).IsOwner && !roamPlanet.inProgress)
						{
							((EnemyAI)this).StartSearch(((Component)this).transform.position, roamPlanet);
						}
					}
					break;
				case 1:
					if (hasEnteredChaseModeFully)
					{
						hasEnteredChaseModeFully = false;
						base.creatureVoice.Stop();
						startedChaseModeCoroutine = false;
						base.creatureAnimator.SetBool("StartedChase", false);
					}
					((RigConstraint<DampedTransformJob, DampedTransformData, DampedTransformJobBinder<DampedTransformData>>)(object)neckDampedTransform).weight = Mathf.Lerp(((RigConstraint<DampedTransformJob, DampedTransformData, DampedTransformJobBinder<DampedTransformData>>)(object)neckDampedTransform).weight, 1f, 8f * Time.deltaTime);
					base.creatureAnimator.SetInteger("BehaviourState", 1);
					if (!((NetworkBehaviour)this).IsOwner)
					{
						break;
					}
					if (((NetworkBehaviour)this).IsOwner && roamPlanet.inProgress)
					{
						((EnemyAI)this).StopSearch(roamPlanet, true);
					}
					base.agent.speed = 4.5f;
					if (base.stunNormalizedTimer > 0f || coweringOnFloor)
					{
						base.agent.speed = 0f;
					}
					AITimer -= Time.deltaTime;
					if (AITimer <= 0f)
					{
						AITimer = 4f;
						suspicionLevel--;
						if (suspicionLevel <= 1)
						{
							((EnemyAI)this).SwitchToBehaviourState(0);
						}
					}
					break;
				case 2:
					if (!hasEnteredChaseModeFully)
					{
						if (!startedChaseModeCoroutine)
						{
							startedChaseModeCoroutine = true;
							((MonoBehaviour)this).StartCoroutine(EnterChaseMode());
						}
						break;
					}
					((RigConstraint<DampedTransformJob, DampedTransformData, DampedTransformJobBinder<DampedTransformData>>)(object)neckDampedTransform).weight = Mathf.Lerp(((RigConstraint<DampedTransformJob, DampedTransformData, DampedTransformJobBinder<DampedTransformData>>)(object)neckDampedTransform).weight, 0.2f, 8f * Time.deltaTime);
					base.creatureAnimator.SetInteger("BehaviourState", 2);
					if (!((NetworkBehaviour)this).IsOwner)
					{
						break;
					}
					if (((NetworkBehaviour)this).IsOwner && roamPlanet.inProgress)
					{
						((EnemyAI)this).StopSearch(roamPlanet, true);
					}
					if (!inLunge)
					{
						lungeCooldown -= Time.deltaTime;
						if (Vector3.Distance(((Component)this).transform.position, noisePositionGuess) < 4f && lungeCooldown <= 0f)
						{
							inLunge = true;
							EnterLunge();
							break;
						}
					}
					base.agent.speed = Mathf.Clamp(base.agent.speed + Time.deltaTime, 13f, 18f);
					if (base.stunNormalizedTimer > 0f || coweringOnFloor)
					{
						base.agent.speed = 0f;
					}
					AITimer -= Time.deltaTime;
					if (AITimer <= 0f)
					{
						AITimer = 3f;
						suspicionLevel--;
						if (Vector3.Distance(((Component)this).transform.position, base.agent.destination) < 3f)
						{
							SearchForPreviouslyHeardSound();
						}
						if (suspicionLevel <= 8)
						{
							((EnemyAI)this).SwitchToBehaviourState(1);
						}
					}
					break;
				case 3:
					if (((NetworkBehaviour)this).IsOwner)
					{
						NavMeshAgent agent = base.agent;
						agent.speed -= Time.deltaTime * 5f;
						if (!endingLunge && base.agent.speed < 1.5f && !inKillAnimation)
						{
							endingLunge = true;
							lungeCooldown = 0.25f;
							EndLungeServerRpc();
						}
					}
					break;
				}
			}
		}

		private void SearchForPreviouslyHeardSound()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			int num = 0;
			Vector3 val = ((Component)this).transform.position;
			while (num < 5 && Vector3.Distance(val, ((Component)this).transform.position) < 4f)
			{
				num++;
				val = RoundManager.Instance.GetRandomNavMeshPositionInRadius(lastHeardNoisePosition, lastHeardNoiseDistanceWhenHeard / noiseApproximation, default(NavMeshHit));
			}
			((EnemyAI)this).SetDestinationToPosition(val, false);
			noisePositionGuess = val;
		}

		private IEnumerator EnterChaseMode()
		{
			if (((NetworkBehaviour)this).IsOwner)
			{
				base.agent.speed = 0.05f;
			}
			DropCarriedBody();
			base.creatureVoice.PlayOneShot(screamSFX);
			if (!base.isEnemyDead)
			{
				base.creatureAnimator.SetTrigger("ChaseHowl");
			}
			if (Vector3.Distance(((Component)this).transform.position, ((Component)GameNetworkManager.Instance.localPlayerController).transform.position) < 16f)
			{
				HUDManager.Instance.ShakeCamera((ScreenShakeType)2);
				GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.5f, true);
			}
			yield return (object)new WaitForSeconds(0.5f);
			if (!heardOtherHowl)
			{
				CallAllDogsWithHowl();
			}
			heardOtherHowl = false;
			yield return (object)new WaitForSeconds(0.2f);
			base.creatureVoice.clip = breathingSFX;
			base.creatureVoice.Play();
			base.creatureAnimator.SetBool("StartedChase", true);
			hasEnteredChaseModeFully = true;
			base.creatureVoice.PlayOneShot(breathingSFX);
		}

		private void CallAllDogsWithHowl()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			MouthDogAI[] array = Object.FindObjectsOfType<MouthDogAI>();
			for (int i = 0; i < array.Length; i++)
			{
				if (!((Object)(object)array[i] == (Object)(object)this))
				{
					array[i].ReactToOtherDogHowl(((Component)this).transform.position);
				}
			}
		}

		public void ReactToOtherDogHowl(Vector3 howlPosition)
		{
			//IL_000f: 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_0025: 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_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			heardOtherHowl = true;
			lastHeardNoiseDistanceWhenHeard = Vector3.Distance(((Component)this).transform.position, howlPosition);
			noisePositionGuess = RoundManager.Instance.GetRandomNavMeshPositionInRadius(howlPosition, lastHeardNoiseDistanceWhenHeard / noiseApproximation, default(NavMeshHit));
			((EnemyAI)this).SetDestinationToPosition(noisePositionGuess, false);
			if (base.currentBehaviourStateIndex < 2)
			{
				((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(2);
			}
			suspicionLevel = 8;
			lastHeardNoisePosition = howlPosition;
			Debug.Log((object)$"Setting lastHeardNoisePosition to {howlPosition}");
		}

		public override void DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesNoisePlayedInOneSpot = 0, int noiseID = 0)
		{
			//IL_0002: 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_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).DetectNoise(noisePosition, noiseLoudness, timesNoisePlayedInOneSpot, noiseID);
			if (base.stunNormalizedTimer > 0f || noiseID == 7 || noiseID == 546 || inKillAnimation || hearNoiseCooldown >= 0f || timesNoisePlayedInOneSpot > 15)
			{
				return;
			}
			hearNoiseCooldown = 0.03f;
			float num = Vector3.Distance(((Component)this).transform.position, noisePosition);
			Debug.Log((object)$"dog '{((Object)((Component)this).gameObject).name}': Heard noise! Distance: {num} meters");
			float num2 = hearingThreshold * noiseLoudness;
			if (Physics.Linecast(((Component)this).transform.position, noisePosition, 256))
			{
				noiseLoudness /= 2f;
				num2 /= 2f;
			}
			if (noiseLoudness < 0.25f)
			{
				return;
			}
			if (base.currentBehaviourStateIndex < 2 && num < num2)
			{
				suspicionLevel = 9;
			}
			else
			{
				suspicionLevel++;
			}
			bool fullyEnrage = false;
			if (suspicionLevel >= 9)
			{
				if (base.currentBehaviourStateIndex < 2)
				{
					fullyEnrage = true;
				}
			}
			else if (suspicionLevel >= 5 && base.currentBehaviourStateIndex == 0)
			{
				fullyEnrage = false;
			}
			AITimer = 3f;
			EnrageDogOnLocalClient(noisePosition, num, approximatePosition: true, fullyEnrage);
		}

		private void EnrageDogOnLocalClient(Vector3 targetPosition, float distanceToNoise, bool approximatePosition = true, bool fullyEnrage = false)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)$"Mouth dog targetPos 1: {targetPosition}; distanceToNoise: {distanceToNoise}");
			if (approximatePosition)
			{
				targetPosition = RoundManager.Instance.GetRandomNavMeshPositionInRadius(targetPosition, distanceToNoise / noiseApproximation, default(NavMeshHit));
			}
			noisePositionGuess = targetPosition;
			Debug.Log((object)$"Mouth dog targetPos 2: {targetPosition}");
			if (fullyEnrage)
			{
				if (base.currentBehaviourStateIndex < 2)
				{
					((EnemyAI)this).SwitchToBehaviourState(2);
					hearNoiseCooldown = 1f;
					suspicionLevel = 12;
				}
				suspicionLevel = Mathf.Clamp(suspicionLevel, 0, 11);
			}
			else if (base.currentBehaviourStateIndex == 0)
			{
				((EnemyAI)this).SwitchToBehaviourState(1);
			}
			if (!((NetworkBehaviour)this).IsOwner)
			{
				((EnemyAI)this).ChangeOwnershipOfEnemy(NetworkManager.Singleton.LocalClientId);
			}
			if (!inLunge)
			{
				((EnemyAI)this).SetDestinationToPosition(noisePositionGuess, false);
			}
			lastHeardNoiseDistanceWhenHeard = distanceToNoise;
			lastHeardNoisePosition = targetPosition;
			Debug.Log((object)$"Dog lastheardnoisePosition: {lastHeardNoisePosition}");
		}

		private void EnterLunge()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: 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_0083: 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_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			if (!((NetworkBehaviour)this).IsOwner)
			{
				((EnemyAI)this).ChangeOwnershipOfEnemy(NetworkManager.Singleton.LocalClientId);
			}
			((EnemyAI)this).SwitchToBehaviourState(3);
			endingLunge = false;
			ray = new Ray(((Component)this).transform.position + Vector3.up, ((Component)this).transform.forward);
			Vector3 val = ((!Physics.Raycast(ray, ref rayHit, 17f, StartOfRound.Instance.collidersAndRoomMask)) ? ((Ray)(ref ray)).GetPoint(17f) : ((RaycastHit)(ref rayHit)).point);
			val = RoundManager.Instance.GetNavMeshPosition(val, default(NavMeshHit), 5f, -1);
			((EnemyAI)this).SetDestinationToPosition(val, false);
			base.agent.speed = 13f;
		}

		[ServerRpc(RequireOwnership = false)]
		public void EndLungeServerRpc()
		{
			//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(3106330922u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3106330922u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					EndLungeClientRpc();
				}
			}
		}

		[ClientRpc]
		public void EndLungeClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3443765605u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3443765605u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(2);
				if (!base.isEnemyDead)
				{
					base.creatureAnimator.SetTrigger("EndLungeNoKill");
				}
				inLunge = false;
				Debug.Log((object)"Ending lunge");
			}
		}

		private void ChaseLocalPlayer()
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).SwitchToBehaviourState(2);
			((EnemyAI)this).ChangeOwnershipOfEnemy(NetworkManager.Singleton.LocalClientId);
			((EnemyAI)this).SetDestinationToPosition(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, false);
		}

		public override void HitEnemy(int force = 1, PlayerControllerB? playerWhoHit = null, bool playHitSFX = false, int hitID = -1)
		{
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).HitEnemy(force, playerWhoHit, playHitSFX, hitID);
			base.enemyHP -= force;
			if (((NetworkBehaviour)this).IsOwner)
			{
				if (base.enemyHP <= 0)
				{
					((EnemyAI)this).KillEnemyOnOwnerClient(false);
					return;
				}
				if (inKillAnimation)
				{
					StopKillAnimationServerRpc();
				}
			}
			if ((Object)(object)playerWhoHit != (Object)null && base.currentBehaviourStateIndex != 2 && ((NetworkBehaviour)this).IsOwner)
			{
				EnrageDogOnLocalClient(((Component)playerWhoHit).transform.position, Vector3.Distance(((Component)this).transform.position, ((Component)playerWhoHit).transform.position));
			}
		}

		public override void OnCollideWithEnemy(Collider other, EnemyAI? collidedEnemy = null)
		{
			//IL_0067: 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_0092: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).OnCollideWithEnemy(other, collidedEnemy);
			if ((Object)(object)collidedEnemy != (Object)null && (Object)(object)collidedEnemy.enemyType != (Object)(object)base.enemyType && timeSinceHittingOtherEnemy >= 1f)
			{
				if (base.currentBehaviourStateIndex == 2 && !inLunge)
				{
					((Component)this).transform.LookAt(((Component)other).transform.position);
					((Component)this).transform.localEulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
					inLunge = true;
					EnterLunge();
				}
				timeSinceHittingOtherEnemy = 0f;
				collidedEnemy.HitEnemy(enemyDamage, (PlayerControllerB)null, true, -1);
			}
		}

		public override void OnCollideWithPlayer(Collider other)
		{
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: 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)
			((EnemyAI)this).OnCollideWithPlayer(other);
			PlayerControllerB val = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, inKillAnimation, false);
			if (!((Object)(object)val != (Object)null))
			{
				return;
			}
			VehicleController val2 = Object.FindObjectOfType<VehicleController>();
			if ((Object)(object)val2 != (Object)null && (Object)(object)val.physicsParent != (Object)null && (Object)(object)val.physicsParent == (Object)(object)((Component)val2).transform && !val2.backDoorOpen)
			{
				return;
			}
			Vector3 val3 = Vector3.Normalize((((Component)this).transform.position + Vector3.up - ((Component)val.gameplayCamera).transform.position) * 100f);
			RaycastHit val4 = default(RaycastHit);
			if (Physics.Linecast(((Component)this).transform.position + Vector3.up + val3 * 0.5f, ((Component)val.gameplayCamera).transform.position, ref val4, StartOfRound.Instance.collidersAndRoomMask, (QueryTriggerInteraction)1))
			{
				if (!((Object)(object)((RaycastHit)(ref val4)).collider == (Object)(object)debugCollider))
				{
					debugCollider = ((RaycastHit)(ref val4)).collider;
				}
			}
			else if (!val.inVehicleAnimation || !(Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) > 3f))
			{
				if (base.currentBehaviourStateIndex == 3)
				{
					val.inAnimationWithEnemy = (EnemyAI)(object)this;
					KillPlayerServerRpc((int)val.playerClientId);
				}
				else if (base.currentBehaviourStateIndex == 0 || base.currentBehaviourStateIndex == 1)
				{
					ChaseLocalPlayer();
				}
				else if (base.currentBehaviourStateIndex == 2 && !inLunge)
				{
					((Component)this).transform.LookAt(((Component)other).transform.position);
					((Component)this).transform.localEulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
					inLunge = true;
					EnterLunge();
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void KillPlayerServerRpc(int playerId)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			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(4001558559u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, playerId);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4001558559u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				if (!inKillAnimation)
				{
					inKillAnimation = true;
					KillPlayerClientRpc(playerId);
				}
				else
				{
					CancelKillAnimationWithPlayerClientRpc(playerId);
				}
			}
		}

		[ClientRpc]
		public void CancelKillAnimationWithPlayerClientRpc(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(1417954382u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, playerObjectId);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1417954382u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					StartOfRound.Instance.allPlayerScripts[playerObjectId].inAnimationWithEnemy = null;
				}
			}
		}

		[ClientRpc]
		public void KillPlayerClientRpc(int playerId)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			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(233721520u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, playerId);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 233721520u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				Debug.Log((object)"Kill player rpc");
				if (killPlayerCoroutine != null)
				{
					((MonoBehaviour)this).StopCoroutine(killPlayerCoroutine);
				}
				killPlayerCoroutine = ((MonoBehaviour)this).StartCoroutine(KillPlayer(playerId));
			}
		}

		private IEnumerator KillPlayer(int playerId)
		{
			if (((NetworkBehaviour)this).IsOwner)
			{
				base.agent.speed = Mathf.Clamp(base.agent.speed, 2f, 0f);
			}
			base.creatureVoice.pitch = Random.Range(0.96f, 1.04f);
			base.creatureVoice.PlayOneShot(killPlayerSFX, 1f);
			PlayerControllerB killPlayer = StartOfRound.Instance.allPlayerScripts[playerId];
			if ((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)(object)killPlayer)
			{
				killPlayer.DamagePlayer(playerDamage, true, true, (CauseOfDeath)6, 0, false, default(Vector3));
			}
			float startTime = Time.timeSinceLevelLoad;
			yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)killPlayer.deadBody != (Object)null || Time.timeSinceLevelLoad - startTime > 2f));
			if ((Object)(object)killPlayer.deadBody == (Object)null)
			{
				Debug.Log((object)"Giant dog: Player body was not spawned or found within 2 seconds.");
				killPlayer.inAnimationWithEnemy = null;
				inKillAnimation = false;
				yield break;
			}
			TakeBodyInMouth(killPlayer.deadBody);
			startTime = Time.timeSinceLevelLoad;
			Quaternion rotateTo = Quaternion.Euler(new Vector3(0f, RoundManager.Instance.YRotationThatFacesTheFarthestFromPosition(((Component)this).transform.position + Vector3.up * 0.6f, 25f, 6), 0f));
			Quaternion rotateFrom = ((Component)this).transform.rotation;
			while (Time.timeSinceLevelLoad - startTime < 2f)
			{
				yield return null;
				if (((NetworkBehaviour)this).IsOwner)
				{
					((Component)this).transform.rotation = Quaternion.RotateTowards(rotateFrom, rotateTo, 60f * Time.deltaTime);
				}
			}
			yield return (object)new WaitForSeconds(3.01f);
			DropCarriedBody();
			suspicionLevel = 2;
			((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(2);
			endingLunge = true;
			inKillAnimation = false;
		}

		private void StopKillAnimation()
		{
			if (killPlayerCoroutine != null)
			{
				((MonoBehaviour)this).StopCoroutine(killPlayerCoroutine);
			}
			base.creatureVoice.Stop();
			DropCarriedBody();
			suspicionLevel = 2;
			((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(2);
			endingLunge = true;
			inKillAnimation = false;
		}

		[ServerRpc(RequireOwnership = false)]
		public void StopKillAnimationServerRpc()
		{
			//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(3999301457u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3999301457u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					StopKillAnimationClientRpc();
				}
			}
		}

		[ClientRpc]
		public void StopKillAnimationClientRpc()
		{
			//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(776545170u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 776545170u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					StopKillAnimation();
				}
			}
		}

		private void TakeBodyInMouth(DeadBodyInfo body)
		{
			carryingBody = body;
			carryingBody.attachedTo = mouthGrip;
			carryingBody.attachedLimb = body.bodyParts[5];
			carryingBody.matchPositionExactly = true;
		}

		private void DropCarriedBody()
		{
			if (!((Object)(object)carryingBody == (Object)null))
			{
				carryingBody.speedMultiplier = 12f;
				carryingBody.attachedTo = null;
				carryingBody.attachedLimb = null;
				carryingBody.matchPositionExactly = false;
				carryingBody = null;
			}
		}

		public override void KillEnemy(bool destroy = false)
		{
			StopKillAnimation();
			base.creatureVoice.Stop();
			base.creatureSFX.Stop();
			((EnemyAI)this).KillEnemy(destroy);
		}

		public override void ReceiveLoudNoiseBlast(Vector3 position, float angle)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).ReceiveLoudNoiseBlast(position, angle);
			if (angle < 30f)
			{
				coweringOnFloor = true;
			}
		}

		public override void EnableEnemyMesh(bool enable, bool overrideDoNotSet = false)
		{
			//IL_001e: 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)
			((EnemyAI)this).EnableEnemyMesh(enable, false);
			ParticleSystem[] componentsInChildren = ((Component)this).gameObject.GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main = componentsInChildren[i].main;
				((MainModule)(ref main)).playOnAwake = ((Behaviour)this).enabled;
			}
		}

		public override void OnDrawGizmos()
		{
			//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_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			((EnemyAI)this).OnDrawGizmos();
			if (base.debugEnemyAI)
			{
				Gizmos.DrawCube(noisePositionGuess, Vector3.one);
				Gizmos.DrawLine(noisePositionGuess, ((Component)this).transform.position + Vector3.up);
			}
		}

		protected override void __initializeVariables()
		{
			((EnemyAI)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_BlindPupAI()
		{
			//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
			NetworkManager.__rpc_func_table.Add(3106330922u, new RpcReceiveHandler(__rpc_handler_3106330922));
			NetworkManager.__rpc_func_table.Add(3443765605u, new RpcReceiveHandler(__rpc_handler_3443765605));
			NetworkManager.__rpc_func_table.Add(4001558559u, new RpcReceiveHandler(__rpc_handler_4001558559));
			NetworkManager.__rpc_func_table.Add(1417954382u, new RpcReceiveHandler(__rpc_handler_1417954382));
			NetworkManager.__rpc_func_table.Add(233721520u, new RpcReceiveHandler(__rpc_handler_233721520));
			NetworkManager.__rpc_func_table.Add(3999301457u, new RpcReceiveHandler(__rpc_handler_3999301457));
			NetworkManager.__rpc_func_table.Add(776545170u, new RpcReceiveHandler(__rpc_handler_776545170));
		}

		private static void __rpc_handler_3106330922(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((BlindPupAI)(object)target).EndLungeServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3443765605(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BlindPupAI)(object)target).EndLungeClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_4001558559(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerId = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((BlindPupAI)(object)target).KillPlayerServerRpc(playerId);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1417954382(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerObjectId = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObjectId);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BlindPupAI)(object)target).CancelKillAnimationWithPlayerClientRpc(playerObjectId);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_233721520(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerId = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BlindPupAI)(object)target).KillPlayerClientRpc(playerId);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3999301457(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((BlindPupAI)(object)target).StopKillAnimationServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_776545170(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BlindPupAI)(object)target).StopKillAnimationClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "BlindPupAI";
		}
	}
}
namespace BlindPups.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}