Decompiled source of ImprovedSurvivorAI v1.4.0

ImprovedSurvivorAI/ImprovedSurvivorAI.dll

Decompiled 2 weeks ago
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Captain.Weapon;
using EntityStates.Chef;
using EntityStates.Seeker;
using EntityStates.Toolbot;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.Chef;
using On.EntityStates.Seeker;
using On.EntityStates.Toolbot;
using On.RoR2;
using On.RoR2.CharacterAI;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("ImprovedSurvivorAI")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ImprovedSurvivorAI")]
[assembly: AssemblyTitle("ImprovedSurvivorAI")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace ImprovedSurvivorAI;

internal static class Log
{
	private static ManualLogSource _logSource;

	internal static void Init(ManualLogSource logSource)
	{
		_logSource = logSource;
	}

	internal static void Debug(object data)
	{
		_logSource.LogDebug(data);
	}

	internal static void Error(object data)
	{
		_logSource.LogError(data);
	}

	internal static void Fatal(object data)
	{
		_logSource.LogFatal(data);
	}

	internal static void Info(object data)
	{
		_logSource.LogInfo(data);
	}

	internal static void Message(object data)
	{
		_logSource.LogMessage(data);
	}

	internal static void Warning(object data)
	{
		_logSource.LogWarning(data);
	}
}
[BepInPlugin("Samuel17.ImprovedSurvivorAI", "ImprovedSurvivorAI", "1.4.0")]
public class Main : BaseUnityPlugin
{
	public static List<GameObject> survivorMasterPrefabs = new List<GameObject>();

	public static List<CharacterMaster> activeSurvivorMasters = new List<CharacterMaster>();

	public static bool enableCaptainBeacons = true;

	public static bool walkerTurretChanges = true;

	public static bool walkerTurretSprint = true;

	public static float walkerTurretRange = 35f;

	public static EntityStateConfiguration walkerTurretBeam = Addressables.LoadAssetAsync<EntityStateConfiguration>((object)"RoR2/Base/Engi/EntityStates.EngiTurret.EngiTurretWeapon.FireBeam.asset").WaitForCompletion();

	public void Awake()
	{
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Expected O, but got Unknown
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Expected O, but got Unknown
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Expected O, but got Unknown
		Log.Init(((BaseUnityPlugin)this).Logger);
		enableCaptainBeacons = ((BaseUnityPlugin)this).Config.Bind<bool>("Captain", "Enable Supply Beacons", true, "Minion Captains will drop both Supply Beacons as soon as they spawn.").Value;
		walkerTurretChanges = ((BaseUnityPlugin)this).Config.Bind<bool>("Mobile Turrets", "Enable Mobile Turret Changes", true, "Enable the configs pertaining to Engineer's mobile turrets.").Value;
		walkerTurretSprint = ((BaseUnityPlugin)this).Config.Bind<bool>("Mobile Turrets", "Enable Mobile Turret Sprint", true, "Mobile turrets sprint when following their owner.").Value;
		walkerTurretRange = ((BaseUnityPlugin)this).Config.Bind<float>("Mobile Turrets", "Mobile Turret Range", 35f, "Mobile turrets start attacking from this far away. Set to a negative value for no change. Vanilla is 25.").Value;
		BaseAI.EvaluateSkillDrivers += new hook_EvaluateSkillDrivers(InfiniVisionLite);
		BullseyeSearch.GetResults += new hook_GetResults(IgnoreTheDead);
		GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal;
		CharacterMaster.onCharacterMasterDiscovered += CharacterMaster_onCharacterMasterDiscovered;
		CharacterMaster.onCharacterMasterLost += CharacterMaster_onCharacterMasterLost;
		CharacterMaster.SetUpGummyClone += new hook_SetUpGummyClone(GummyCloneTargeting);
		AdjustVanillaSurvivors();
		AdjustWalkerTurrets();
	}

	private void AdjustVanillaSurvivors()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_00b8: 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_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_0109: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: 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_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_017b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0213: Unknown result type (might be due to invalid IL or missing references)
		//IL_0218: Unknown result type (might be due to invalid IL or missing references)
		//IL_0239: Unknown result type (might be due to invalid IL or missing references)
		//IL_023e: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0264: Unknown result type (might be due to invalid IL or missing references)
		//IL_0285: Unknown result type (might be due to invalid IL or missing references)
		//IL_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val);
		new CommandoAI(val);
		GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val2);
		new HuntressAI(val2);
		GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2MonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val3);
		new BanditAI(val3);
		GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/ToolbotMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val4);
		new MultAI(val4);
		GameObject val5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val5);
		new EngineerAI(val5);
		GameObject val6 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val6);
		new ArtificerAI(val6);
		GameObject val7 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val7);
		new MercenaryAI(val7);
		GameObject val8 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Treebot/TreebotMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val8);
		new RexAI(val8);
		GameObject val9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Loader/LoaderMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val9);
		new LoaderAI(val9);
		GameObject val10 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val10);
		new AcridAI(val10);
		GameObject val11 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val11);
		new CaptainAI(val11, enableCaptainBeacons);
		GameObject val12 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/RailgunnerMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val12);
		new RailgunnerAI(val12);
		GameObject val13 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val13);
		new VoidFiendAI(val13);
		GameObject val14 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Seeker/SeekerMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val14);
		new SeekerAI(val14);
		GameObject val15 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/FalseSon/FalseSonMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val15);
		new FalseSonAI(val15);
		GameObject val16 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val16);
		new ChefAI(val16);
		GameObject val17 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drone Tech/DroneTechMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val17);
		new OperatorAI(val17);
		GameObject val18 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drifter/DrifterMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val18);
		new DrifterAI(val18);
		GameObject val19 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Heretic/HereticMonsterMaster.prefab").WaitForCompletion();
		ClearSkillDrivers(val19);
		new HereticAI(val19);
	}

	private void AdjustWalkerTurrets()
	{
		//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)
		if (!walkerTurretChanges)
		{
			return;
		}
		GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiWalkerTurretMaster.prefab").WaitForCompletion();
		AISkillDriver[] components = val.GetComponents<AISkillDriver>();
		AISkillDriver[] array = components;
		foreach (AISkillDriver val2 in array)
		{
			string customName = val2.customName;
			string text = customName;
			if (!(text == "ReturnToLeader"))
			{
				if (!(text == "ChaseAndFireAtEnemy"))
				{
					continue;
				}
				if (walkerTurretRange < 0f)
				{
					break;
				}
				val2.maxDistance = Mathf.Max(walkerTurretRange, 0f);
				for (int j = 0; j < walkerTurretBeam.serializedFieldsCollection.serializedFields.Length; j++)
				{
					if (walkerTurretBeam.serializedFieldsCollection.serializedFields[j].fieldName == "maxDistance")
					{
						walkerTurretBeam.serializedFieldsCollection.serializedFields[j].fieldValue.stringValue = val2.maxDistance.ToString();
					}
				}
			}
			else if (val2.minDistance == 6f && walkerTurretSprint)
			{
				val2.shouldSprint = true;
			}
		}
	}

	private void ClearSkillDrivers(GameObject survivorMaster)
	{
		AISkillDriver[] components = survivorMaster.GetComponents<AISkillDriver>();
		AISkillDriver[] array = components;
		foreach (AISkillDriver val in array)
		{
			Object.Destroy((Object)(object)val);
		}
		survivorMasterPrefabs.Add(survivorMaster);
		Log.Message("Added " + ((Object)survivorMaster).name + " to the list of Survivor masters.");
	}

	private SkillDriverEvaluation InfiniVisionLite(orig_EvaluateSkillDrivers orig, BaseAI self)
	{
		//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_0068: Unknown result type (might be due to invalid IL or missing references)
		if (IsSurvivorMaster(self) && Object.op_Implicit((Object)(object)self.body) && (!Object.op_Implicit((Object)(object)self.currentEnemy.gameObject) || !Object.op_Implicit((Object)(object)self.currentEnemy.healthComponent) || self.currentEnemy.healthComponent.alive))
		{
			self.ForceAcquireNearestEnemyIfNoCurrentEnemy();
		}
		return orig.Invoke(self);
	}

	private IEnumerable<HurtBox> IgnoreTheDead(orig_GetResults orig, BullseyeSearch self)
	{
		_ = self.candidatesEnumerable;
		self.candidatesEnumerable.RemoveAll((CandidateInfo candidateInfo) => !candidateInfo.hurtBox.healthComponent.alive);
		return orig.Invoke(self);
	}

	private void GlobalEventManager_onCharacterDeathGlobal(DamageReport damageReport)
	{
		foreach (CharacterMaster activeSurvivorMaster in activeSurvivorMasters)
		{
			CharacterBody victimBody = damageReport.victimBody;
			BaseAI component = ((Component)activeSurvivorMaster).GetComponent<BaseAI>();
			if (Object.op_Implicit((Object)(object)component) && component.currentEnemy != null && (Object)(object)component.currentEnemy.characterBody == (Object)(object)victimBody)
			{
				component.currentEnemy.Reset();
			}
		}
	}

	private void CharacterMaster_onCharacterMasterDiscovered(CharacterMaster master)
	{
		if (IsSurvivorMasterAlt(master))
		{
			activeSurvivorMasters.Add(master);
		}
	}

	private void CharacterMaster_onCharacterMasterLost(CharacterMaster master)
	{
		activeSurvivorMasters.Remove(master);
	}

	private void GummyCloneTargeting(orig_SetUpGummyClone orig, CharacterMaster self)
	{
		orig.Invoke(self);
		BaseAI component = ((Component)self).GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component) && IsSurvivorMaster(component))
		{
			component.copyLeaderTarget = true;
		}
	}

	public bool IsSurvivorMaster(BaseAI self)
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.master))
		{
			GameObject masterPrefab = MasterCatalog.GetMasterPrefab(self.master.masterIndex);
			if (Object.op_Implicit((Object)(object)masterPrefab) && survivorMasterPrefabs.Contains(masterPrefab))
			{
				return true;
			}
		}
		return false;
	}

	public bool IsSurvivorMasterAlt(CharacterMaster self)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		GameObject masterPrefab = MasterCatalog.GetMasterPrefab(self.masterIndex);
		if (Object.op_Implicit((Object)(object)masterPrefab) && survivorMasterPrefabs.Contains(masterPrefab))
		{
			return true;
		}
		return false;
	}
}
internal class AcridAI
{
	public static SkillDef spitSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoSpit.asset").WaitForCompletion();

