Decompiled source of ImprovedSurvivorAI v1.6.0

ImprovedSurvivorAI/ImprovedSurvivorAI.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Captain.Weapon;
using EntityStates.Chef;
using EntityStates.Seeker;
using EntityStates.Toolbot;
using HG.GeneralSerializer;
using IL.EntityStates.Chef;
using Mono.Cecil.Cil;
using MonoMod.Cil;
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;

public class BetterTargetingComponent : MonoBehaviour
{
	private CharacterMaster master;

	private void Awake()
	{
		master = ((Component)this).gameObject.GetComponent<CharacterMaster>();
	}

	private void OnEnable()
	{
		if (Object.op_Implicit((Object)(object)master))
		{
			Main.activeBetterTargetingMasters.Add(master);
		}
	}

	private void OnDisable()
	{
		if (Object.op_Implicit((Object)(object)master))
		{
			Main.activeBetterTargetingMasters.Remove(master);
		}
	}
}
public class AttackSpeedScaledSkillDriver : MonoBehaviour
{
	public AISkillDriver skillDriver;

	public CharacterMaster master;

	public CharacterBody body;

	public float skillDriverBaseDuration;

	public float fixedDuration;

	private void Awake()
	{
		master = ((Component)this).gameObject.GetComponent<CharacterMaster>();
		if (Object.op_Implicit((Object)(object)skillDriver))
		{
			skillDriverBaseDuration = skillDriver.driverUpdateTimerOverride - fixedDuration;
		}
	}

	private void OnEnable()
	{
		if (Object.op_Implicit((Object)(object)master))
		{
			master.onBodyStart += OnBodyStart;
			master.onBodyDestroyed += OnBodyDestroyed;
		}
	}

	private void OnDisable()
	{
		if (Object.op_Implicit((Object)(object)master))
		{
			master.onBodyStart -= OnBodyStart;
			master.onBodyDestroyed -= OnBodyDestroyed;
		}
	}

	private void OnBodyStart(CharacterBody characterBody)
	{
		body = characterBody;
		body.onRecalculateStats += OnRecalculateStats;
	}

	private void OnBodyDestroyed(CharacterBody characterBody)
	{
		body.onRecalculateStats -= OnRecalculateStats;
	}

	private void OnRecalculateStats(CharacterBody characterBody)
	{
		if (Object.op_Implicit((Object)(object)skillDriver))
		{
			skillDriver.driverUpdateTimerOverride = fixedDuration + skillDriverBaseDuration / characterBody.attackSpeed;
		}
	}
}
public static class Configs
{
	public static ConfigEntry<bool> enableCaptainBeacons { get; private set; }

	public static ConfigEntry<bool> walkerTurretChanges { get; private set; }

	public static ConfigEntry<bool> walkerTurretSprint { get; private set; }

	public static ConfigEntry<float> walkerTurretRange { get; private set; }

	public static void Init(ConfigFile cfg)
	{
		enableCaptainBeacons = cfg.Bind<bool>("Captain", "Enable Supply Beacons", true, "Minion Captains will drop both Supply Beacons as soon as they spawn.");
		walkerTurretChanges = cfg.Bind<bool>("Mobile Turrets", "Enable Mobile Turret Changes", true, "Enable the configs pertaining to Engineer's mobile turrets.");
		walkerTurretSprint = cfg.Bind<bool>("Mobile Turrets", "Enable Mobile Turret Sprint", true, "Mobile turrets sprint when following their owner.");
		walkerTurretRange = cfg.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.");
	}
}
public class InitSurvivors
{
	public static 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_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0102: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: Unknown result type (might be due to invalid IL or missing references)
		//IL_014c: Unknown result type (might be due to invalid IL or missing references)
		//IL_016c: 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_019b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_020a: Unknown result type (might be due to invalid IL or missing references)
		//IL_020f: Unknown result type (might be due to invalid IL or missing references)
		//IL_022f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0234: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_0259: Unknown result type (might be due to invalid IL or missing references)
		//IL_0279: Unknown result type (might be due to invalid IL or missing references)
		//IL_027e: Unknown result type (might be due to invalid IL or missing references)
		//IL_029e: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val);
		new CommandoAI(val);
		GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val2);
		new HuntressAI(val2);
		GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2MonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val3);
		new BanditAI(val3);
		GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/ToolbotMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val4);
		new MultAI(val4);
		GameObject val5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val5);
		new EngineerAI(val5);
		GameObject val6 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val6);
		new ArtificerAI(val6);
		GameObject val7 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val7);
		new MercenaryAI(val7);
		GameObject val8 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Treebot/TreebotMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val8);
		new RexAI(val8);
		GameObject val9 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Loader/LoaderMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val9);
		new LoaderAI(val9);
		GameObject val10 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val10);
		new AcridAI(val10);
		GameObject val11 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val11);
		new CaptainAI(val11, Configs.enableCaptainBeacons.Value);
		GameObject val12 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/RailgunnerMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val12);
		new RailgunnerAI(val12);
		GameObject val13 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val13);
		new VoidFiendAI(val13);
		GameObject val14 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Seeker/SeekerMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val14);
		new SeekerAI(val14);
		GameObject val15 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/FalseSon/FalseSonMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val15);
		new FalseSonAI(val15);
		GameObject val16 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val16);
		new ChefAI(val16);
		GameObject val17 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drone Tech/DroneTechMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val17);
		new OperatorAI(val17);
		GameObject val18 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drifter/DrifterMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val18);
		new DrifterAI(val18);
		GameObject val19 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Heretic/HereticMonsterMaster.prefab").WaitForCompletion();
		Main.ClearSkillDrivers(val19);
		new HereticAI(val19);
	}

	public static void AdjustModdedSurvivors()
	{
		GameObject val = MasterCatalog.FindMasterPrefab("EnforcerMonsterMaster");
		if (Object.op_Implicit((Object)(object)val))
		{
			Main.ClearSkillDrivers(val);
			new EnforcerAI(val);
		}
		GameObject val2 = MasterCatalog.FindMasterPrefab("NemesisEnforcerMonsterMaster");
		if (Object.op_Implicit((Object)(object)val2))
		{
			Main.ClearSkillDrivers(val2);
			new NemesisEnforcerAI(val2);
		}
		GameObject val3 = MasterCatalog.FindMasterPrefab("SonicTheHedgehogMonsterMaster");
		if (Object.op_Implicit((Object)(object)val3))
		{
			Main.ClearSkillDrivers(val3);
			new SonicAI(val3);
		}
	}
}
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.6.0")]
public class Main : BaseUnityPlugin
{
	public static List<CharacterMaster> activeBetterTargetingMasters = new List<CharacterMaster>();

