Decompiled source of Akali v1.0.4

Akali.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using EntityStates;
using EntityStates.Commando;
using EntityStates.Huntress;
using JetBrains.Annotations;
using KinematicCharacterController;
using On.RoR2;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[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("Akali")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Akali")]
[assembly: AssemblyTitle("Akali")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Akali;

internal class Assets
{
	public static AssetBundle MainAssetBundle;

	public static void PopulateAssets()
	{
		if ((Object)(object)MainAssetBundle == (Object)null)
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Akali.akaliassets");
			MainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Akali.Akali.bnk");
		byte[] array = new byte[stream2.Length];
		stream2.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}
}
internal class AkaliBehaviour : NetworkBehaviour
{
	public bool hasEmpower = false;

	[SerializeField]
	private static GameObject areaIndicator;

	[SerializeField]
	public CharacterBody body;

	public float radius = 45f;

	private GameObject indicatorPrefab;

	private GameObject passiveBuffEffectPrefab;

	private GameObject passiveBuffEffectInstanceR;

	private GameObject passiveBuffEffectInstanceL;

	private Transform muzzleR;

	private Transform muzzleL;

	public uint skinIndex => Object.op_Implicit((Object)(object)body) ? body.skinIndex : 0u;

	[SerializeField]
	public float distance => Object.op_Implicit((Object)(object)areaIndicator) ? Vector3.Distance(areaIndicator.transform.position, ((Component)this).transform.position) : 0f;

	public void SetIndicator(Vector3 position)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		if (NetworkServer.active)
		{
			SpawnIndicator(position);
			RpcSpawnIndicatorClient(position);
		}
	}

	[ClientRpc]
	public void RpcSpawnIndicatorClient(Vector3 position)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		SpawnIndicator(position);
	}

	private void SpawnIndicator(Vector3 position)
	{
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)areaIndicator) && Object.op_Implicit((Object)(object)body) && body.hasEffectiveAuthority)
		{
			switch (skinIndex)
			{
			default:
				indicatorPrefab = Prefabs.basePassiveIndicator;
				passiveBuffEffectPrefab = Prefabs.basePassiveBuffEffect;
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Base_Passive_Cast, ((Component)this).gameObject);
				break;
			case 4u:
				indicatorPrefab = Prefabs.skin04PassiveIndicator;
				passiveBuffEffectPrefab = Prefabs.skin04PassiveBuffEffect;
				break;
			case 12u:
				indicatorPrefab = Prefabs.skin12PassiveIndicator;
				passiveBuffEffectPrefab = Prefabs.skin12PassiveBuffEffect;
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Skin12_Passive_Cast, ((Component)this).gameObject);
				break;
			case 9u:
			case 10u:
			case 15u:
				indicatorPrefab = Prefabs.skin15PassiveIndicator;
				passiveBuffEffectPrefab = Prefabs.skin15PassiveBuffEffect;
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Skin15_Passive_Cast, ((Component)this).gameObject);
				break;
			case 16u:
				indicatorPrefab = Prefabs.skin16PassiveIndicator;
				passiveBuffEffectPrefab = Prefabs.skin16PassiveBuffEffect;
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Skin16_Passive_Cast, ((Component)this).gameObject);
				break;
			}
			areaIndicator = Object.Instantiate<GameObject>(indicatorPrefab);
			areaIndicator.transform.position = position;
			areaIndicator.GetComponent<RadialIndicatorRotationBehaviour>().target = ((Component)this).transform;
		}
	}

	private void Start()
	{
		body = ((Component)this).GetComponent<CharacterBody>();
		if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.modelLocator) && Object.op_Implicit((Object)(object)body.modelLocator.modelTransform))
		{
			ChildLocator component = ((Component)body.modelLocator.modelTransform).GetComponent<ChildLocator>();
			if (Object.op_Implicit((Object)(object)component))
			{
				muzzleR = component.FindChild("muzzleHandR");
				muzzleL = component.FindChild("muzzleHandL");
			}
		}
	}

	[Command]
	public void CmdAddEmpowerBuff()
	{
		if (NetworkServer.active)
		{
			if (Object.op_Implicit((Object)(object)body))
			{
				body.AddBuff(Prefabs.passiveEmpower);
			}
			int buffCount = body.GetBuffCount(Prefabs.passive);
			body.ClearTimedBuffs(Prefabs.passive);
			int num = 0;
			while (num < buffCount + 1)
			{
				num++;
				body.AddTimedBuff(Prefabs.passive, 3f, 6);
			}
		}
	}

	[Command]
	public void CmdRemoveEmpowerBuff()
	{
		if (Object.op_Implicit((Object)(object)body) && NetworkServer.active)
		{
			body.RemoveBuff(Prefabs.passiveEmpower);
		}
	}

	private void FixedUpdate()
	{
		if (!Object.op_Implicit((Object)(object)body) || !body.hasEffectiveAuthority || !(distance >= radius) || !Object.op_Implicit((Object)(object)body))
		{
			return;
		}
		CmdAddEmpowerBuff();
		if (Object.op_Implicit((Object)(object)areaIndicator))
		{
			switch (skinIndex)
			{
			default:
				EffectManager.SimpleMuzzleFlash(Prefabs.basePassiveProcEffect, ((Component)this).gameObject, "baseMuzzle", false);
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Base_Passive_Proc, ((Component)this).gameObject);
				break;
			case 4u:
				EffectManager.SimpleMuzzleFlash(Prefabs.skin04PassiveProcEffect, ((Component)this).gameObject, "baseMuzzle", false);
				break;
			case 12u:
				EffectManager.SimpleMuzzleFlash(Prefabs.skin12PassiveProcEffect, ((Component)this).gameObject, "baseMuzzle", false);
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Skin12_Passive_Proc, ((Component)this).gameObject);
				break;
			case 9u:
			case 10u:
			case 15u:
				EffectManager.SimpleMuzzleFlash(Prefabs.skin15PassiveProcEffect, ((Component)this).gameObject, "baseMuzzle", false);
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Skin15_Passive_Proc, ((Component)this).gameObject);
				break;
			case 16u:
				EffectManager.SimpleMuzzleFlash(Prefabs.skin16PassiveProcEffect, ((Component)this).gameObject, "baseMuzzle", false);
				AkSoundEngine.PostEvent(Sounds.Play_Akali_Skin16_Passive_Proc, ((Component)this).gameObject);
				break;
			}
			Object.Destroy((Object)(object)areaIndicator);
		}
		SpawnPassiveBuffEffect();
	}

	private void SpawnPassiveBuffEffect()
	{
		//IL_007d: 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)
		if (Object.op_Implicit((Object)(object)passiveBuffEffectInstanceR))
		{
			Object.Destroy((Object)(object)passiveBuffEffectInstanceR);
		}
		if (Object.op_Implicit((Object)(object)passiveBuffEffectInstanceL))
		{
			Object.Destroy((Object)(object)passiveBuffEffectInstanceL);
		}
		if (Object.op_Implicit((Object)(object)muzzleR) && Object.op_Implicit((Object)(object)muzzleL))
		{
			passiveBuffEffectInstanceR = Object.Instantiate<GameObject>(passiveBuffEffectPrefab, muzzleR);
			passiveBuffEffectInstanceR.transform.localPosition = Vector3.zero;
			passiveBuffEffectInstanceL = Object.Instantiate<GameObject>(passiveBuffEffectPrefab, muzzleL);
			passiveBuffEffectInstanceL.transform.localPosition = Vector3.zero;
		}
	}

	public void RemoveBuff()
	{
		CmdRemoveEmpowerBuff();
		if (Object.op_Implicit((Object)(object)passiveBuffEffectInstanceR))
		{
			Object.Destroy((Object)(object)passiveBuffEffectInstanceR);
		}
		if (Object.op_Implicit((Object)(object)passiveBuffEffectInstanceL))
		{
			Object.Destroy((Object)(object)passiveBuffEffectInstanceL);
		}
	}
}
internal class AkaliTrackerBehaviour : HuntressTracker
{
	public SkillLocator skillLocator;

	public CharacterBody body;

	public bool target => Object.op_Implicit((Object)(object)base.trackingTarget) ? true : false;

	private void Awake()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		base.indicator = new Indicator(((Component)this).gameObject, Prefabs.akaliIndicator);
	}

	private void OnEnable()
	{
		((HuntressTracker)this).OnEnable();
		base.maxTrackingDistance = 35f;
		skillLocator = ((Component)this).GetComponent<SkillLocator>();
	}

	private void FixedUpdate()
	{
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Expected O, but got Unknown
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Expected O, but got Unknown
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Expected O, but got Unknown
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Expected O, but got Unknown
		((HuntressTracker)this).FixedUpdate();
		if (!Object.op_Implicit((Object)(object)body))
		{
			body = ((Component)this).GetComponent<CharacterBody>();
			switch (((Component)this).GetComponent<CharacterBody>().skinIndex)
			{
			case 4u:
				base.indicator = new Indicator(((Component)this).gameObject, Prefabs.akaliSkin04Indicator);
				break;
			case 12u:
				base.indicator = new Indicator(((Component)this).gameObject, Prefabs.akaliSkin12Indicator);
				break;
			case 15u:
				base.indicator = new Indicator(((Component)this).gameObject, Prefabs.akaliSkin15Indicator);
				break;
			case 16u:
				base.indicator = new Indicator(((Component)this).gameObject, Prefabs.akaliSkin16Indicator);
				break;
			}
		}
		if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.special))
		{
			base.indicator.active = skillLocator.special.IsReady();
		}
	}
}
internal class RadialIndicatorRotationBehaviour : MonoBehaviour
{
	public Transform target;

	private void Update()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)target))
		{
			Vector3 val = target.position - ((Component)this).transform.position;
			val.y = 0f;
			Quaternion val2 = Quaternion.LookRotation(val);
			((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val2, 360f * Time.deltaTime);
		}
	}
}
internal class SmokeBehaviour : MonoBehaviour
{
	private SphereSearch sphereSearch = new SphereSearch();

