Decompiled source of ChefMod v2.3.9

plugins/Gnome-ChefMod/ChefMod.dll

Decompiled a week ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AncientScepter;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using ChefMod;
using ChefMod.Achievements;
using ChefMod.Components;
using ChefMod.Hooks;
using ChefMod.Modules;
using ChefMod.Properties;
using ChefPlugin;
using EntityStates;
using EntityStates.Chef;
using HG;
using HG.BlendableTypes;
using IL.RoR2;
using KinematicCharacterController;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using R2API;
using R2API.Networking;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Achievements;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using Survariants;
using TILER2;
using ThinkInvisible.ClassicItems;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using Zio.FileSystems;

[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: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyCompany("ChefMod")]
[assembly: AssemblyProduct("ChefMod")]
[assembly: AssemblyTitle("ChefMod")]
[assembly: AssemblyInformationalVersion("1.0.0+abea209305d9122a3b281db0a2b3e6eaa28e8e8c")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
public class CustomRendererInfo
{
	public string childName;

	public Material material;

	public bool ignoreOverlays;

	public CustomRendererInfo(string childName_, Material mat_)
	{
		childName = childName_;
		material = mat_;
		ignoreOverlays = false;
	}

	public CustomRendererInfo(string childName_, Material mat_, bool ignoreOverlays_)
	{
		childName = childName_;
		material = mat_;
		ignoreOverlays = ignoreOverlays_;
	}
}
public class PrefabBuilder
{
	public string prefabName;

	public GameObject model;

	public GameObject modelBase = new GameObject("ModelBase");

	public GameObject camPivot = new GameObject("CameraPivot");

	public GameObject aimOrigin = new GameObject("AimOrigin");

	public GameObject preferredPodPrefab;

	public CustomRendererInfo[] defaultCustomRendererInfos;

	public CustomRendererInfo[] masteryCustomRendererInfos;

	public Sprite defaultSkinIcon;

	public Sprite masterySkinIcon;

	public string masteryAchievementUnlockable;

	private GameObject prefab;

	private Transform transform;

	private CharacterDirection dir;

	private CharacterBody body;

	private CharacterMotor motor;

	private CameraTargetParams camParams;

	private ModelLocator locator;

	private CharacterModel charModel;

	private ChildLocator childLocator;

	private TeamComponent teamComponent;

	private HealthComponent health;

	private CharacterDeathBehavior deathBehavior;

	private Rigidbody rigidbody;

	private CapsuleCollider collider;

	private KinematicCharacterMotor kMotor;

	private HurtBoxGroup hurtbox;

	private CapsuleCollider coll1;

	private HurtBox hb;

	private FootstepHandler footstep;

	private AimAnimator aimer;

	private RendererInfo[] defaultRendererInfos;

	private RendererInfo[] masteryRendererInfos;

	public GameObject CreatePrefab()
	{
		if (prefabName == "")
		{
			Debug.LogWarning((object)"Prefab name has not been set.");
			prefabName = "RandomAssSurvivorBody";
		}
		prefab = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody"), prefabName, true);
		prefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
		SetupModelBase();
		SetupCamera();
		SetupAim();
		if (!Object.op_Implicit((Object)(object)model))
		{
			Debug.LogError((object)("Character model has not been loaded, returning null. " + prefabName + " will not function properly."));
			return null;
		}
		transform = model.transform;
		dir = prefab.GetComponent<CharacterDirection>();
		body = prefab.GetComponent<CharacterBody>();
		motor = prefab.GetComponent<CharacterMotor>();
		camParams = prefab.GetComponent<CameraTargetParams>();
		locator = prefab.GetComponent<ModelLocator>();
		charModel = ((Component)transform).gameObject.AddComponent<CharacterModel>();
		childLocator = model.GetComponent<ChildLocator>();
		if ((Object)(object)prefab.GetComponent<TeamComponent>() != (Object)null)
		{
			teamComponent = prefab.GetComponent<TeamComponent>();
		}
		else
		{
			teamComponent = prefab.GetComponent<TeamComponent>();
		}
		health = prefab.GetComponent<HealthComponent>();
		deathBehavior = prefab.GetComponent<CharacterDeathBehavior>();
		rigidbody = prefab.GetComponent<Rigidbody>();
		collider = prefab.GetComponent<CapsuleCollider>();
		kMotor = prefab.GetComponent<KinematicCharacterMotor>();
		hurtbox = model.AddComponent<HurtBoxGroup>();
		coll1 = model.GetComponentInChildren<CapsuleCollider>();
		hb = ((Component)coll1).gameObject.AddComponent<HurtBox>();
		footstep = model.AddComponent<FootstepHandler>();
		aimer = model.AddComponent<AimAnimator>();
		SetupModelTransform();
		SetupCharacterDirection();
		SetupCharacterBody();
		SetupCharacterMotor();
		SetupCameraParams();
		SetupModelLocator();
		SetupModel();
		SetupRendererInfos();
		SetupSkins();
		SetupTeamComponent();
		SetupHealthComponent();
		SetupInteractors();
		SetupDeathBehavior();
		SetupRigidBody();
		if (Object.op_Implicit((Object)(object)model.GetComponent<RagdollController>()))
		{
			Debug.LogWarning((object)"hope this doesn't FUCK everything");
			Object.Destroy((Object)(object)model.GetComponent<RagdollController>());
		}
		SetupCollider();
		SetupKCharacterMotor();
		SetupHurtbox();
		SetupFootstep();
		SetupAimAnimator();
		SetupHitbox();
		ChefContent.bodyPrefabs.Add(prefab);
		return prefab;
	}

	public GameObject createDisplayPrefab(string displayPrefab)
	{
		GameObject val = Assets.chefAssetBundle.LoadAsset<GameObject>(displayPrefab);
		CharacterModel val2 = val.AddComponent<CharacterModel>();
		val2.autoPopulateLightInfos = true;
		val2.invisibilityCount = 0;
		val2.temporaryOverlays = new List<TemporaryOverlayInstance>();
		val2.baseRendererInfos = getRendererInfos(val.GetComponent<ChildLocator>(), defaultCustomRendererInfos);
		return val;
	}

	private void SetupRendererInfos()
	{
		defaultRendererInfos = getRendererInfos(childLocator, defaultCustomRendererInfos);
		charModel.baseRendererInfos = defaultRendererInfos;
		if (masteryCustomRendererInfos != null)
		{
			masteryRendererInfos = getRendererInfos(childLocator, masteryCustomRendererInfos);
		}
	}

	private static RendererInfo[] getRendererInfos(ChildLocator childLocator, CustomRendererInfo[] customRendererInfos)
	{
		//IL_000f: 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_0055: Unknown result type (might be due to invalid IL or missing references)
		List<RendererInfo> list = new List<RendererInfo>();
		for (int i = 0; i < customRendererInfos.Length; i++)
		{
			list.Add(new RendererInfo
			{
				renderer = ((Component)childLocator.FindChild(customRendererInfos[i].childName)).GetComponent<Renderer>(),
				defaultMaterial = customRendererInfos[i].material,
				ignoreOverlays = customRendererInfos[i].ignoreOverlays,
				defaultShadowCastingMode = (ShadowCastingMode)1
			});
		}
		return list.ToArray();
	}

	private void SetupModelBase()
	{
		//IL_0097: 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)
		Object.Destroy((Object)(object)((Component)prefab.transform.Find("ModelBase")).gameObject);
		Object.Destroy((Object)(object)((Component)prefab.transform.Find("CameraPivot")).gameObject);
		Object.Destroy((Object)(object)((Component)prefab.transform.Find("AimOrigin")).gameObject);
		modelBase.transform.parent = prefab.transform;
		modelBase.transform.localPosition = new Vector3(0f, -0.95f, 0f);
		modelBase.transform.localRotation = Quaternion.identity;
	}

	private void SetupCamera()
	{
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		camPivot.transform.parent = prefab.transform;
		camPivot.transform.localPosition = new Vector3(0f, -0.95f, 0f);
		camPivot.transform.rotation = Quaternion.identity;
		camPivot.transform.localScale = Vector3.one;
	}

	private void SetupAim()
	{
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		aimOrigin.transform.parent = prefab.transform;
		aimOrigin.transform.localPosition = new Vector3(0f, 1.4f, 0f);
		aimOrigin.transform.rotation = Quaternion.identity;
		aimOrigin.transform.localScale = Vector3.one;
	}

	private void SetupModelTransform()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		transform.parent = modelBase.transform;
		transform.localRotation = Quaternion.identity;
	}

	private void SetupCharacterDirection()
	{
		//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)
		dir.moveVector = Vector3.zero;
		dir.targetTransform = modelBase.transform;
		dir.overrideAnimatorForwardTransform = null;
		dir.rootMotionAccumulator = null;
		dir.modelAnimator = model.GetComponentInChildren<Animator>();
		dir.driveFromRootRotation = false;
		dir.turnSpeed = 720f;
	}

	private void SetupCharacterBody()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		((Object)body).name = prefabName;
		body.bodyFlags = (BodyFlags)16;
		body.rootMotionInMainState = false;
		body.mainRootSpeed = 0f;
		body.aimOriginTransform = aimOrigin.transform;
		body.hullClassification = (HullClassification)0;
		if ((Object)(object)preferredPodPrefab != (Object)null)
		{
			body.preferredPodPrefab = preferredPodPrefab;
		}
	}

	private void SetupCharacterMotor()
	{
		motor.walkSpeedPenaltyCoefficient = 1f;
		motor.characterDirection = dir;
		motor.muteWalkMotion = false;
		motor.mass = 100f;
		motor.airControl = 0.25f;
		motor.disableAirControlUntilCollision = false;
		motor.generateParametersOnAwake = true;
	}

	private void SetupCameraParams()
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: 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_00b1: 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_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		camParams.cameraParams = ScriptableObject.CreateInstance<CharacterCameraParams>();
		CharacterCameraParams cameraParams = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponent<CameraTargetParams>().cameraParams;
		camParams.cameraParams.data.pivotVerticalOffset = BlendableFloat.op_Implicit(1.4f);
		((Object)camParams.cameraParams).name = "CHEFcam";
		camParams.cameraParams.data.maxPitch = cameraParams.data.maxPitch;
		camParams.cameraParams.data.minPitch = cameraParams.data.minPitch;
		camParams.cameraParams.data.wallCushion = cameraParams.data.wallCushion;
		camParams.cameraParams.data.idealLocalCameraPos = BlendableVector3.op_Implicit(new Vector3(0f, 0f, -11f));
		camParams.cameraPivotTransform = null;
		camParams.recoil = Vector2.zero;
		camParams.dontRaycastToPivot = false;
	}

	private void SetupModelLocator()
	{
		locator.modelTransform = transform;
		locator.modelBaseTransform = modelBase.transform;
		locator.dontReleaseModelOnDeath = false;
		locator.autoUpdateModelTransform = true;
		locator.dontDetatchFromParent = false;
		locator.noCorpse = false;
		locator.normalizeToFloor = false;
		locator.preserveModel = false;
	}

	private void SetupTeamComponent()
	{
		teamComponent.hideAllyCardDisplay = false;
		teamComponent.teamIndex = (TeamIndex)(-1);
	}

	private void SetupHealthComponent()
	{
		health.body = null;
		health.dontShowHealthbar = false;
		health.globalDeathEventChanceCoefficient = 1f;
	}

	private void SetupInteractors()
	{
		prefab.GetComponent<Interactor>().maxInteractionDistance = 3f;
		prefab.GetComponent<InteractionDriver>().highlightInteractor = true;
	}

	private void SetupDeathBehavior()
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		deathBehavior.deathStateMachine = prefab.GetComponent<EntityStateMachine>();
		deathBehavior.deathState = new SerializableEntityStateType(typeof(GenericCharacterDeath));
	}

	private void SetupRigidBody()
	{
		rigidbody.mass = 100f;
		rigidbody.drag = 0f;
		rigidbody.angularDrag = 0f;
		rigidbody.useGravity = false;
		rigidbody.isKinematic = true;
		rigidbody.interpolation = (RigidbodyInterpolation)0;
		rigidbody.collisionDetectionMode = (CollisionDetectionMode)0;
		rigidbody.constraints = (RigidbodyConstraints)0;
	}

	private void SetupCollider()
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		((Collider)collider).isTrigger = false;
		((Collider)collider).material = null;
		collider.center = Vector3.zero;
		collider.direction = 1;
	}

	private void SetupModel()
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		charModel.body = body;
		charModel.baseRendererInfos = (RendererInfo[])(object)new RendererInfo[1]
		{
			new RendererInfo
			{
				defaultMaterial = ((Renderer)model.GetComponentInChildren<SkinnedMeshRenderer>()).material,
				renderer = (Renderer)(object)model.GetComponentInChildren<SkinnedMeshRenderer>(),
				defaultShadowCastingMode = (ShadowCastingMode)1,
				ignoreOverlays = false
			}
		};
		charModel.autoPopulateLightInfos = true;
		charModel.invisibilityCount = 0;
		charModel.temporaryOverlays = new List<TemporaryOverlayInstance>();
	}

	private void SetupKCharacterMotor()
	{
		//IL_008a: 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_00be: Unknown result type (might be due to invalid IL or missing references)
		kMotor.CharacterController = (ICharacterController)(object)motor;
		kMotor.Capsule = collider;
		kMotor.GroundDetectionExtraDistance = 0f;
		kMotor.MaxStepHeight = 0.2f;
		kMotor.MinRequiredStepDepth = 0.1f;
		kMotor.MaxStableSlopeAngle = 55f;
		kMotor.MaxStableDistanceFromLedge = 0.5f;
		kMotor.MaxStableDenivelationAngle = 55f;
		kMotor.RigidbodyInteractionType = (RigidbodyInteractionType)0;
		kMotor.PreserveAttachedRigidbodyMomentum = true;
		kMotor.HasPlanarConstraint = false;
		kMotor.PlanarConstraintAxis = Vector3.up;
		kMotor.StepHandling = (StepHandlingMethod)0;
		kMotor.InteractiveRigidbodyHandling = true;
		kMotor.playerCharacter = true;
		kMotor.LedgeAndDenivelationHandling = true;
	}

	private void SetupHurtbox()
	{
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		((Component)hb).gameObject.layer = LayerIndex.entityPrecise.intVal;
		hb.healthComponent = health;
		hb.isBullseye = true;
		hb.damageModifier = (DamageModifier)0;
		hb.hurtBoxGroup = hurtbox;
		hb.indexInGroup = 0;
		hb.isSniperTarget = true;
		hurtbox.hurtBoxes = (HurtBox[])(object)new HurtBox[1] { hb };
		hurtbox.mainHurtBox = hb;
		hurtbox.bullseyeCount = 1;
	}

	private void SetupFootstep()
	{
		footstep.baseFootstepString = "Play_player_footstep";
		footstep.sprintFootstepOverrideString = "";
		footstep.enableFootstepDust = true;
		footstep.footstepDustPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/GenericFootstepDust");
	}

	private void SetupAimAnimator()
	{
		aimer.inputBank = prefab.GetComponent<InputBankTest>();
		aimer.directionComponent = dir;
		aimer.pitchRangeMax = 60f;
		aimer.pitchRangeMin = -60f;
		aimer.yawRangeMax = 90f;
		aimer.yawRangeMin = -90f;
		aimer.pitchGiveupRange = 30f;
		aimer.yawGiveupRange = 10f;
		aimer.giveupDuration = 3f;
	}

	private void SetupHitbox()
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Expected O, but got Unknown
		foreach (Transform item in transform)
		{
			Transform val = item;
			if (((Object)val).name.Contains("Hitbox"))
			{
				HitBoxGroup val2 = model.AddComponent<HitBoxGroup>();
				HitBox val3 = ((Component)val).gameObject.AddComponent<HitBox>();
				val2.groupName = ((Object)val).name;
				val2.hitBoxes = (HitBox[])(object)new HitBox[1] { val3 };
			}
		}
	}

	private void SetupSkins()
	{
		//IL_001d: 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_009b: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
		GameObject gameObject = ((Component)transform).gameObject;
		CharacterModel component = gameObject.GetComponent<CharacterModel>();
		ModelSkinController val = gameObject.AddComponent<ModelSkinController>();
		SkinDefInfo val2 = default(SkinDefInfo);
		val2.Name = "DEFAULT_SKIN";
		val2.NameToken = "DEFAULT_SKIN";
		val2.Icon = defaultSkinIcon;
		val2.RootObject = gameObject;
		val2.RendererInfos = component.baseRendererInfos;
		val2.GameObjectActivations = Array.Empty<GameObjectActivation>();
		val2.MeshReplacements = Array.Empty<MeshReplacement>();
		val2.BaseSkins = Array.Empty<SkinDef>();
		val2.MinionSkinReplacements = Array.Empty<MinionSkinReplacement>();
		val2.ProjectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>();
		SkinDefInfo val3 = val2;
		Material defaultMaterial = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BrotherGlassBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial;
		RendererInfo[] rendererInfos = val3.RendererInfos;
		RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[rendererInfos.Length];
		rendererInfos.CopyTo(array, 0);
		array[0].defaultMaterial = defaultMaterial;
		SkinDef val4 = LoadoutAPI.CreateNewSkinDef(val3);
		SkinDef[] skins = (SkinDef[])(object)new SkinDef[1] { val4 };
		val.skins = skins;
	}

	public static bool RegisterNewBody(GameObject bodyObject)
	{
		if (Object.op_Implicit((Object)(object)bodyObject))
		{
			ChefContent.bodyPrefabs.Add(bodyObject);
			return true;
		}
		Debug.LogError((object)("FATAL ERROR:" + ((Object)bodyObject).name + " failed to register to the body catalog!"));
		return false;
	}
}
namespace EntityStates.Chef
{
	public class ChefMain : GenericCharacterMain
	{
		private ChildLocator childLocator;