	public static SkillDef[] listSkillDefs;

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

	public void Awake()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Expected O, but got Unknown
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Expected O, but got Unknown
		Log.Init(((BaseUnityPlugin)this).Logger);
		Configs.Init(((BaseUnityPlugin)this).Config);
		BaseAI.EvaluateSkillDrivers += new hook_EvaluateSkillDrivers(InfiniVisionLite);
		BullseyeSearch.GetResults += new hook_GetResults(IgnoreTheDead);
		GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal;
		CharacterMaster.SetUpGummyClone += new hook_SetUpGummyClone(GummyCloneTargeting);
		InitSurvivors.AdjustVanillaSurvivors();
		AdjustWalkerTurrets();
		RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate
		{
			listSkillDefs = SkillCatalog._allSkillDefs;
			InitSurvivors.AdjustModdedSurvivors();
		});
	}

	private void AdjustWalkerTurrets()
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		if (!Configs.walkerTurretChanges.Value)
		{
			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" && Configs.walkerTurretRange.Value >= 0f)
				{
					val2.maxDistance = Mathf.Max(Configs.walkerTurretRange.Value, 0f);
					walkerTurretBeam.TryModifyFieldValue("maxDistance", val2.maxDistance);
				}
			}
			else if (val2.minDistance == 6f && Configs.walkerTurretSprint.Value)
			{
				val2.shouldSprint = true;
			}
		}
	}

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

	private SkillDriverEvaluation InfiniVisionLite(orig_EvaluateSkillDrivers orig, BaseAI self)
	{
		//IL_0053: 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_005b: Unknown result type (might be due to invalid IL or missing references)
		if (HasBetterTargeting((Object)(object)self) && (!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 activeBetterTargetingMaster in activeBetterTargetingMasters)
		{
			CharacterBody victimBody = damageReport.victimBody;
			BaseAI component = ((Component)activeBetterTargetingMaster).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 GummyCloneTargeting(orig_SetUpGummyClone orig, CharacterMaster self)
	{
		orig.Invoke(self);
		BaseAI component = ((Component)self).GetComponent<BaseAI>();
		if (Object.op_Implicit((Object)(object)component) && HasBetterTargeting((Object)(object)component))
		{
			component.copyLeaderTarget = true;
		}
	}

	public bool HasBetterTargeting(Object self)
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Expected O, but got Unknown
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Expected O, but got Unknown
		if (!Object.op_Implicit(self))
		{
			return false;
		}
		if (((object)self).GetType() == typeof(BaseAI))
		{
			BaseAI val = (BaseAI)self;
			return Object.op_Implicit((Object)(object)val.master) && Object.op_Implicit((Object)(object)((Component)val.master).gameObject.GetComponent<BetterTargetingComponent>());
		}
		if (((object)self).GetType() == typeof(CharacterMaster))
		{
			CharacterMaster val2 = (CharacterMaster)self;
			return Object.op_Implicit((Object)(object)((Component)val2).gameObject.GetComponent<BetterTargetingComponent>());
		}
		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_0051: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_014c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_0185: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01be: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: 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_02b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_030e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0316: Unknown result type (might be due to invalid IL or missing references)
		//IL_033e: 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_0380: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b8: 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_03e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0404: Unknown result type (might be due to invalid IL or missing references)
		//IL_041c: 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_045c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0484: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a0: 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_04f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f8: 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_053c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0554: 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_0594: Unknown result type (might be due to invalid IL or missing references)
		//IL_05bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_0624: Unknown result type (might be due to invalid IL or missing references)
		//IL_062c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0654: Unknown result type (might be due to invalid IL or missing references)
		//IL_066c: 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_0704: Unknown result type (might be due to invalid IL or missing references)
		//IL_071c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0754: Unknown result type (might be due to invalid IL or missing references)
		//IL_075c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0784: Unknown result type (might be due to invalid IL or missing references)
		//IL_079c: Unknown result type (might be due to invalid IL or missing references)
		//IL_07b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_07f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_081c: 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;
		}
		masterObject.AddComponent<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;
		Utils.AddAtkSpeedScaling(masterObject, val4);
		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;
		Utils.AddAtkSpeedScaling(masterObject, val5);
		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;
		val13.driverUpdateTimerOverride = 0.2f;
		val2.nextHighPriorityOverride = val13;
	}
}
public class SnapfreezeTargeting : MonoBehaviour
{
	public static float updateInterval = 0.05f;