	private float stopwatch;

	private float searchInterval = 0.1f;

	public float radius = 8f;

	private void Start()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		sphereSearch.origin = ((Component)this).transform.position;
		sphereSearch.radius = radius;
		sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
		Search();
	}

	private void FixedUpdate()
	{
		if (NetworkServer.active)
		{
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= searchInterval)
			{
				stopwatch = 0f;
				Search();
			}
		}
	}

	private void Search()
	{
		HurtBox[] hurtBoxes = sphereSearch.RefreshCandidates().FilterCandidatesByDistinctHurtBoxEntities().GetHurtBoxes();
		foreach (HurtBox val in hurtBoxes)
		{
			if (Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body))
			{
				if (Object.op_Implicit((Object)(object)((Component)val.healthComponent.body).GetComponent<AkaliBehaviour>()))
				{
					val.healthComponent.body.AddTimedBuff(Buffs.Cloak, 1f);
					val.healthComponent.body.AddTimedBuff(Buffs.CloakSpeed, 1f);
				}
				else
				{
					val.healthComponent.body.AddTimedBuff(Buffs.Slow60, 1f);
				}
			}
		}
	}
}
internal class Hook
{
	internal static void Hooks()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected O, but got Unknown
		RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
		HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
	}

	private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		if (DamageAPI.HasModdedDamageType(damageInfo, Prefabs.kunai) && Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)self.body))
		{
			AkaliBehaviour component = damageInfo.attacker.GetComponent<AkaliBehaviour>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.SetIndicator(self.body.footPosition);
			}
		}
		orig.Invoke(self, damageInfo);
	}

	private static void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
	{
		int buffCount = sender.GetBuffCount(Prefabs.passive);
		if (sender.HasBuff(Prefabs.invis))
		{
			args.moveSpeedMultAdd += 0.4f;
		}
		if (sender.HasBuff(Prefabs.passive))
		{
			args.moveSpeedMultAdd += 0.25f * (float)buffCount;
			args.armorAdd += (float)(5 * buffCount);
		}
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Dragonyck.Akali", "Akali", "1.0.4")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
public class MainPlugin : BaseUnityPlugin
{
	public const string MODUID = "com.Dragonyck.Akali";

	public const string MODNAME = "Akali";

	public const string VERSION = "1.0.4";

	public const string SURVIVORNAME = "Akali";

	public const string SURVIVORNAMEKEY = "AKALI";

	public static GameObject characterPrefab;

	public static readonly Color characterColor = new Color(0.57255f, 0.61961f, 0.26667f);

	public static SkillDef primary;

	public static SkillDef secondary;

	public static SkillDef special;

	public static SkillDef specialCast;

	private void Awake()
	{
		Assets.PopulateAssets();
		Prefabs.CreatePrefabs();
		CreatePrefab();
		RegisterStates();
		RegisterCharacter();
		Hook.Hooks();
	}

	internal static void CreatePrefab()
	{
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Expected O, but got Unknown
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_0126: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Expected O, but got Unknown
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0164: Unknown result type (might be due to invalid IL or missing references)
		//IL_0175: Unknown result type (might be due to invalid IL or missing references)
		//IL_0195: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_0252: Unknown result type (might be due to invalid IL or missing references)
		//IL_0383: Unknown result type (might be due to invalid IL or missing references)
		//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0426: Unknown result type (might be due to invalid IL or missing references)
		//IL_042b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0443: Unknown result type (might be due to invalid IL or missing references)
		//IL_0448: Unknown result type (might be due to invalid IL or missing references)
		//IL_0460: Unknown result type (might be due to invalid IL or missing references)
		//IL_0465: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a90: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aad: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aca: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ae7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b04: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b21: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b3e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b5b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b78: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b96: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bb4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bd2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bf0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c0e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c2c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c4a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c68: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e40: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f35: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f3a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f68: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f6d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f96: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f9b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fac: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fb1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fda: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fdf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ff0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ff5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0577: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0524: Unknown result type (might be due to invalid IL or missing references)
		//IL_0529: 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_055a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0567: Unknown result type (might be due to invalid IL or missing references)
		characterPrefab = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody"), "AkaliBody", true);
		characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
		characterPrefab.AddComponent<AkaliBehaviour>();
		characterPrefab.AddComponent<AkaliTrackerBehaviour>();
		Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("ModelBase")).gameObject);
		Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("CameraPivot")).gameObject);
		Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("AimOrigin")).gameObject);
		GameObject val = Assets.MainAssetBundle.LoadAsset<GameObject>("akali");
		GameObject val2 = new GameObject("ModelBase");
		val2.transform.parent = characterPrefab.transform;
		val2.transform.localPosition = new Vector3(0f, -0.94f, 0f);
		val2.transform.localRotation = Quaternion.identity;
		val2.transform.localScale = new Vector3(1f, 1f, 1f);
		GameObject val3 = new GameObject("AimOrigin");
		val3.transform.parent = val2.transform;
		val3.transform.localPosition = new Vector3(0f, 1.4f, 0f);
		val3.transform.localRotation = Quaternion.identity;
		val3.transform.localScale = Vector3.one;
		Transform transform = val.transform;
		transform.parent = val2.transform;
		transform.localPosition = Vector3.zero;
		transform.localScale = new Vector3(1f, 1f, 1f);
		transform.localRotation = Quaternion.identity;
		CharacterDirection component = characterPrefab.GetComponent<CharacterDirection>();
		component.moveVector = Vector3.zero;
		component.targetTransform = val2.transform;
		component.overrideAnimatorForwardTransform = null;
		component.rootMotionAccumulator = null;
		component.modelAnimator = val.GetComponentInChildren<Animator>();
		component.driveFromRootRotation = false;
		component.turnSpeed = 720f;
		CharacterBody component2 = characterPrefab.GetComponent<CharacterBody>();
		((Object)component2).name = "AkaliBody";
		component2.baseNameToken = "AKALI_NAME";
		component2.subtitleNameToken = "AKALI_SUBTITLE";
		component2.bodyFlags = (BodyFlags)16;
		component2.rootMotionInMainState = false;
		component2.mainRootSpeed = 0f;
		component2.baseMaxHealth = 110f;
		component2.levelMaxHealth = 35f;
		component2.baseRegen = 1f;
		component2.levelRegen = 0.33f;
		component2.baseMaxShield = 0f;
		component2.levelMaxShield = 0f;
		component2.baseMoveSpeed = 7f;
		component2.levelMoveSpeed = 0f;
		component2.baseAcceleration = 110f;
		component2.baseJumpPower = 15f;
		component2.levelJumpPower = 0f;
		component2.baseDamage = 12f;
		component2.levelDamage = 2.4f;
		component2.baseAttackSpeed = 1f;
		component2.levelAttackSpeed = 0f;
		component2.baseCrit = 1f;
		component2.levelCrit = 0f;
		component2.baseArmor = 20f;
		component2.levelArmor = 0f;
		component2.baseJumpCount = 2;
		component2.sprintingSpeedMultiplier = 1.45f;
		component2.wasLucky = false;
		component2.hideCrosshair = false;
		component2.aimOriginTransform = val3.transform;
		component2.hullClassification = (HullClassification)0;
		component2.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portrait").texture;
		component2.isChampion = false;
		component2.currentVehicle = null;
		component2.skinIndex = 0u;
		component2.bodyColor = characterColor;
		CharacterMotor component3 = characterPrefab.GetComponent<CharacterMotor>();
		component3.walkSpeedPenaltyCoefficient = 1f;
		component3.characterDirection = component;
		component3.muteWalkMotion = false;
		component3.mass = 160f;
		component3.airControl = 0.25f;
		component3.disableAirControlUntilCollision = false;
		component3.generateParametersOnAwake = true;
		InputBankTest component4 = characterPrefab.GetComponent<InputBankTest>();
		component4.moveVector = Vector3.zero;
		CameraTargetParams component5 = characterPrefab.GetComponent<CameraTargetParams>();
		component5.cameraParams = Addressables.LoadAssetAsync<CharacterCameraParams>((object)"RoR2/Base/Common/ccpStandard.asset").WaitForCompletion();
		component5.cameraPivotTransform = null;
		component5.recoil = Vector2.zero;
		component5.dontRaycastToPivot = false;
		ModelLocator component6 = characterPrefab.GetComponent<ModelLocator>();
		component6.modelTransform = transform;
		component6.modelBaseTransform = val2.transform;
		component6.dontReleaseModelOnDeath = false;
		component6.autoUpdateModelTransform = true;
		component6.dontDetatchFromParent = false;
		component6.noCorpse = false;
		component6.normalizeToFloor = false;
		component6.preserveModel = false;
		ChildLocator component7 = val.GetComponent<ChildLocator>();
		CharacterModel val4 = val.AddComponent<CharacterModel>();
		SkinnedMeshRenderer[] componentsInChildren = val.GetComponentsInChildren<SkinnedMeshRenderer>();
		List<RendererInfo> list = new List<RendererInfo>();
		for (int i = 0; i < componentsInChildren.Length; i++)
		{
			if (((Object)componentsInChildren[i]).name == "skin14")
			{
				Material val5 = Utils.InstantiateMaterial(((Renderer)componentsInChildren[i]).material.mainTexture);
				val5.shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGWavyCloth.shader").WaitForCompletion();
				list.Add(new RendererInfo
				{
					renderer = (Renderer)(object)componentsInChildren[i],
					defaultMaterial = val5,
					defaultShadowCastingMode = (ShadowCastingMode)1,
					ignoreOverlays = false
				});
			}
			else
			{
				list.Add(new RendererInfo
				{
					renderer = (Renderer)(object)componentsInChildren[i],
					defaultMaterial = Utils.InstantiateMaterial(((Renderer)componentsInChildren[i]).material.mainTexture),
					defaultShadowCastingMode = (ShadowCastingMode)1,
					ignoreOverlays = false
				});
			}
		}
		RendererInfo[] array = list.ToArray();
		val4.body = component2;
		val4.baseRendererInfos = array;
		val4.autoPopulateLightInfos = true;
		val4.invisibilityCount = 0;
		val4.temporaryOverlays = new List<TemporaryOverlayInstance>();
		Reflection.SetFieldValue<SkinnedMeshRenderer>((object)val4, "mainSkinnedMeshRenderer", componentsInChildren[0]);
		GameObject gameObject = ((Component)transform).gameObject;
		ModelSkinController val6 = gameObject.AddComponent<ModelSkinController>();
		LanguageAPI.Add("AKALIBODY_DEFAULT_SKIN_NAME", "Default");
		LanguageAPI.Add("AKALIBODY_SKIN01_NAME", "Stinger");
		LanguageAPI.Add("AKALIBODY_SKIN02_NAME", "Infernal");
		LanguageAPI.Add("AKALIBODY_SKIN03_NAME", "All-Star");
		LanguageAPI.Add("AKALIBODY_SKIN04_NAME", "Nurse");
		LanguageAPI.Add("AKALIBODY_SKIN05_NAME", "Blood Moon");
		LanguageAPI.Add("AKALIBODY_SKIN06_NAME", "Silverfang");
		LanguageAPI.Add("AKALIBODY_SKIN07_NAME", "Headhunter");
		LanguageAPI.Add("AKALIBODY_SKIN08_NAME", "Sashimi");
		LanguageAPI.Add("AKALIBODY_SKIN09_NAME", "K/DA");
		LanguageAPI.Add("AKALIBODY_SKIN10_NAME", "Prestige K/DA");
		LanguageAPI.Add("AKALIBODY_SKIN11_NAME", "PROJECT");
		LanguageAPI.Add("AKALIBODY_SKIN12_NAME", "True Damage");
		LanguageAPI.Add("AKALIBODY_SKIN13_NAME", "K/DA ALL OUT");
		LanguageAPI.Add("AKALIBODY_SKIN14_NAME", "Crime City Nightmare");
		LanguageAPI.Add("AKALIBODY_SKIN15_NAME", "Prestige K/DA (2022)");
		LanguageAPI.Add("AKALIBODY_SKIN16_NAME", "Star Guardian");
		List<GameObject> childList = new List<GameObject>
		{
			((Component)component7.FindChild("base")).gameObject,
			((Component)component7.FindChild("skin01")).gameObject,
			((Component)component7.FindChild("skin02")).gameObject,
			((Component)component7.FindChild("skin03")).gameObject,
			((Component)component7.FindChild("skin04")).gameObject,
			((Component)component7.FindChild("skin05")).gameObject,
			((Component)component7.FindChild("skin06")).gameObject,
			((Component)component7.FindChild("skin07")).gameObject,
			((Component)component7.FindChild("skin08")).gameObject,
			((Component)component7.FindChild("skin09")).gameObject,
			((Component)component7.FindChild("skin10")).gameObject,
			((Component)component7.FindChild("skin11")).gameObject,
			((Component)component7.FindChild("skin12")).gameObject,
			((Component)component7.FindChild("skin13")).gameObject,
			((Component)component7.FindChild("skin14")).gameObject,
			((Component)component7.FindChild("skin15")).gameObject,
			((Component)component7.FindChild("skin16")).gameObject,
			((Component)component7.FindChild("baseWeapon")).gameObject,
			((Component)component7.FindChild("skin01Weapon")).gameObject,
			((Component)component7.FindChild("skin02Weapon")).gameObject,
			((Component)component7.FindChild("skin03Weapon")).gameObject,
			((Component)component7.FindChild("skin04Weapon")).gameObject,
			((Component)component7.FindChild("skin05Weapon")).gameObject,
			((Component)component7.FindChild("skin06Weapon")).gameObject,
			((Component)component7.FindChild("skin07Weapon")).gameObject,
			((Component)component7.FindChild("skin08Weapon")).gameObject,
			((Component)component7.FindChild("skin09Weapon")).gameObject,
			((Component)component7.FindChild("skin10Weapon")).gameObject,
			((Component)component7.FindChild("skin11Weapon")).gameObject,
			((Component)component7.FindChild("skin12Weapon")).gameObject,
			((Component)component7.FindChild("skin13Weapon")).gameObject,
			((Component)component7.FindChild("skin14Weapon")).gameObject,
			((Component)component7.FindChild("skin15Weapon")).gameObject,
			((Component)component7.FindChild("skin16Weapon")).gameObject
		};
		val6.skins = (SkinDef[])(object)new SkinDef[17]
		{
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_DEFAULT_SKIN_NAME", "base", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN01_NAME", "skin01", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN02_NAME", "skin02", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN03_NAME", "skin03", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN04_NAME", "skin04", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN05_NAME", "skin05", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN06_NAME", "skin06", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN07_NAME", "skin07", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN08_NAME", "skin08", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN09_NAME", "skin09", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN10_NAME", "skin10", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN11_NAME", "skin11", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN12_NAME", "skin12", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN13_NAME", "skin13", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN14_NAME", "skin14", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN15_NAME", "skin15", array)),
			Skins.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(childList, gameObject, "AKALIBODY_SKIN16_NAME", "skin16", array))
		};
		HealthComponent component8 = characterPrefab.GetComponent<HealthComponent>();
		component8.health = 110f;
		component8.shield = 0f;
		component8.barrier = 0f;
		component8.magnetiCharge = 0f;
		component8.body = null;
		component8.dontShowHealthbar = false;
		component8.globalDeathEventChanceCoefficient = 1f;
		characterPrefab.GetComponent<Interactor>().maxInteractionDistance = 3f;
		characterPrefab.GetComponent<InteractionDriver>().highlightInteractor = true;
		SfxLocator component9 = characterPrefab.GetComponent<SfxLocator>();
		component9.deathSound = "Play_ui_player_death";
		component9.barkSound = "";
		component9.openSound = "";
		component9.landingSound = "Play_char_land";
		component9.fallDamageSound = "Play_char_land_fall_damage";
		component9.aliveLoopStart = "";
		component9.aliveLoopStop = "";
		Rigidbody component10 = characterPrefab.GetComponent<Rigidbody>();
		component10.mass = 100f;
		component10.drag = 0f;
		component10.angularDrag = 0f;
		component10.useGravity = false;
		component10.isKinematic = true;
		component10.interpolation = (RigidbodyInterpolation)0;
		component10.collisionDetectionMode = (CollisionDetectionMode)0;
		component10.constraints = (RigidbodyConstraints)0;
		CapsuleCollider component11 = ((Component)component7.FindChild("collider")).GetComponent<CapsuleCollider>();
		((Collider)component11).isTrigger = false;
		((Collider)component11).material = null;
		KinematicCharacterMotor component12 = characterPrefab.GetComponent<KinematicCharacterMotor>();
		component12.CharacterController = (ICharacterController)(object)component3;
		component12.Capsule = component11;
		component12.playerCharacter = true;
		HurtBoxGroup val7 = val.AddComponent<HurtBoxGroup>();
		HurtBox val8 = ((Component)component11).gameObject.AddComponent<HurtBox>();
		((Component)val8).gameObject.layer = LayerIndex.entityPrecise.intVal;
		val8.healthComponent = component8;
		val8.isBullseye = true;
		val8.damageModifier = (DamageModifier)0;
		val8.hurtBoxGroup = val7;
		val8.indexInGroup = 0;
		val7.hurtBoxes = (HurtBox[])(object)new HurtBox[1] { val8 };
		val7.mainHurtBox = val8;
		val7.bullseyeCount = 1;
		AimAnimator val9 = val.AddComponent<AimAnimator>();
		val9.inputBank = component4;
		val9.directionComponent = component;
		val9.pitchRangeMax = 55f;
		val9.pitchRangeMin = -50f;
		val9.yawRangeMin = -44f;
		val9.yawRangeMax = 44f;
		val9.pitchGiveupRange = 30f;
		val9.yawGiveupRange = 10f;
		val9.giveupDuration = 8f;
		FootstepHandler val10 = val.AddComponent<FootstepHandler>();
		val10.baseFootstepString = "Play_player_footstep";
		val10.sprintFootstepOverrideString = "";
		val10.enableFootstepDust = true;
		val10.footstepDustPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/GenericFootstepDust");
		EntityStateMachine component13 = ((Component)component2).GetComponent<EntityStateMachine>();
		component13.mainStateType = new SerializableEntityStateType(typeof(CharacterMain));
		CharacterDeathBehavior component14 = characterPrefab.GetComponent<CharacterDeathBehavior>();
		component14.deathStateMachine = characterPrefab.GetComponent<EntityStateMachine>();
		component14.deathState = new SerializableEntityStateType(typeof(DeathState));
		EntityStateMachine val11 = characterPrefab.AddComponent<EntityStateMachine>();
		val11.customName = "PoppyBomb";
		val11.initialStateType = new SerializableEntityStateType(typeof(Idle));
		val11.mainStateType = new SerializableEntityStateType(typeof(Idle));
		EntityStateMachine val12 = characterPrefab.AddComponent<EntityStateMachine>();
		val12.customName = "PoppyBombDetonate";
		val12.initialStateType = new SerializableEntityStateType(typeof(Idle));
		val12.mainStateType = new SerializableEntityStateType(typeof(Idle));
		NetworkStateMachine component15 = ((Component)component2).GetComponent<NetworkStateMachine>();
		List<EntityStateMachine> list2 = component15.stateMachines.ToList();
		list2.Add(val11);
		list2.Add(val12);
		component15.stateMachines = list2.ToArray();
		ContentAddition.AddBody(characterPrefab);
	}

	private void RegisterCharacter()
	{
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		string text = "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > ";
		string text2 = "..and so she left.";
		string text3 = "..and so she vanished.";
		LanguageAPI.Add("AKALI_NAME", "Akali");
		LanguageAPI.Add("AKALI_DESCRIPTION", text);
		LanguageAPI.Add("AKALI_SUBTITLE", "The Rogue Assassin");
		LanguageAPI.Add("AKALI_OUTRO", text2);
		LanguageAPI.Add("AKALI_FAIL", text3);
		SurvivorDef val = ScriptableObject.CreateInstance<SurvivorDef>();
		val.cachedName = "AKALI_NAME";
		val.unlockableDef = null;
		val.descriptionToken = "AKALI_DESCRIPTION";
		val.primaryColor = characterColor;
		val.bodyPrefab = characterPrefab;
		val.displayPrefab = Utils.NewDisplayModel(((Component)characterPrefab.GetComponent<ModelLocator>().modelBaseTransform).gameObject, "AkaliDisplay");
		val.outroFlavorToken = "AKALI_OUTRO";
		val.desiredSortPosition = 23f;
		val.mainEndingEscapeFailureFlavorToken = "AKALI_FAIL";
		ContentAddition.AddSurvivorDef(val);
		SkillSetup();
		GameObject val2 = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterMasters/CommandoMonsterMaster"), "AkaliMaster", true);
		ContentAddition.AddMaster(val2);
		CharacterMaster component = val2.GetComponent<CharacterMaster>();
		component.bodyPrefab = characterPrefab;
	}

	private void RegisterStates()
	{
		//IL_0003: 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_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		bool flag = default(bool);
		ContentAddition.AddEntityState<Primary>(ref flag);
		ContentAddition.AddEntityState<Secondary>(ref flag);
		ContentAddition.AddEntityState<Utility>(ref flag);
		ContentAddition.AddEntityState<UtilityBlink>(ref flag);
		ContentAddition.AddEntityState<Special>(ref flag);
		ContentAddition.AddEntityState<SpecialDash>(ref flag);
		ContentAddition.AddEntityState<SpecialSecondCast>(ref flag);
		ContentAddition.AddEntityState<CharacterMain>(ref flag);
	}

	private void SkillSetup()
	{
		GenericSkill[] componentsInChildren = characterPrefab.GetComponentsInChildren<GenericSkill>();
		foreach (GenericSkill val in componentsInChildren)
		{
			Object.DestroyImmediate((Object)(object)val);
		}
		PassiveSetup();
		PrimarySetup();
		SecondarySetup();
		UtilitySetup();
		SpecialSetup();
	}

	private void PassiveSetup()
	{
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("AKALI_PASSIVE_NAME", "Assassin's Mark");
		LanguageAPI.Add("AKALI_PASSIVE_DESCRIPTION", "When Akali damages an enemy with an ability, she creates a ring around them for <style=cIsUtility>4s</style>, refreshing on subsequent damaging abilities. Her damaging abilities are empowered and she gains <style=cIsDamage>25% movement speed</style> and <style=cIsDamage>5 armor</style> stacking up to <style=cIsDamage>6</style> times while moving away from the center of the ring. Only one ring may be active at a time.");
		component.passiveSkill.enabled = true;
		component.passiveSkill.skillNameToken = "AKALI_PASSIVE_NAME";
		component.passiveSkill.skillDescriptionToken = "AKALI_PASSIVE_DESCRIPTION";
		component.passiveSkill.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("passive");
	}

	private void PrimarySetup()
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Expected O, but got Unknown
		//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("AKALI_M1", "Five Point Strike");
		LanguageAPI.Add("AKALI_M1_DESCRIPTION", "Akali unleashes kunais in a cone in the target direction, dealing <style=cIsDamage>100% damage each</style>.");
		LanguageAPI.Add("AKALI_M1_2_DESCRIPTION", "Akali unleashes <style=cIsDamage>empowered</style> kunais in a cone in the target direction, dealing <style=cIsDamage>150% damage each</style>.");
		primary = ScriptableObject.CreateInstance<SkillDef>();
		primary.activationState = new SerializableEntityStateType(typeof(Primary));
		primary.activationStateMachineName = "Weapon";
		primary.baseMaxStock = 0;
		primary.baseRechargeInterval = 0f;
		primary.beginSkillCooldownOnSkillEnd = true;
		primary.canceledFromSprinting = false;
		primary.fullRestockOnAssign = true;
		primary.interruptPriority = (InterruptPriority)0;
		primary.isCombatSkill = true;
		primary.mustKeyPress = false;
		primary.cancelSprintingOnActivation = true;
		primary.rechargeStock = 0;
		primary.requiredStock = 0;
		primary.stockToConsume = 0;
		primary.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("primary");
		primary.skillDescriptionToken = "AKALI_M1_DESCRIPTION";
		primary.skillName = "AKALI_M1";
		primary.skillNameToken = "AKALI_M1";
		ContentAddition.AddSkillDef(primary);
		component.primary = characterPrefab.AddComponent<GenericSkill>();
		SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
		val.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)component.primary, "_skillFamily", val);
		SkillFamily skillFamily = component.primary.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val2 = new Variant
		{
			skillDef = primary
		};
		((Variant)(ref val2)).viewableNode = new Node(primary.skillNameToken, false, (Node)null);
		variants[0] = val2;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private void SecondarySetup()
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Expected O, but got Unknown
		//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("AKALI_M2", "Shuriken Flip");
		LanguageAPI.Add("AKALI_M2_DESCRIPTION", "Akali flips backward and throws several shuriken in the target direction that deal <style=cIsDamage>150% damage each</style>.");
		LanguageAPI.Add("AKALI_M2_2_DESCRIPTION", "Akali flips backward and throws several <style=cIsDamage>empowered</style> shuriken in the target direction that deal <style=cIsDamage>225% damage each</style>.");
		secondary = ScriptableObject.CreateInstance<SkillDef>();
		secondary.activationState = new SerializableEntityStateType(typeof(Secondary));
		secondary.activationStateMachineName = "Body";
		secondary.baseMaxStock = 1;
		secondary.baseRechargeInterval = 4f;
		secondary.beginSkillCooldownOnSkillEnd = true;
		secondary.canceledFromSprinting = false;
		secondary.fullRestockOnAssign = false;
		secondary.interruptPriority = (InterruptPriority)0;
		secondary.isCombatSkill = true;
		secondary.mustKeyPress = false;
		secondary.cancelSprintingOnActivation = false;
		secondary.rechargeStock = 1;
		secondary.requiredStock = 1;
		secondary.stockToConsume = 1;
		secondary.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("secondary");
		secondary.skillDescriptionToken = "AKALI_M2_DESCRIPTION";
		secondary.skillName = "AKALI_M2";
		secondary.skillNameToken = "AKALI_M2";
		ContentAddition.AddSkillDef(secondary);
		component.secondary = characterPrefab.AddComponent<GenericSkill>();
		SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
		val.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)component.secondary, "_skillFamily", val);
		SkillFamily skillFamily = component.secondary.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val2 = new Variant
		{
			skillDef = secondary
		};
		((Variant)(ref val2)).viewableNode = new Node(secondary.skillNameToken, false, (Node)null);
		variants[0] = val2;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private void UtilitySetup()
	{
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_0152: Expected O, but got Unknown
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0155: Unknown result type (might be due to invalid IL or missing references)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("AKALI_UTIL", "Twilight Shroud");
		LanguageAPI.Add("AKALI_UTIL_DESCRIPTION", "Akali blinks to the target location, creating a circular shroud lasting for <style=cIsUtility>3s</style>.");
		SkillDef val = ScriptableObject.CreateInstance<SkillDef>();
		val.activationState = new SerializableEntityStateType(typeof(Utility));
		val.activationStateMachineName = "PoppyBomb";
		val.baseMaxStock = 1;
		val.baseRechargeInterval = 5f;
		val.beginSkillCooldownOnSkillEnd = true;
		val.canceledFromSprinting = false;
		val.fullRestockOnAssign = false;
		val.interruptPriority = (InterruptPriority)0;
		val.isCombatSkill = false;
		val.mustKeyPress = true;
		val.cancelSprintingOnActivation = false;
		val.rechargeStock = 1;
		val.requiredStock = 1;
		val.stockToConsume = 1;
		val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("utility");
		val.skillDescriptionToken = "AKALI_UTIL_DESCRIPTION";
		val.skillName = "AKALI_UTIL";
		val.skillNameToken = "AKALI_UTIL";
		ContentAddition.AddSkillDef(val);
		component.utility = characterPrefab.AddComponent<GenericSkill>();
		SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
		val2.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)component.utility, "_skillFamily", val2);
		SkillFamily skillFamily = component.utility.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val3 = new Variant
		{
			skillDef = val
		};
		((Variant)(ref val3)).viewableNode = new Node(val.skillNameToken, false, (Node)null);
		variants[0] = val3;
		ContentAddition.AddSkillFamily(skillFamily);
	}

	private void SpecialSetup()
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Expected O, but got Unknown
		//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_023b: Unknown result type (might be due to invalid IL or missing references)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("AKALI_SPEC", "Perfect Execution");
		LanguageAPI.Add("AKALI_SPEC_DESCRIPTION", "Akali dashes to the target enemy, dealing <style=cIsDamage>900% damage</style>. She can dash again, but this time in the target direction dealing the same amount to all enemies she passes through. Enemies hit with health lower than <style=cIsDamage>8%</style> are instantly <style=cIsHealth>executed</style>.");
		LanguageAPI.Add("AKALI_SPEC_2_DESCRIPTION", "Akali executes a powerful dash to the target direction, dealing <style=cIsDamage>1350% damage</style>. She can dash again, but this time in the target direction dealing the same amount to all enemies she passes through. Enemies hit with health lower than <style=cIsDamage>15%</style> are instantly <style=cIsHealth>executed</style>.");
		special = (SkillDef)(object)ScriptableObject.CreateInstance<AkaliSkillDef>();
		special.activationState = new SerializableEntityStateType(typeof(Special));
		special.activationStateMachineName = "Body";
		special.baseMaxStock = 1;
		special.baseRechargeInterval = 12f;
		special.beginSkillCooldownOnSkillEnd = true;
		special.canceledFromSprinting = false;
		special.fullRestockOnAssign = false;
		special.interruptPriority = (InterruptPriority)0;
		special.isCombatSkill = true;
		special.mustKeyPress = true;
		special.cancelSprintingOnActivation = false;
		special.rechargeStock = 1;
		special.requiredStock = 1;
		special.stockToConsume = 1;
		special.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("special");
		special.skillDescriptionToken = "AKALI_SPEC_DESCRIPTION";
		special.skillName = "AKALI_SPEC";
		special.skillNameToken = "AKALI_SPEC";
		ContentAddition.AddSkillDef(special);
		component.special = characterPrefab.AddComponent<GenericSkill>();
		SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
		val.variants = (Variant[])(object)new Variant[1];
		Reflection.SetFieldValue<SkillFamily>((object)component.special, "_skillFamily", val);
		SkillFamily skillFamily = component.special.skillFamily;
		Variant[] variants = skillFamily.variants;
		Variant val2 = new Variant
		{
			skillDef = special
		};
		((Variant)(ref val2)).viewableNode = new Node(special.skillNameToken, false, (Node)null);
		variants[0] = val2;
		ContentAddition.AddSkillFamily(skillFamily);
		specialCast = ScriptableObject.CreateInstance<SkillDef>();
		specialCast.activationState = new SerializableEntityStateType(typeof(SpecialSecondCast));
		specialCast.activationStateMachineName = "Body";
		specialCast.baseMaxStock = 1;
		specialCast.baseRechargeInterval = 0f;
		specialCast.beginSkillCooldownOnSkillEnd = true;
		specialCast.canceledFromSprinting = false;
		specialCast.fullRestockOnAssign = false;
		specialCast.interruptPriority = (InterruptPriority)0;
		specialCast.isCombatSkill = true;
		specialCast.mustKeyPress = true;
		specialCast.cancelSprintingOnActivation = false;
		specialCast.rechargeStock = 0;
		specialCast.requiredStock = 0;
		specialCast.stockToConsume = 0;
		specialCast.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("special2");
		specialCast.skillDescriptionToken = "AKALI_SPEC_2_DESCRIPTION";
		specialCast.skillName = "AKALI_SPEC";
		specialCast.skillNameToken = "AKALI_SPEC";
	}
}
internal class Prefabs
{
	internal static GameObject kunaiBaseProjectileGhost;