		public static RuntimeAnimatorController displayAnimatorController = ChefContent.survivorDefs[0].displayPrefab.GetComponentInChildren<Animator>().runtimeAnimatorController;

		private RuntimeAnimatorController cachedAnimatorController;

		public override void OnEnter()
		{
			((GenericCharacterMain)this).OnEnter();
			childLocator = ((EntityState)this).GetModelChildLocator();
			if ((Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.altPrimaryDef || (Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.boostedAltPrimaryDef)
			{
				((Component)childLocator.FindChild("Cleaver")).gameObject.SetActive(false);
				((Component)childLocator.FindChild("Knife")).gameObject.SetActive(true);
			}
			if ((Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.primaryDef || (Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.boostedPrimaryDef)
			{
				((Component)childLocator.FindChild("Cleaver")).gameObject.SetActive(true);
				((Component)childLocator.FindChild("Knife")).gameObject.SetActive(false);
			}
			cachedAnimatorController = ((BaseCharacterMain)this).modelAnimator.runtimeAnimatorController;
		}

		public override void Update()
		{
			((GenericCharacterMain)this).Update();
		}

		public override void HandleMovements()
		{
			((GenericCharacterMain)this).HandleMovements();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
			{
				int num = 5;
				if (((EntityState)this).characterBody.moveSpeed > ((EntityState)this).characterBody.baseMoveSpeed * (float)num && ((EntityState)this).characterBody.isSprinting)
				{
					((BaseCharacterMain)this).modelAnimator.runtimeAnimatorController = displayAnimatorController;
					((BaseCharacterMain)this).modelAnimator.speed = Mathf.Max(((EntityState)this).characterBody.moveSpeed / ((EntityState)this).characterBody.baseMoveSpeed * (float)num / 4f, 1f);
					((EntityState)this).modelLocator.normalizeToFloor = true;
				}
				else
				{
					((BaseCharacterMain)this).modelAnimator.runtimeAnimatorController = cachedAnimatorController;
					((BaseCharacterMain)this).modelAnimator.speed = 1f;
					((EntityState)this).modelLocator.normalizeToFloor = false;
				}
			}
		}

		public override void OnExit()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_009c: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Expected O, but got Unknown
			if (((EntityState)this).characterBody.healthComponent.health < 1f)
			{
				BlastAttack val = new BlastAttack();
				val.radius = 0.25f;
				val.procCoefficient = 1f;
				val.position = ((EntityState)this).characterBody.corePosition;
				val.attacker = ((EntityState)this).gameObject;
				val.crit = true;
				val.baseDamage = 1000000f;
				val.falloffModel = (FalloffModel)0;
				val.baseForce = 300f;
				val.teamIndex = TeamComponent.GetObjectTeam(val.attacker);
				val.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
				val.attackerFiltering = (AttackerFiltering)2;
				Result val2 = val.Fire();
				GameObject val3 = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/omnieffect/OmniExplosionVFX");
				EffectData val4 = new EffectData
				{
					scale = 15f,
					origin = ((EntityState)this).characterBody.corePosition
				};
				EffectManager.SpawnEffect(val3, val4, true);
				CharacterDirection componentInChildren = ((Component)((EntityState)this).characterBody).gameObject.GetComponentInChildren<CharacterDirection>();
				SkinnedMeshRenderer[] componentsInChildren = ((Component)componentInChildren.modelAnimator).GetComponentsInChildren<SkinnedMeshRenderer>();
				foreach (SkinnedMeshRenderer val5 in componentsInChildren)
				{
					((Component)val5).gameObject.SetActive(false);
				}
				MeshRenderer[] componentsInChildren2 = ((Component)componentInChildren.modelAnimator).GetComponentsInChildren<MeshRenderer>();
				foreach (MeshRenderer val6 in componentsInChildren2)
				{
					((Component)val6).gameObject.SetActive(false);
				}
				((Component)childLocator.FindChild("Cleaver")).gameObject.SetActive(false);
				((Component)childLocator.FindChild("Knife")).gameObject.SetActive(false);
			}
			((GenericCharacterMain)this).OnExit();
		}
	}
	internal class Flambe : BaseState
	{
		public float damageCoefficient = 5f;

		public float maxDistance = 25f;

		public float baseDuration = 1f;

		public float throwTime = 0.25f;

		private float duration;

		private bool hasThrown;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			((EntityState)this).PlayAnimation("Fullbody, Override", "SecondaryBoosted", "Secondary.playbackRate", duration, 0f);
			((EntityState)this).PlayAnimation("Gesture, Override", "SecondaryBoosted", "Secondary.playbackRate", duration, 0f);
			((BaseState)this).StartAimMode(2f, false);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * throwTime && !hasThrown)
			{
				hasThrown = true;
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Throw()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: 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_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				((BaseState)this).StartAimMode(0.2f, false);
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = ChefMod.ChefPlugin.flamballPrefab;
				val.position = ((Ray)(ref aimRay)).origin + 1.5f * ((Ray)(ref aimRay)).direction;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction) * Quaternion.FromToRotation(Vector3.left, Vector3.up);
				val.owner = ((EntityState)this).gameObject;
				val.damage = ((EntityState)this).characterBody.damage * 5f;
				val.force = 50f;
				val.crit = ((BaseState)this).RollCrit();
				val.damageColorIndex = (DamageColorIndex)0;
				val.target = null;
				((FireProjectileInfo)(ref val)).speedOverride = 100f;
				((FireProjectileInfo)(ref val)).fuseOverride = -1f;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
				Util.PlaySound("DIng", ((EntityState)this).gameObject);
				Util.PlaySound("Fireball", ((EntityState)this).gameObject);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0010: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			if (hasThrown)
			{
				return (InterruptPriority)0;
			}
			return (InterruptPriority)2;
		}
	}
	internal class MinceHoming : BaseState
	{
		public float baseDuration = 0.5f;