	public static SkillDef biteSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoBite.asset").WaitForCompletion();

	public AcridAI(GameObject masterObject)
	{
		//IL_004a: 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_0091: 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_00bb: 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_00de: 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_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_019a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: 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_01d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0230: Unknown result type (might be due to invalid IL or missing references)
		//IL_0238: Unknown result type (might be due to invalid IL or missing references)
		//IL_0260: Unknown result type (might be due to invalid IL or missing references)
		//IL_0270: Unknown result type (might be due to invalid IL or missing references)
		//IL_0288: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_030c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0324: Unknown result type (might be due to invalid IL or missing references)
		//IL_035c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0364: Unknown result type (might be due to invalid IL or missing references)
		//IL_038c: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0400: Unknown result type (might be due to invalid IL or missing references)
		//IL_0428: Unknown result type (might be due to invalid IL or missing references)
		//IL_0438: Unknown result type (might be due to invalid IL or missing references)
		//IL_0450: Unknown result type (might be due to invalid IL or missing references)
		//IL_0488: Unknown result type (might be due to invalid IL or missing references)
		//IL_0490: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0520: Unknown result type (might be due to invalid IL or missing references)
		//IL_0528: Unknown result type (might be due to invalid IL or missing references)
		//IL_0550: Unknown result type (might be due to invalid IL or missing references)
		//IL_0560: Unknown result type (might be due to invalid IL or missing references)
		//IL_0578: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0610: Unknown result type (might be due to invalid IL or missing references)
		//IL_0648: Unknown result type (might be due to invalid IL or missing references)
		//IL_0650: Unknown result type (might be due to invalid IL or missing references)
		//IL_0678: Unknown result type (might be due to invalid IL or missing references)
		//IL_0690: Unknown result type (might be due to invalid IL or missing references)
		//IL_06a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0710: Unknown result type (might be due to invalid IL or missing references)
		BaseAI component = masterObject.GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component))
		{
			component.fullVision = true;
			component.neverRetaliateFriendlies = true;
			component.aimVectorDampTime = 0.05f;
			component.aimVectorMaxSpeed = 720f;
		}
		AISkillDriver val = masterObject.AddComponent<AISkillDriver>();
		val.skillSlot = (SkillSlot)3;
		val.requireSkillReady = true;
		val.requireEquipmentReady = false;
		val.moveTargetType = (TargetType)0;
		val.minDistance = 0f;
		val.maxDistance = 150f;
		val.selectionRequiresTargetLoS = true;
		val.activationRequiresTargetLoS = true;
		val.activationRequiresAimConfirmation = true;
		val.movementType = (MovementType)2;
		val.aimType = (AimType)2;
		val.ignoreNodeGraph = false;
		val.noRepeat = true;
		val.shouldSprint = true;
		val.shouldFireEquipment = false;
		val.buttonPressType = (ButtonPressType)2;
		AISkillDriver val2 = masterObject.AddComponent<AISkillDriver>();
		val2.skillSlot = (SkillSlot)2;
		val2.requireSkillReady = true;
		val2.requireEquipmentReady = false;
		val2.moveTargetType = (TargetType)0;
		val2.minDistance = 0f;
		val2.maxDistance = 30f;
		val2.selectionRequiresTargetLoS = true;
		val2.activationRequiresTargetLoS = true;
		val2.activationRequiresAimConfirmation = true;
		val2.movementType = (MovementType)1;
		val2.aimType = (AimType)2;
		val2.ignoreNodeGraph = true;
		val2.noRepeat = true;
		val2.shouldSprint = true;
		val2.shouldFireEquipment = false;
		val2.buttonPressType = (ButtonPressType)2;
		AISkillDriver val3 = masterObject.AddComponent<AISkillDriver>();
		val3.skillSlot = (SkillSlot)1;
		val3.requiredSkill = spitSkill;
		val3.requireSkillReady = true;
		val3.requireEquipmentReady = false;
		val3.moveTargetType = (TargetType)0;
		val3.minDistance = 0f;
		val3.maxDistance = 150f;
		val3.selectionRequiresTargetLoS = true;
		val3.activationRequiresTargetLoS = true;
		val3.activationRequiresAimConfirmation = true;
		val3.movementType = (MovementType)2;
		val3.aimType = (AimType)2;
		val3.ignoreNodeGraph = false;
		val3.noRepeat = false;
		val3.shouldSprint = true;
		val3.shouldFireEquipment = false;
		val3.buttonPressType = (ButtonPressType)2;
		AISkillDriver val4 = masterObject.AddComponent<AISkillDriver>();
		val4.skillSlot = (SkillSlot)1;
		val4.requiredSkill = biteSkill;
		val4.requireSkillReady = true;
		val4.requireEquipmentReady = false;
		val4.moveTargetType = (TargetType)0;
		val4.minDistance = 0f;
		val4.maxDistance = 5f;
		val4.selectionRequiresTargetLoS = false;
		val4.activationRequiresTargetLoS = false;
		val4.activationRequiresAimConfirmation = true;
		val4.movementType = (MovementType)1;
		val4.aimType = (AimType)2;
		val4.ignoreNodeGraph = true;
		val4.noRepeat = false;
		val4.shouldSprint = true;
		val4.shouldFireEquipment = false;
		val4.buttonPressType = (ButtonPressType)2;
		AISkillDriver val5 = masterObject.AddComponent<AISkillDriver>();
		val5.skillSlot = (SkillSlot)0;
		val5.requireSkillReady = true;
		val5.requireEquipmentReady = false;
		val5.moveTargetType = (TargetType)0;
		val5.minDistance = 0f;
		val5.maxDistance = 5f;
		val5.selectionRequiresTargetLoS = false;
		val5.activationRequiresTargetLoS = false;
		val5.activationRequiresAimConfirmation = false;
		val5.movementType = (MovementType)2;
		val5.aimType = (AimType)2;
		val5.ignoreNodeGraph = true;
		val5.noRepeat = false;
		val5.shouldSprint = false;
		val5.shouldFireEquipment = false;
		val5.buttonPressType = (ButtonPressType)0;
		val5.driverUpdateTimerOverride = 0.5f;
		AISkillDriver val6 = masterObject.AddComponent<AISkillDriver>();
		val6.skillSlot = (SkillSlot)0;
		val6.requireSkillReady = true;
		val6.requireEquipmentReady = false;
		val6.moveTargetType = (TargetType)0;
		val6.minDistance = 0f;
		val6.maxDistance = 10f;
		val6.selectionRequiresTargetLoS = false;
		val6.activationRequiresTargetLoS = false;
		val6.activationRequiresAimConfirmation = false;
		val6.movementType = (MovementType)1;
		val6.aimType = (AimType)2;
		val6.ignoreNodeGraph = true;
		val6.noRepeat = false;
		val6.shouldSprint = false;
		val6.shouldFireEquipment = false;
		val6.buttonPressType = (ButtonPressType)0;
		val6.driverUpdateTimerOverride = 0.5f;
		AISkillDriver val7 = masterObject.AddComponent<AISkillDriver>();
		val7.skillSlot = (SkillSlot)2;
		val7.requireSkillReady = false;
		val7.requireEquipmentReady = false;
		val7.moveTargetType = (TargetType)0;
		val7.minDistance = 40f;
		val7.maxDistance = 80f;
		val7.selectionRequiresTargetLoS = true;
		val7.activationRequiresTargetLoS = true;
		val7.activationRequiresAimConfirmation = false;
		val7.movementType = (MovementType)2;
		val7.aimType = (AimType)4;
		val7.ignoreNodeGraph = false;
		val7.noRepeat = false;
		val7.shouldSprint = true;
		val7.shouldFireEquipment = false;
		val7.buttonPressType = (ButtonPressType)2;
		AISkillDriver val8 = masterObject.AddComponent<AISkillDriver>();
		val8.skillSlot = (SkillSlot)(-1);
		val8.requireSkillReady = false;
		val8.requireEquipmentReady = false;
		val8.moveTargetType = (TargetType)0;
		val8.minDistance = 0f;
		val8.maxDistance = 400f;
		val8.selectionRequiresTargetLoS = false;
		val8.activationRequiresTargetLoS = false;
		val8.activationRequiresAimConfirmation = false;
		val8.movementType = (MovementType)1;
		val8.aimType = (AimType)2;
		val8.ignoreNodeGraph = false;
		val8.noRepeat = false;
		val8.shouldSprint = true;
		val8.shouldFireEquipment = false;
		val8.buttonPressType = (ButtonPressType)1;
		val8.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val9 = masterObject.AddComponent<AISkillDriver>();
		val9.skillSlot = (SkillSlot)2;
		val9.requireSkillReady = true;
		val9.requireEquipmentReady = false;
		val9.moveTargetType = (TargetType)2;
		val9.minDistance = 40f;
		val9.maxDistance = float.PositiveInfinity;
		val9.selectionRequiresTargetLoS = false;
		val9.activationRequiresTargetLoS = false;
		val9.activationRequiresAimConfirmation = true;
		val9.movementType = (MovementType)1;
		val9.aimType = (AimType)4;
		val9.ignoreNodeGraph = false;
		val9.noRepeat = true;
		val9.shouldSprint = true;
		val9.shouldFireEquipment = false;
		val9.buttonPressType = (ButtonPressType)2;
		AISkillDriver val10 = masterObject.AddComponent<AISkillDriver>();
		val10.skillSlot = (SkillSlot)(-1);
		val10.requireSkillReady = false;
		val10.requireEquipmentReady = false;
		val10.moveTargetType = (TargetType)2;
		val10.minDistance = 15f;
		val10.maxDistance = float.PositiveInfinity;
		val10.selectionRequiresTargetLoS = false;
		val10.activationRequiresTargetLoS = false;
		val10.activationRequiresAimConfirmation = false;
		val10.movementType = (MovementType)1;
		val10.aimType = (AimType)3;
		val10.ignoreNodeGraph = false;
		val10.noRepeat = false;
		val10.shouldSprint = true;
		val10.shouldFireEquipment = false;
		val10.buttonPressType = (ButtonPressType)1;
		val10.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val11 = masterObject.AddComponent<AISkillDriver>();
		val11.skillSlot = (SkillSlot)(-1);
		val11.requireSkillReady = false;
		val11.requireEquipmentReady = false;
		val11.moveTargetType = (TargetType)2;
		val11.minDistance = 0f;
		val11.maxDistance = 15f;
		val11.selectionRequiresTargetLoS = false;
		val11.activationRequiresTargetLoS = false;
		val11.activationRequiresAimConfirmation = false;
		val11.movementType = (MovementType)0;
		val11.aimType = (AimType)3;
		val11.ignoreNodeGraph = false;
		val11.noRepeat = false;
		val11.shouldSprint = false;
		val11.shouldFireEquipment = false;
		val11.buttonPressType = (ButtonPressType)1;
		val11.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val12 = masterObject.AddComponent<AISkillDriver>();
		val12.skillSlot = (SkillSlot)(-1);
		val12.requireSkillReady = false;
		val12.requireEquipmentReady = false;
		val12.moveTargetType = (TargetType)0;
		val12.minDistance = 0f;
		val12.maxDistance = float.PositiveInfinity;
		val12.selectionRequiresTargetLoS = false;
		val12.activationRequiresTargetLoS = false;
		val12.activationRequiresAimConfirmation = false;
		val12.movementType = (MovementType)1;
		val12.aimType = (AimType)2;
		val12.ignoreNodeGraph = false;
		val12.noRepeat = false;
		val12.shouldSprint = true;
		val12.shouldFireEquipment = false;
		val12.buttonPressType = (ButtonPressType)1;
		val12.resetCurrentEnemyOnNextDriverSelection = true;
	}
}
public class ArtificerAI
{
	public static SkillDef nanoBombSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyNovaBomb.asset").WaitForCompletion();