	internal static GameObject kunaiBaseProjectile;

	internal static GameObject kunaiSkin04ProjectileGhost;

	internal static GameObject kunaiSkin04Projectile;

	internal static GameObject kunaiSkin12ProjectileGhost;

	internal static GameObject kunaiSkin12Projectile;

	internal static GameObject kunaiSkin15ProjectileGhost;

	internal static GameObject kunaiSkin15Projectile;

	internal static GameObject kunaiSkin16ProjectileGhost;

	internal static GameObject kunaiSkin16Projectile;

	internal static GameObject shurikenBaseProjectileGhost;

	internal static GameObject shurikenBaseProjectile;

	internal static GameObject shurikenSkin04ProjectileGhost;

	internal static GameObject shurikenSkin04Projectile;

	internal static GameObject shurikenSkin12ProjectileGhost;

	internal static GameObject shurikenSkin12Projectile;

	internal static GameObject shurikenSkin15ProjectileGhost;

	internal static GameObject shurikenSkin15Projectile;

	internal static GameObject shurikenSkin16ProjectileGhost;

	internal static GameObject shurikenSkin16Projectile;

	internal static GameObject akaliIndicator;

	internal static GameObject akaliSkin04Indicator;

	internal static GameObject akaliSkin12Indicator;

	internal static GameObject akaliSkin15Indicator;