		public float throwTime = 0.36f;

		private float duration;

		private bool hasThrown;

		private List<CharacterBody> victimBodyList = new List<CharacterBody>();

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			((EntityState)this).PlayAnimation("Gesture, Override", "PrimaryBoosted", "PrimaryCleaver.playbackRate", duration, 0f);
			((BaseState)this).StartAimMode(2f, false);
		}

		private void Throw()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: 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_00ae: 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_00cc: 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_00d8: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 val = new Vector3(((Ray)(ref aimRay)).direction.z, 0f, -1f * ((Ray)(ref aimRay)).direction.x);
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			CoomerangProjectile component = Cleaver.projectilePrefab.GetComponent<CoomerangProjectile>();
			component.followRet = false;
			getHitList(((EntityState)this).characterBody.corePosition, 40f);
			foreach (CharacterBody victimBody in victimBodyList)
			{
				Vector3 val2 = victimBody.corePosition - ((EntityState)this).characterBody.corePosition;
				val2 = ((Vector3)(ref val2)).normalized;
				FireProjectileInfo val3 = default(FireProjectileInfo);
				val3.projectilePrefab = Cleaver.projectilePrefab;
				val3.position = ((EntityState)this).characterBody.corePosition + 1.5f * val2;
				val3.rotation = Util.QuaternionSafeLookRotation(val2);
				val3.owner = ((EntityState)this).gameObject;
				val3.damage = ((EntityState)this).characterBody.damage * 1.5f;
				val3.force = 50f;
				val3.crit = ((BaseState)this).RollCrit();
				val3.damageColorIndex = (DamageColorIndex)0;
				val3.target = null;
				((FireProjectileInfo)(ref val3)).speedOverride = 16f;
				((FireProjectileInfo)(ref val3)).fuseOverride = -1f;
				FireProjectileInfo val4 = val3;
				ProjectileManager.instance.FireProjectile(val4);
				Util.PlaySound("CleaverThrow", ((EntityState)this).gameObject);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * throwTime && !hasThrown)
			{
				hasThrown = true;
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private void getHitList(Vector3 position, float radius)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			Collider[] array = Physics.OverlapSphere(position, radius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask));
			int i = 0;
			int num = 0;
			for (; i < array.Length; i++)
			{
				if (num >= 12)
				{
					break;
				}
				HealthComponent component = ((Component)array[i]).GetComponent<HealthComponent>();
				if (Object.op_Implicit((Object)(object)component))
				{
					TeamComponent component2 = ((Component)component).GetComponent<TeamComponent>();
					if (component2.teamIndex != ((EntityState)this).characterBody.teamComponent.teamIndex)
					{
						AddToList(component.body);
						num++;
					}
				}
			}
		}