	public static SkillDef nanoSpearSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyIceBomb.asset").WaitForCompletion();

	public static SkillDef flamethrowerSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyFlamethrower.asset").WaitForCompletion();

	public static SkillDef ionSurgeSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyFlyUp.asset").WaitForCompletion();

	public ArtificerAI(GameObject masterObject)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Expected O, but got Unknown
		//IL_005c: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: 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_0170: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c2: 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_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_0207: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0263: Unknown result type (might be due to invalid IL or missing references)
		//IL_026b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0293: Unknown result type (might be due to invalid IL or missing references)
		//IL_02af: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_030b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0313: Unknown result type (might be due to invalid IL or missing references)
		//IL_033b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0357: Unknown result type (might be due to invalid IL or missing references)
		//IL_036f: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03af: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_040b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0443: Unknown result type (might be due to invalid IL or missing references)
		//IL_044b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0473: Unknown result type (might be due to invalid IL or missing references)
		//IL_048f: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04df: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_050f: Unknown result type (might be due to invalid IL or missing references)
		//IL_052b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0543: Unknown result type (might be due to invalid IL or missing references)
		//IL_057b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0583: Unknown result type (might be due to invalid IL or missing references)
		//IL_05ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0613: Unknown result type (might be due to invalid IL or missing references)
		//IL_061b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0643: Unknown result type (might be due to invalid IL or missing references)
		//IL_065b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0673: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_06db: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_070b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0743: Unknown result type (might be due to invalid IL or missing references)
		//IL_074b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0773: Unknown result type (might be due to invalid IL or missing references)
		//IL_078b: Unknown result type (might be due to invalid IL or missing references)
		//IL_07a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_07db: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_080b: Unknown result type (might be due to invalid IL or missing references)
		BaseAI component = masterObject.GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component))
		{
			component.fullVision = true;
			component.neverRetaliateFriendlies = true;
			component.aimVectorDampTime = 0.05f;
			component.aimVectorMaxSpeed = 720f;
		}
		BaseAI.FixedUpdate += new hook_FixedUpdate(SnapfreezeTargeting);
		AISkillDriver val = masterObject.AddComponent<AISkillDriver>();
		val.skillSlot = (SkillSlot)3;
		val.requiredSkill = ionSurgeSkill;
		val.requireSkillReady = true;
		val.requireEquipmentReady = false;
		val.moveTargetType = (TargetType)0;
		val.minDistance = 0f;
		val.maxDistance = 14f;
		val.selectionRequiresTargetLoS = true;
		val.activationRequiresTargetLoS = true;
		val.activationRequiresAimConfirmation = false;
		val.movementType = (MovementType)2;
		val.aimType = (AimType)2;
		val.ignoreNodeGraph = false;
		val.noRepeat = true;
		val.shouldSprint = true;
		val.shouldFireEquipment = false;
		val.buttonPressType = (ButtonPressType)2;
		AISkillDriver val2 = masterObject.AddComponent<AISkillDriver>();
		val2.skillSlot = (SkillSlot)2;
		val2.requireSkillReady = true;
		val2.requireEquipmentReady = false;
		val2.moveTargetType = (TargetType)3;
		val2.minDistance = 0f;
		val2.maxDistance = 100f;
		val2.selectionRequiresTargetLoS = false;
		val2.activationRequiresTargetLoS = false;
		val2.activationRequiresAimConfirmation = false;
		val2.movementType = (MovementType)2;
		val2.aimType = (AimType)1;
		val2.ignoreNodeGraph = false;
		val2.noRepeat = true;
		val2.shouldSprint = false;
		val2.shouldFireEquipment = false;
		val2.buttonPressType = (ButtonPressType)0;
		val2.driverUpdateTimerOverride = 0.5f;
		AISkillDriver val3 = masterObject.AddComponent<AISkillDriver>();
		val3.skillSlot = (SkillSlot)3;
		val3.requiredSkill = flamethrowerSkill;
		val3.requireSkillReady = true;
		val3.requireEquipmentReady = false;
		val3.moveTargetType = (TargetType)0;
		val3.minDistance = 0f;
		val3.maxDistance = 20f;
		val3.selectionRequiresTargetLoS = true;
		val3.activationRequiresTargetLoS = true;
		val3.activationRequiresAimConfirmation = false;
		val3.movementType = (MovementType)2;
		val3.aimType = (AimType)2;
		val3.ignoreNodeGraph = false;
		val3.noRepeat = true;
		val3.shouldSprint = false;
		val3.shouldFireEquipment = false;
		val3.buttonPressType = (ButtonPressType)0;
		val3.driverUpdateTimerOverride = 2f;
		AISkillDriver val4 = masterObject.AddComponent<AISkillDriver>();
		val4.skillSlot = (SkillSlot)1;
		val4.requiredSkill = nanoBombSkill;
		val4.requireSkillReady = true;
		val4.requireEquipmentReady = false;
		val4.moveTargetType = (TargetType)0;
		val4.minDistance = 0f;
		val4.maxDistance = 50f;
		val4.selectionRequiresTargetLoS = true;
		val4.activationRequiresTargetLoS = true;
		val4.activationRequiresAimConfirmation = false;
		val4.movementType = (MovementType)2;
		val4.aimType = (AimType)2;
		val4.ignoreNodeGraph = false;
		val4.noRepeat = false;
		val4.shouldSprint = false;
		val4.shouldFireEquipment = false;
		val4.buttonPressType = (ButtonPressType)0;
		val4.driverUpdateTimerOverride = 2.2f;
		AISkillDriver val5 = masterObject.AddComponent<AISkillDriver>();
		val5.skillSlot = (SkillSlot)1;
		val5.requiredSkill = nanoSpearSkill;
		val5.requireSkillReady = true;
		val5.requireEquipmentReady = false;
		val5.moveTargetType = (TargetType)0;
		val5.minDistance = 0f;
		val5.maxDistance = 150f;
		val5.selectionRequiresTargetLoS = false;
		val5.activationRequiresTargetLoS = false;
		val5.activationRequiresAimConfirmation = false;
		val5.movementType = (MovementType)2;
		val5.aimType = (AimType)2;
		val5.ignoreNodeGraph = false;
		val5.noRepeat = false;
		val5.shouldSprint = false;
		val5.shouldFireEquipment = false;
		val5.buttonPressType = (ButtonPressType)0;
		val5.driverUpdateTimerOverride = 2.2f;
		AISkillDriver val6 = masterObject.AddComponent<AISkillDriver>();
		val6.skillSlot = (SkillSlot)0;
		val6.requireSkillReady = false;
		val6.requireEquipmentReady = false;
		val6.moveTargetType = (TargetType)0;
		val6.minDistance = 0f;
		val6.maxDistance = 20f;
		val6.selectionRequiresTargetLoS = true;
		val6.activationRequiresTargetLoS = true;
		val6.activationRequiresAimConfirmation = false;
		val6.movementType = (MovementType)3;
		val6.aimType = (AimType)2;
		val6.ignoreNodeGraph = false;
		val6.noRepeat = false;
		val6.shouldSprint = false;
		val6.shouldFireEquipment = false;
		val6.buttonPressType = (ButtonPressType)0;
		val6.driverUpdateTimerOverride = 0.5f;
		AISkillDriver val7 = masterObject.AddComponent<AISkillDriver>();
		val7.skillSlot = (SkillSlot)0;
		val7.requireSkillReady = false;
		val7.requireEquipmentReady = false;
		val7.moveTargetType = (TargetType)0;
		val7.minDistance = 0f;
		val7.maxDistance = 60f;
		val7.selectionRequiresTargetLoS = true;
		val7.activationRequiresTargetLoS = true;
		val7.activationRequiresAimConfirmation = true;
		val7.movementType = (MovementType)2;
		val7.aimType = (AimType)2;
		val7.ignoreNodeGraph = false;
		val7.noRepeat = false;
		val7.shouldSprint = false;
		val7.shouldFireEquipment = false;
		val7.buttonPressType = (ButtonPressType)0;
		val7.driverUpdateTimerOverride = 0.5f;
		AISkillDriver val8 = masterObject.AddComponent<AISkillDriver>();
		val8.skillSlot = (SkillSlot)0;
		val8.requireSkillReady = false;
		val8.requireEquipmentReady = false;
		val8.moveTargetType = (TargetType)0;
		val8.minDistance = 0f;
		val8.maxDistance = 150f;
		val8.selectionRequiresTargetLoS = true;
		val8.activationRequiresTargetLoS = true;
		val8.activationRequiresAimConfirmation = true;
		val8.movementType = (MovementType)1;
		val8.aimType = (AimType)2;
		val8.ignoreNodeGraph = false;
		val8.noRepeat = false;
		val8.shouldSprint = false;
		val8.shouldFireEquipment = false;
		val8.buttonPressType = (ButtonPressType)0;
		val8.driverUpdateTimerOverride = 0.5f;
		AISkillDriver val9 = masterObject.AddComponent<AISkillDriver>();
		val9.skillSlot = (SkillSlot)(-1);
		val9.requireSkillReady = false;
		val9.requireEquipmentReady = false;
		val9.moveTargetType = (TargetType)0;
		val9.minDistance = 0f;
		val9.maxDistance = 400f;
		val9.selectionRequiresTargetLoS = false;
		val9.activationRequiresTargetLoS = false;
		val9.activationRequiresAimConfirmation = false;
		val9.movementType = (MovementType)1;
		val9.aimType = (AimType)2;
		val9.ignoreNodeGraph = false;
		val9.noRepeat = false;
		val9.shouldSprint = true;
		val9.shouldFireEquipment = false;
		val9.buttonPressType = (ButtonPressType)1;
		val9.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val10 = masterObject.AddComponent<AISkillDriver>();
		val10.skillSlot = (SkillSlot)(-1);
		val10.requireSkillReady = false;
		val10.requireEquipmentReady = false;
		val10.moveTargetType = (TargetType)2;
		val10.minDistance = 15f;
		val10.maxDistance = float.PositiveInfinity;
		val10.selectionRequiresTargetLoS = false;
		val10.activationRequiresTargetLoS = false;
		val10.activationRequiresAimConfirmation = false;
		val10.movementType = (MovementType)1;
		val10.aimType = (AimType)3;
		val10.ignoreNodeGraph = false;
		val10.noRepeat = false;
		val10.shouldSprint = true;
		val10.shouldFireEquipment = false;
		val10.buttonPressType = (ButtonPressType)1;
		val10.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val11 = masterObject.AddComponent<AISkillDriver>();
		val11.skillSlot = (SkillSlot)(-1);
		val11.requireSkillReady = false;
		val11.requireEquipmentReady = false;
		val11.moveTargetType = (TargetType)2;
		val11.minDistance = 0f;
		val11.maxDistance = 15f;
		val11.selectionRequiresTargetLoS = false;
		val11.activationRequiresTargetLoS = false;
		val11.activationRequiresAimConfirmation = false;
		val11.movementType = (MovementType)0;
		val11.aimType = (AimType)3;
		val11.ignoreNodeGraph = false;
		val11.noRepeat = false;
		val11.shouldSprint = false;
		val11.shouldFireEquipment = false;
		val11.buttonPressType = (ButtonPressType)1;
		val11.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val12 = masterObject.AddComponent<AISkillDriver>();
		val12.skillSlot = (SkillSlot)(-1);
		val12.requireSkillReady = false;
		val12.requireEquipmentReady = false;
		val12.moveTargetType = (TargetType)0;
		val12.minDistance = 0f;
		val12.maxDistance = float.PositiveInfinity;
		val12.selectionRequiresTargetLoS = false;
		val12.activationRequiresTargetLoS = false;
		val12.activationRequiresAimConfirmation = false;
		val12.movementType = (MovementType)1;
		val12.aimType = (AimType)2;
		val12.ignoreNodeGraph = false;
		val12.noRepeat = false;
		val12.shouldSprint = true;
		val12.shouldFireEquipment = false;
		val12.buttonPressType = (ButtonPressType)1;
		val12.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val13 = masterObject.AddComponent<AISkillDriver>();
		val13.skillSlot = (SkillSlot)(-1);
		val13.requireSkillReady = false;
		val13.requireEquipmentReady = false;
		val13.moveTargetType = (TargetType)3;
		val13.minDistance = 0f;
		val13.maxDistance = float.PositiveInfinity;
		val13.selectionRequiresTargetLoS = false;
		val13.activationRequiresTargetLoS = false;
		val13.activationRequiresAimConfirmation = false;
		val13.movementType = (MovementType)2;
		val13.aimType = (AimType)1;
		val13.ignoreNodeGraph = false;
		val13.noRepeat = false;
		val13.shouldSprint = false;
		val13.shouldFireEquipment = false;
		val13.buttonPressType = (ButtonPressType)1;
		val2.nextHighPriorityOverride = val13;
	}

	private void SnapfreezeTargeting(orig_FixedUpdate orig, BaseAI self)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: 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_01bf: 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_0171: 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_0187: Unknown result type (might be due to invalid IL or missing references)
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: 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_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		orig.Invoke(self);
		if (!(self.master.masterIndex == MasterCatalog.FindMasterIndex("MageMonsterMaster")) || !Object.op_Implicit((Object)(object)self.currentEnemy.gameObject) || !Object.op_Implicit((Object)(object)self.currentEnemy.characterBody))
		{
			return;
		}
		Vector3 value = Vector3.zero;
		bool flag = false;
		if (self.HasLOS(self.currentEnemy.gameObject.transform.position))
		{
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(self.currentEnemy.gameObject.transform.position, Vector3.down);
			float num = 8f + Mathf.Abs(self.currentEnemy.characterBody.transform.position.y - self.currentEnemy.characterBody.footPosition.y);
			RaycastHit val2 = default(RaycastHit);
			if (Physics.Raycast(val, ref val2, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)) && self.HasLOS(((RaycastHit)(ref val2)).point + Vector3.up * 0.05f))
			{
				flag = true;
				value = ((RaycastHit)(ref val2)).point + Vector3.up * 0.05f;
			}
		}
		if (flag)
		{
			self.customTarget._gameObject = self.currentEnemy.gameObject;
			self.customTarget.lastKnownBullseyePosition = value;
			self.customTarget.lastKnownBullseyePositionTime = FixedTimeStamp.now;
			self.customTarget.unset = false;
		}
		else
		{
			self.customTarget._gameObject = null;
			self.customTarget.lastKnownBullseyePosition = null;
			self.customTarget.lastKnownBullseyePositionTime = FixedTimeStamp.negativeInfinity;
			self.customTarget.unset = true;
		}
	}
}
internal class BanditAI
{
	public static SkillDef serratedDaggerSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/SlashBlade.asset").WaitForCompletion();