	internal static GameObject akaliSkin16Indicator;

	internal static GameObject baseImpactEffect;

	internal static GameObject skin12ImpactEffect;

	internal static GameObject skin15ImpactEffect;

	internal static GameObject skin16ImpactEffect;

	internal static GameObject baseUltImpactEffect;

	internal static GameObject skin12UltImpactEffect;

	internal static GameObject skin15UltImpactEffect;

	internal static GameObject skin16UltImpactEffect;

	internal static GameObject baseExecuteImpactEffect;

	internal static GameObject skin12ExecuteImpactEffect;

	internal static GameObject skin15ExecuteImpactEffect;

	internal static GameObject skin16ExecuteImpactEffect;

	internal static GameObject basePassiveIndicator;

	internal static GameObject skin04PassiveIndicator;

	internal static GameObject skin12PassiveIndicator;

	internal static GameObject skin15PassiveIndicator;

	internal static GameObject skin16PassiveIndicator;

	internal static GameObject baseSmokeEffect;

	internal static GameObject skin04SmokeEffect;

	internal static GameObject skin12SmokeEffect;

	internal static GameObject skin15SmokeEffect;

	internal static GameObject skin16SmokeEffect;

	internal static GameObject baseUltSmokeEffect;

	internal static GameObject skin04UltSmokeEffect;