	public static float timer = 0f;

	private void FixedUpdate()
	{
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0193: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0136: Unknown result type (might be due to invalid IL or missing references)
		//IL_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0151: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_0160: 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_016a: Unknown result type (might be due to invalid IL or missing references)
		timer += Time.fixedDeltaTime;
		if (timer < updateInterval)
		{
			return;
		}
		timer -= updateInterval;
		BaseAI component = ((Component)this).gameObject.GetComponent<BaseAI>();
		if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.currentEnemy.gameObject) || !Object.op_Implicit((Object)(object)component.currentEnemy.characterBody))
		{
			return;
		}
		Vector3 value = Vector3.zero;
		bool flag = false;
		if (component.HasLOS(component.currentEnemy.gameObject.transform.position))
		{
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(component.currentEnemy.gameObject.transform.position, Vector3.down);
			float num = 8f + Mathf.Abs(component.currentEnemy.characterBody.transform.position.y - component.currentEnemy.characterBody.footPosition.y);
			RaycastHit val2 = default(RaycastHit);
			if (Physics.Raycast(val, ref val2, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)) && component.HasLOS(((RaycastHit)(ref val2)).point + Vector3.up * 0.02f))
			{
				flag = true;
				value = ((RaycastHit)(ref val2)).point + Vector3.up * 0.02f;
			}
		}
		if (flag)
		{
			component.customTarget._gameObject = component.currentEnemy.gameObject;
			component.customTarget.lastKnownBullseyePosition = value;
			component.customTarget.lastKnownBullseyePositionTime = FixedTimeStamp.now;
			component.customTarget.unset = false;
		}
		else
		{
			component.customTarget._gameObject = null;
			component.customTarget.lastKnownBullseyePosition = null;
			component.customTarget.lastKnownBullseyePositionTime = FixedTimeStamp.negativeInfinity;
			component.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_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_0240: Unknown result type (might be due to invalid IL or missing references)
		//IL_0248: 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_0280: Unknown result type (might be due to invalid IL or missing references)
		//IL_0298: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d8: 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_0310: Unknown result type (might be due to invalid IL or missing references)
		//IL_0328: Unknown result type (might be due to invalid IL or missing references)
		//IL_0360: 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_0390: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b8: 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_03f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0420: 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_0464: Unknown result type (might be due to invalid IL or missing references)
		//IL_049c: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0510: Unknown result type (might be due to invalid IL or missing references)
		//IL_0548: 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_0578: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0624: Unknown result type (might be due to invalid IL or missing references)
		//IL_063c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0654: Unknown result type (might be due to invalid IL or missing references)
		//IL_068c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0694: 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_06dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_072c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0734: Unknown result type (might be due to invalid IL or missing references)
		//IL_075c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0774: Unknown result type (might be due to invalid IL or missing references)
		//IL_078c: 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_07cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_07f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_080c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0824: 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_0864: Unknown result type (might be due to invalid IL or missing references)
		//IL_088c: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_08d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0908: Unknown result type (might be due to invalid IL or missing references)
		//IL_0910: Unknown result type (might be due to invalid IL or missing references)
		//IL_0938: Unknown result type (might be due to invalid IL or missing references)
		//IL_0950: Unknown result type (might be due to invalid IL or missing references)
		//IL_0968: Unknown result type (might be due to invalid IL or missing references)
		//IL_09a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_09a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_09d0: 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;
		Utils.AddAtkSpeedScaling(masterObject, val3);
		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_0440: Unknown result type (might be due to invalid IL or missing references)
		//IL_0458: 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_0498: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c0: 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_05f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0608: Unknown result type (might be due to invalid IL or missing references)
		//IL_0640: 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_0670: Unknown result type (might be due to invalid IL or missing references)
		//IL_069a: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_071a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0744: Unknown result type (might be due to invalid IL or missing references)
		//IL_075c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0794: Unknown result type (might be due to invalid IL or missing references)
		//IL_079c: 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_07dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_07f4: 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_0834: 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_0874: Unknown result type (might be due to invalid IL or missing references)
		//IL_088c: 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_08cc: 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_090c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0924: 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_0964: 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_09a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_09bc: 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)
		//IL_09fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a24: 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;
		Utils.AddAtkSpeedScaling(masterObject, val6);
		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;
		Utils.AddAtkSpeedScaling(masterObject, val10);
		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;
		Utils.AddAtkSpeedScaling(masterObject, val11);
		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
{
	[Serializable]
	[CompilerGenerated]
	private sealed class <>c
	{
		public static readonly <>c <>9 = new <>c();

		public static Func<Instruction, bool> <>9__10_3;

		public static Action<RolyPoly> <>9__10_1;

		public static Func<Instruction, bool> <>9__10_4;

		public static Action<RolyPoly> <>9__10_2;

		public static Manipulator <>9__10_0;

		internal void <.ctor>b__10_0(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			bool flag = true;
			if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "ChefController", "set_rolyPolyGearCharge")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Action<RolyPoly>>((Action<RolyPoly>)delegate(RolyPoly self)
				{
					self.chefController._rolyPolyGearCharge = (int)self.gearCharge;
				});
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "ChefController", "set_rolyPolyStarted")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Action<RolyPoly>>((Action<RolyPoly>)delegate(RolyPoly self)
					{
						self.chefController._rolyPolyStarted = true;
					});
					flag = false;
				}
			}
			if (flag)
			{
				Log.Error("CHEF Roll hook failed!");
			}
		}

		internal bool <.ctor>b__10_3(Instruction x)
		{
			return ILPatternMatchingExt.MatchCallOrCallvirt(x, "ChefController", "set_rolyPolyGearCharge");
		}

		internal void <.ctor>b__10_1(RolyPoly self)
		{
			self.chefController._rolyPolyGearCharge = (int)self.gearCharge;
		}

		internal bool <.ctor>b__10_4(Instruction x)
		{
			return ILPatternMatchingExt.MatchCallOrCallvirt(x, "ChefController", "set_rolyPolyStarted");
		}

		internal void <.ctor>b__10_2(RolyPoly self)
		{
			self.chefController._rolyPolyStarted = true;
		}
	}

	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_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Expected O, but got Unknown
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_0223: 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_0257: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0297: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0315: Unknown result type (might be due to invalid IL or missing references)
		//IL_034d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0355: Unknown result type (might be due to invalid IL or missing references)
		//IL_037d: 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_03d3: 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_0413: Unknown result type (might be due to invalid IL or missing references)
		//IL_043b: Unknown result type (might be due to invalid IL or missing references)
		//IL_046d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0491: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0511: Unknown result type (might be due to invalid IL or missing references)
		//IL_0535: Unknown result type (might be due to invalid IL or missing references)
		//IL_056d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0575: Unknown result type (might be due to invalid IL or missing references)
		//IL_059d: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_05eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0623: Unknown result type (might be due to invalid IL or missing references)
		//IL_062b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0653: Unknown result type (might be due to invalid IL or missing references)
		//IL_066f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0693: Unknown result type (might be due to invalid IL or missing references)
		//IL_06cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_06fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0713: Unknown result type (might be due to invalid IL or missing references)
		//IL_0737: Unknown result type (might be due to invalid IL or missing references)
		//IL_076f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0777: Unknown result type (might be due to invalid IL or missing references)
		//IL_079f: Unknown result type (might be due to invalid IL or missing references)
		//IL_07af: Unknown result type (might be due to invalid IL or missing references)
		//IL_07d3: 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_0813: Unknown result type (might be due to invalid IL or missing references)
		//IL_083b: 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_086f: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_08af: Unknown result type (might be due to invalid IL or missing references)
		//IL_08d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_08e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_090b: 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_094b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0973: Unknown result type (might be due to invalid IL or missing references)
		//IL_0983: Unknown result type (might be due to invalid IL or missing references)
		//IL_09a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_09df: Unknown result type (might be due to invalid IL or missing references)
		//IL_09e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a0f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a1f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a43: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a7b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a83: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aab: Unknown result type (might be due to invalid IL or missing references)
		//IL_0add