	public static SkillDef serratedShivSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/Bandit2SerratedShivs.asset").WaitForCompletion();

	public BanditAI(GameObject masterObject)
	{
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: 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_00a3: 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_00d4: 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_0126: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0150: Unknown result type (might be due to invalid IL or missing references)
		//IL_015e: 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_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Unknown result type (might be due to invalid IL or missing references)
		//IL_023b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0263: Unknown result type (might be due to invalid IL or missing references)
		//IL_0273: Unknown result type (might be due to invalid IL or missing references)
		//IL_028b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Unknown result type (might be due to invalid IL or missing references)
		//IL_031b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0353: Unknown result type (might be due to invalid IL or missing references)
		//IL_035b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0383: Unknown result type (might be due to invalid IL or missing references)
		//IL_0393: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0413: Unknown result type (might be due to invalid IL or missing references)
		//IL_043f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0457: Unknown result type (might be due to invalid IL or missing references)
		//IL_048f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0497: Unknown result type (might be due to invalid IL or missing references)
		//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_04eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0503: Unknown result type (might be due to invalid IL or missing references)
		//IL_053b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0543: Unknown result type (might be due to invalid IL or missing references)
		//IL_056b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0597: Unknown result type (might be due to invalid IL or missing references)
		//IL_05af: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_05ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_0617: Unknown result type (might be due to invalid IL or missing references)
		//IL_062f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0647: Unknown result type (might be due to invalid IL or missing references)
		//IL_067f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0687: Unknown result type (might be due to invalid IL or missing references)
		//IL_06af: Unknown result type (might be due to invalid IL or missing references)
		//IL_06cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_071f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0727: Unknown result type (might be due to invalid IL or missing references)
		//IL_074f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0767: Unknown result type (might be due to invalid IL or missing references)
		//IL_077f: Unknown result type (might be due to invalid IL or missing references)
		//IL_07b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_07bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0817: Unknown result type (might be due to invalid IL or missing references)
		//IL_084f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0857: Unknown result type (might be due to invalid IL or missing references)
		//IL_087f: Unknown result type (might be due to invalid IL or missing references)
		//IL_08ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_08fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0903: Unknown result type (might be due to invalid IL or missing references)
		//IL_092b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0943: Unknown result type (might be due to invalid IL or missing references)
		//IL_095b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0993: Unknown result type (might be due to invalid IL or missing references)
		//IL_099b: Unknown result type (might be due to invalid IL or missing references)
		//IL_09c3: Unknown result type (might be due to invalid IL or missing references)
		BaseAI component = masterObject.GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component))
		{
			component.fullVision = true;
			component.neverRetaliateFriendlies = true;
			component.aimVectorDampTime = 0.05f;
			component.aimVectorMaxSpeed = 720f;
		}
		AISkillDriver val = masterObject.AddComponent<AISkillDriver>();
		val.skillSlot = (SkillSlot)1;
		val.requiredSkill = serratedDaggerSkill;
		val.requireSkillReady = true;
		val.requireEquipmentReady = false;
		val.moveTargetType = (TargetType)0;
		val.minDistance = 0f;
		val.maxDistance = 5f;
		val.selectionRequiresTargetLoS = false;
		val.activationRequiresTargetLoS = false;
		val.activationRequiresAimConfirmation = true;
		val.movementType = (MovementType)2;
		val.aimType = (AimType)2;
		val.ignoreNodeGraph = false;
		val.noRepeat = false;
		val.shouldSprint = true;
		val.shouldFireEquipment = false;
		val.buttonPressType = (ButtonPressType)2;
		AISkillDriver val2 = masterObject.AddComponent<AISkillDriver>();
		val2.skillSlot = (SkillSlot)1;
		val2.requiredSkill = serratedShivSkill;
		val2.requireSkillReady = true;
		val2.requireEquipmentReady = false;
		val2.moveTargetType = (TargetType)0;
		val2.minDistance = 0f;
		val2.maxDistance = 60f;
		val2.selectionRequiresTargetLoS = true;
		val2.activationRequiresTargetLoS = true;
		val2.activationRequiresAimConfirmation = true;
		val2.movementType = (MovementType)2;
		val2.aimType = (AimType)2;
		val2.ignoreNodeGraph = false;
		val2.noRepeat = false;
		val2.shouldSprint = true;
		val2.shouldFireEquipment = false;
		val2.buttonPressType = (ButtonPressType)2;
		AISkillDriver val3 = masterObject.AddComponent<AISkillDriver>();
		val3.skillSlot = (SkillSlot)3;
		val3.requireSkillReady = true;
		val3.requireEquipmentReady = false;
		val3.moveTargetType = (TargetType)0;
		val3.minDistance = 0f;
		val3.maxDistance = 150f;
		val3.selectionRequiresTargetLoS = true;
		val3.activationRequiresTargetLoS = true;
		val3.activationRequiresAimConfirmation = true;
		val3.aimType = (AimType)2;
		val3.ignoreNodeGraph = false;
		val3.noRepeat = false;
		val3.shouldSprint = false;
		val3.shouldFireEquipment = false;
		val3.buttonPressType = (ButtonPressType)2;
		val3.driverUpdateTimerOverride = 0.7f;
		AISkillDriver val4 = masterObject.AddComponent<AISkillDriver>();
		val4.skillSlot = (SkillSlot)0;
		val4.requireSkillReady = true;
		val4.requireEquipmentReady = false;
		val4.moveTargetType = (TargetType)0;
		val4.minDistance = 0f;
		val4.maxDistance = 10f;
		val4.selectionRequiresTargetLoS = true;
		val4.activationRequiresTargetLoS = true;
		val4.activationRequiresAimConfirmation = true;
		val4.movementType = (MovementType)3;
		val4.aimType = (AimType)2;
		val4.ignoreNodeGraph = false;
		val4.noRepeat = false;
		val4.shouldSprint = false;
		val4.shouldFireEquipment = false;
		val4.buttonPressType = (ButtonPressType)0;
		AISkillDriver val5 = masterObject.AddComponent<AISkillDriver>();
		val5.skillSlot = (SkillSlot)0;
		val5.requireSkillReady = true;
		val5.requireEquipmentReady = false;
		val5.moveTargetType = (TargetType)0;
		val5.minDistance = 0f;
		val5.maxDistance = 30f;
		val5.selectionRequiresTargetLoS = true;
		val5.activationRequiresTargetLoS = true;
		val5.activationRequiresAimConfirmation = true;
		val5.movementType = (MovementType)2;
		val5.aimType = (AimType)2;
		val5.ignoreNodeGraph = false;
		val5.noRepeat = false;
		val5.shouldSprint = false;
		val5.shouldFireEquipment = false;
		val5.buttonPressType = (ButtonPressType)0;
		AISkillDriver val6 = masterObject.AddComponent<AISkillDriver>();
		val6.skillSlot = (SkillSlot)0;
		val6.requireSkillReady = true;
		val6.requireEquipmentReady = false;
		val6.moveTargetType = (TargetType)0;
		val6.minDistance = 0f;
		val6.maxDistance = 120f;
		val6.selectionRequiresTargetLoS = true;
		val6.activationRequiresTargetLoS = true;
		val6.activationRequiresAimConfirmation = true;
		val6.movementType = (MovementType)1;
		val6.aimType = (AimType)2;
		val6.ignoreNodeGraph = false;
		val6.noRepeat = false;
		val6.shouldSprint = false;
		val6.shouldFireEquipment = false;
		val6.buttonPressType = (ButtonPressType)0;
		AISkillDriver val7 = masterObject.AddComponent<AISkillDriver>();
		val7.skillSlot = (SkillSlot)2;
		val7.requireSkillReady = true;
		val7.requireEquipmentReady = false;
		val7.moveTargetType = (TargetType)0;
		val7.minDistance = 0f;
		val7.maxDistance = 15f;
		val7.selectionRequiresTargetLoS = false;
		val7.activationRequiresTargetLoS = false;
		val7.activationRequiresAimConfirmation = false;
		val7.movementType = (MovementType)1;
		val7.aimType = (AimType)2;
		val7.ignoreNodeGraph = false;
		val7.noRepeat = false;
		val7.shouldSprint = true;
		val7.shouldFireEquipment = false;
		val7.buttonPressType = (ButtonPressType)0;
		val7.selectionRequiresOnGround = true;
		val7.driverUpdateTimerOverride = 1f;
		val7.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val8 = masterObject.AddComponent<AISkillDriver>();
		val8.skillSlot = (SkillSlot)2;
		val8.requireSkillReady = true;
		val8.requireEquipmentReady = false;
		val8.moveTargetType = (TargetType)0;
		val8.minDistance = 0f;
		val8.maxDistance = 30f;
		val8.selectionRequiresTargetLoS = false;
		val8.activationRequiresTargetLoS = false;
		val8.activationRequiresAimConfirmation = false;
		val8.movementType = (MovementType)1;
		val8.aimType = (AimType)2;
		val8.ignoreNodeGraph = false;
		val8.noRepeat = false;
		val8.shouldSprint = true;
		val8.shouldFireEquipment = false;
		val8.buttonPressType = (ButtonPressType)0;
		val8.selectionRequiresOnGround = true;
		val8.driverUpdateTimerOverride = 2f;
		val8.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val9 = masterObject.AddComponent<AISkillDriver>();
		val9.skillSlot = (SkillSlot)2;
		val9.requireSkillReady = true;
		val9.requireEquipmentReady = false;
		val9.moveTargetType = (TargetType)0;
		val9.minDistance = 0f;
		val9.maxDistance = 400f;
		val9.selectionRequiresTargetLoS = false;
		val9.activationRequiresTargetLoS = false;
		val9.activationRequiresAimConfirmation = false;
		val9.movementType = (MovementType)1;
		val9.aimType = (AimType)2;
		val9.ignoreNodeGraph = false;
		val9.noRepeat = false;
		val9.shouldSprint = true;
		val9.shouldFireEquipment = false;
		val9.buttonPressType = (ButtonPressType)0;
		val9.selectionRequiresOnGround = true;
		val9.driverUpdateTimerOverride = 3f;
		val9.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val10 = masterObject.AddComponent<AISkillDriver>();
		val10.skillSlot = (SkillSlot)(-1);
		val10.requireSkillReady = false;
		val10.requireEquipmentReady = false;
		val10.moveTargetType = (TargetType)0;
		val10.minDistance = 0f;
		val10.maxDistance = 400f;
		val10.selectionRequiresTargetLoS = false;
		val10.activationRequiresTargetLoS = false;
		val10.activationRequiresAimConfirmation = false;
		val10.movementType = (MovementType)1;
		val10.aimType = (AimType)2;
		val10.ignoreNodeGraph = false;
		val10.noRepeat = false;
		val10.shouldSprint = true;
		val10.shouldFireEquipment = false;
		val10.buttonPressType = (ButtonPressType)1;
		val10.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val11 = masterObject.AddComponent<AISkillDriver>();
		val11.skillSlot = (SkillSlot)2;
		val11.requireSkillReady = true;
		val11.requireEquipmentReady = false;
		val11.moveTargetType = (TargetType)2;
		val11.minDistance = 40f;
		val11.maxDistance = float.PositiveInfinity;
		val11.selectionRequiresTargetLoS = false;
		val11.activationRequiresTargetLoS = false;
		val11.activationRequiresAimConfirmation = false;
		val11.movementType = (MovementType)1;
		val11.aimType = (AimType)2;
		val11.ignoreNodeGraph = false;
		val11.noRepeat = true;
		val11.shouldSprint = true;
		val11.shouldFireEquipment = false;
		val11.buttonPressType = (ButtonPressType)0;
		val11.selectionRequiresOnGround = true;
		val11.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val12 = masterObject.AddComponent<AISkillDriver>();
		val12.skillSlot = (SkillSlot)(-1);
		val12.requireSkillReady = false;
		val12.requireEquipmentReady = false;
		val12.moveTargetType = (TargetType)2;
		val12.minDistance = 15f;
		val12.maxDistance = float.PositiveInfinity;
		val12.selectionRequiresTargetLoS = false;
		val12.activationRequiresTargetLoS = false;
		val12.activationRequiresAimConfirmation = false;
		val12.movementType = (MovementType)1;
		val12.aimType = (AimType)3;
		val12.ignoreNodeGraph = false;
		val12.noRepeat = false;
		val12.shouldSprint = true;
		val12.shouldFireEquipment = false;
		val12.buttonPressType = (ButtonPressType)1;
		val12.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val13 = masterObject.AddComponent<AISkillDriver>();
		val13.skillSlot = (SkillSlot)(-1);
		val13.requireSkillReady = false;
		val13.requireEquipmentReady = false;
		val13.moveTargetType = (TargetType)2;
		val13.minDistance = 0f;
		val13.maxDistance = 15f;
		val13.selectionRequiresTargetLoS = false;
		val13.activationRequiresTargetLoS = false;
		val13.activationRequiresAimConfirmation = false;
		val13.movementType = (MovementType)0;
		val13.aimType = (AimType)3;
		val13.ignoreNodeGraph = false;
		val13.noRepeat = false;
		val13.shouldSprint = false;
		val13.shouldFireEquipment = false;
		val13.buttonPressType = (ButtonPressType)1;
		val13.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val14 = masterObject.AddComponent<AISkillDriver>();
		val14.skillSlot = (SkillSlot)2;
		val14.requireSkillReady = true;
		val14.requireEquipmentReady = false;
		val14.moveTargetType = (TargetType)0;
		val14.minDistance = 0f;
		val14.maxDistance = float.PositiveInfinity;
		val14.selectionRequiresTargetLoS = false;
		val14.activationRequiresTargetLoS = false;
		val14.activationRequiresAimConfirmation = false;
		val14.movementType = (MovementType)1;
		val14.aimType = (AimType)2;
		val14.ignoreNodeGraph = false;
		val14.noRepeat = false;
		val14.shouldSprint = true;
		val14.shouldFireEquipment = false;
		val14.buttonPressType = (ButtonPressType)0;
		val14.selectionRequiresOnGround = true;
		val14.driverUpdateTimerOverride = 3f;
		val14.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val15 = masterObject.AddComponent<AISkillDriver>();
		val15.skillSlot = (SkillSlot)(-1);
		val15.requireSkillReady = false;
		val15.requireEquipmentReady = false;
		val15.moveTargetType = (TargetType)0;
		val15.minDistance = 0f;
		val15.maxDistance = float.PositiveInfinity;
		val15.selectionRequiresTargetLoS = false;
		val15.activationRequiresTargetLoS = false;
		val15.activationRequiresAimConfirmation = false;
		val15.movementType = (MovementType)1;
		val15.aimType = (AimType)2;
		val15.ignoreNodeGraph = false;
		val15.noRepeat = false;
		val15.shouldSprint = true;
		val15.shouldFireEquipment = false;
		val15.buttonPressType = (ButtonPressType)1;
		val15.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val16 = masterObject.AddComponent<AISkillDriver>();
		val16.skillSlot = (SkillSlot)(-1);
		val16.requireSkillReady = false;
		val16.requireEquipmentReady = false;
		val16.moveTargetType = (TargetType)0;
		val16.minDistance = 0f;
		val16.maxDistance = float.PositiveInfinity;
		val16.selectionRequiresTargetLoS = false;
		val16.activationRequiresTargetLoS = false;
		val16.activationRequiresAimConfirmation = false;
		val16.movementType = (MovementType)2;
		val16.aimType = (AimType)2;
		val16.ignoreNodeGraph = false;
		val16.noRepeat = true;
		val16.shouldSprint = false;
		val16.shouldFireEquipment = false;
		val16.buttonPressType = (ButtonPressType)1;
		val4.nextHighPriorityOverride = val16;
		val5.nextHighPriorityOverride = val16;
		val6.nextHighPriorityOverride = val16;
	}
}
internal class CaptainAI
{
	public static SkillDef orbitalProbesSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CallAirstrike.asset").WaitForCompletion();