	internal static GameObject skin12UltSmokeEffect;

	internal static GameObject skin15UltSmokeEffect;

	internal static GameObject skin16UltSmokeEffect;

	internal static GameObject baseUltMuzzleFlash;

	internal static GameObject skin04UltMuzzleFlash;

	internal static GameObject skin12UltMuzzleFlash;

	internal static GameObject skin15UltMuzzleFlash;

	internal static GameObject skin16UltMuzzleFlash;

	internal static GameObject basePassiveProcEffect;

	internal static GameObject skin04PassiveProcEffect;

	internal static GameObject skin12PassiveProcEffect;

	internal static GameObject skin15PassiveProcEffect;

	internal static GameObject skin16PassiveProcEffect;

	internal static GameObject basePassiveBuffEffect;

	internal static GameObject skin04PassiveBuffEffect;

	internal static GameObject skin12PassiveBuffEffect;

	internal static GameObject skin15PassiveBuffEffect;

	internal static GameObject skin16PassiveBuffEffect;

	internal static ModdedDamageType kunai;

	internal static BuffDef invis;

	internal static BuffDef temp;

	internal static BuffDef passive { get; set; }

	internal static BuffDef passiveEmpower { get; set; }

	internal static void CreatePrefabs()
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_061e: 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_0657: Unknown result type (might be due to invalid IL or missing references)
		//IL_065c: 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_0695: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_0702: Unknown result type (might be due to invalid IL or missing references)
		//IL_0707: Unknown result type (might be due to invalid IL or missing references)
		//IL_073b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0740: 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_0779: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_07b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_07eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_081f: 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_0858: Unknown result type (might be due to invalid IL or missing references)
		//IL_085d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0891: Unknown result type (might be due to invalid IL or missing references)
		//IL_0896: Unknown result type (might be due to invalid IL or missing references)
		//IL_08ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_08cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0936: Unknown result type (might be due to invalid IL or missing references)
		//IL_0940: Unknown result type (might be due to invalid IL or missing references)
		//IL_0960: Unknown result type (might be due to invalid IL or missing references)
		//IL_0965: Unknown result type (might be due to invalid IL or missing references)
		//IL_09cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_09d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_09f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_09fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a62: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a6c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a8c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a91: Unknown result type (might be due to invalid IL or missing references)
		//IL_0af8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b02: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b22: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b27: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b8e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b98: Unknown result type (might be due to invalid IL or missing references)
		temp = ScriptableObject.CreateInstance<BuffDef>();
		temp.isHidden = true;
		ContentAddition.AddBuffDef(temp);
		invis = ScriptableObject.CreateInstance<BuffDef>();
		invis.buffColor = Color.white;
		invis.iconSprite = Assets.MainAssetBundle.LoadAsset<Sprite>("utility");
		invis.canStack = false;
		invis.isDebuff = false;
		ContentAddition.AddBuffDef(invis);
		passive = ScriptableObject.CreateInstance<BuffDef>();
		passive.buffColor = Color.white;
		passive.iconSprite = Assets.MainAssetBundle.LoadAsset<Sprite>("passive");
		passive.canStack = true;
		passive.isDebuff = false;
		ContentAddition.AddBuffDef(passive);
		passiveEmpower = ScriptableObject.CreateInstance<BuffDef>();
		passiveEmpower.buffColor = Color.white;
		passiveEmpower.iconSprite = null;
		passiveEmpower.canStack = false;
		passiveEmpower.isDebuff = false;
		passiveEmpower.isHidden = true;
		ContentAddition.AddBuffDef(passiveEmpower);
		kunai = DamageAPI.ReserveDamageType();
		akaliIndicator = Utils.NewIndicator("trackerIcon");
		akaliSkin04Indicator = Utils.NewIndicator("skin04TrackerIcon");
		akaliSkin12Indicator = Utils.NewIndicator("skin12TrackerIcon");
		akaliSkin15Indicator = Utils.NewIndicator("skin15TrackerIcon");
		akaliSkin16Indicator = Utils.NewIndicator("skin16TrackerIcon");
		kunaiBaseProjectileGhost = Utils.NewProjectileGhost("baseWeapon");
		kunaiSkin04ProjectileGhost = Utils.NewProjectileGhost("skin04Weapon");
		kunaiSkin12ProjectileGhost = Utils.NewProjectileGhost("skin12Weapon");
		kunaiSkin15ProjectileGhost = Utils.NewProjectileGhost("skin15Weapon");
		kunaiSkin16ProjectileGhost = Utils.NewProjectileGhost("skin16Weapon");
		baseSmokeEffect = Utils.NewSmokeIndicator("baseSmokeEffect");
		skin04SmokeEffect = Utils.NewSmokeIndicator("skin04SmokeEffect");
		skin12SmokeEffect = Utils.NewSmokeIndicator("skin12SmokeEffect");
		skin15SmokeEffect = Utils.NewSmokeIndicator("skin15SmokeEffect");
		skin16SmokeEffect = Utils.NewSmokeIndicator("skin16SmokeEffect");
		baseUltSmokeEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("baseUltSmoke");
		skin04UltSmokeEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin04UltSmoke");
		skin12UltSmokeEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin12UltSmoke");
		skin15UltSmokeEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin15UltSmoke");
		skin16UltSmokeEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin16UltSmoke");
		baseUltMuzzleFlash = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("baseUltMuzzleFlash"), 1f);
		skin04UltMuzzleFlash = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin04UltMuzzleFlash"), 1f);
		skin12UltMuzzleFlash = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin12UltMuzzleFlash"), 1f);
		skin15UltMuzzleFlash = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin15UltMuzzleFlash"), 1f);
		skin16UltMuzzleFlash = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin16UltMuzzleFlash"), 1f);
		basePassiveProcEffect = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("basePassiveProcEffect"), 1f);
		skin04PassiveProcEffect = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin04PassiveProcEffect"), 1f);
		skin12PassiveProcEffect = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin12PassiveProcEffect"), 1f);
		skin15PassiveProcEffect = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin15PassiveProcEffect"), 1f);
		skin16PassiveProcEffect = Utils.RegisterEffect(Assets.MainAssetBundle.LoadAsset<GameObject>("skin16PassiveProcEffect"), 1f);
		basePassiveBuffEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("basePassiveBuffEffect");
		skin04PassiveBuffEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin04PassiveBuffEffect");
		skin12PassiveBuffEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin12PassiveBuffEffect");
		skin15PassiveBuffEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin15PassiveBuffEffect");
		skin16PassiveBuffEffect = Assets.MainAssetBundle.LoadAsset<GameObject>("skin16PassiveBuffEffect");
		kunaiBaseProjectile = Utils.NewProjectile(kunaiBaseProjectileGhost, "KunaiBaseProjectile");
		kunaiBaseProjectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = baseImpactEffect;
		kunaiSkin04Projectile = Utils.NewProjectile(kunaiSkin04ProjectileGhost, "KunaiSkin04Projectile");
		kunaiSkin04Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = baseImpactEffect;
		kunaiSkin12Projectile = Utils.NewProjectile(kunaiSkin12ProjectileGhost, "KunaiSkin12Projectile");
		kunaiSkin12Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = skin12ImpactEffect;
		kunaiSkin15Projectile = Utils.NewProjectile(kunaiSkin15ProjectileGhost, "KunaiSkin15Projectile");
		kunaiSkin15Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = skin15ImpactEffect;
		kunaiSkin16Projectile = Utils.NewProjectile(kunaiSkin16ProjectileGhost, "KunaiSkin16Projectile");
		kunaiSkin16Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = skin16ImpactEffect;
		shurikenBaseProjectileGhost = Utils.NewShurikenProjectileGhost("baseShuriken");
		shurikenSkin04ProjectileGhost = Utils.NewShurikenProjectileGhost("skin04Shuriken");
		shurikenSkin12ProjectileGhost = Utils.NewShurikenProjectileGhost("skin12Shuriken");
		shurikenSkin15ProjectileGhost = Utils.NewShurikenProjectileGhost("skin15Shuriken");
		shurikenSkin16ProjectileGhost = Utils.NewShurikenProjectileGhost("skin16Shuriken");
		shurikenBaseProjectile = Utils.NewShurikenProjectile(shurikenBaseProjectileGhost, "ShurikenBaseProjectile");
		shurikenBaseProjectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = baseImpactEffect;
		shurikenSkin04Projectile = Utils.NewShurikenProjectile(shurikenSkin04ProjectileGhost, "ShurikenSkin04Projectile");
		shurikenSkin04Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = baseImpactEffect;
		shurikenSkin12Projectile = Utils.NewShurikenProjectile(shurikenSkin12ProjectileGhost, "ShurikenSkin12Projectile");
		shurikenSkin12Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = skin12ImpactEffect;
		shurikenSkin15Projectile = Utils.NewShurikenProjectile(shurikenSkin15ProjectileGhost, "ShurikenSkin15Projectile");
		shurikenSkin15Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = skin15ImpactEffect;
		shurikenSkin16Projectile = Utils.NewShurikenProjectile(shurikenSkin16ProjectileGhost, "ShurikenSkin16Projectile");
		shurikenSkin16Projectile.GetComponent<ProjectileSingleTargetImpact>().impactEffect = skin16ImpactEffect;
		baseImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFX.prefab").WaitForCompletion(), "AkaliBaseProjectileImpact", true);
		Utils.RegisterEffect(baseImpactEffect, 1f, "Play_Akali_Base_Q_Hit");
		skin12ImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFX.prefab").WaitForCompletion(), "AkaliSkin12ProjectileImpact", true);
		Utils.RegisterEffect(skin12ImpactEffect, 1f, "Play_Akali_Skin12_Q_Hit");
		skin15ImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFX.prefab").WaitForCompletion(), "AkaliSkin15ProjectileImpact", true);
		Utils.RegisterEffect(skin15ImpactEffect, 1f, "Play_Akali_Skin15_Q_Hit");
		skin16ImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFX.prefab").WaitForCompletion(), "AkaliSkin16ProjectileImpact", true);
		Utils.RegisterEffect(skin16ImpactEffect, 1f, "Play_Akali_Skin16_Q_Hit");
		baseUltImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion(), "AkaliBaseUltImpactEffect", true);
		Utils.RegisterEffect(baseUltImpactEffect, 1f, "Play_Akali_Base_R_Hit");
		skin12UltImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion(), "AkaliSkin12UltImpactEffect", true);
		Utils.RegisterEffect(skin12UltImpactEffect, 1f, "Play_Akali_Skin12_R_Hit");
		skin15UltImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion(), "AkaliSkin15UltImpactEffect", true);
		Utils.RegisterEffect(skin15UltImpactEffect, 1f, "Play_Akali_Skin15_R_Hit");
		skin16UltImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniImpactVFXLarge.prefab").WaitForCompletion(), "AkaliSkin16UltImpactEffect", true);
		Utils.RegisterEffect(skin16UltImpactEffect, 1f, "Play_Akali_Skin16_R_Hit");
		baseExecuteImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/CritsparkHeavy.prefab").WaitForCompletion(), "AkaliBaseExecuteImpactEffect", true);
		Utils.RegisterEffect(baseExecuteImpactEffect, 1f, "Play_Akali_Base_Execute");
		skin12ExecuteImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/CritsparkHeavy.prefab").WaitForCompletion(), "AkaliSkin12ExecuteImpactEffect", true);
		Utils.RegisterEffect(skin12ExecuteImpactEffect, 1f, "Play_Akali_Skin12_Execute");
		skin15ExecuteImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/CritsparkHeavy.prefab").WaitForCompletion(), "AkaliSkin15ExecuteImpactEffect", true);
		Utils.RegisterEffect(skin15ExecuteImpactEffect, 1f, "Play_Akali_Skin15_Execute");
		skin16ExecuteImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/CritsparkHeavy.prefab").WaitForCompletion(), "AkaliSkin16ExecuteImpactEffect", true);
		Utils.RegisterEffect(skin16ExecuteImpactEffect, 1f, "Play_Akali_Skin16_Execute");
		basePassiveIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "AkaliBasePassiveAreaIndicator", false);
		((Component)Array.Find(basePassiveIndicator.GetComponentsInChildren<MeshRenderer>(), (MeshRenderer element) => ((Object)element).name == "Sphere")).gameObject.SetActive(false);
		basePassiveIndicator.AddComponent<RadialIndicatorRotationBehaviour>();
		basePassiveIndicator.transform.localScale = Vector3.one * 45f;
		Utils.NewIndicatorSprite(basePassiveIndicator, "base_passive_indicator");
		skin04PassiveIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "AkaliSkin04PassiveAreaIndicator", false);
		((Component)Array.Find(skin04PassiveIndicator.GetComponentsInChildren<MeshRenderer>(), (MeshRenderer element) => ((Object)element).name == "Sphere")).gameObject.SetActive(false);
		skin04PassiveIndicator.AddComponent<RadialIndicatorRotationBehaviour>();
		skin04PassiveIndicator.transform.localScale = Vector3.one * 45f;
		Utils.NewIndicatorSprite(skin04PassiveIndicator, "skin04_passive_indicator");
		skin12PassiveIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "AkaliSkin12PassiveAreaIndicator", false);
		((Component)Array.Find(skin12PassiveIndicator.GetComponentsInChildren<MeshRenderer>(), (MeshRenderer element) => ((Object)element).name == "Sphere")).gameObject.SetActive(false);
		skin12PassiveIndicator.AddComponent<RadialIndicatorRotationBehaviour>();
		skin12PassiveIndicator.transform.localScale = Vector3.one * 45f;
		Utils.NewIndicatorSprite(skin12PassiveIndicator, "skin12_passive_indicator");
		skin15PassiveIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "AkaliSkin15PassiveAreaIndicator", false);
		((Component)Array.Find(skin15PassiveIndicator.GetComponentsInChildren<MeshRenderer>(), (MeshRenderer element) => ((Object)element).name == "Sphere")).gameObject.SetActive(false);
		skin15PassiveIndicator.AddComponent<RadialIndicatorRotationBehaviour>();
		skin15PassiveIndicator.transform.localScale = Vector3.one * 45f;
		Utils.NewIndicatorSprite(skin15PassiveIndicator, "skin15_passive_indicator");
		skin16PassiveIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab").WaitForCompletion(), "AkaliSkin16PassiveAreaIndicator", false);
		((Component)Array.Find(skin16PassiveIndicator.GetComponentsInChildren<MeshRenderer>(), (MeshRenderer element) => ((Object)element).name == "Sphere")).gameObject.SetActive(false);
		skin16PassiveIndicator.AddComponent<RadialIndicatorRotationBehaviour>();
		skin16PassiveIndicator.transform.localScale = Vector3.one * 45f;
		Utils.NewIndicatorSprite(skin16PassiveIndicator, "skin16_passive_indicator");
	}
}
internal class AkaliBaseState : BaseSkillState
{
	public GameObject kunaiPrefab;