		private void AddToList(CharacterBody component)
		{
			if (!victimBodyList.Contains(component))
			{
				victimBodyList.Add(component);
			}
		}
	}
	internal class SearOld : BaseSkillState
	{
		public float damageCoefficient = 5f;

		public float maxDistance = 25f;

		public float baseDuration = 1f;

		public float throwTime = 0.25f;

		private float duration;

		private bool hasThrown;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((EntityState)this).PlayAnimation("Fullbody, Override", "Secondary", "Secondary.playbackRate", duration, 0f);
			((EntityState)this).PlayAnimation("Gesture, Override", "Secondary", "Secondary.playbackRate", duration, 0f);
			((BaseState)this).StartAimMode(2f, false);
		}

		private void Throw()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: 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_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: 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_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = ChefMod.ChefPlugin.foirballPrefab;
				val.position = ((Ray)(ref aimRay)).origin + 1.5f * ((Ray)(ref aimRay)).direction;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction) * Quaternion.FromToRotation(Vector3.left, Vector3.up);
				val.owner = ((EntityState)this).gameObject;
				val.damage = ((EntityState)this).characterBody.damage * 5f;
				val.force = 50f;
				val.crit = ((BaseState)this).RollCrit();
				val.damageColorIndex = (DamageColorIndex)0;
				val.target = null;
				((FireProjectileInfo)(ref val)).speedOverride = 100f;
				((FireProjectileInfo)(ref val)).fuseOverride = -1f;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
				Util.PlaySound("DIng", ((EntityState)this).gameObject);
				Util.PlaySound("Fireball", ((EntityState)this).gameObject);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * throwTime && !hasThrown)
			{
				hasThrown = true;
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0010: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			if (hasThrown)
			{
				return (InterruptPriority)0;
			}
			return (InterruptPriority)2;
		}
	}
	internal class Fry : BaseSkillState
	{
		public float baseDuration = 0.3f;

		public float throwTime = 0.38f;

		private float duration;

		private bool hasThrown;

		private Vector3 thePoint;

		private List<CharacterBody> victimList = new List<CharacterBody>();

		private Ray aimRay;

		public override void OnEnter()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			aimRay = ((BaseState)this).GetAimRay();
			duration = baseDuration;
			((EntityState)this).PlayCrossfade("Gesture, Override", "Primary", "PrimaryCleaver.playbackRate", duration, 0.05f);
			((BaseState)this).StartAimMode(2f, false);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * throwTime && !hasThrown)
			{
				hasThrown = true;
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Throw()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_003f: 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_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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: 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_0142: 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_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Expected O, but got Unknown
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			((BaseState)this).StartAimMode(0.2f, false);
			BlastAttack val = new BlastAttack();
			val.radius = 10f;
			val.procCoefficient = 1f;
			val.position = ((Ray)(ref aimRay)).origin;
			val.attacker = ((EntityState)this).gameObject;
			val.crit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
			val.baseDamage = 0.1f;
			val.falloffModel = (FalloffModel)0;
			val.baseForce = 3f;
			val.teamIndex = TeamComponent.GetObjectTeam(val.attacker);
			val.damageType = DamageTypeCombo.op_Implicit((DamageType)32);
			val.attackerFiltering = (AttackerFiltering)2;
			getVictim(val);
			thePoint = ((Ray)(ref aimRay)).origin + 30f * ((Ray)(ref aimRay)).direction;
			foreach (CharacterBody victim in victimList)
			{
				DamageInfo val2 = new DamageInfo
				{
					attacker = ((EntityState)this).gameObject,
					crit = ((BaseState)this).RollCrit(),
					damage = 5f * ((BaseState)this).damageStat,
					damageColorIndex = (DamageColorIndex)0,
					damageType = DamageTypeCombo.op_Implicit((DamageType)128),
					force = Vector3.forward,
					inflictor = ((EntityState)this).gameObject,
					procCoefficient = 1f
				};
				if (Object.op_Implicit((Object)(object)victim.characterMotor))
				{
					launch(victim);
					FryLanding fryLanding = ((Component)victim).gameObject.AddComponent<FryLanding>();
					fryLanding.damageInfo = val2;
				}
				else
				{
					victim.healthComponent.TakeDamage(val2);
				}
				Util.PlaySound("PanHit", ((EntityState)this).gameObject);
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0010: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			if (hasThrown)
			{
				return (InterruptPriority)0;
			}
			return (InterruptPriority)2;
		}

		private void getVictim(BlastAttack ba)
		{
			//IL_0002: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			Collider[] array = Physics.OverlapSphere(ba.position, ba.radius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask));
			int i = 0;
			int num = 0;
			for (; i < array.Length; i++)
			{
				if (num >= 12)
				{
					break;
				}
				HealthComponent component = ((Component)array[i]).GetComponent<HealthComponent>();
				if (Object.op_Implicit((Object)(object)component))
				{
					TeamComponent component2 = ((Component)component).GetComponent<TeamComponent>();
					if (component2.teamIndex != TeamComponent.GetObjectTeam(((EntityState)this).gameObject))
					{
						AddToList(component.body);
						num++;
					}
				}
			}
		}

		private void AddToList(CharacterBody candidate)
		{
			if (!victimList.Contains(candidate))
			{
				victimList.Add(candidate);
			}
		}

		private void launch(CharacterBody charB)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			float num = 35f;
			if (charB.characterMotor.mass > 300f)
			{
				num = 1f;
			}
			Vector3 val = thePoint - charB.corePosition;
			val.y = 0f;
			val = ((Vector3)(ref val)).normalized;
			val.y = 1f;
			charB.characterMotor.rootMotion.y += 0.5f;
			CharacterMotor characterMotor = charB.characterMotor;
			characterMotor.velocity += num * ((Vector3)(ref val)).normalized;
		}
	}
	public class Roast : BaseState
	{
		public float baseDuration = 0.1f;

		public float throwTime = 0.38f;

		private float duration;

		private bool hasThrown;

		private Vector3 direction;

		private Tuple<CharacterBody, float> victim = new Tuple<CharacterBody, float>(null, 100f);

		private Ray aimRay;

		public override void OnEnter()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			aimRay = ((BaseState)this).GetAimRay();
			duration = baseDuration;
			((EntityState)this).PlayCrossfade("Gesture, Override", "Primary", "PrimaryCleaver.playbackRate", duration, 0.05f);
			((BaseState)this).StartAimMode(2f, false);
		}

		private void Throw()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: 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_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: 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_0183: 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_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Expected O, but got Unknown
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			((BaseState)this).StartAimMode(0.2f, false);
			BlastAttack val = new BlastAttack();
			val.radius = 5f;
			val.procCoefficient = 1f;
			val.position = ((Ray)(ref aimRay)).origin + ((Ray)(ref aimRay)).direction * 2.5f;
			val.attacker = ((EntityState)this).gameObject;
			val.crit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
			val.baseDamage = 0.1f;
			val.falloffModel = (FalloffModel)0;
			val.baseForce = 3f;
			val.teamIndex = TeamComponent.GetObjectTeam(val.attacker);
			val.damageType = DamageTypeCombo.op_Implicit((DamageType)32);
			val.attackerFiltering = (AttackerFiltering)2;
			Vector3 normalized = default(Vector3);
			((Vector3)(ref normalized))..ctor(((Ray)(ref aimRay)).direction.x, 0f, ((Ray)(ref aimRay)).direction.z);
			normalized = ((Vector3)(ref normalized)).normalized;
			direction = new Vector3(normalized.x, 2f, normalized.z);
			getVictim(val);
			if (Object.op_Implicit((Object)(object)victim.Item1))
			{
				DamageInfo damageInfo = new DamageInfo
				{
					attacker = ((EntityState)this).gameObject,
					crit = ((BaseState)this).RollCrit(),
					damage = 10f * base.damageStat,
					damageColorIndex = (DamageColorIndex)0,
					damageType = DamageTypeCombo.op_Implicit((DamageType)128),
					force = Vector3.forward,
					inflictor = ((EntityState)this).gameObject,
					procCoefficient = 1f
				};
				if (Object.op_Implicit((Object)(object)victim.Item1.characterMotor))
				{
					launch(victim.Item1);
					Destroct destroct = ((Component)victim.Item1).gameObject.AddComponent<Destroct>();
					destroct.damageInfo = damageInfo;
				}
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * throwTime && !hasThrown)
			{
				hasThrown = true;
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0010: 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_0013: Unknown result type (might be due to invalid IL or missing references)
			if (hasThrown)
			{
				return (InterruptPriority)0;
			}
			return (InterruptPriority)2;
		}

		private void getVictim(BlastAttack ba)
		{
			//IL_0002: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Invalid comparison between Unknown and I4
			Collider[] array = Physics.OverlapSphere(ba.position, ba.radius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask));
			int i = 0;
			int num = 0;
			for (; i < array.Length; i++)
			{
				if (num >= 12)
				{
					break;
				}
				HealthComponent component = ((Component)array[i]).GetComponent<HealthComponent>();
				if (Object.op_Implicit((Object)(object)component))
				{
					TeamComponent component2 = ((Component)component).GetComponent<TeamComponent>();
					if ((int)component2.teamIndex != 1)
					{
						Compare(component.body);
						num++;
					}
				}
			}
		}

		private void Compare(CharacterBody candidate)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = candidate.corePosition - ((EntityState)this).characterBody.corePosition;
			if (((Vector3)(ref val)).magnitude < victim.Item2)
			{
				victim = new Tuple<CharacterBody, float>(candidate, ((Vector3)(ref val)).magnitude);
			}
		}

		private void launch(CharacterBody charB)
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			float num = 100f;
			if (charB.characterMotor.mass > 300f)
			{
				num = 1f;
			}
			charB.characterMotor.rootMotion.y += 1f;
			CharacterMotor characterMotor = charB.characterMotor;
			characterMotor.velocity += num * ((Ray)(ref aimRay)).direction;
		}
	}
	internal class Special : BaseSkillState
	{
		public float baseDuration = 0.1f;

		private float duration;

		public override void OnEnter()
		{
			//IL_002f: 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_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			RaycastHit[] array = Physics.SphereCastAll(((EntityState)this).characterBody.corePosition, 20f, Vector3.up, 5f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask), (QueryTriggerInteraction)0);
			for (int i = 0; i < array.Length; i++)
			{
				Collider collider = ((RaycastHit)(ref array[i])).collider;
				if (!Object.op_Implicit((Object)(object)((Component)collider).gameObject))
				{
					continue;
				}
				HurtBox component = ((Component)collider).GetComponent<HurtBox>();
				if (Object.op_Implicit((Object)(object)component))
				{
					HealthComponent healthComponent = component.healthComponent;
					if (Object.op_Implicit((Object)(object)healthComponent) && Object.op_Implicit((Object)(object)healthComponent.body.teamComponent) && healthComponent.body.teamComponent.teamIndex == ((EntityState)this).characterBody.teamComponent.teamIndex && !healthComponent.body.HasBuff(ChefMod.ChefPlugin.foodBuff))
					{
						healthComponent.body.AddTimedBuff(ChefMod.ChefPlugin.foodBuff, 4f);
					}
				}
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)3;
		}
	}
	public class Julienne : BaseState
	{
		public static GameObject projectilePrefab;

		public static float damageCoefficient = 1.3f;

		public static float fireInterval = 0.08f;

		private float stopwatch = fireInterval;

		private int stabcount;

		private float lastUpdateTime;

		private bool knifeThrown = false;

		private Transform rightShoulder;

		private ChildLocator childLocator;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			lastUpdateTime = Time.time;
			stabcount = (int)(16f * base.attackSpeedStat);
			childLocator = ((EntityState)this).GetModelChildLocator();
			rightShoulder = childLocator.FindChild("RightShoulder");
			((BaseState)this).StartAimMode(2f, false);
			((EntityState)this).PlayAnimation("Gesture, Override", "AltPrimary");
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (stabcount > 0)
			{
				stopwatch += Time.time - lastUpdateTime;
				lastUpdateTime = Time.time;
				float num = fireInterval / base.attackSpeedStat;
				if (stopwatch > num)
				{
					stopwatch -= num;
					stabcount--;
					Throw();
				}
			}
			else
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Throw()
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: 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_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: 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_00ee: 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)
			Util.PlaySound("Play_ChefMod_Cleaver_Throw", ((EntityState)this).gameObject);
			if (!knifeThrown)
			{
				knifeThrown = true;
				((Component)rightShoulder).gameObject.SetActive(false);
			}
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = projectilePrefab;
				val.position = ((Ray)(ref aimRay)).origin;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
				val.owner = ((EntityState)this).gameObject;
				val.damage = base.damageStat * Slice.damageCoefficient;
				val.force = (1.5f + base.attackSpeedStat) * 3f;
				val.crit = ((BaseState)this).RollCrit();
				val.damageColorIndex = (DamageColorIndex)0;
				((FireProjectileInfo)(ref val)).speedOverride = 160f;
				((FireProjectileInfo)(ref val)).fuseOverride = -1f;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
			}
		}

		public override void OnExit()
		{
			((Component)rightShoulder).gameObject.SetActive(true);
			((EntityState)this).PlayAnimation("Gesture, Override", "AltPrimaryEnd");
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	internal class Mince : BaseState
	{
		public static float baseDuration = 0.76f;

		public static float baseThrowDelay = 0.259f;

		public static float damageCoefficient = 1.2f;

		private float throwDelay;

		private float duration;

		private bool hasThrown;

		public static int verticalIntensity = 2;

		public static float horizontalIntensity = 1f;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			throwDelay = baseThrowDelay / base.attackSpeedStat;
			((EntityState)this).PlayAnimation("Gesture, Override", "PrimaryBoosted", "PrimaryCleaver.playbackRate", duration, 0f);
			((BaseState)this).StartAimMode(2f, false);
		}

		private void Throw()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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_009a: 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_009e: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: 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_0183: 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)
			if (((EntityState)this).isAuthority)
			{
				bool crit = ((BaseState)this).RollCrit();
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = Cleaver.projectilePrefab;
				val.position = ((EntityState)this).characterBody.corePosition;
				val.owner = ((EntityState)this).gameObject;
				val.damage = base.damageStat * damageCoefficient;
				val.force = 50f;
				val.crit = crit;
				val.damageColorIndex = (DamageColorIndex)0;
				val.target = null;
				((FireProjectileInfo)(ref val)).speedOverride = 16f;
				((FireProjectileInfo)(ref val)).fuseOverride = -1f;
				FireProjectileInfo val2 = val;
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 direction = ((Ray)(ref aimRay)).direction;
				direction.y = 0f;
				((Vector3)(ref direction)).Normalize();
				float num = Mathf.Atan2(direction.z, direction.x);
				Vector3 val3 = default(Vector3);
				for (int i = -1 * verticalIntensity; i <= verticalIntensity; i++)
				{
					float num2 = 0f;
					if (verticalIntensity != 0)
					{
						num2 = (float)i * (1f / (2f * (float)verticalIntensity)) * MathF.PI;
					}
					float num3 = Mathf.Cos(num2);
					int num4 = Mathf.Max(1, Mathf.FloorToInt(horizontalIntensity * MathF.PI * 2f * num3));
					for (int j = 0; j < num4; j++)
					{
						float num5 = num + MathF.PI * 2f * ((float)j / (float)num4);
						((Vector3)(ref val3))..ctor(num3 * Mathf.Cos(num5), Mathf.Sin(num2), num3 * Mathf.Sin(num5));
						val2.rotation = Util.QuaternionSafeLookRotation(val3);
						ProjectileManager.instance.FireProjectile(val2);
					}
				}
			}
			hasThrown = true;
			Util.PlaySound("Play_ChefMod_Cleaver_Throw", ((EntityState)this).gameObject);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (!hasThrown)
			{
				if (((EntityState)this).fixedAge > throwDelay)
				{
					Throw();
				}
			}
			else if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	internal class Cleaver : BaseSkillState
	{
		public static GameObject projectilePrefab;

		public static float damageCoefficient = 1.5f;

		public float baseDuration = 0.52f;

		public float throwTime = 0.38f;

		private float duration;

		private bool hasThrown;

		private ChildLocator childLocator;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			((EntityState)this).PlayCrossfade("Gesture, Override", "Primary", "PrimaryCleaver.playbackRate", duration, 0.05f);
			childLocator = ((EntityState)this).GetModelChildLocator();
			((BaseState)this).StartAimMode(2f, false);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge > duration * throwTime && !hasThrown)
			{
				hasThrown = true;
				Throw();
			}
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Throw()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: 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_006e: 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_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).isAuthority)
			{
				Ray aimRay = ((BaseState)this).GetAimRay();
				Vector3 val = new Vector3(((Ray)(ref aimRay)).direction.z, 0f, -1f * ((Ray)(ref aimRay)).direction.x);
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				FireProjectileInfo val2 = default(FireProjectileInfo);
				val2.projectilePrefab = projectilePrefab;
				val2.position = ((Ray)(ref aimRay)).origin;
				val2.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
				val2.owner = ((EntityState)this).gameObject;
				val2.damage = ((EntityState)this).characterBody.damage * damageCoefficient;
				val2.force = 50f;
				val2.crit = ((BaseState)this).RollCrit();
				val2.damageColorIndex = (DamageColorIndex)0;
				val2.target = null;
				((FireProjectileInfo)(ref val2)).speedOverride = 16f;
				((FireProjectileInfo)(ref val2)).fuseOverride = -1f;
				FireProjectileInfo val3 = val2;
				((Component)childLocator.FindChild("Cleaver")).gameObject.SetActive(false);
				ProjectileManager.instance.FireProjectile(val3);
			}
			Util.PlaySound("Play_ChefMod_Cleaver_Throw", ((EntityState)this).gameObject);
		}

		public override void OnExit()
		{
			((Component)childLocator.FindChild("Cleaver")).gameObject.SetActive(true);
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	public class Slice : BaseState
	{
		public static GameObject projectilePrefab;

		public static float damageCoefficient = 1.2f;

		public bool returned = false;

		public bool knifeThrown = false;

		public KnifeHandler knifeHandler;

		private Transform rightShoulder;

		private ChildLocator childLocator;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			knifeHandler = ((EntityState)this).GetComponent<KnifeHandler>();
			childLocator = ((EntityState)this).GetModelChildLocator();
			rightShoulder = childLocator.FindChild("RightShoulder");
			((BaseState)this).StartAimMode(2f, false);
			((EntityState)this).PlayAnimation("Gesture, Override", "AltPrimary");
			ThrowKnife();
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && knifeThrown && !knifeHandler.knifeThrown)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((Component)rightShoulder).gameObject.SetActive(true);
			((EntityState)this).PlayAnimation("Gesture, Override", "AltPrimaryEnd");
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}

		private void ThrowKnife()
		{
			//IL_0046: 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_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			Util.PlaySound("Play_ChefMod_Cleaver_Throw", ((EntityState)this).gameObject);
			((Component)rightShoulder).gameObject.SetActive(false);
			if (((EntityState)this).isAuthority)
			{
				knifeHandler.ThrowKnife();
				knifeThrown = true;
				Ray aimRay = ((BaseState)this).GetAimRay();
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = projectilePrefab;
				val.position = ((Ray)(ref aimRay)).origin;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
				val.owner = ((EntityState)this).gameObject;
				val.damage = base.damageStat * damageCoefficient;
				val.force = (1.5f + base.attackSpeedStat) * 1.5f;
				val.crit = ((BaseState)this).RollCrit();
				val.damageColorIndex = (DamageColorIndex)0;
				((FireProjectileInfo)(ref val)).speedOverride = 160f;
				((FireProjectileInfo)(ref val)).fuseOverride = -1f;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
			}
		}
	}
	public class PrepBlaze : PrepSear
	{
		public override void NextState()
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new FireBlaze());
		}
	}
	public class FireBlaze : FireSear
	{
		public new static float damageCoefficient = 4.2f;

		public static GameObject ExplosionEffectBoosted;

		protected override GameObject explosion => ExplosionEffectBoosted;

		public override void PlaySound()
		{
			Util.PlaySound("Play_Chefmod_Sear2", ((EntityState)this).gameObject);
		}

		public override void ModifyBullet(BulletAttack ba)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			base.ModifyBullet(ba);
			ba.damage = ((BaseState)this).damageStat * damageCoefficient;
			ba.radius = 2.1f;
			DamageAPI.AddModdedDamageType(ba, ChefMod.ChefPlugin.chefFireballOnHit);
		}
	}
	public class PrepSear : BaseState
	{
		public static float baseDuration = 0.5f;

		public static string prepSoundString = "Play_ChefMod_Ding";

		private float duration;

		public bool specialBoosted = false;

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			Util.PlaySound(prepSoundString, ((EntityState)this).gameObject);
			((EntityState)this).PlayAnimation("Fullbody, Override", "Secondary", "Secondary.playbackRate", duration * 4f, 0f);
			((EntityState)this).PlayAnimation("Gesture, Override", "Secondary", "Secondary.playbackRate", duration * 4f, 0f);
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
			{
				((EntityState)this).characterBody.SetAimTimer(2f);
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				NextState();
			}
		}

		public virtual void NextState()
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new FireSear());
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	public class FireSear : BaseState
	{
		public static float blastEffectRadius = 2f;

		public static float blastSpacing;

		public static GameObject ExplosionEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/omnieffect/OmniExplosionVFX");

		public static GameObject hitEffectPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/impacteffects/missileexplosionvfx");

		public static float damageCoefficient = 2.6f;

		public static float force = 2400f;

		public static int bulletCount;

		public static float baseDuration = 0.5f;

		public static float recoilAmplitude = 1f;

		private float duration;

		public static ConfigEntry<bool> useSelfKnockback;

		public static float procCoefficient = 1f;

		public static Vector3 flameScale = new Vector3(0.14f, 0.14f, 0.07f);

		private static Vector3 flameEffectOffset = new Vector3(0f, 0.012f, 0.015f);

		public static GameObject flamethrowerEffectPrefab = null;

		private Transform flamethrowerTransform;

		private ChildLocator childLocator;

		protected virtual GameObject explosion => ExplosionEffectPrefab;

		public virtual void PlaySound()
		{
			Util.PlaySound("Play_Chefmod_Sear", ((EntityState)this).gameObject);
		}

		public override void OnEnter()
		{
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: 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_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: 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_0108: 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_0110: 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_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0182: 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_0195: 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_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Expected O, but got Unknown
			//IL_01df: 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_023a: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration / base.attackSpeedStat;
			((BaseState)this).AddRecoil(-3f * recoilAmplitude, -5f * recoilAmplitude, -0.5f * recoilAmplitude, 0.5f * recoilAmplitude);
			PlaySound();
			Ray aimRay = ((BaseState)this).GetAimRay();
			EffectData val = new EffectData();
			val.scale = 2.9f;
			float num = 0f;
			while (num <= 48f)
			{
				num += blastEffectRadius + blastSpacing;
				Vector3 origin = ((Ray)(ref aimRay)).origin + ((Ray)(ref aimRay)).direction * num;
				val.origin = origin;
				EffectManager.SpawnEffect(explosion, val, false);
			}
			if (((EntityState)this).isAuthority)
			{
				((BaseState)this).StartAimMode(aimRay, 2f, false);
				BulletAttack val2 = new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = 0f,
					bulletCount = 1u,
					damage = damageCoefficient * base.damageStat,
					damageType = DamageTypeCombo.op_Implicit((DamageType)160),
					procCoefficient = procCoefficient,
					force = force,
					falloffModel = (FalloffModel)0,
					hitEffectPrefab = hitEffectPrefab,
					tracerEffectPrefab = null,
					isCrit = ((BaseState)this).RollCrit(),
					radius = 2f,
					smartCollision = true,
					maxDistance = 48f,
					stopperMask = ((LayerIndex)(ref LayerIndex.world)).collisionMask,
					hitMask = CommonMasks.bullet,
					queryTriggerInteraction = (QueryTriggerInteraction)0
				};
				val2.damageType.damageSource = (DamageSource)2;
				ModifyBullet(val2);
				val2.Fire();
				if (useSelfKnockback.Value && Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
				{
					((EntityState)this).characterBody.characterMotor.ApplyForce(-2000f * ((Ray)(ref aimRay)).direction, true, false);
				}
			}
		}

		public virtual void ModifyBullet(BulletAttack ba)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			DamageAPI.AddModdedDamageType(ba, ChefMod.ChefPlugin.chefSear);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			UpdateFlamethrowerEffect();
			if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			if (Object.op_Implicit((Object)(object)flamethrowerTransform))
			{
				EntityState.Destroy((Object)(object)((Component)flamethrowerTransform).gameObject);
			}
			((EntityState)this).OnExit();
		}

		private void UpdateFlamethrowerEffect()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)flamethrowerTransform))
			{
				Transform obj = flamethrowerTransform;
				Ray aimRay = ((BaseState)this).GetAimRay();
				obj.forward = ((Ray)(ref aimRay)).direction;
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}
	}
	internal class Meal : BaseSkillState
	{
		private class SkillStatus
		{
			public int stock;

			public float stopwatch;

			public SkillStatus(int stock, float stopwatch)
			{
				this.stock = stock;
				this.stopwatch = stopwatch;
			}
		}

		private int boostPrimary = 0;

		private int boostSecondary = 0;

		private int boostUtility = 0;

		private SkillStatus primaryStatus;

		private SkillStatus secondaryStatus;

		private SkillStatus utilityStatus;

		public bool playSound = true;

		public override void OnEnter()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).GetModelChildLocator().FindChild("Hat").localScale = Vector3.one * 1.4f;
			if (playSound)
			{
				Util.PlaySound("Play_ChefMod_Special", ((EntityState)this).gameObject);
			}
			if (((EntityState)this).isAuthority)
			{
				if ((Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.primaryDef)
				{
					primaryStatus = new SkillStatus(((EntityState)this).skillLocator.primary.stock, ((EntityState)this).skillLocator.primary.rechargeStopwatch);
					((EntityState)this).skillLocator.primary.SetSkillOverride((object)this, ChefMod.ChefPlugin.boostedPrimaryDef, (SkillOverridePriority)4);
					boostPrimary = 1;
				}
				else if ((Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.altPrimaryDef)
				{
					primaryStatus = new SkillStatus(((EntityState)this).skillLocator.primary.stock, ((EntityState)this).skillLocator.primary.rechargeStopwatch);
					((EntityState)this).skillLocator.primary.SetSkillOverride((object)this, ChefMod.ChefPlugin.boostedAltPrimaryDef, (SkillOverridePriority)4);
					boostPrimary = 1;
				}
				if ((Object)(object)((EntityState)this).skillLocator.secondary.baseSkill == (Object)(object)ChefMod.ChefPlugin.secondaryDef)
				{
					secondaryStatus = new SkillStatus(((EntityState)this).skillLocator.secondary.stock, ((EntityState)this).skillLocator.secondary.rechargeStopwatch);
					((EntityState)this).skillLocator.secondary.SetSkillOverride((object)this, ChefMod.ChefPlugin.boostedSecondaryDef, (SkillOverridePriority)4);
					boostSecondary = 1;
				}
				else if ((Object)(object)((EntityState)this).skillLocator.secondary.baseSkill == (Object)(object)ChefMod.ChefPlugin.altSecondaryDef)
				{
					secondaryStatus = new SkillStatus(((EntityState)this).skillLocator.secondary.stock, ((EntityState)this).skillLocator.secondary.rechargeStopwatch);
					((EntityState)this).skillLocator.secondary.SetSkillOverride((object)this, ChefMod.ChefPlugin.boostedAltSecondaryDef, (SkillOverridePriority)4);
					boostSecondary = 1;
				}
				if ((Object)(object)((EntityState)this).skillLocator.utility.baseSkill == (Object)(object)ChefMod.ChefPlugin.utilityDef)
				{
					utilityStatus = new SkillStatus(((EntityState)this).skillLocator.utility.stock, ((EntityState)this).skillLocator.utility.rechargeStopwatch);
					((EntityState)this).skillLocator.utility.SetSkillOverride((object)this, ChefMod.ChefPlugin.boostedUtilityDef, (SkillOverridePriority)4);
					boostUtility = 1;
				}
				((EntityState)this).skillLocator.primary.stock = ((EntityState)this).skillLocator.primary.maxStock;
				((EntityState)this).skillLocator.secondary.stock = ((EntityState)this).skillLocator.secondary.maxStock;
				((EntityState)this).skillLocator.utility.stock = ((EntityState)this).skillLocator.utility.maxStock;
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			int num = boostPrimary * ((EntityState)this).skillLocator.primary.maxStock + boostSecondary * ((EntityState)this).skillLocator.secondary.maxStock + boostUtility * ((EntityState)this).skillLocator.utility.maxStock;
			int num2 = boostPrimary * ((EntityState)this).skillLocator.primary.stock + boostSecondary * ((EntityState)this).skillLocator.secondary.stock + boostUtility * ((EntityState)this).skillLocator.utility.stock;
			if (num2 < num && ((EntityState)this).isAuthority)
			{
				NextState();
			}
		}

		public virtual void NextState()
		{
			((EntityState)this).outer.SetNextStateToMain();
		}

		public override void OnExit()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).GetModelChildLocator().FindChild("Hat").localScale = Vector3.one * 1f;
			if (((EntityState)this).isAuthority)
			{
				if (boostPrimary != 0)
				{
					if ((Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.primaryDef)
					{
						((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)this, ChefMod.ChefPlugin.boostedPrimaryDef, (SkillOverridePriority)4);
					}
					else if ((Object)(object)((EntityState)this).skillLocator.primary.baseSkill == (Object)(object)ChefMod.ChefPlugin.altPrimaryDef)
					{
						((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)this, ChefMod.ChefPlugin.boostedAltPrimaryDef, (SkillOverridePriority)4);
					}
					((EntityState)this).skillLocator.primary.stock = primaryStatus.stock;
					((EntityState)this).skillLocator.primary.rechargeStopwatch = primaryStatus.stopwatch;
				}
				if (boostSecondary != 0)
				{
					if ((Object)(object)((EntityState)this).skillLocator.secondary.baseSkill == (Object)(object)ChefMod.ChefPlugin.secondaryDef)
					{
						((EntityState)this).skillLocator.secondary.UnsetSkillOverride((object)this, ChefMod.ChefPlugin.boostedSecondaryDef, (SkillOverridePriority)4);
					}
					else if ((Object)(object)((EntityState)this).skillLocator.secondary.baseSkill == (Object)(object)ChefMod.ChefPlugin.altSecondaryDef)
					{
						((EntityState)this).skillLocator.secondary.UnsetSkillOverride((object)this, ChefMod.ChefPlugin.boostedAltSecondaryDef, (SkillOverridePriority)4);
					}
					((EntityState)this).skillLocator.secondary.stock = secondaryStatus.stock;
					((EntityState)this).skillLocator.secondary.rechargeStopwatch = secondaryStatus.stopwatch;
				}
				if (boostUtility != 0)
				{
					((EntityState)this).skillLocator.utility.UnsetSkillOverride((object)this, ChefMod.ChefPlugin.boostedUtilityDef, (SkillOverridePriority)4);
					((EntityState)this).skillLocator.utility.stock = utilityStatus.stock;
					((EntityState)this).skillLocator.utility.rechargeStopwatch = utilityStatus.stopwatch;
				}
			}
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)1;
		}
	}
	internal class MealScepter : Meal
	{
		public override void NextState()
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new Meal
			{
				playSound = false
			});
		}
	}
	public class Marinate : BaseState
	{
		public static float buffOverlapDuration = 0.1f;

		public static float baseDuration = 1.5f;

		private float duration;

		public float speedMultiplier = 2f;

		private float buffOverlapStopwatch;

		private Vector3 idealDirection;

		private ChildLocator childLocator;

		private EmissionModule emissionator;

		private float lastUpdateTime;

		private float oilSpillTimer;

		private bool isCrit;

		public override void OnEnter()
		{
			//IL_0057: 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)
			((BaseState)this).OnEnter();
			isCrit = ((BaseState)this).RollCrit();
			oilSpillTimer = 0f;
			lastUpdateTime = Time.time;
			duration = baseDuration;
			childLocator = ((EntityState)this).GetModelChildLocator();
			emissionator = ((Component)childLocator.FindChild("OilParticles")).GetComponent<ParticleSystem>().emission;
			if (((EntityState)this).isAuthority)
			{
				((EmissionModule)(ref emissionator)).enabled = true;
				((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal;
				((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
				if (!((EntityState)this).characterMotor.isGrounded)
				{
					((EntityState)this).characterMotor.velocity.y = 15f;
				}
				((EntityState)this).PlayAnimation("Fullbody, Override", "UtilityStart");
			}
		}

		public override void FixedUpdate()
		{
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			float num = Time.time - lastUpdateTime;
			lastUpdateTime = Time.time;
			if (((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
				return;
			}
			if (((EntityState)this).isAuthority)
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
				{
					((EntityState)this).characterBody.isSprinting = true;
				}
				UpdateDirection();
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
				{
					((EntityState)this).characterDirection.moveVector = idealDirection;
					if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.disableAirControlUntilCollision)
					{
						CharacterMotor characterMotor = ((EntityState)this).characterMotor;
						characterMotor.rootMotion += GetIdealVelocity() * num;
					}
				}
				if (oilSpillTimer <= 0f)
				{
					Vector3 idealVelocity = GetIdealVelocity();
					float num2 = ((Vector3)(ref idealVelocity)).magnitude / ((EntityState)this).characterBody.moveSpeed;
					int num3 = Mathf.FloorToInt(4f * num2);
					oilSpillTimer = (float)num3 / 60f;
					FireProjectileInfo val = default(FireProjectileInfo);
					val.projectilePrefab = OilSlick.projectilePrefab;
					val.position = ((EntityState)this).characterBody.corePosition;
					val.rotation = Quaternion.identity;
					val.owner = ((EntityState)this).gameObject;
					val.damage = ((EntityState)this).characterBody.damage * 0.25f;
					val.crit = isCrit;
					FireProjectileInfo val2 = val;
					ProjectileManager.instance.FireProjectile(val2);
				}
				else
				{
					oilSpillTimer -= num;
				}
			}
			if (NetworkServer.active)
			{
				buffOverlapStopwatch += num;
				if (buffOverlapStopwatch >= OilSlick.buffOverlapDuration)
				{
					buffOverlapStopwatch -= OilSlick.buffOverlapDuration;
					ApplyOilServer();
				}
			}
		}

		private void ApplyOilServer()
		{
			//IL_000d: 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_009f: 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)
			List<HealthComponent> list = new List<HealthComponent>();
			Collider[] array = Physics.OverlapSphere(((EntityState)this).transform.position, 12f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask));
			for (int i = 0; i < array.Length; i++)
			{
				HurtBox component = ((Component)array[i]).GetComponent<HurtBox>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.healthComponent) && !list.Contains(component.healthComponent))
				{
					list.Add(component.healthComponent);
					if (Object.op_Implicit((Object)(object)component.healthComponent.body.teamComponent) && component.healthComponent.body.teamComponent.teamIndex != ((BaseState)this).GetTeam())
					{
						component.healthComponent.body.AddTimedBuff(ChefMod.ChefPlugin.oilBuff, 4f);
					}
				}
			}
		}

		public override void OnExit()
		{
			((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
			((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers();
			((EmissionModule)(ref emissionator)).enabled = false;
			((EntityState)this).PlayAnimation("Fullbody, Override", "UtilityEnd");
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private void UpdateDirection()
		{
			//IL_0017: 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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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_0046: 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_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank))
			{
				Vector2 val = Util.Vector3XZToVector2XY(((EntityState)this).inputBank.moveVector);
				if (val != Vector2.zero)
				{
					((Vector2)(ref val)).Normalize();
					Vector3 val2 = new Vector3(val.x, 0f, val.y);
					idealDirection = ((Vector3)(ref val2)).normalized;
				}
			}
		}

		private Vector3