	public static SkillDef diabloStrikeSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CallAirstrikeAlt.asset").WaitForCompletion();

	public static CaptainOrbitalSkillDef callProbesSkill = Addressables.LoadAssetAsync<CaptainOrbitalSkillDef>((object)"RoR2/Base/Captain/PrepAirstrike.asset").WaitForCompletion();

	public static CaptainOrbitalSkillDef callDiabloSkill = Addressables.LoadAssetAsync<CaptainOrbitalSkillDef>((object)"RoR2/Base/Captain/PrepAirstrikeAlt.asset").WaitForCompletion();

	public static SkillDef supplyDropHealing = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CallSupplyDropHealing.asset").WaitForCompletion();

	public static SkillDef supplyDropShocking = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CallSupplyDropShocking.asset").WaitForCompletion();

	public static SkillDef supplyDropEquipment = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CallSupplyDropEquipmentRestock.asset").WaitForCompletion();

	public static SkillDef supplyDropHacking = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CallSupplyDropHacking.asset").WaitForCompletion();

	public static SkillDef[] supplyDropTypes = (SkillDef[])(object)new SkillDef[4] { supplyDropHealing, supplyDropShocking, supplyDropEquipment, supplyDropHacking };

	public CaptainAI(GameObject masterObject, bool enableCaptainBeacons)
	{
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Expected O, but got Unknown
		//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0217: Unknown result type (might be due to invalid IL or missing references)
		//IL_0249: Unknown result type (might be due to invalid IL or missing references)
		//IL_0250: Unknown result type (might be due to invalid IL or missing references)
		//IL_0273: Unknown result type (might be due to invalid IL or missing references)
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02da: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0418: Unknown result type (might be due to invalid IL or missing references)
		//IL_0433: Unknown result type (might be due to invalid IL or missing references)
		//IL_044b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0483: Unknown result type (might be due to invalid IL or missing references)
		//IL_048b: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0513: Unknown result type (might be due to invalid IL or missing references)
		//IL_051b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0543: Unknown result type (might be due to invalid IL or missing references)
		//IL_0553: Unknown result type (might be due to invalid IL or missing references)
		//IL_056b: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0633: Unknown result type (might be due to invalid IL or missing references)
		//IL_063b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0663: Unknown result type (might be due to invalid IL or missing references)
		//IL_067f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0697: Unknown result type (might be due to invalid IL or missing references)
		//IL_06cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_071b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0733: Unknown result type (might be due to invalid IL or missing references)
		//IL_076b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0773: Unknown result type (might be due to invalid IL or missing references)
		//IL_079b: Unknown result type (might be due to invalid IL or missing references)
		//IL_07b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_07cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0803: Unknown result type (might be due to invalid IL or missing references)
		//IL_080b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0833: Unknown result type (might be due to invalid IL or missing references)
		//IL_084b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0863: Unknown result type (might be due to invalid IL or missing references)
		//IL_089b: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_08cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_08e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_08fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0933: Unknown result type (might be due to invalid IL or missing references)
		//IL_093b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0963: Unknown result type (might be due to invalid IL or missing references)
		//IL_097b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0993: Unknown result type (might be due to invalid IL or missing references)
		//IL_09cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_09d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_09fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0318: Unknown result type (might be due to invalid IL or missing references)
		//IL_0330: Unknown result type (might be due to invalid IL or missing references)
		//IL_0368: Unknown result type (might be due to invalid IL or missing references)
		//IL_0370: Unknown result type (might be due to invalid IL or missing references)
		//IL_0398: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_013e: 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_019d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
		BaseAI component = masterObject.GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component))
		{
			component.fullVision = true;
			component.neverRetaliateFriendlies = true;
			component.aimVectorDampTime = 0.05f;
			component.aimVectorMaxSpeed = 720f;
		}
		if (enableCaptainBeacons)
		{
			SetupSupplyDrop.OnEnter += new hook_OnEnter(SupplyBeaconTargeting);
		}
		if (enableCaptainBeacons)
		{
			for (int i = 0; i < supplyDropTypes.Length; i++)
			{
				AISkillDriver val = masterObject.AddComponent<AISkillDriver>();
				val.skillSlot = (SkillSlot)0;
				val.requiredSkill = supplyDropTypes[i];
				val.requireSkillReady = true;
				val.requireEquipmentReady = false;
				val.moveTargetType = (TargetType)3;
				val.minDistance = 0f;
				val.maxDistance = float.PositiveInfinity;
				val.selectionRequiresTargetLoS = false;
				val.activationRequiresTargetLoS = false;
				val.activationRequiresAimConfirmation = true;
				val.movementType = (MovementType)0;
				val.aimType = (AimType)1;
				val.ignoreNodeGraph = false;
				val.noRepeat = false;
				val.shouldSprint = false;
				val.shouldFireEquipment = false;
				val.buttonPressType = (ButtonPressType)0;
			}
			for (int j = 0; j < supplyDropTypes.Length; j++)
			{
				AISkillDriver val2 = masterObject.AddComponent<AISkillDriver>();
				val2.skillSlot = (SkillSlot)1;
				val2.requiredSkill = supplyDropTypes[j];
				val2.requireSkillReady = true;
				val2.requireEquipmentReady = false;
				val2.moveTargetType = (TargetType)3;
				val2.minDistance = 0f;
				val2.maxDistance = float.PositiveInfinity;
				val2.selectionRequiresTargetLoS = false;
				val2.activationRequiresTargetLoS = false;
				val2.activationRequiresAimConfirmation = true;
				val2.movementType = (MovementType)0;
				val2.aimType = (AimType)1;
				val2.ignoreNodeGraph = false;
				val2.noRepeat = false;
				val2.shouldSprint = false;
				val2.shouldFireEquipment = false;
				val2.buttonPressType = (ButtonPressType)0;
			}
		}
		AISkillDriver val3 = masterObject.AddComponent<AISkillDriver>();
		val3.skillSlot = (SkillSlot)0;
		val3.requiredSkill = (SkillDef)(object)callProbesSkill;
		val3.requireSkillReady = true;
		val3.requireEquipmentReady = false;
		val3.moveTargetType = (TargetType)0;
		val3.minDistance = 0f;
		val3.maxDistance = 300f;
		val3.selectionRequiresTargetLoS = true;
		val3.activationRequiresTargetLoS = true;
		val3.activationRequiresAimConfirmation = true;
		val3.movementType = (MovementType)2;
		val3.aimType = (AimType)2;
		val3.ignoreNodeGraph = false;
		val3.noRepeat = false;
		val3.shouldSprint = false;
		val3.shouldFireEquipment = false;
		val3.buttonPressType = (ButtonPressType)2;
		AISkillDriver val4 = masterObject.AddComponent<AISkillDriver>();
		val4.skillSlot = (SkillSlot)0;
		val4.requiredSkill = (SkillDef)(object)callDiabloSkill;
		val4.requireSkillReady = true;
		val4.requireEquipmentReady = false;
		val4.moveTargetType = (TargetType)0;
		val4.minDistance = 0f;
		val4.maxDistance = 300f;
		val4.selectionRequiresTargetLoS = true;
		val4.activationRequiresTargetLoS = true;
		val4.activationRequiresAimConfirmation = true;
		val4.movementType = (MovementType)2;
		val4.aimType = (AimType)2;
		val4.ignoreNodeGraph = false;
		val4.noRepeat = false;
		val4.shouldSprint = false;
		val4.shouldFireEquipment = false;
		val4.buttonPressType = (ButtonPressType)2;
		if (enableCaptainBeacons)
		{
			AISkillDriver val5 = masterObject.AddComponent<AISkillDriver>();
			val5.skillSlot = (SkillSlot)3;
			val5.requireSkillReady = true;
			val5.requireEquipmentReady = false;
			val5.moveTargetType = (TargetType)2;
			val5.minDistance = 0f;
			val5.maxDistance = float.PositiveInfinity;
			val5.selectionRequiresTargetLoS = true;
			val5.activationRequiresTargetLoS = true;
			val5.activationRequiresAimConfirmation = true;
			val5.movementType = (MovementType)0;
			val5.aimType = (AimType)3;
			val5.ignoreNodeGraph = false;
			val5.noRepeat = false;
			val5.shouldSprint = false;
			val5.shouldFireEquipment = false;
			val5.buttonPressType = (ButtonPressType)0;
		}
		AISkillDriver val6 = masterObject.AddComponent<AISkillDriver>();
		val6.skillSlot = (SkillSlot)1;
		val6.requireSkillReady = true;
		val6.requireEquipmentReady = false;
		val6.moveTargetType = (TargetType)0;
		val6.minDistance = 0f;
		val6.maxDistance = 100f;
		val6.selectionRequiresTargetLoS = true;
		val6.activationRequiresTargetLoS = true;
		val6.activationRequiresAimConfirmation = true;
		val6.movementType = (MovementType)2;
		val6.aimType = (AimType)2;
		val6.ignoreNodeGraph = false;
		val6.noRepeat = true;
		val6.shouldSprint = false;
		val6.shouldFireEquipment = false;
		val6.buttonPressType = (ButtonPressType)2;
		val6.driverUpdateTimerOverride = 0.35f;
		AISkillDriver val7 = masterObject.AddComponent<AISkillDriver>();
		val7.skillSlot = (SkillSlot)2;
		val7.requireSkillReady = true;
		val7.requireEquipmentReady = false;
		val7.moveTargetType = (TargetType)0;
		val7.minDistance = 0f;
		val7.maxDistance = 300f;
		val7.selectionRequiresTargetLoS = true;
		val7.activationRequiresTargetLoS = true;
		val7.activationRequiresAimConfirmation = true;
		val7.movementType = (MovementType)2;
		val7.aimType = (AimType)2;
		val7.ignoreNodeGraph = false;
		val7.noRepeat = false;
		val7.shouldSprint = false;
		val7.shouldFireEquipment = false;
		val7.buttonPressType = (ButtonPressType)2;
		AISkillDriver val8 = masterObject.AddComponent<AISkillDriver>();
		val8.skillSlot = (SkillSlot)0;
		val8.requireSkillReady = true;
		val8.requireEquipmentReady = false;
		val8.moveTargetType = (TargetType)0;
		val8.minDistance = 0f;
		val8.maxDistance = 10f;
		val8.selectionRequiresTargetLoS = true;
		val8.activationRequiresTargetLoS = true;
		val8.activationRequiresAimConfirmation = true;
		val8.movementType = (MovementType)3;
		val8.aimType = (AimType)2;
		val8.ignoreNodeGraph = false;
		val8.noRepeat = false;
		val8.shouldSprint = false;
		val8.shouldFireEquipment = false;
		val8.buttonPressType = (ButtonPressType)2;
		AISkillDriver val9 = masterObject.AddComponent<AISkillDriver>();
		val9.skillSlot = (SkillSlot)0;
		val9.requireSkillReady = true;
		val9.requireEquipmentReady = false;
		val9.moveTargetType = (TargetType)0;
		val9.minDistance = 0f;
		val9.maxDistance = 25f;
		val9.selectionRequiresTargetLoS = true;
		val9.activationRequiresTargetLoS = true;
		val9.activationRequiresAimConfirmation = true;
		val9.movementType = (MovementType)2;
		val9.aimType = (AimType)2;
		val9.ignoreNodeGraph = false;
		val9.noRepeat = false;
		val9.shouldSprint = false;
		val9.shouldFireEquipment = false;
		val9.buttonPressType = (ButtonPressType)2;
		AISkillDriver val10 = masterObject.AddComponent<AISkillDriver>();
		val10.skillSlot = (SkillSlot)0;
		val10.requireSkillReady = true;
		val10.requireEquipmentReady = false;
		val10.moveTargetType = (TargetType)0;
		val10.minDistance = 0f;
		val10.maxDistance = 50f;
		val10.selectionRequiresTargetLoS = true;
		val10.activationRequiresTargetLoS = true;
		val10.activationRequiresAimConfirmation = false;
		val10.movementType = (MovementType)2;
		val10.aimType = (AimType)2;
		val10.ignoreNodeGraph = false;
		val10.noRepeat = false;
		val10.shouldSprint = false;
		val10.shouldFireEquipment = false;
		val10.buttonPressType = (ButtonPressType)0;
		val10.driverUpdateTimerOverride = 0.75f;
		AISkillDriver val11 = masterObject.AddComponent<AISkillDriver>();
		val11.skillSlot = (SkillSlot)0;
		val11.requireSkillReady = true;
		val11.requireEquipmentReady = false;
		val11.moveTargetType = (TargetType)0;
		val11.minDistance = 0f;
		val11.maxDistance = 100f;
		val11.selectionRequiresTargetLoS = true;
		val11.activationRequiresTargetLoS = true;
		val11.activationRequiresAimConfirmation = false;
		val11.movementType = (MovementType)1;
		val11.aimType = (AimType)2;
		val11.ignoreNodeGraph = false;
		val11.noRepeat = false;
		val11.shouldSprint = false;
		val11.shouldFireEquipment = false;
		val11.buttonPressType = (ButtonPressType)0;
		val11.driverUpdateTimerOverride = 1.5f;
		AISkillDriver val12 = masterObject.AddComponent<AISkillDriver>();
		val12.skillSlot = (SkillSlot)(-1);
		val12.requireSkillReady = false;
		val12.requireEquipmentReady = false;
		val12.moveTargetType = (TargetType)0;
		val12.minDistance = 0f;
		val12.maxDistance = 400f;
		val12.selectionRequiresTargetLoS = false;
		val12.activationRequiresTargetLoS = false;
		val12.activationRequiresAimConfirmation = false;
		val12.movementType = (MovementType)1;
		val12.aimType = (AimType)2;
		val12.ignoreNodeGraph = false;
		val12.noRepeat = false;
		val12.shouldSprint = true;
		val12.shouldFireEquipment = false;
		val12.buttonPressType = (ButtonPressType)1;
		val12.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val13 = masterObject.AddComponent<AISkillDriver>();
		val13.skillSlot = (SkillSlot)(-1);
		val13.requireSkillReady = false;
		val13.requireEquipmentReady = false;
		val13.moveTargetType = (TargetType)2;
		val13.minDistance = 15f;
		val13.maxDistance = float.PositiveInfinity;
		val13.selectionRequiresTargetLoS = false;
		val13.activationRequiresTargetLoS = false;
		val13.activationRequiresAimConfirmation = false;
		val13.movementType = (MovementType)1;
		val13.aimType = (AimType)3;
		val13.ignoreNodeGraph = false;
		val13.noRepeat = false;
		val13.shouldSprint = true;
		val13.shouldFireEquipment = false;
		val13.buttonPressType = (ButtonPressType)1;
		val13.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val14 = masterObject.AddComponent<AISkillDriver>();
		val14.skillSlot = (SkillSlot)(-1);
		val14.requireSkillReady = false;
		val14.requireEquipmentReady = false;
		val14.moveTargetType = (TargetType)2;
		val14.minDistance = 0f;
		val14.maxDistance = 15f;
		val14.selectionRequiresTargetLoS = false;
		val14.activationRequiresTargetLoS = false;
		val14.activationRequiresAimConfirmation = false;
		val14.movementType = (MovementType)0;
		val14.aimType = (AimType)3;
		val14.ignoreNodeGraph = false;
		val14.noRepeat = false;
		val14.shouldSprint = false;
		val14.shouldFireEquipment = false;
		val14.buttonPressType = (ButtonPressType)1;
		val14.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val15 = masterObject.AddComponent<AISkillDriver>();
		val15.skillSlot = (SkillSlot)(-1);
		val15.requireSkillReady = false;
		val15.requireEquipmentReady = false;
		val15.moveTargetType = (TargetType)0;
		val15.minDistance = 0f;
		val15.maxDistance = float.PositiveInfinity;
		val15.selectionRequiresTargetLoS = false;
		val15.activationRequiresTargetLoS = false;
		val15.activationRequiresAimConfirmation = false;
		val15.movementType = (MovementType)1;
		val15.aimType = (AimType)2;
		val15.ignoreNodeGraph = false;
		val15.noRepeat = false;
		val15.shouldSprint = true;
		val15.shouldFireEquipment = false;
		val15.buttonPressType = (ButtonPressType)1;
		val15.resetCurrentEnemyOnNextDriverSelection = true;
		AISkillDriver val16 = masterObject.AddComponent<AISkillDriver>();
		val16.skillSlot = (SkillSlot)(-1);
		val16.requireSkillReady = false;
		val16.requireEquipmentReady = false;
		val16.moveTargetType = (TargetType)0;
		val16.minDistance = 0f;
		val16.maxDistance = float.PositiveInfinity;
		val16.selectionRequiresTargetLoS = false;
		val16.activationRequiresTargetLoS = false;
		val16.activationRequiresAimConfirmation = false;
		val16.movementType = (MovementType)1;
		val16.aimType = (AimType)2;
		val16.ignoreNodeGraph = false;
		val16.noRepeat = false;
		val16.shouldSprint = false;
		val16.shouldFireEquipment = false;
		val16.buttonPressType = (ButtonPressType)1;
		val10.nextHighPriorityOverride = val16;
		val11.nextHighPriorityOverride = val16;
	}

	private void SupplyBeaconTargeting(orig_OnEnter orig, SetupSupplyDrop self)
	{
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		orig.Invoke(self);
		CharacterBody characterBody = ((EntityState)self).characterBody;
		if (!Object.op_Implicit((Object)(object)characterBody) || !Object.op_Implicit((Object)(object)((Component)characterBody).gameObject))
		{
			return;
		}
		CharacterMaster master = characterBody.master;
		if (Object.op_Implicit((Object)(object)master))
		{
			BaseAI component = ((Component)master).GetComponent<BaseAI>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.customTarget._gameObject = ((Component)characterBody).gameObject;
				component.customTarget.lastKnownBullseyePosition = characterBody.footPosition;
				component.customTarget.lastKnownBullseyePositionTime = FixedTimeStamp.now;
				component.customTarget.unset = false;
			}
		}
	}
}
internal class ChefAI
{
	public static SkillDef diceSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefDice.asset").WaitForCompletion();