	public GameObject shurikenPrefab;

	public AkaliBehaviour akaliBehaviour;

	public AkaliTrackerBehaviour behaviour;

	public uint primaryCastID;

	public uint secondaryCastID;

	public uint jumpCastID;

	public uint utilityCastID;

	public uint specialCastID;

	public uint special2CastID;

	public GameObject projectileImpactEffect;

	public GameObject ultImpactEffect;

	public GameObject executeImpactEffect;

	public GameObject ultDashEffect;

	public GameObject ultDashMuzzleFlash;

	public GameObject ultDashEffectInstance;

	public GameObject utilitySmokePrefab;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<AkaliTrackerBehaviour>();
		akaliBehaviour = ((EntityState)this).GetComponent<AkaliBehaviour>();
		switch (((EntityState)this).characterBody.skinIndex)
		{
		default:
			kunaiPrefab = Prefabs.kunaiBaseProjectile;
			shurikenPrefab = Prefabs.shurikenBaseProjectile;
			primaryCastID = Sounds.Play_Akali_Base_Q_Cast;
			secondaryCastID = Sounds.Play_Akali_Base_E_Mis;
			jumpCastID = Sounds.Play_Akali_Base_E_Cast;
			utilityCastID = Sounds.Play_Akali_Base_W_Cast;
			specialCastID = Sounds.Play_Akali_Base_R1_Cast;
			special2CastID = Sounds.Play_Akali_Base_R2_Cast;
			projectileImpactEffect = Prefabs.baseImpactEffect;
			ultImpactEffect = Prefabs.baseUltImpactEffect;
			executeImpactEffect = Prefabs.baseExecuteImpactEffect;
			ultDashEffect = Prefabs.baseUltSmokeEffect;
			ultDashMuzzleFlash = Prefabs.baseUltMuzzleFlash;
			utilitySmokePrefab = Prefabs.baseSmokeEffect;
			break;
		case 4u:
			kunaiPrefab = Prefabs.kunaiSkin04Projectile;
			shurikenPrefab = Prefabs.shurikenSkin04Projectile;
			ultDashEffect = Prefabs.skin04UltSmokeEffect;
			ultDashMuzzleFlash = Prefabs.skin04UltMuzzleFlash;
			utilitySmokePrefab = Prefabs.skin04SmokeEffect;
			break;
		case 12u:
			kunaiPrefab = Prefabs.kunaiSkin12Projectile;
			shurikenPrefab = Prefabs.shurikenSkin12Projectile;
			primaryCastID = Sounds.Play_Akali_Skin12_Q_Cast;
			secondaryCastID = Sounds.Play_Akali_Skin12_E_Mis;
			jumpCastID = Sounds.Play_Akali_Skin12_E_Cast;
			utilityCastID = Sounds.Play_Akali_Skin12_W_Cast;
			specialCastID = Sounds.Play_Akali_Skin12_R1_Cast;
			special2CastID = Sounds.Play_Akali_Skin12_R2_Cast;
			projectileImpactEffect = Prefabs.skin12ImpactEffect;
			ultImpactEffect = Prefabs.skin12UltImpactEffect;
			executeImpactEffect = Prefabs.skin12ExecuteImpactEffect;
			ultDashEffect = Prefabs.skin12UltSmokeEffect;
			ultDashMuzzleFlash = Prefabs.skin12UltMuzzleFlash;
			utilitySmokePrefab = Prefabs.skin12SmokeEffect;
			break;
		case 9u:
		case 10u:
		case 15u:
			kunaiPrefab = Prefabs.kunaiSkin15Projectile;
			shurikenPrefab = Prefabs.shurikenSkin15Projectile;
			primaryCastID = Sounds.Play_Akali_Skin15_Q_Cast;
			secondaryCastID = Sounds.Play_Akali_Skin15_E_Mis;
			jumpCastID = Sounds.Play_Akali_Skin15_E_Cast;
			utilityCastID = Sounds.Play_Akali_Skin15_W_Cast;
			specialCastID = Sounds.Play_Akali_Skin15_R1_Cast;
			special2CastID = Sounds.Play_Akali_Skin15_R2_Cast;
			projectileImpactEffect = Prefabs.skin15ImpactEffect;
			ultImpactEffect = Prefabs.skin15UltImpactEffect;
			executeImpactEffect = Prefabs.skin15ExecuteImpactEffect;
			ultDashEffect = Prefabs.skin15UltSmokeEffect;
			ultDashMuzzleFlash = Prefabs.skin15UltMuzzleFlash;
			utilitySmokePrefab = Prefabs.skin15SmokeEffect;
			break;
		case 16u:
			kunaiPrefab = Prefabs.kunaiSkin16Projectile;
			shurikenPrefab = Prefabs.shurikenSkin16Projectile;
			primaryCastID = Sounds.Play_Akali_Skin16_Q_Cast;
			secondaryCastID = Sounds.Play_Akali_Skin16_E_Mis;
			jumpCastID = Sounds.Play_Akali_Skin16_E_Cast;
			utilityCastID = Sounds.Play_Akali_Skin16_W_Cast;
			specialCastID = Sounds.Play_Akali_Skin16_R1_Cast;
			special2CastID = Sounds.Play_Akali_Skin16_R2_Cast;
			projectileImpactEffect = Prefabs.skin16ImpactEffect;
			ultImpactEffect = Prefabs.skin16UltImpactEffect;
			executeImpactEffect = Prefabs.skin16ExecuteImpactEffect;
			ultDashEffect = Prefabs.skin16UltSmokeEffect;
			ultDashMuzzleFlash = Prefabs.skin16UltMuzzleFlash;
			utilitySmokePrefab = Prefabs.skin16SmokeEffect;
			break;
		}
	}

	public void SpawnUltDashEffect()
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		ultDashEffectInstance = Object.Instantiate<GameObject>(ultDashEffect, ((BaseState)this).FindModelChild("effectMuzzle"));
		ultDashEffectInstance.transform.localPosition = Vector3.zero;
	}

	public void DestroyUltDashEffect()
	{
		if (Object.op_Implicit((Object)(object)ultDashEffectInstance))
		{
			EntityState.Destroy((Object)(object)ultDashEffectInstance);
		}
	}
}
internal class AkaliSkillDef : SkillDef
{
	private class InstanceData : BaseSkillInstanceData
	{
		public AkaliTrackerBehaviour behaviour;
	}

	public override BaseSkillInstanceData OnAssigned([NotNull] GenericSkill skillSlot)
	{
		return (BaseSkillInstanceData)(object)new InstanceData
		{
			behaviour = ((Component)skillSlot).GetComponent<AkaliTrackerBehaviour>()
		};
	}

	internal static bool IsExecutable([NotNull] GenericSkill skillSlot)
	{
		AkaliTrackerBehaviour behaviour = ((InstanceData)(object)skillSlot.skillInstanceData).behaviour;
		return behaviour.target && !skillSlot.HasSkillOverrideOfPriority((SkillOverridePriority)4);
	}

	public override bool CanExecute([NotNull] GenericSkill skillSlot)
	{
		return IsExecutable(skillSlot) && ((SkillDef)this).CanExecute(skillSlot);
	}

	public override bool IsReady([NotNull] GenericSkill skillSlot)
	{
		return ((SkillDef)this).IsReady(skillSlot) && IsExecutable(skillSlot);
	}
}
internal class CharacterMain : GenericCharacterMain
{
	private Sprite primary = Assets.MainAssetBundle.LoadAsset<Sprite>("primary");

	private Sprite primary2 = Assets.MainAssetBundle.LoadAsset<Sprite>("primary2");

	private Sprite secondary = Assets.MainAssetBundle.LoadAsset<Sprite>("secondary");

	private Sprite secondary2 = Assets.MainAssetBundle.LoadAsset<Sprite>("secondary2");

	private Sprite special = Assets.MainAssetBundle.LoadAsset<Sprite>("special");

	private Sprite specialCast = Assets.MainAssetBundle.LoadAsset<Sprite>("special2");

	private Sprite special2 = Assets.MainAssetBundle.LoadAsset<Sprite>("specialEx");

	private Sprite specialCast2 = Assets.MainAssetBundle.LoadAsset<Sprite>("special2Ex");

	private bool hasBuff => ((EntityState)this).characterBody.HasBuff(Prefabs.passiveEmpower);

	public override void FixedUpdate()
	{
		((GenericCharacterMain)this).FixedUpdate();
		if (((EntityState)this).characterBody.hasEffectiveAuthority)
		{
			if (hasBuff)
			{
				MainPlugin.primary.icon = primary2;
				MainPlugin.secondary.icon = secondary2;
				MainPlugin.special.icon = special2;
				MainPlugin.specialCast.icon = specialCast2;
			}
			else
			{
				MainPlugin.primary.icon = primary;
				MainPlugin.secondary.icon = secondary;
				MainPlugin.special.icon = special;
				MainPlugin.specialCast.icon = specialCast;
			}
		}
	}
}
internal class Primary : AkaliBaseState
{
	public float duration;

	public float baseDuration = 0.55f;

	public float delay;

	public float baseDelay = 0.15f;