	public static SkillDef boostedDiceSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefDiceBoosted.asset").WaitForCompletion();

	public static SkillDef searSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefSear.asset").WaitForCompletion();

	public static SkillDef boostedSearSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefSearBoosted.asset").WaitForCompletion();

	public static SkillDef iceBoxSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefIceBox.asset").WaitForCompletion();

	public static SkillDef boostedIceBoxSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefIceBoxBoosted.asset").WaitForCompletion();

	public static SkillDef rollSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefRolyPoly.asset").WaitForCompletion();

	public static ChefOilSpillSkillDef oilSpillSkill = Addressables.LoadAssetAsync<ChefOilSpillSkillDef>((object)"RoR2/DLC2/Chef/ChefOilSpill.asset").WaitForCompletion();

	public static SkillDef glazeSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/ChefGlaze.asset").WaitForCompletion();

	public static SkillDef yesChefSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/Chef/YesChef.asset").WaitForCompletion();

	public ChefAI(GameObject masterObject)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Expected O, but got Unknown
		//IL_005c: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: 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_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0162: 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_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0258: Unknown result type (might be due to invalid IL or missing references)
		//IL_0260: Unknown result type (might be due to invalid IL or missing references)
		//IL_0288: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0300: Unknown result type (might be due to invalid IL or missing references)
		//IL_0308: Unknown result type (might be due to invalid IL or missing references)
		//IL_0330: Unknown result type (might be due to invalid IL or missing references)
		//IL_034c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0370: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0414: Unknown result type (might be due to invalid IL or missing references)
		//IL_044c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0454: Unknown result type (might be due to invalid IL or missing references)
		//IL_047c: Unknown result type (might be due to invalid IL or missing references)
		//IL_048c: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0518: Unknown result type (might be due to invalid IL or missing references)
		//IL_0528: Unknown result type (might be due to invalid IL or missing references)
		//IL_054c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0584: Unknown result type (might be due to invalid IL or missing references)
		//IL_058c: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0620: Unknown result type (might be due to invalid IL or missing references)
		//IL_0628: Unknown result type (might be due to invalid IL or missing references)
		//IL_0650: Unknown result type (might be due to invalid IL or missing references)
		//IL_0660: Unknown result type (might be due to invalid IL or missing references)
		//IL_0684: Unknown result type (might be due to invalid IL or missing references)
		//IL_06bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_06fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0720: Unknown result type (might be due to invalid IL or missing references)
		//IL_0758: Unknown result type (might be due to invalid IL or missing references)
		//IL_0760: Unknown result type (might be due to invalid IL or missing references)
		//IL_0788: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_07c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_07fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0804: Unknown result type (might be due to invalid IL or missing references)
		//IL_082c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0844: Unknown result type (might be due to invalid IL or missing references)
		//IL_085c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0894: Unknown result type (might be due to invalid IL or missing references)
		//IL_089c: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_08dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_08f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_092c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0934: Unknown result type (might be due to invalid IL or missing references)
		//IL_095c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0974: Unknown result type (might be due to invalid IL or missing references)
		//IL_098c: Unknown result type (might be due to invalid IL or missing references)
		//IL_09c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_09cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_09f4: Unknown result type (might be due to invalid IL or missing references)
		BaseAI component = masterObject.GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component))
		{
			component.fullVision = true;
			component.neverRetaliateFriendlies = true;
			component.aimVectorDampTime = 0.05f;
			component.aimVectorMaxSpeed = 720f;
		}
		YesChef.CheckForYesChefEarlyExit += new hook_CheckForYesChefEarlyExit(FixYesChef);
		AISkillDriver val = masterObject.AddComponent<AISkillDriver>();
		val.skillSlot = (SkillSlot)0;
		val.requiredSkill = boostedDiceSkill;
		val.requireSkillReady = true;
		val.requireEquipmentReady = false;
		val.moveTargetType = (TargetType)0;
		val.minDistance = 0f;
		val.maxDistance = 10f;
		val.selectionRequiresTargetLoS = true;
		val.activationRequiresTargetLoS = true;
		val.activationRequiresAimConfirmation = false;
		val.movementType = (MovementType)1;
		val.aimType = (AimType)2;
		val.ignoreNodeGraph = true;
		val.noRepeat = false;
		val.shouldSprint = false;
		val.shouldFireEquipment = false;
		val.buttonPressType = (ButtonPressType)2;
		AISkillDriver val2 = masterObject.AddComponent<AISkillDriver>();
		val2.skillSlot = (SkillSlot)1;
		val2.requiredSkill = boostedSearSkill;
		val2.requireSkillReady = true;
		val2.requireEquipmentReady = false;
		val2.moveTargetType = (TargetType)0;
		val2.minDistance = 0f;
		val2.maxDistance = 150f;
		val2.selectionRequiresTargetLoS = true;
		val2.activationRequiresTargetLoS = true;
		val2.activationRequiresAimConfirmation = true;
		val2.movementType = (MovementType)1;
		val2.aimType = (AimType)2;
		val2.ignoreNodeGraph = false;
		val2.noRepeat = false;
		val2.shouldSprint = true;
		val2.shouldFireEquipment = false;
		val2.buttonPressType = (ButtonPressType)2;
		AISkillDriver val3 = masterObject.AddComponent<AISkillDriver>();
		val3.skillSlot = (SkillSlot)1;
		val3.requiredSkill = boostedIceBoxSkill;
		val3.requireSkillReady = true;
		val3.requireEquipmentReady = false;
		val3.moveTargetType = (TargetType)0;
		val3.minDistance = 0f;
		val3.maxDistance = 150f;
		val3.selectionRequiresTargetLoS = true;
		val3.activationRequiresTargetLoS = true;
		val3.activationRequiresAimConfirmation = true;
		val3.movementType = (MovementType)1;
		val3.aimType = (AimType)2;
		val3.ignoreNodeGraph = false;
		val3.noRepeat = false;
		val3.shouldSprint = false;
		val3.shouldFireEquipment = false;
		val3.buttonPressType = (ButtonPressType)2;
		AISkillDriver val4 = masterObject.AddComponent<AISkillDriver>();
		val4.skillSlot = (SkillSlot)3;
		val4.requiredSkill = glazeSkill;
		val4.requireSkillReady = true;
		val4.requireEquipmentReady = false;
		val4.moveTargetType = (TargetType)0;
		val4.minDistance = 0f;
		val4.maxDistance = 80f;
		val4.selectionRequiresTargetLoS = true;
		val4.activationRequiresTargetLoS = true;
		val4.activationRequiresAimConfirmation = true;
		val4.movementType = (MovementType)1;
		val4.aimType = (AimType)2;
		val4.ignoreNodeGraph = false;
		val4.noRepeat = true;
		val4.shouldSprint = true;
		val4.shouldFireEquipment = false;
		val4.buttonPressType = (ButtonPressType)0;
		val4.driverUpdateTimerOverride = 0.8f;
		AISkillDriver val5 = masterObject.AddComponent<AISkillDriver>();
		val5.skillSlot = (SkillSlot)3;
		val5.requiredSkill = yesChefSkill;
		val5.requireSkillReady = true;
		val5.requireEquipmentReady = false;
		val5.moveTargetType = (TargetType)0;
		val5.minDistance = 0f;
		val5.maxDistance = 400f;
		val5.selectionRequiresTargetLoS = false;
		val5.activationRequiresTargetLoS = false;
		val5.activationRequiresAimConfirmation = false;
		val5.movementType = (MovementType)1;
		val5.aimType = (AimType)2;
		val5.ignoreNodeGraph = false;
		val5.noRepeat = false;
		val5.shouldSprint = true;
		val5.shouldFireEquipment = false;
		val5.buttonPressType = (ButtonPressType)2;
		val5.driverUpdateTimerOverride = 1f;
		AISkillDriver val6 = masterObject.AddComponent<AISkillDriver>();
		val6.skillSlot = (SkillSlot)2;
		val6.requiredSkill = (SkillDef)(object)oilSpillSkill;
		val6.requireSkillReady = true;
		val6.requireEquipmentReady = false;
		val6.moveTargetType = (TargetType)0;
		val6.minDistance = 0f;
		val6.maxDistance = 40f;
		val6.selectionRequiresTargetLoS = false;
		val6.activationRequiresTargetLoS = false;
		val6.activationRequiresAimConfirmation = false;
		val6.movementType = (MovementType)1;
		val6.aimType = (AimType)2;
		val6.ignoreNodeGraph = true;
		val6.noRepeat = false;
		val6.shouldSprint = true;
		val6.shouldFireEquipment = false;
		val6.buttonPressType = (ButtonPressType)2;
		val6.selectionRequiresOnGround = true;
		AISkillDriver val7 = masterObject.AddComponent<AISkillDriver>();
		val7.skillSlot = (SkillSlot)1;
		val7.requiredSkill = searSkill;
		val7.requireSkillReady = true;
		val7.requireEquipmentReady = false;
		val7.moveTargetType = (TargetType)0;
		val7.minDistance = 0f;
		val7.maxDistance = 30f;
		val7.selectionRequiresTargetLoS = true;
		val7.activationRequiresTargetLoS = true;
		val7.activationRequiresAimConfirmation = false;
		val7.movementType = (Mov