	public float damageCoefficient = 1f;

	public bool hasFired;

	public string layer = "FullBody, Override";

	public string state = "Primary";

	public string param = "M1";

	public int additionalProjectileCount;

	public float hopVelocity = 2.5f;

	public float spread = 4f;

	public override void OnEnter()
	{
		base.OnEnter();
		if (((EntityState)this).characterBody.HasBuff(Prefabs.passiveEmpower))
		{
			damageCoefficient = 1.5f;
		}
		akaliBehaviour.RemoveBuff();
		additionalProjectileCount = Mathf.CeilToInt(3f * ((BaseState)this).attackSpeedStat);
		((BaseState)this).StartAimMode(2f, false);
		duration = baseDuration / ((BaseState)this).attackSpeedStat;
		delay = baseDelay / ((BaseState)this).attackSpeedStat;
		((EntityState)this).PlayAnimation(layer, state, param, duration, 0f);
		if (((BaseState)this).isGrounded)
		{
			((BaseState)this).SmallHop(((EntityState)this).characterMotor, hopVelocity);
		}
	}

	protected virtual void PlaySound()
	{
		AkSoundEngine.PostEvent(primaryCastID, ((EntityState)this).gameObject);
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		((EntityState)this).characterBody.isSprinting = false;
		if (((EntityState)this).fixedAge >= delay && !hasFired)
		{
			hasFired = true;
			FireProjectiles();
		}
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	private void FireProjectiles()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: 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_0033: Expected O, but got Unknown
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d3: 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)
		PlaySound();
		EffectData val = new EffectData
		{
			scale = 0.3f,
			rotation = Quaternion.Euler(90f, -15f, 0f)
		};
		if (((EntityState)this).isAuthority)
		{
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector3 val2 = Vector3.Cross(Vector3.up, ((Ray)(ref aimRay)).direction);
			Vector3 val3 = Vector3.Cross(((Ray)(ref aimRay)).direction, val2);
			float num = spread;
			float num2 = num / (float)(additionalProjectileCount - 1);
			Vector3 val4 = Quaternion.AngleAxis((0f - num) * 0.5f, val3) * ((Ray)(ref aimRay)).direction;
			Quaternion val5 = Quaternion.AngleAxis(num2, val3);
			Ray val6 = default(Ray);
			((Ray)(ref val6))..ctor(((Ray)(ref aimRay)).origin, val4);
			for (int i = 0; i < additionalProjectileCount; i++)
			{
				NewProjectile(((Ray)(ref val6)).direction, aimRay);
				((Ray)(ref val6)).direction = val5 * ((Ray)(ref val6)).direction;
			}
		}
	}

	protected virtual void NewProjectile(Vector3 direction, Ray aimRay)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		ProjectileManager.instance.FireProjectile(kunaiPrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 120f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
	}

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

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)2;
	}
}
internal class Secondary : Primary
{
	public float speedCoefficient = 120f;

	public Vector3 direction;

	private uint ID;

	public override void OnEnter()
	{
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		state = "Secondary";
		param = layer;
		baseDuration = 0.4f;
		baseDelay = 0.1f;
		hopVelocity = 18f;
		spread = 12f;
		base.OnEnter();
		if (((EntityState)this).characterBody.HasBuff(Prefabs.passiveEmpower))
		{
			damageCoefficient = 2.25f;
		}
		else
		{
			damageCoefficient = 1.5f;
		}
		akaliBehaviour.RemoveBuff();
		duration = baseDuration;
		delay = baseDelay;
		additionalProjectileCount = 5;
		direction = -((EntityState)this).inputBank.aimDirection;
		AkSoundEngine.PostEvent(jumpCastID, ((EntityState)this).gameObject);
	}

	protected override void PlaySound()
	{
		ID = AkSoundEngine.PostEvent(jumpCastID, ((EntityState)this).gameObject);
	}

	protected override void NewProjectile(Vector3 direction, Ray aimRay)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		ProjectileManager.instance.FireProjectile(shurikenPrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 120f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, 220f);
	}

	public override void FixedUpdate()
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		base.FixedUpdate();
		if (((EntityState)this).fixedAge <= duration - delay && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).inputBank))
		{
			((EntityState)this).characterMotor.velocity = Vector3.zero;
			CharacterMotor characterMotor = ((EntityState)this).characterMotor;
			characterMotor.rootMotion += direction * (speedCoefficient * Time.fixedDeltaTime);
		}
	}

	public override void OnExit()
	{
		base.OnExit();
		AkSoundEngine.StopPlayingID(ID);
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
internal class SpecialDash : AkaliBaseState
{
	public float duration = 0.25f;

	public Vector3 dashVector;

	public float speedCoefficient = 360f;

	public override void OnEnter()
	{
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		base.OnEnter();
		((EntityState)this).PlayAnimation("Ult, Override", "special", "Special", duration, 0f);
		((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal;
		if (NetworkServer.active)
		{
			((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility);
		}
		if (((EntityState)this).isAuthority)
		{
			((BaseState)this).SmallHop(((EntityState)this).characterMotor, 12f);
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
		{
		}
		EffectManager.SimpleEffect(ultDashMuzzleFlash, ((EntityState)this).characterBody.corePosition, Util.QuaternionSafeLookRotation(((EntityState)this).characterDirection.forward, Vector3.up), false);
		SpawnUltDashEffect();
	}

	public override void FixedUpdate()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
		{
			Vector2 val = Util.Vector3XZToVector2XY(dashVector);
			if (val != Vector2.zero)
			{
				((Vector2)(ref val)).Normalize();
				Vector3 val2 = new Vector3(val.x, 0f, val.y);
				Vector3 normalized = ((Vector3)(ref val2)).normalized;
				((EntityState)this).characterDirection.moveVector = normalized;
			}
		}
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
		{
			CharacterMotor characterMotor = ((EntityState)this).characterMotor;
			characterMotor.rootMotion += dashVector * (speedCoefficient * Time.fixedDeltaTime);
		}
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		DestroyUltDashEffect();
		if (NetworkServer.active)
		{
			((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility);
			((EntityState)this).characterBody.RemoveBuff(Prefabs.passiveEmpower);
		}
		((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal;
	}
}
internal class Special : SpecialDash
{
	private HurtBox target;

	private float damageCoefficient;

	private bool hasHit = false;

	public override void OnEnter()
	{
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		base.OnEnter();
		if (((EntityState)this).characterBody.HasBuff(Prefabs.passiveEmpower))
		{
			damageCoefficient = 13.5f;
		}
		else
		{
			damageCoefficient = 9f;
		}
		akaliBehaviour.RemoveBuff();
		if (Object.op_Implicit((Object)(object)behaviour) && behaviour.target)
		{
			target = ((HuntressTracker)behaviour).GetTrackingTarget();
			Vector3 val = ((Component)target).transform.position - ((EntityState)this).transform.position;
			dashVector = ((Vector3)(ref val)).normalized;
		}
		AkSoundEngine.PostEvent(specialCastID, ((EntityState)this).gameObject);
	}

	public override void FixedUpdate()
	{
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0108: Expected O, but got Unknown
		//IL_0138: 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_0151: 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_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_016e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_017b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		base.FixedUpdate();
		if (Object.op_Implicit((Object)(object)target) && Object.op_Implicit((Object)(object)target.healthComponent) && Object.op_Implicit((Object)(object)target.healthComponent.body) && Vector3.Distance(((EntityState)this).characterBody.corePosition, target.healthComponent.body.corePosition) <= 10f && !hasHit)
		{
			hasHit = true;
			if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator) && Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.special) && !((EntityState)this).skillLocator.special.HasSkillOverrideOfPriority((SkillOverridePriority)4))
			{
				((EntityState)this).skillLocator.special.SetSkillOverride((object)((EntityState)this).gameObject, MainPlugin.specialCast, (SkillOverridePriority)4);
			}
			if (NetworkServer.active)
			{
				Vector3 corePosition = target.healthComponent.body.corePosition;
				DamageInfo val = new DamageInfo();
				val.damage = ((BaseState)this).damageStat * damageCoefficient;
				val.attacker = ((EntityState)this).gameObject;
				val.inflictor = ((EntityState)this).gameObject;
				val.force = Vector3.zero;
				val.crit = false;
				val.procChainMask = default(ProcChainMask);
				val.procCoefficient = 0f;
				val.position = corePosition;
				val.damageColorIndex = (DamageColorIndex)5;
				val.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
				DamageAPI.AddModdedDamageType(val, Prefabs.kunai);
				target.healthComponent.TakeDamage(val);
				EffectManager.SimpleEffect(ultImpactEffect, corePosition, Quaternion.identity, true);
			}
		}
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)1;
	}
}
internal class SpecialSecondCast : SpecialDash
{
	private float executePercent;

	private float damageCoefficient;

	public override void OnEnter()
	{
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		base.OnEnter();
		if (((EntityState)this).characterBody.HasBuff(Prefabs.passiveEmpower))
		{
			damageCoefficient = 13.5f;
			executePercent = 0.15f;
		}
		else
		{
			damageCoefficient = 9f;
			executePercent = 0.08f;
		}
		akaliBehaviour.RemoveBuff();
		speedCoefficient = 480f;
		Ray aimRay = ((BaseState)this).GetAimRay();
		dashVector = ((Ray)(ref aimRay)).direction;
		AkSoundEngine.PostEvent(special2CastID, ((EntityState)this).gameObject);
	}

	public override void FixedUpdate()
	{
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0189: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Expected O, but got Unknown
		//IL_022a: 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_0243: 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_0259: Unknown result type (might be due to invalid IL or missing references)
		//IL_0261: Unknown result type (might be due to invalid IL or missing references)
		//IL_0269: Unknown result type (might be due to invalid IL or missing references)
		//IL_026e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0275: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: 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_01ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d0: Unknown result type (might be du