Decompiled source of Shyvana v1.0.3

Shyvana.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Croco;
using EntityStates.Huntress;
using EntityStates.LemurianBruiserMonster;
using EntityStates.Mage;
using EntityStates.Merc;
using KinematicCharacterController;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Bindings;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.UI;

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

internal class Assets
{
	public static AssetBundle MainAssetBundle;

	public static T Load<T>(string name) where T : Object
	{
		return MainAssetBundle.LoadAsset<T>(name);
	}

	public static void PopulateAssets()
	{
		if ((Object)(object)MainAssetBundle == (Object)null)
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Shyvana.shyvanaassets");
			MainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("Shyvana.Shyvana.bnk");
		byte[] array = new byte[stream2.Length];
		stream2.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}
}
internal class AnimEventsBehaviour : MonoBehaviour
{
	public void WingFlap()
	{
		AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Wing_Flap, ((Component)this).gameObject);
	}
}
internal class BezierCurveLineScaler : BezierCurveLine
{
	private int size = 98;

	private void FixedUpdate()
	{
		//IL_0008: 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)
		size = Mathf.RoundToInt(Util.Remap(Vector3.Distance(((Component)this).transform.position, base.endTransform.position), 0f, 280f, 24f, 98f));
		if (((BezierCurveLine)this).lineRenderer.numPositions != size)
		{
			((BezierCurveLine)this).lineRenderer.numPositions = size;
			Array.Resize(ref base.vertexList, size + 1);
		}
	}
}
internal class DisplayAnimEventBehaviour : MonoBehaviour
{
	private uint ID;

	private GameObject wings;

	private void OnEnable()
	{
		ID = AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Recall, ((Component)this).gameObject);
		wings = ((Component)((Component)this).GetComponent<ChildLocator>().FindChild("wings")).gameObject;
	}

	public void EnableWings()
	{
		wings.SetActive(true);
	}

	private void OnDisable()
	{
		AkSoundEngine.StopPlayingID(ID);
	}
}
internal class MasterBehaviour : MonoBehaviour
{
	public CharacterMaster master;

	public ShyvanaBehaviour behaviour;

	public CharacterBody body;

	public float maxPowerupValue = 2f;

	public float powerupValue = 2f;

	public float stopwatch = 0f;

	public GameObject powerupBar;

	public TextMeshProUGUI currentPowerup;

	public Image barImage;

	public bool transformed;

	public bool despawned;

	public Vector3[] positions;

	public float passivePowerupGain
	{
		get
		{
			if (MainPlugin.enableDragonDuration.Value && transformed)
			{
				return (0f - maxPowerupValue) / MainPlugin.minDragonDuration.Value;
			}
			return transformed ? (-0.04f) : 0.02f;
		}
	}

	public void AddFury(float value)
	{
		powerupValue += value;
	}

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

	private void OnEnable()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		HUD.Update += new hook_Update(HUD_Update);
		Stage.onStageStartGlobal += delegate
		{
			powerupBar = null;
			positions = Array.Empty<Vector3>();
		};
	}

	private void OnDisable()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		HUD.Update -= new hook_Update(HUD_Update);
	}

	private void HUD_Update(orig_Update orig, HUD self)
	{
		orig.Invoke(self);
		if (!Object.op_Implicit((Object)(object)master) || !Object.op_Implicit((Object)(object)self.targetMaster) || !((Object)(object)self.targetMaster == (Object)(object)master))
		{
			return;
		}
		if (Object.op_Implicit((Object)(object)barImage) && Object.op_Implicit((Object)(object)currentPowerup))
		{
			barImage.fillAmount = powerupValue / maxPowerupValue;
			string text = Mathf.Clamp((float)Mathf.RoundToInt(powerupValue * 100f), 0f, maxPowerupValue * 100f).ToString();
			((TMP_Text)currentPowerup).text = text;
		}
		if (!Object.op_Implicit((Object)(object)self.mainUIPanel) || Object.op_Implicit((Object)(object)powerupBar))
		{
			return;
		}
		HealthBar componentInChildren = self.mainUIPanel.GetComponentInChildren<HealthBar>();
		if (Object.op_Implicit((Object)(object)componentInChildren) && Object.op_Implicit((Object)(object)((Component)componentInChildren).gameObject))
		{
			Image[] componentsInChildren = ((Component)componentInChildren).gameObject.GetComponentsInChildren<Image>();
			if (componentsInChildren.Length >= 5 && Object.op_Implicit((Object)(object)self.targetBodyObject) && Util.HasEffectiveAuthority(self.targetBodyObject))
			{
				AddBar(((Component)componentInChildren).gameObject);
			}
		}
	}

	private void AddBar(GameObject healthBar)
	{
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		powerupBar = Object.Instantiate<GameObject>(healthBar, healthBar.transform.parent);
		((Object)powerupBar).name = "PowerupBar";
		Object.Destroy((Object)(object)powerupBar.GetComponent<HealthBar>());
		TextMeshProUGUI[] componentsInChildren = powerupBar.GetComponentsInChildren<TextMeshProUGUI>();
		for (int i = 0; i < componentsInChildren.Length; i++)
		{
			if (Object.op_Implicit((Object)(object)componentsInChildren[i]) && Object.op_Implicit((Object)(object)((Component)componentsInChildren[i]).gameObject))
			{
				if (((Object)((Component)componentsInChildren[i]).gameObject).name == "CurrentHealthText")
				{
					currentPowerup = componentsInChildren[i];
					((TMP_Text)currentPowerup).text = "0";
				}
				if (((Object)((Component)componentsInChildren[i]).gameObject).name == "FullHealthText")
				{
					((TMP_Text)componentsInChildren[i]).text = (maxPowerupValue * 100f).ToString();
				}
			}
		}
		Image[] componentsInChildren2 = powerupBar.GetComponentsInChildren<Image>();
		for (int j = 0; j < componentsInChildren2.Length; j++)
		{
			if (Object.op_Implicit((Object)(object)componentsInChildren2[j]) && Object.op_Implicit((Object)(object)((Component)componentsInChildren2[j]).gameObject))
			{
				if ((Object)(object)componentsInChildren2[j] != (Object)(object)componentsInChildren2[3] && (Object)(object)componentsInChildren2[j] != (Object)(object)componentsInChildren2[0])
				{
					Object.Destroy((Object)(object)((Component)componentsInChildren2[j]).gameObject);
				}
				if ((Object)(object)componentsInChildren2[j] == (Object)(object)componentsInChildren2[3])
				{
					barImage = componentsInChildren2[j];
					((Graphic)barImage).color = new Color(0.61176f, 0.04314f, 0.07059f);
					barImage.type = (Type)3;
					barImage.fillMethod = (FillMethod)0;
					barImage.fillCenter = false;
				}
			}
		}
	}

	private void FixedUpdate()
	{
		if (Object.op_Implicit((Object)(object)master) && !Object.op_Implicit((Object)(object)body))
		{
			body = master.GetBody();
		}
		if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)body))
		{
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= 1f)
			{
				stopwatch = 0f;
				powerupValue += passivePowerupGain;
			}
			powerupValue = Mathf.Clamp(powerupValue, 0f, maxPowerupValue);
			if (Object.op_Implicit((Object)(object)body) && transformed && powerupValue <= 0f && Object.op_Implicit((Object)(object)behaviour) && behaviour.canExecute)
			{
				Detransform();
			}
		}
	}

	private void Detransform()
	{
		transformed = false;
		despawned = true;
		if (Object.op_Implicit((Object)(object)body) && body.hasEffectiveAuthority)
		{
			behaviour.CallCmdTransformBody("ShyvanaBody");
		}
	}
}
internal class ShyvanaBehaviour : NetworkBehaviour
{
	public bool canExecute = true;

	private CharacterBody body;

	private CharacterMaster master;

	public MasterBehaviour behaviour;

	public float powerupValue;

	public GameObject effect;

	public uint ID;

	private static int kCmdCmdAddFury;

	private static int kRpcRpcAddFury;

	private static int kCmdCmdTransformBody;

	public void AddFury(float value)
	{
		if (Object.op_Implicit((Object)(object)behaviour.behaviour))
		{
			behaviour.AddFury(value);
		}
	}

	[Command]
	public void CmdAddFury(float value)
	{
		if (Object.op_Implicit((Object)(object)behaviour.behaviour))
		{
			CallRpcAddFury(value);
		}
	}

	[ClientRpc]
	public void RpcAddFury(float value)
	{
		if (Object.op_Implicit((Object)(object)behaviour.behaviour))
		{
			behaviour.AddFury(value);
		}
	}

	[Command]
	public void CmdTransformBody(string bodyName)
	{
		if (Object.op_Implicit((Object)(object)master))
		{
			master.TransformBody(bodyName);
		}
	}

	private void OnEnable()
	{
		body = ((Component)this).GetComponent<CharacterBody>();
		if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.masterObject))
		{
			master = body.master;
			behaviour = body.masterObject.GetComponent<MasterBehaviour>();
			if (Object.op_Implicit((Object)(object)behaviour))
			{
				behaviour.behaviour = this;
			}
		}
	}

	private void FixedUpdate()
	{
		if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.masterObject))
		{
			if (!Object.op_Implicit((Object)(object)master))
			{
				master = body.masterObject.GetComponent<CharacterMaster>();
			}
			if (!Object.op_Implicit((Object)(object)behaviour))
			{
				behaviour = body.masterObject.GetComponent<MasterBehaviour>();
				if (!Object.op_Implicit((Object)(object)behaviour))
				{
					behaviour = body.masterObject.AddComponent<MasterBehaviour>();
					if (Object.op_Implicit((Object)(object)behaviour))
					{
						behaviour.behaviour = this;
					}
				}
			}
			else if (!Object.op_Implicit((Object)(object)behaviour.behaviour))
			{
				behaviour.behaviour = this;
			}
		}
		if (Object.op_Implicit((Object)(object)behaviour))
		{
			powerupValue = behaviour.powerupValue;
		}
	}

	private void UNetVersion()
	{
	}

	protected static void InvokeCmdCmdAddFury(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"Command CmdAddFury called on client.");
		}
		else
		{
			((ShyvanaBehaviour)(object)obj).CmdAddFury(reader.ReadSingle());
		}
	}

	protected static void InvokeCmdCmdTransformBody(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"Command CmdTransformBody called on client.");
		}
		else
		{
			((ShyvanaBehaviour)(object)obj).CmdTransformBody(reader.ReadString());
		}
	}

	public void CallCmdAddFury(float value)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"Command function CmdAddFury called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdAddFury(value);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdAddFury);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(value);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdAddFury");
	}

	public void CallCmdTransformBody(string bodyName)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"Command function CmdTransformBody called on server.");
			return;
		}
		if (((NetworkBehaviour)this).isServer)
		{
			CmdTransformBody(bodyName);
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)5);
		val.WritePackedUInt32((uint)kCmdCmdTransformBody);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(bodyName);
		((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdTransformBody");
	}

	protected static void InvokeRpcRpcAddFury(NetworkBehaviour obj, NetworkReader reader)
	{
		if (!NetworkClient.active)
		{
			Debug.LogError((object)"RPC RpcAddFury called on server.");
		}
		else
		{
			((ShyvanaBehaviour)(object)obj).RpcAddFury(reader.ReadSingle());
		}
	}

	public void CallRpcAddFury(float value)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Expected O, but got Unknown
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkServer.active)
		{
			Debug.LogError((object)"RPC Function RpcAddFury called on client.");
			return;
		}
		NetworkWriter val = new NetworkWriter();
		val.Write((short)0);
		val.Write((short)2);
		val.WritePackedUInt32((uint)kRpcRpcAddFury);
		val.Write(((Component)this).GetComponent<NetworkIdentity>().netId);
		val.Write(value);
		((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcAddFury");
	}

	static ShyvanaBehaviour()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Expected O, but got Unknown
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Expected O, but got Unknown
		kCmdCmdAddFury = 176434748;
		NetworkBehaviour.RegisterCommandDelegate(typeof(ShyvanaBehaviour), kCmdCmdAddFury, new CmdDelegate(InvokeCmdCmdAddFury));
		kCmdCmdTransformBody = 418286099;
		NetworkBehaviour.RegisterCommandDelegate(typeof(ShyvanaBehaviour), kCmdCmdTransformBody, new CmdDelegate(InvokeCmdCmdTransformBody));
		kRpcRpcAddFury = -1349243482;
		NetworkBehaviour.RegisterRpcDelegate(typeof(ShyvanaBehaviour), kRpcRpcAddFury, new CmdDelegate(InvokeRpcRpcAddFury));
		NetworkCRC.RegisterBehaviour("ShyvanaBehaviour", 0);
	}

	public override bool OnSerialize(NetworkWriter writer, bool forceAll)
	{
		bool result = default(bool);
		return result;
	}

	public override void OnDeserialize(NetworkReader reader, bool initialState)
	{
	}
}
internal class Hook
{
	private static int tick;

	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_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Invalid comparison between Unknown and I4
		//IL_0053: 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_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		if (DamageAPI.HasModdedDamageType(damageInfo, Prefabs.ruin) && Object.op_Implicit((Object)(object)damageInfo.attacker))
		{
			tick++;
			HealthComponent component = damageInfo.attacker.GetComponent<HealthComponent>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.Heal(damageInfo.damage * 0.2f, default(ProcChainMask), true);
			}
		}
		if ((int)damageInfo.damageType == 131136 && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<ShyvanaBehaviour>()))
		{
			damageInfo.damageType = (DamageType)0;
			HealthComponent component2 = damageInfo.attacker.GetComponent<HealthComponent>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.Heal(component2.fullHealth * 0.025f, default(ProcChainMask), true);
			}
		}
		orig.Invoke(self, damageInfo);
	}

	private static void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
	{
		if (sender.HasBuff(Prefabs.flameBuff))
		{
			args.armorAdd += 25f;
			args.moveSpeedMultAdd += 1.25f;
		}
	}
}
[BepInPlugin("com.Dragonyck.Shyvana", "Shyvana", "1.0.2")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInIncompatibility("com.Wolfo.WolfoQualityOfLife")]
[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.*/)]
public class MainPlugin : BaseUnityPlugin
{
	public const string MODUID = "com.Dragonyck.Shyvana";

	public const string MODNAME = "Shyvana";

	public const string VERSION = "1.0.2";

	public const string SURVIVORNAME = "Shyvana";

	public const string SURVIVORNAMEKEY = "SHYVANA";

	public const string DSURVIVORNAME = "Shyvana (Dragon Form)";

	public const string DSURVIVORNAMEKEY = "DRAGONSHYVANA";

	public static GameObject characterPrefab;

	public static GameObject dragonCharacterPrefab;

	public static readonly Color characterColor = new Color(0.02745f, 0.92549f, 0.61176f);

	protected internal static ConfigEntry<bool> enableDragonDuration;

	protected internal static ConfigEntry<float> minDragonDuration;

	private void Awake()
	{
		//IL_0011: 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_002c: Expected O, but got Unknown
		//IL_002c: Expected O, but got Unknown
		//IL_0041: 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_0060: Expected O, but got Unknown
		//IL_0060: Expected O, but got Unknown
		enableDragonDuration = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Enable Dragon Form Minimum Duration", "Value"), false, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>()));
		minDragonDuration = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Minimum Dragon Form Duration", "Value"), 40f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>()));
		Assets.PopulateAssets();
		Prefabs.CreatePrefabs();
		CreatePrefab();
		CreateDragonPrefab();
		RegisterStates();
		RegisterCharacter();
		Hook.Hooks();
	}

	internal static void CreatePrefab()
	{
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Expected O, but got Unknown
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: 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_0108: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Expected O, but got Unknown
		//IL_0145: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: Unknown result type (might be due to invalid IL or missing references)
		//IL_018a: 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_01b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_034a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0395: Unknown result type (might be due to invalid IL or missing references)
		//IL_039a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0417: Unknown result type (might be due to invalid IL or missing references)
		//IL_041c: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_04df: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_059e: Unknown result type (might be due to invalid IL or missing references)
		//IL_066a: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0761: Unknown result type (might be due to invalid IL or missing references)
		//IL_0766: Unknown result type (might be due to invalid IL or missing references)
		//IL_0777: Unknown result type (might be due to invalid IL or missing references)
		//IL_077c: Unknown result type (might be due to invalid IL or missing references)
		//IL_07aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_07af: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoBody.prefab");
		characterPrefab = PrefabAPI.InstantiateClone(val, "ShyvanaBody", true);
		characterPrefab.AddComponent<ShyvanaBehaviour>();
		characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
		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 val2 = Assets.MainAssetBundle.LoadAsset<GameObject>("shyvana");
		GameObject val3 = new GameObject("ModelBase");
		val3.transform.parent = characterPrefab.transform;
		val3.transform.localPosition = new Vector3(0f, -0.94f, 0f);
		val3.transform.localRotation = Quaternion.identity;
		val3.transform.localScale = Vector3.one * 1.3f;
		GameObject val4 = new GameObject("AimOrigin");
		val4.transform.parent = val3.transform;
		val4.transform.localPosition = new Vector3(0f, 1.4f, 0f);
		val4.transform.localRotation = Quaternion.identity;
		val4.transform.localScale = Vector3.one;
		Transform transform = val2.transform;
		transform.parent = val3.transform;
		transform.localPosition = Vector3.zero;
		transform.localScale = new Vector3(1f, 1f, 1f);
		transform.localRotation = Quaternion.identity;
		CharacterDirection component = characterPrefab.GetComponent<CharacterDirection>();
		component.targetTransform = val3.transform;
		component.modelAnimator = val2.GetComponentInChildren<Animator>();
		CharacterBody component2 = characterPrefab.GetComponent<CharacterBody>();
		((Object)component2).name = "ShyvanaBody";
		component2.baseNameToken = "SHYVANA_NAME";
		component2.subtitleNameToken = "SHYVANA_SUBTITLE";
		component2.bodyFlags = (BodyFlags)16;
		component2.rootMotionInMainState = false;
		component2.mainRootSpeed = 0f;
		component2.baseMaxHealth = 160f;
		component2.levelMaxHealth = 48f;
		component2.baseRegen = 2.5f;
		component2.levelRegen = 0.5f;
		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 = 1;
		component2.sprintingSpeedMultiplier = 1.45f;
		component2.wasLucky = false;
		component2.hideCrosshair = false;
		component2.aimOriginTransform = val4.transform;
		component2.hullClassification = (HullClassification)0;
		component2.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portrait").texture;
		component2._defaultCrosshairPrefab = Prefabs.Load<GameObject>("RoR2/Base/UI/SimpleDotCrosshair.prefab");
		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;
		CameraTargetParams component4 = characterPrefab.GetComponent<CameraTargetParams>();
		component4.cameraParams = Prefabs.Load<CharacterCameraParams>("RoR2/Base/Common/ccpStandardMelee.asset");
		component4.cameraPivotTransform = null;
		component4.recoil = Vector2.zero;
		component4.dontRaycastToPivot = false;
		ModelLocator component5 = characterPrefab.GetComponent<ModelLocator>();
		component5.modelTransform = transform;
		component5.modelBaseTransform = val3.transform;
		component5.dontReleaseModelOnDeath = false;
		component5.autoUpdateModelTransform = true;
		component5.dontDetatchFromParent = false;
		component5.noCorpse = false;
		component5.normalizeToFloor = false;
		component5.preserveModel = false;
		CharacterModel val5 = val2.AddComponent<CharacterModel>();
		SkinnedMeshRenderer[] componentsInChildren = val2.GetComponentsInChildren<SkinnedMeshRenderer>(true);
		List<RendererInfo> list = new List<RendererInfo>();
		for (int i = 0; i < componentsInChildren.Length; i++)
		{
			Material val6 = Utils.InstantiateMaterial(((Renderer)componentsInChildren[i]).material.mainTexture);
			((Renderer)componentsInChildren[i]).material = val6;
			list.Add(new RendererInfo
			{
				renderer = (Renderer)(object)componentsInChildren[i],
				defaultMaterial = val6,
				defaultShadowCastingMode = (ShadowCastingMode)1,
				ignoreOverlays = false
			});
		}
		RendererInfo[] array = list.ToArray();
		val5.body = component2;
		val5.baseRendererInfos = array;
		val5.autoPopulateLightInfos = true;
		val5.invisibilityCount = 0;
		val5.temporaryOverlays = new List<TemporaryOverlay>();
		val5.mainSkinnedMeshRenderer = componentsInChildren[0];
		((Component)val2.GetComponent<ChildLocator>().FindChild("wings")).gameObject.SetActive(false);
		GameObject gameObject = ((Component)transform).gameObject;
		ModelSkinController val7 = gameObject.AddComponent<ModelSkinController>();
		LanguageAPI.Add("SHYVANABODY_DEFAULT_SKIN_NAME", "Ruined");
		val7.skins = (SkinDef[])(object)new SkinDef[1] { LoadoutAPI.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(componentsInChildren, gameObject, "SHYVANABODY_DEFAULT_SKIN_NAME", array)) };
		HealthComponent component6 = characterPrefab.GetComponent<HealthComponent>();
		component6.health = component2.baseMaxHealth;
		component6.shield = 0f;
		component6.barrier = 0f;
		component6.magnetiCharge = 0f;
		component6.body = null;
		component6.dontShowHealthbar = false;
		component6.globalDeathEventChanceCoefficient = 1f;
		CapsuleCollider[] componentsInChildren2 = val2.GetComponentsInChildren<CapsuleCollider>();
		HurtBoxGroup val8 = val2.AddComponent<HurtBoxGroup>();
		List<HurtBox> list2 = new List<HurtBox>();
		CapsuleCollider[] array2 = componentsInChildren2;
		foreach (CapsuleCollider val9 in array2)
		{
			HurtBox val10 = ((Component)val9).gameObject.AddComponent<HurtBox>();
			((Component)val10).gameObject.layer = LayerIndex.entityPrecise.intVal;
			val10.healthComponent = component6;
			val10.isBullseye = true;
			val10.damageModifier = (DamageModifier)0;
			val10.hurtBoxGroup = val8;
			val10.indexInGroup = 0;
			val8.mainHurtBox = val10;
			val8.bullseyeCount = 1;
			list2.Add(val10);
		}
		val8.hurtBoxes = list2.ToArray();
		Utils.CreateHitbox("Swing", val2.transform, new Vector3(4.2f, 4.2f, 4.7f)).transform.localPosition = new Vector3(0f, 1f, 1.5f);
		KinematicCharacterMotor component7 = characterPrefab.GetComponent<KinematicCharacterMotor>();
		component7.CharacterController = (BaseCharacterController)(object)component3;
		FootstepHandler val11 = val2.AddComponent<FootstepHandler>();
		val11.baseFootstepString = "Play_player_footstep";
		val11.sprintFootstepOverrideString = "";
		val11.enableFootstepDust = true;
		val11.footstepDustPrefab = Prefabs.Load<GameObject>("RoR2/Base/Common/VFX/GenericFootstepDust.prefab");
		EntityStateMachine component8 = ((Component)component2).GetComponent<EntityStateMachine>();
		component8.initialStateType = new SerializableEntityStateType(typeof(ShyvanaSpawnState));
		component8.mainStateType = new SerializableEntityStateType(typeof(GenericCharacterMain));
		CharacterDeathBehavior component9 = characterPrefab.GetComponent<CharacterDeathBehavior>();
		component9.deathStateMachine = characterPrefab.GetComponent<EntityStateMachine>();
		component9.deathState = new SerializableEntityStateType(typeof(GenericCharacterDeath));
		Utils.NewStateMachine<Idle>(characterPrefab, "Burnout");
		NetworkStateMachine component10 = ((Component)component2).GetComponent<NetworkStateMachine>();
		component10.stateMachines = ((Component)component2).GetComponents<EntityStateMachine>();
		ContentAddition.AddBody(characterPrefab);
	}

	internal static void CreateDragonPrefab()
	{
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: Expected O, but got Unknown
		//IL_00e3: 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_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Expected O, but got Unknown
		//IL_014c: Unknown result type (might be due to invalid IL or missing references)
		//IL_015d: Unknown result type (might be due to invalid IL or missing references)
		//IL_016e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0191: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0352: Unknown result type (might be due to invalid IL or missing references)
		//IL_039d: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_041f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0424: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_061a: Unknown result type (might be due to invalid IL or missing references)
		//IL_068c: Unknown result type (might be due to invalid IL or missing references)
		//IL_06aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_072c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0731: Unknown result type (might be due to invalid IL or missing references)
		//IL_0742: Unknown result type (might be due to invalid IL or missing references)
		//IL_0747: Unknown result type (might be due to invalid IL or missing references)
		//IL_0775: Unknown result type (might be due to invalid IL or missing references)
		//IL_077a: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoBody.prefab");
		dragonCharacterPrefab = PrefabAPI.InstantiateClone(val, "DragonShyvanaBody", true);
		dragonCharacterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
		dragonCharacterPrefab.AddComponent<ShyvanaBehaviour>();
		Object.Destroy((Object)(object)((Component)dragonCharacterPrefab.transform.Find("ModelBase")).gameObject);
		Object.Destroy((Object)(object)((Component)dragonCharacterPrefab.transform.Find("CameraPivot")).gameObject);
		Object.Destroy((Object)(object)((Component)dragonCharacterPrefab.transform.Find("AimOrigin")).gameObject);
		GameObject val2 = Assets.MainAssetBundle.LoadAsset<GameObject>("dragon");
		val2.AddComponent<AnimEventsBehaviour>();
		GameObject val3 = new GameObject("ModelBase");
		val3.transform.parent = dragonCharacterPrefab.transform;
		val3.transform.localPosition = new Vector3(0f, -0.94f, 0f);
		val3.transform.localRotation = Quaternion.identity;
		val3.transform.localScale = Vector3.one * 2f;
		GameObject val4 = new GameObject("AimOrigin");
		val4.transform.parent = val3.transform;
		val4.transform.localPosition = new Vector3(0f, 2.4f, 0f);
		val4.transform.localRotation = Quaternion.identity;
		val4.transform.localScale = Vector3.one;
		Transform transform = val2.transform;
		transform.parent = val3.transform;
		transform.localPosition = Vector3.zero;
		transform.localScale = new Vector3(1f, 1f, 1f);
		transform.localRotation = Quaternion.identity;
		CharacterDirection component = dragonCharacterPrefab.GetComponent<CharacterDirection>();
		component.targetTransform = val3.transform;
		component.modelAnimator = val2.GetComponentInChildren<Animator>();
		CharacterBody component2 = dragonCharacterPrefab.GetComponent<CharacterBody>();
		((Object)component2).name = "DragonShyvanaBody";
		component2.baseNameToken = "DRAGONSHYVANA_NAME";
		component2.subtitleNameToken = "DRAGONSHYVANA_SUBTITLE";
		component2.bodyFlags = (BodyFlags)16;
		component2.rootMotionInMainState = false;
		component2.mainRootSpeed = 0f;
		component2.baseMaxHealth = 410f;
		component2.levelMaxHealth = 48f;
		component2.baseRegen = 2.5f;
		component2.levelRegen = 0.5f;
		component2.baseMaxShield = 0f;
		component2.levelMaxShield = 0f;
		component2.baseMoveSpeed = 7f;
		component2.levelMoveSpeed = 0f;
		component2.baseAcceleration = 110f;
		component2.baseJumpPower = 20f;
		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 = 3f;
		component2.baseJumpCount = 99;
		component2.sprintingSpeedMultiplier = 1.45f;
		component2.wasLucky = false;
		component2.hideCrosshair = false;
		component2.aimOriginTransform = val4.transform;
		component2.hullClassification = (HullClassification)0;
		component2.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portraitDragon").texture;
		component2._defaultCrosshairPrefab = Prefabs.Load<GameObject>("RoR2/Base/UI/SimpleDotCrosshair.prefab");
		component2.isChampion = false;
		component2.currentVehicle = null;
		component2.skinIndex = 0u;
		component2.bodyColor = characterColor;
		CharacterMotor component3 = dragonCharacterPrefab.GetComponent<CharacterMotor>();
		component3.walkSpeedPenaltyCoefficient = 1f;
		component3.characterDirection = component;
		component3.muteWalkMotion = false;
		component3.mass = 450f;
		component3.airControl = 0.25f;
		component3.disableAirControlUntilCollision = false;
		component3.generateParametersOnAwake = true;
		CameraTargetParams component4 = dragonCharacterPrefab.GetComponent<CameraTargetParams>();
		component4.cameraParams = Prefabs.Load<CharacterCameraParams>("RoR2/Base/Common/ccpStandardMelee.asset");
		component4.cameraPivotTransform = null;
		component4.recoil = Vector2.zero;
		component4.dontRaycastToPivot = false;
		ModelLocator component5 = dragonCharacterPrefab.GetComponent<ModelLocator>();
		component5.modelTransform = transform;
		component5.modelBaseTransform = val3.transform;
		component5.dontReleaseModelOnDeath = false;
		component5.autoUpdateModelTransform = true;
		component5.dontDetatchFromParent = false;
		component5.noCorpse = false;
		component5.normalizeToFloor = false;
		component5.preserveModel = false;
		dragonCharacterPrefab.GetComponent<Interactor>().maxInteractionDistance = 6f;
		ChildLocator component6 = val2.GetComponent<ChildLocator>();
		CharacterModel val5 = val2.AddComponent<CharacterModel>();
		SkinnedMeshRenderer[] componentsInChildren = val2.GetComponentsInChildren<SkinnedMeshRenderer>(true);
		List<RendererInfo> list = new List<RendererInfo>();
		for (int i = 0; i < componentsInChildren.Length; i++)
		{
			list.Add(new RendererInfo
			{
				renderer = (Renderer)(object)componentsInChildren[i],
				defaultMaterial = Utils.InstantiateMaterial(((Renderer)componentsInChildren[i]).material.mainTexture),
				defaultShadowCastingMode = (ShadowCastingMode)1,
				ignoreOverlays = false
			});
		}
		RendererInfo[] baseRendererInfos = list.ToArray();
		val5.body = component2;
		val5.baseRendererInfos = baseRendererInfos;
		val5.autoPopulateLightInfos = true;
		val5.invisibilityCount = 0;
		val5.temporaryOverlays = new List<TemporaryOverlay>();
		val5.mainSkinnedMeshRenderer = componentsInChildren[0];
		HealthComponent component7 = dragonCharacterPrefab.GetComponent<HealthComponent>();
		component7.health = component2.baseMaxHealth;
		component7.shield = 0f;
		component7.barrier = 0f;
		component7.magnetiCharge = 0f;
		component7.body = null;
		component7.dontShowHealthbar = false;
		component7.globalDeathEventChanceCoefficient = 1f;
		CapsuleCollider[] componentsInChildren2 = val2.GetComponentsInChildren<CapsuleCollider>();
		HurtBoxGroup val6 = val2.AddComponent<HurtBoxGroup>();
		List<HurtBox> list2 = new List<HurtBox>();
		CapsuleCollider[] array = componentsInChildren2;
		foreach (CapsuleCollider val7 in array)
		{
			HurtBox val8 = ((Component)val7).gameObject.AddComponent<HurtBox>();
			((Component)val8).gameObject.layer = LayerIndex.entityPrecise.intVal;
			val8.healthComponent = component7;
			val8.isBullseye = true;
			val8.damageModifier = (DamageModifier)0;
			val8.hurtBoxGroup = val6;
			val8.indexInGroup = 0;
			val6.mainHurtBox = val8;
			val6.bullseyeCount = 1;
			list2.Add(val8);
		}
		val6.hurtBoxes = list2.ToArray();
		val2.AddComponent<AimAnimator>();
		Utils.CreateHitbox("Swing", val2.transform, new Vector3(6.2f, 6.2f, 6.7f)).transform.localPosition = new Vector3(0f, 1f, 1.5f);
		KinematicCharacterMotor component8 = dragonCharacterPrefab.GetComponent<KinematicCharacterMotor>();
		component8.CharacterController = (BaseCharacterController)(object)component3;
		dragonCharacterPrefab.GetComponent<SfxLocator>().landingSound = "Play_gravekeeper_land";
		FootstepHandler val9 = val2.AddComponent<FootstepHandler>();
		val9.baseFootstepString = "Play_parent_step";
		val9.sprintFootstepOverrideString = "";
		val9.enableFootstepDust = true;
		val9.footstepDustPrefab = Prefabs.Load<GameObject>("RoR2/Base/Common/VFX/GenericHugeFootstepDust.prefab");
		EntityStateMachine component9 = ((Component)component2).GetComponent<EntityStateMachine>();
		component9.initialStateType = new SerializableEntityStateType(typeof(DragonSpawnState));
		component9.mainStateType = new SerializableEntityStateType(typeof(CharacterMain));
		CharacterDeathBehavior component10 = dragonCharacterPrefab.GetComponent<CharacterDeathBehavior>();
		component10.deathStateMachine = dragonCharacterPrefab.GetComponent<EntityStateMachine>();
		component10.deathState = new SerializableEntityStateType(typeof(GenericCharacterDeath));
		NetworkStateMachine component11 = ((Component)component2).GetComponent<NetworkStateMachine>();
		component11.stateMachines = ((Component)component2).GetComponents<EntityStateMachine>();
		ContentAddition.AddBody(dragonCharacterPrefab);
	}

	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)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		string text = "<style=cSub>\r\n\r\n< ! > Fury gain from Twin Bite is a flat amount, regardless of the number of enemies hit." + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > Burnout's health drain can get you out of tough situations as well as keep you healthy in the thick of fights, use it wisely." + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > You have a nearly infinite amount of jumps in dragon form and you can cancel Draconic Leap into Exhale Fire, allowing for extremely versatile mobility while transformed." + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > The damage per tick for Exhale Fire scales with your attack speed.";
		string text2 = "..and so she left, to decimate other lands with her ire.";
		string text3 = "..and so she vanished, her fury finally extinguished.";
		LanguageAPI.Add("SHYVANA_NAME", "Shyvana");
		LanguageAPI.Add("SHYVANA_DESCRIPTION", text);
		LanguageAPI.Add("SHYVANA_SUBTITLE", "");
		LanguageAPI.Add("SHYVANA_OUTRO", text2);
		LanguageAPI.Add("SHYVANA_FAIL", text3);
		SurvivorDef val = ScriptableObject.CreateInstance<SurvivorDef>();
		val.cachedName = "SHYVANA_NAME";
		val.unlockableDef = null;
		val.descriptionToken = "SHYVANA_DESCRIPTION";
		val.primaryColor = characterColor;
		val.bodyPrefab = characterPrefab;
		val.displayPrefab = Utils.NewDisplayModel(((Component)characterPrefab.GetComponent<ModelLocator>().modelBaseTransform).gameObject, "ShyvanaDisplay");
		val.outroFlavorToken = "SHYVANA_OUTRO";
		val.desiredSortPosition = 32f;
		val.mainEndingEscapeFailureFlavorToken = "SHYVANA_FAIL";
		ContentAddition.AddSurvivorDef(val);
		val = ScriptableObject.CreateInstance<SurvivorDef>();
		val.cachedName = "DRAGONSHYVANA_NAME";
		val.unlockableDef = null;
		val.descriptionToken = "SHYVANA_DESCRIPTION";
		val.primaryColor = characterColor;
		val.bodyPrefab = dragonCharacterPrefab;
		val.displayPrefab = Utils.NewDisplayModel(((Component)dragonCharacterPrefab.GetComponent<ModelLocator>().modelBaseTransform).gameObject, "Shyvana (Dragon Form)Display");
		val.outroFlavorToken = "SHYVANA_OUTRO";
		val.mainEndingEscapeFailureFlavorToken = "SHYVANA_FAIL";
		val.desiredSortPosition = 32.1f;
		val.hidden = true;
		ContentAddition.AddSurvivorDef(val);
		SkillSetup();
		DragonSkillSetup();
		GameObject val2 = PrefabAPI.InstantiateClone(Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoMonsterMaster.prefab"), "ShyvanaMaster", 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)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: 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_0063: 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)
		bool flag = default(bool);
		ContentAddition.AddEntityState<ShyvanaSpawnState>(ref flag);
		ContentAddition.AddEntityState<BaseShyvanaState>(ref flag);
		ContentAddition.AddEntityState<Primary>(ref flag);
		ContentAddition.AddEntityState<DragonPrimary>(ref flag);
		ContentAddition.AddEntityState<Secondary>(ref flag);
		ContentAddition.AddEntityState<DragonSecondary>(ref flag);
		ContentAddition.AddEntityState<DragonSecondaryEnd>(ref flag);
		ContentAddition.AddEntityState<Utility>(ref flag);
		ContentAddition.AddEntityState<DragonUtility>(ref flag);
		ContentAddition.AddEntityState<SpecialSelect>(ref flag);
		ContentAddition.AddEntityState<Special>(ref flag);
		ContentAddition.AddEntityState<DragonSpecial>(ref flag);
		ContentAddition.AddEntityState<CharacterMain>(ref flag);
		ContentAddition.AddEntityState<DragonSpawnState>(ref flag);
	}

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

	private void PassiveSetup(GameObject prefab)
	{
		SkillLocator component = prefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("DRAGONFORM_KEYWORD", "[ Dragon Form ]");
		LanguageAPI.Add("SHYVANA_PASSIVE_NAME", "Blood of the Dragonborn");
		LanguageAPI.Add("SHYVANA_PASSIVE_DESCRIPTION", "Your draconic bloodline allows you to shapeshift <color=#9C0B12>upon exceeding the Fury threshold</color>. You gain <color=#9C0B12>2 Fury</color> per second in human form and <color=#9C0B12>3 Fury</color> on hitting enemies with Twin Bite. While transformed you drain <color=#9C0B12>4 Fury</color> per second.");
		component.passiveSkill.enabled = true;
		component.passiveSkill.skillNameToken = "SHYVANA_PASSIVE_NAME";
		component.passiveSkill.skillDescriptionToken = "SHYVANA_PASSIVE_DESCRIPTION";
		component.passiveSkill.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("shyvanareinforcedscales");
	}

	private void DragonSkillSetup()
	{
		GenericSkill[] componentsInChildren = dragonCharacterPrefab.GetComponentsInChildren<GenericSkill>();
		foreach (GenericSkill val in componentsInChildren)
		{
			Object.DestroyImmediate((Object)(object)val);
		}
		PassiveSetup(dragonCharacterPrefab);
		DragonPrimarySetup();
		DragonSecondarySetup();
		DragonUtilitySetup();
		DragonSpecialSetup();
	}

	private void DragonPrimarySetup()
	{
		//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)
		SkillLocator component = dragonCharacterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("DRAGONSHYVANA_M1", "Twin Bite");
		LanguageAPI.Add("DRAGONSHYVANA_M1_DESCRIPTION", "Cleave enemies in front of you for <style=cIsDamage>350% damage</style>. <color=#9C0B12>Grants +2 Fury on-hit</color>.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(DragonPrimary));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Weapon";
		((SkillDef)shyvSkillDef).baseMaxStock = 0;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 0f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = true;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = true;
		((SkillDef)shyvSkillDef).mustKeyPress = false;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = true;
		((SkillDef)shyvSkillDef).rechargeStock = 0;
		((SkillDef)shyvSkillDef).requiredStock = 0;
		((SkillDef)shyvSkillDef).stockToConsume = 0;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("shyvanatwinbite");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "DRAGONSHYVANA_M1_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "DRAGONSHYVANA_M1";
		((SkillDef)shyvSkillDef).skillNameToken = "DRAGONSHYVANA_M1";
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.primary = Utils.NewGenericSkill(dragonCharacterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	private void DragonSecondarySetup()
	{
		//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)
		SkillLocator component = dragonCharacterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("DRAGONSHYVANA_M2", "Exhale Fire");
		LanguageAPI.Add("DRAGONSHYVANA_M2_DESCRIPTION", "Breathe fire in a cone in front of you for <style=cIsDamage>50% damage</style>.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(DragonSecondary));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Slide";
		((SkillDef)shyvSkillDef).baseMaxStock = 1;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 1f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = false;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = true;
		((SkillDef)shyvSkillDef).mustKeyPress = true;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = true;
		((SkillDef)shyvSkillDef).rechargeStock = 1;
		((SkillDef)shyvSkillDef).requiredStock = 1;
		((SkillDef)shyvSkillDef).stockToConsume = 1;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("Incinerate");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "DRAGONSHYVANA_M2_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "DRAGONSHYVANA_M2";
		((SkillDef)shyvSkillDef).skillNameToken = "DRAGONSHYVANA_M2";
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.secondary = Utils.NewGenericSkill(dragonCharacterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	private void DragonUtilitySetup()
	{
		//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_008b: Unknown result type (might be due to invalid IL or missing references)
		SkillLocator component = dragonCharacterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("SHYVANARUIN_KEYWORD", "<style=cKeywordName>Ruin</style><style=cSub>Ruined areas deal <style=cIsDamage>2240% damage over time</style>, <style=cIsHealing>heals 20%</style> of the damage dealt.");
		LanguageAPI.Add("DRAGONSHYVANA_UTIL", "Draconic Leap");
		LanguageAPI.Add("DRAGONSHYVANA_UTIL_DESCRIPTION", "Flap your wings and leap in a direction, dealing <style=cIsDamage>320% damage</style>, and <color=#5EE3AA>Ruining</color> an area on impact.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(DragonUtility));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Body";
		((SkillDef)shyvSkillDef).baseMaxStock = 1;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 5f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = false;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = false;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = false;
		((SkillDef)shyvSkillDef).mustKeyPress = true;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = false;
		((SkillDef)shyvSkillDef).rechargeStock = 1;
		((SkillDef)shyvSkillDef).requiredStock = 1;
		((SkillDef)shyvSkillDef).stockToConsume = 1;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("Pillar_of_Flame");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "DRAGONSHYVANA_UTIL_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "DRAGONSHYVANA_UTIL";
		((SkillDef)shyvSkillDef).skillNameToken = "DRAGONSHYVANA_UTIL";
		((SkillDef)shyvSkillDef).keywordTokens = new string[1] { "SHYVANARUIN_KEYWORD" };
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.utility = Utils.NewGenericSkill(dragonCharacterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	private void DragonSpecialSetup()
	{
		//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)
		SkillLocator component = dragonCharacterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("DRAGONSHYVANA_SPEC", "Scorched Earth");
		LanguageAPI.Add("DRAGONSHYVANA_SPEC_DESCRIPTION", "Spit a fireball which flies in an arc and explodes for <style=cIsDamage>700% damage,</style> <color=#5EE3AA>Ruining</color> the area of impact.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(DragonSpecial));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Body";
		((SkillDef)shyvSkillDef).baseMaxStock = 1;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 8f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = false;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = true;
		((SkillDef)shyvSkillDef).mustKeyPress = true;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = false;
		((SkillDef)shyvSkillDef).rechargeStock = 1;
		((SkillDef)shyvSkillDef).requiredStock = 1;
		((SkillDef)shyvSkillDef).stockToConsume = 1;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("Disintegrate");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "DRAGONSHYVANA_SPEC_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "DRAGONSHYVANA_SPEC";
		((SkillDef)shyvSkillDef).skillNameToken = "DRAGONSHYVANA_SPEC";
		((SkillDef)shyvSkillDef).keywordTokens = new string[1] { "SHYVANARUIN_KEYWORD" };
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.special = Utils.NewGenericSkill(dragonCharacterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	private void PrimarySetup()
	{
		//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)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("SHYVANA_M1", "Twin Bite");
		LanguageAPI.Add("SHYVANA_M1_DESCRIPTION", "Swing your gauntlets for <style=cIsDamage>285% damage</style>.  <color=#9C0B12>Grants +2 Fury on-hit</color>.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(Primary));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Weapon";
		((SkillDef)shyvSkillDef).baseMaxStock = 0;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 0f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = true;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = true;
		((SkillDef)shyvSkillDef).mustKeyPress = false;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = false;
		((SkillDef)shyvSkillDef).rechargeStock = 0;
		((SkillDef)shyvSkillDef).requiredStock = 0;
		((SkillDef)shyvSkillDef).stockToConsume = 0;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("shyvanatwinbite");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "SHYVANA_M1_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "SHYVANA_M1";
		((SkillDef)shyvSkillDef).skillNameToken = "SHYVANA_M1";
		((SkillDef)shyvSkillDef).keywordTokens = new string[3] { "DRAGONFORM_KEYWORD", "DRAGONSHYVANA_M1", "DRAGONSHYVANA_M1_DESCRIPTION" };
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.primary = Utils.NewGenericSkill(characterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	private void SecondarySetup()
	{
		//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)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("SHYVANA_M2", "Flame Breath");
		LanguageAPI.Add("SHYVANA_M2_DESCRIPTION", "Shoot a slow-moving fireball that <style=cIsDamage>explodes</style> on impact for <style=cIsDamage>315% damage</style>, and <style=cIsDamage>ignites</style> enemies.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(Secondary));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Slide";
		((SkillDef)shyvSkillDef).baseMaxStock = 1;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 5f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = false;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = false;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = true;
		((SkillDef)shyvSkillDef).mustKeyPress = true;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = false;
		((SkillDef)shyvSkillDef).rechargeStock = 1;
		((SkillDef)shyvSkillDef).requiredStock = 1;
		((SkillDef)shyvSkillDef).stockToConsume = 1;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("shyvanaflamebreath");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "SHYVANA_M2_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "SHYVANA_M2";
		((SkillDef)shyvSkillDef).skillNameToken = "SHYVANA_M2";
		((SkillDef)shyvSkillDef).keywordTokens = new string[3] { "DRAGONFORM_KEYWORD", "DRAGONSHYVANA_M2", "DRAGONSHYVANA_M2_DESCRIPTION" };
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.secondary = Utils.NewGenericSkill(characterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	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)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("SHYVANA_UTIL", "Burnout");
		LanguageAPI.Add("SHYVANA_UTIL_DESCRIPTION", "Wreath yourself in flames and damage enemies for <style=cIsDamage>750% damage</style> per tick, <style=cIsHealth>draining their health</style>. Gain increased movement speed while the flames are active.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(Utility));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Burnout";
		((SkillDef)shyvSkillDef).baseMaxStock = 1;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 5f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = false;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = false;
		((SkillDef)shyvSkillDef).mustKeyPress = true;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = false;
		((SkillDef)shyvSkillDef).rechargeStock = 1;
		((SkillDef)shyvSkillDef).requiredStock = 1;
		((SkillDef)shyvSkillDef).stockToConsume = 1;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("shyvanascorchedearth");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "SHYVANA_UTIL_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "SHYVANA_UTIL";
		((SkillDef)shyvSkillDef).skillNameToken = "SHYVANA_UTIL";
		((SkillDef)shyvSkillDef).keywordTokens = new string[4] { "DRAGONFORM_KEYWORD", "DRAGONSHYVANA_UTIL", "DRAGONSHYVANA_UTIL_DESCRIPTION", "SHYVANARUIN_KEYWORD" };
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.utility = Utils.NewGenericSkill(characterPrefab, (SkillDef)(object)shyvSkillDef);
	}

	private void SpecialSetup()
	{
		//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)
		SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
		LanguageAPI.Add("SHYVANA_SPEC", "Dragon's Descent");
		LanguageAPI.Add("SHYVANA_SPEC_DESCRIPTION", "<color=#9C0B12>Usable at >150 Fury.</color> Leap to target location, dealing <style=cIsDamage>380% damage</style> on impact and assuming your true form, <style=cIsUtility>changing all of your abilities</style>.");
		ShyvSkillDef shyvSkillDef = ScriptableObject.CreateInstance<ShyvSkillDef>();
		((SkillDef)shyvSkillDef).activationState = new SerializableEntityStateType(typeof(SpecialSelect));
		((SkillDef)shyvSkillDef).activationStateMachineName = "Slide";
		((SkillDef)shyvSkillDef).baseMaxStock = 1;
		((SkillDef)shyvSkillDef).baseRechargeInterval = 8f;
		((SkillDef)shyvSkillDef).beginSkillCooldownOnSkillEnd = true;
		((SkillDef)shyvSkillDef).canceledFromSprinting = false;
		((SkillDef)shyvSkillDef).fullRestockOnAssign = false;
		((SkillDef)shyvSkillDef).interruptPriority = (InterruptPriority)0;
		((SkillDef)shyvSkillDef).isCombatSkill = true;
		((SkillDef)shyvSkillDef).mustKeyPress = true;
		((SkillDef)shyvSkillDef).cancelSprintingOnActivation = false;
		((SkillDef)shyvSkillDef).rechargeStock = 1;
		((SkillDef)shyvSkillDef).requiredStock = 1;
		((SkillDef)shyvSkillDef).stockToConsume = 1;
		((SkillDef)shyvSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("shyvanadragonsdescent");
		((SkillDef)shyvSkillDef).skillDescriptionToken = "SHYVANA_SPEC_DESCRIPTION";
		((SkillDef)shyvSkillDef).skillName = "SHYVANA_SPEC";
		((SkillDef)shyvSkillDef).skillNameToken = "SHYVANA_SPEC";
		((SkillDef)shyvSkillDef).keywordTokens = new string[4] { "DRAGONFORM_KEYWORD", "DRAGONSHYVANA_SPEC", "DRAGONSHYVANA_SPEC_DESCRIPTION", "SHYVANARUIN_KEYWORD" };
		ContentAddition.AddSkillDef((SkillDef)(object)shyvSkillDef);
		component.special = Utils.NewGenericSkill(characterPrefab, (SkillDef)(object)shyvSkillDef);
	}
}
internal class Prefabs
{
	internal static GameObject fireProjectile;

	internal static GameObject fireProjectileGhost;

	internal static GameObject fireProjectileExplosion;

	internal static GameObject fireBallProjectile;

	internal static GameObject fireBallProjectileGhost;

	internal static GameObject fireBallProjectileExplosion;

	internal static GameObject fireBallProjectileDotZone;

	internal static GameObject flameBreathEffect;

	internal static GameObject ringEffect;

	internal static GameObject despawnEffect;

	internal static GameObject swingHitEffect;

	internal static GameObject dragonSwingHitEffect;

	internal static GameObject dragonSlamEffect;

	internal static GameObject dragonTransformEffect;

	internal static GameObject fireImmolateHitEffect;

	internal static GameObject immolateEffect;

	internal static GameObject lineIndicator;

	internal static GameObject transformIndicator;

	internal static GameObject swingEffect;

	internal static GameObject leapEffect;

	internal static BuffDef flameBuff;

	internal static Material baseIndicatorMat;

	internal static Material redIndicatorMat;

	internal static Material baseArcMat;

	internal static Material redArcMat;

	internal static ModdedDamageType ruin;

	internal static T Load<T>(string path)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion();
	}

	internal static void CreatePrefabs()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: 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_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: 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_02ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_0409: Unknown result type (might be due to invalid IL or missing references)
		//IL_0489: Unknown result type (might be due to invalid IL or missing references)
		//IL_048e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0498: Unknown result type (might be due to invalid IL or missing references)
		//IL_049f: Expected O, but got Unknown
		//IL_0570: Unknown result type (might be due to invalid IL or missing references)
		//IL_0631: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_075b: Unknown result type (might be due to invalid IL or missing references)
		//IL_08f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0902: Unknown result type (might be due to invalid IL or missing references)
		//IL_091d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0948: Unknown result type (might be due to invalid IL or missing references)
		//IL_094d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a51: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a97: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a9c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aa9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aae: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ab7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ace: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b36: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b7e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c1a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d11: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d5d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d67: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d9b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0da0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0db1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0db6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0dd3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ddd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0df3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0df8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fbe: Unknown result type (might be due to invalid IL or missing references)
		//IL_1059: Unknown result type (might be due to invalid IL or missing references)
		//IL_1063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e52: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e7f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e89: Unknown result type (might be due to invalid IL or missing references)
		ruin = DamageAPI.ReserveDamageType();
		Material material = Load<Material>("RoR2/Base/Engi/matOmniExplosion1Engi.mat");
		Material material2 = Load<Material>("RoR2/Base/Engi/matEngiExplosion.mat");
		Material material3 = Load<Material>("RoR2/Base/ElitePoison/matElitePoisonDarkTrail.mat");
		Material material4 = Load<Material>("RoR2/Base/ElitePoison/matElitePoisonOverlay.mat");
		Material material5 = Load<Material>("RoR2/Base/ElitePoison/matElitePoisonParticleReplacement.mat");
		Material material6 = Load<Material>("RoR2/Base/Engi/matEngiHarpoonRing.mat");
		Material val = Load<Material>("RoR2/Base/Engi/matEngiTrailExplosion.mat");
		baseIndicatorMat = Object.Instantiate<Material>(Load<Material>("RoR2/Base/Common/VFX/matAreaIndicatorRim.mat"));
		baseIndicatorMat.SetColor("_TintColor", MainPlugin.characterColor);
		redIndicatorMat = Object.Instantiate<Material>(baseIndicatorMat);
		redIndicatorMat.SetColor("_TintColor", new Color(1f, 0f, 0f, 0.75f));
		baseArcMat = Object.Instantiate<Material>(Load<Material>("RoR2/Base/Common/VFX/matArcVisual.mat"));
		baseArcMat.SetColor("_TintColor", MainPlugin.characterColor);
		redArcMat = Object.Instantiate<Material>(baseArcMat);
		redArcMat.SetColor("_TintColor", new Color(1f, 0f, 0f, 0.75f));
		flameBuff = Utils.NewBuffDef("Burnout", stack: false, hidden: false, Assets.Load<Sprite>("shyvanaBuff"), Color.white);
		swingEffect = PrefabAPI.InstantiateClone(Assets.Load<GameObject>("SlashEffect"), "ShyvanaSlashEffect", false);
		Utils.RegisterEffect(swingEffect, 1f).applyScale = true;
		leapEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Brother/BrotherDashEffect.prefab"), "ShyvanaLeapEffect", false);
		leapEffect.transform.rotation = Quaternion.Euler(-90f, 0f, 0f);
		ParticleSystemRenderer[] componentsInChildren = leapEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val2 in componentsInChildren)
		{
			string name = ((Object)val2).name;
			if (name == "Donut")
			{
				((Renderer)val2).materials = (Material[])(object)new Material[10] { val, val, val, val, val, val, val, val, val, val };
			}
			if (name == "Dash")
			{
				((Renderer)val2).material = material2;
			}
		}
		Utils.RegisterEffect(leapEffect, -1f);
		dragonTransformEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Grandparent/GrandParentSunSpawn.prefab"), "ShyvanaDragonTransformEffect", false);
		Object.Destroy((Object)(object)dragonTransformEffect.GetComponentInChildren<LightIntensityCurve>());
		dragonTransformEffect.GetComponentInChildren<PostProcessVolume>().profile = Load<PostProcessProfile>("RoR2/Base/title/ppLocalArtifactShellHurt.asset");
		Light componentInChildren = dragonTransformEffect.GetComponentInChildren<Light>();
		componentInChildren.intensity = 45f;
		componentInChildren.range = 50f;
		componentInChildren.colorTemperature = 5000f;
		componentInChildren.color = Color.cyan;
		ParticleSystemRenderer[] componentsInChildren2 = dragonTransformEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val3 in componentsInChildren2)
		{
			string name2 = ((Object)val3).name;
			if (name2 == "Goo, Drip" || name2 == "Trails")
			{
				((Renderer)val3).enabled = false;
			}
			if (name2 == "Goo, Billboard Huge")
			{
				((Renderer)val3).material = material;
			}
			if (name2 == "Goo, Burst")
			{
				((Renderer)val3).material = Load<Material>("RoR2/Junk/ClayMan/matClaySwingtrail.mat");
			}
			if (name2 == "Donut")
			{
				((Renderer)val3).material = val;
			}
		}
		Utils.RegisterEffect(dragonTransformEffect, 1f);
		transformIndicator = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Huntress/HuntressArrowRainIndicator.prefab"), "SphereIndicator", false);
		Material val4 = Object.Instantiate<Material>(Load<Material>("RoR2/Base/Common/VFX/matAreaIndicatorRim.mat"));
		val4.SetColor("_TintColor", MainPlugin.characterColor);
		((Renderer)transformIndicator.GetComponentInChildren<MeshRenderer>()).material = val4;
		lineIndicator = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Common/VFX/BasicThrowableVisualizer.prefab"), "LineIndicator", false);
		LineRenderer component = lineIndicator.GetComponent<LineRenderer>();
		component.widthMultiplier = 1f;
		component.textureMode = (LineTextureMode)0;
		component.numPositions = 98;
		BezierCurveLineScaler bezierCurveLineScaler = lineIndicator.AddComponent<BezierCurveLineScaler>();
		((BezierCurveLine)bezierCurveLineScaler).v0 = new Vector3(0f, 20f, 0f);
		GameObject val5 = new GameObject("EndTransform");
		val5.transform.SetParent(lineIndicator.transform);
		((BezierCurveLine)bezierCurveLineScaler).endTransform = val5.transform;
		immolateEffect = PrefabAPI.InstantiateClone(Assets.Load<GameObject>("ImmolateEffect"), "ShyvanaImmolateEffect", false);
		Utils.AddScaleComponent(((Component)immolateEffect.transform.GetChild(0)).gameObject, 0.15f).overallCurve = AnimationCurve.Linear(0f, 0.7f, 1f, 1f);
		immolateEffect.AddComponent<DestroyOnTimer>().duration = 8f;
		fireImmolateHitEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Engi/ImpactEngiTurret.prefab"), "ShyvanaDragonImmolateHitEffect", false);
		ParticleSystemRenderer[] componentsInChildren3 = fireImmolateHitEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val6 in componentsInChildren3)
		{
			((Renderer)val6).material.SetColor("_TintColor", MainPlugin.characterColor);
		}
		Utils.RegisterEffect(fireImmolateHitEffect, 1f, "Play_Shyvana_Immolate_Hit");
		dragonSlamEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Parent/ParentSlamEffect.prefab"), "ShyvanaDragonSlamEffect", false);
		Utils.RegisterEffect(dragonSlamEffect, 1f, "Play_Shyvana_Transform_Hit");
		swingHitEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Merc/OmniImpactVFXSlashMerc.prefab"), "ShyvanaSwingHitEffect", false);
		Object.Destroy((Object)(object)swingHitEffect.GetComponent<OmniEffect>());
		ParticleSystemRenderer[] componentsInChildren4 = swingHitEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val7 in componentsInChildren4)
		{
			((Component)val7).gameObject.SetActive(true);
			((Renderer)val7).material.SetColor("_TintColor", Color.green);
		}
		Utils.RegisterEffect(swingHitEffect, 1f, "Play_Shyvana_Auto_Hit");
		dragonSwingHitEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Merc/MercExposeConsumeEffect.prefab"), "ShyvanaDragonSwingHitEffect", false);
		Object.Destroy((Object)(object)dragonSwingHitEffect.GetComponent<OmniEffect>());
		ParticleSystemRenderer[] componentsInChildren5 = dragonSwingHitEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val8 in componentsInChildren5)
		{
			((Component)val8).gameObject.SetActive(true);
			((Renderer)val8).material.SetColor("_TintColor", Color.green);
			if (((Object)val8).name == "PulseEffect, Ring (1)")
			{
				Material material7 = ((Renderer)val8).material;
				material7.mainTexture = (Texture)(object)Load<Texture2D>("RoR2/Base/Common/VFX/texArcaneCircleProviMask.png");
			}
		}
		Utils.RegisterEffect(dragonSwingHitEffect, 1f, "Play_Shyvana_Dragon_Auto_Hit");
		despawnEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/ImpBoss/ImpBossBlink.prefab"), "ShyvanaDespawnEffect", false);
		Object.Destroy((Object)(object)despawnEffect.GetComponent<DestroyOnParticleEnd>());
		despawnEffect.GetComponentInChildren<Light>(true).color = MainPlugin.characterColor;
		despawnEffect.GetComponentInChildren<PostProcessVolume>(true).profile = Load<PostProcessProfile>("RoR2/Base/title/ppLocalElectricWorm.asset");
		ParticleSystemRenderer[] componentsInChildren6 = despawnEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val9 in componentsInChildren6)
		{
			string name3 = ((Object)val9).name;
			if (name3 == "Dash")
			{
				((Renderer)val9).material = material2;
			}
			if (name3 == "Dash, Bright")
			{
				((Renderer)val9).material = val;
			}
			if (name3 == "DashRings" || name3 == "Sphere" || name3 == "LongLifeNoiseTrails")
			{
				((Renderer)val9).material = material;
			}
			if (name3 == "LongLifeNoiseTrails, Bright")
			{
				((Renderer)val9).material = material5;
			}
			if (name3 == "Flash, Red")
			{
				((Renderer)val9).material = material6;
			}
		}
		Utils.RegisterEffect(despawnEffect, -1f);
		ringEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Icicle/IcicleAura.prefab"), "ShyvanaRingEffect", false);
		Object.Destroy((Object)(object)ringEffect.GetComponent<IcicleAuraController>());
		Object.Destroy((Object)(object)ringEffect.GetComponent<BuffWard>());
		Object.Destroy((Object)(object)ringEffect.GetComponent<TeamFilter>());
		Object.Destroy((Object)(object)ringEffect.GetComponent<Rigidbody>());
		Object.Destroy((Object)(object)ringEffect.GetComponent<AkGameObj>());
		ringEffect.transform.localScale = Vector3.one * 9f;
		ringEffect.transform.GetChild(0).localScale = Vector3.one;
		ParticleSystem[] componentsInChildren7 = ringEffect.GetComponentsInChildren<ParticleSystem>(true);
		foreach (ParticleSystem val10 in componentsInChildren7)
		{
			MainModule main = val10.main;
			((MainModule)(ref main)).playOnAwake = true;
			ParticleSystemRenderer component2 = ((Component)val10).GetComponent<ParticleSystemRenderer>();
			string name4 = ((Object)component2).name;
			if (name4 == "Ring, Core")
			{
				((Renderer)component2).material = material3;
			}
			if (name4 == "Ring, Outer")
			{
				((Renderer)component2).material = material4;
			}
			if (name4 == "Ring, Procced")
			{
				((Renderer)component2).material = material3;
			}
			if (name4 == "Area")
			{
				((Renderer)component2).material = material4;
			}
			if (name4 == "SpinningSharpChunks" || name4 == "  Chunks")
			{
				((Renderer)component2).enabled = false;
			}
		}
		flameBreathEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Lemurian/FlamebreathEffect.prefab"), "ShyvanaFlameBreathEffect", false);
		flameBreathEffect.GetComponentInChildren<Light>().color = new Color(0.24706f, 0.74902f, 0.5098f);
		flameBreathEffect.GetComponent<ScaleParticleSystemDuration>().newDuration = 1f;
		ParticleSystemRenderer[] componentsInChildren8 = flameBreathEffect.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val11 in componentsInChildren8)
		{
			ParticleSystem component3 = ((Component)val11).GetComponent<ParticleSystem>();
			MainModule main2 = component3.main;
			((MainModule)(ref main2)).loop = true;
			EmissionModule emission = component3.emission;
			((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(55f);
			((Renderer)val11).material.SetColor("_TintColor", MainPlugin.characterColor);
		}
		fireProjectileExplosion = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Engi/EngiMineExplosion.prefab"), "ShyvanaFireProjectileExplosion", false);
		Utils.RegisterEffect(fireProjectileExplosion, 1f, "Play_Shyvana_Fireball_Hit").applyScale = true;
		Material val12 = Object.Instantiate<Material>(Load<Material>("RoR2/Base/LunarExploder/matLunarExploderDeathDecal.mat"));
		val12.SetColor("_Color", MainPlugin.characterColor);
		fireBallProjectileDotZone = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/LunarExploder/LunarExploderProjectileDotZone.prefab"), "ShyvanaFireBallProjectileDotZone", true);
		fireBallProjectileDotZone.GetComponentInChildren<Decal>().Material = Load<Material>("RoR2/DLC1/AcidLarva/matAcidLarvaDeathDecal.mat");
		fireBallProjectileDotZone.GetComponentInChildren<Light>().color = Color.green;
		ParticleSystemRenderer[] componentsInChildren9 = fireBallProjectileDotZone.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val13 in componentsInChildren9)
		{
			string name5 = ((Object)val13).name;
			if (name5 == "Fire, Billboard" || name5 == "Fire, Stretched")
			{
				((Renderer)val13).material = material;
			}
			if (name5 == "Spores")
			{
				((Renderer)val13).material = Load<Material>("RoR2/Base/Croco/matCrocoGooLarge.mat");
			}
		}
		fireBallProjectileDotZone.AddComponent<ModdedDamageTypeHolderComponent>().Add(ruin);
		ContentAddition.AddProjectile(fireBallProjectileDotZone);
		fireBallProjectileExplosion = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/BFG/BeamSphereExplosion.prefab"), "ShyvanaFireBallProjectileExplosion", false);
		ParticleSystemRenderer[] componentsInChildren10 = fireBallProjectileExplosion.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val14 in componentsInChildren10)
		{
			string name6 = ((Object)val14).name;
			if (name6 == "Chunks, Sharp" || name6 == "Lightning" || name6 == "Ring")
			{
				((Renderer)val14).material = material3;
			}
			if (name6 == "Flames")
			{
				((Renderer)val14).material = material;
			}
		}
		Utils.RegisterEffect(fireBallProjectileExplosion, 2f, "Play_Shyvana_Dragon_Fireball_Hit");
		fireBallProjectileGhost = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/LunarWisp/LunarWispTrackingBombGhost.prefab"), "ShyvanaFireBallProjectileGhost", false);
		fireBallProjectileGhost.GetComponentInChildren<Light>().color = Color.green;
		ParticleSystemRenderer[] componentsInChildren11 = fireBallProjectileGhost.GetComponentsInChildren<ParticleSystemRenderer>(true);
		foreach (ParticleSystemRenderer val15 in componentsInChildren11)
		{
			string name7 = ((Object)val15).name;
			if (name7 == "BombOrb")
			{
				((Component)val15).transform.localScale = Vector3.one * 2f;
				((Renderer)val15).material = val;
			}
			if (name7 == "Trail_Ps")
			{
				ParticleSystem component4 = ((Component)val15).GetComponent<ParticleSystem>();
				MainModule main3 = component4.main;
				((MainModule)(ref main3)).startLifetimeMultiplier = 0.1f;
				ShapeModule shape = component4.shape;
				((ShapeModule)(ref shape)).radius = ((ShapeModule)(ref shape)).radius * 0.2f;
				((Component)val15).transform.localScale = Vector3.one * 8f;
				((Renderer)val15).material = material;
				((MainModule)(ref main3)).startColor = MinMaxGradient.op_Implicit(MainPlugin.characterColor);
			}
			if (name7 == "Sparks")
			{
				((Renderer)val15).enabled = false;
			}
			if (name7 == "Glow")
			{
				((Renderer)val15).material = Load<Material>("RoR2/Base/Grandparent/matGrandParentSunGlow.mat");
				((Renderer)val15).material.SetColor("_TintColor", MainPlugin.characterColor);
				Material material8 = ((Renderer)val15).material;
				material8.mainTexture = (Texture)(object)Load<Texture2D>("RoR2/Base/Common/VFX/texFluffyCloud2Mask.png");
				((Component)val15).transform.localScale = Vector3.one * 1.5f;
			}
		}
		fireBallProjectile = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Mage/MageLightningBombProjectile.prefab"), "ShyvanaFireBallProjectile", true);
		Object.Destroy((Object)(object)fireBallProjectile.GetComponent<AkEvent>());
		Object.Destroy((Object)(object)fireBallProjectile.GetComponent<AkGameObj>());
		Object.Destroy((Object)(object)fireBallProjectile.GetComponent<ProjectileProximityBeamController>());
		Object.Destroy((Object)(object)fireBallProjectile.GetComponent<AntiGravityForce>());
		fireBallProjectile.GetComponent<ProjectileController>().ghostPrefab = fireBallProjectileGhost;
		ProjectileImpactExplosion component5 = fireBallProjectile.GetComponent<ProjectileImpactExplosion>();
		component5.impactEffect = fireBallProjectileExplosion;
		((ProjectileExplosion)component5).explosionEffect = fireBallProjectileExplosion;
		((ProjectileExplosion)component5).childrenCount = 1;
		((ProjectileExplosion)component5).fireChildren = true;
		((ProjectileExplosion)component5).childrenDamageCoefficient = 1f;
		((ProjectileExplosion)component5).childrenProjectilePrefab = fireBallProjectileDotZone;
		ContentAddition.AddProjectile(fireBallProjectile);
		fireProjectileGhost = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Mage/MageFireboltGhost.prefab"), "ShyvanaFireProjectileGhost", false);
		Renderer[] componentsInChildren12 = fireProjectileGhost.GetComponentsInChildren<Renderer>(true);
		foreach (Renderer val16 in componentsInChildren12)
		{
			((Component)val16).gameObject.SetActive(true);
			val16.material.SetColor("_TintColor", MainPlugin.characterColor);
			MeshFilter component6 = ((Component)val16).GetComponent<MeshFilter>();
			if (Object.op_Implicit((Object)(object)component6))
			{
				component6.mesh = Load<GameObject>("RoR2/Base/UtilitySkillMagazine/mdlAfterburner.fbx").GetComponentInChildren<MeshFilter>().mesh;
			}
			TrailRenderer val17;
			if ((Object)(object)(val17 = (TrailRenderer)(object)((val16 is TrailRenderer) ? val16 : null)) != (Object)null)
			{
				val17.time *= 1.5f;
				val17.widthMultiplier *= 1.5f;
			}
		}
		fireProjectileGhost.transform.localScale = Vector3.one * 1.5f;
		fireProjectile = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Mage/MageFireboltBasic.prefab"), "ShyvanaFireProjectile", true);
		fireProjectile.GetComponent<ProjectileController>().ghostPrefab = fireProjectileGhost;
		ProjectileImpactExplosion component7 = fireProjectile.GetComponent<ProjectileImpactExplosion>();
		component7.impactEffect = fireProjectileExplosion;
		((ProjectileExplosion)component7).explosionEffect = fireProjectileExplosion;
		ContentAddition.AddProjectile(fireProjectile);
	}
}
internal class ShyvSkillDef : SkillDef
{
	private class InstanceData : BaseSkillInstanceData
	{
		public SkillLocator skillLocator;

		public ShyvanaBehaviour behaviour;

		public CharacterMotor motor;
	}

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

	internal static bool IsExecutable([NotNull] GenericSkill skillSlot)
	{
		InstanceData instanceData = (InstanceData)(object)skillSlot.skillInstanceData;
		ShyvanaBehaviour behaviour = instanceData.behaviour;
		SkillLocator skillLocator = instanceData.skillLocator;
		CharacterMotor motor = instanceData.motor;
		if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)behaviour) && Object.op_Implicit((Object)(object)behaviour.behaviour))
		{
			if ((Object)(object)skillSlot == (Object)(object)skillLocator.primary)
			{
			}
			if ((Object)(object)skillSlot == (Object)(object)skillLocator.secondary)
			{
			}
			if ((Object)(object)skillSlot == (Object)(object)skillLocator.utility)
			{
			}
			if (!behaviour.behaviour.transformed && (Object)(object)skillSlot == (Object)(object)skillLocator.special)
			{
				return behaviour.canExecute && behaviour.powerupValue >= 1.5f;
			}
			return behaviour.canExecute;
		}
		return true;
	}

	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 BaseShyvanaState : BaseSkillState
{
	public Animator animator;

	public ShyvanaBehaviour behaviour;

	public MasterBehaviour masterBehaviour;

	public CharacterMaster master;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		animator = ((EntityState)this).GetModelAnimator();
		behaviour = ((EntityState)this).GetComponent<ShyvanaBehaviour>();
		if (Object.op_Implicit((Object)(object)behaviour) && Object.op_Implicit((Object)(object)behaviour.behaviour))
		{
			masterBehaviour = behaviour.behaviour;
		}
		master = ((EntityState)this).characterBody.master;
	}

	public void LockSkills()
	{
		if (Object.op_Implicit((Object)(object)behaviour))
		{
			behaviour.canExecute = false;
		}
	}

	public void UnlockSkills()
	{
		if (Object.op_Implicit((Object)(object)behaviour))
		{
			behaviour.canExecute = true;
		}
	}

	public void AdjustModelForward(Vector3 dir)
	{
		//IL_0011: 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_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_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_004e: 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)
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && dir != Vector3.zero)
		{
			((Vector3)(ref dir)).Normalize();
			Vector3 val = new Vector3(dir.x, 0f, dir.y);
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			((EntityState)this).characterDirection.moveVector = normalized;
		}
	}

	public void AdjustModelForwardAim()
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: 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_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
		{
			Ray aimRay = ((BaseState)this).GetAimRay();
			Vector2 val = Util.Vector3XZToVector2XY(((Ray)(ref aimRay)).direction);
			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;
			}
		}
	}
}
internal class ShyvanaSpawnState : SpawnTeleporterState
{
	public override void OnEnter()
	{
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		((SpawnTeleporterState)this).OnEnter();
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody.masterObject))
		{
			MasterBehaviour component = ((EntityState)this).characterBody.masterObject.GetComponent<MasterBehaviour>();
			if (Object.op_Implicit((Object)(object)component) && component.despawned)
			{
				component.despawned = false;
				base.hasTeleported = true;
				base.duration = 0f;
				EffectManager.SimpleEffect(Prefabs.despawnEffect, ((EntityState)this).characterBody.corePosition, Quaternion.identity, false);
				AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Immolate_Deactivate, ((EntityState)this).gameObject);
			}
		}
		CharacterModel characterModel = base.characterModel;
		characterModel.invisibilityCount--;
	}

	public override void OnExit()
	{
		((SpawnTeleporterState)this).OnExit();
		if (NetworkServer.active)
		{
			((EntityState)this).characterBody.ClearTimedBuffs(Buffs.HiddenInvincibility);
		}
	}
}
internal class CharacterMain : GenericCharacterMain
{
	private uint ID;

	private bool playingID;

	private ShyvanaBehaviour behaviour;

	public override void OnEnter()
	{
		((GenericCharacterMain)this).OnEnter();
		behaviour = ((EntityState)this).GetComponent<ShyvanaBehaviour>();
	}

	public override void FixedUpdate()
	{
		((GenericCharacterMain)this).FixedUpdate();
		if (((EntityState)this).characterBody.outOfCombatStopwatch >= 2f && ((EntityState)this).characterBody.outOfDangerStopwatch >= 2f && behaviour.canExecute)
		{
			if (!playingID)
			{
				playingID = true;
				ID = AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Dragon_Idle, ((EntityState)this).gameObject);
			}
		}
		else if (playingID)
		{
			playingID = false;
			AkSoundEngine.StopPlayingID(ID);
		}
	}

	public override void OnExit()
	{
		((GenericCharacterMain)this).OnExit();
		AkSoundEngine.StopPlayingID(ID);
	}
}
internal class DragonPrimary : Primary
{
	public override float comboDamageCoefficient => 3.5f;

	public override bool dragonForm => true;

	public override void SetState()
	{
		DragonPrimary dragonPrimary = new DragonPrimary();
		dragonPrimary.comboState = ((comboState == 2) ? 1 : (comboState + 1));
		((EntityState)this).outer.SetNextState((EntityState)(object)dragonPrimary);
	}

	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 DragonSecondary : BaseShyvanaState
{
	private ChildLocator childLocator;

	private Transform muzzleTransform;

	private float stopwatch;

	private float burstStopwatch;

	private float attackDelay;

	private Ray aimRay;

	private GameObject hitEffectPrefab = Prefabs.Load<GameObject>("RoR2/Base/Engi/ImpactEngiTurret.prefab");

	private float startup = 0.2f;

	public override void OnEnter()
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		base.OnEnter();
		((BaseState)this).StartAimMode(2f, false);
		attackDelay = 0.125f;
		childLocator = ((EntityState)this).GetModelChildLocator();
		muzzleTransform = childLocator.FindChild("jawMuzzle");
		AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Wing_Flap_Hard, ((EntityState)this).gameObject);
		aimRay = ((BaseState)this).GetAimRay();
		((EntityState)this).PlayAnimation("FullBody, Override", "Spell2");
		LockSkills();
	}

	public override void Update()
	{
		((EntityState)this).Update();
		UpdateFlamethrowerEffect();
		if (Object.op_Implicit((Object)(object)animator))
		{
			animator.SetBool("isMoving", false);
		}
	}

	public override void FixedUpdate()
	{
		//IL_008b: 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_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_015a: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: 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_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0191: Unknown result type (might be due to invalid IL or missing references)
		//IL_0196: Unknown result type (might be due to invalid IL or missing references)
		//IL_019e: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= startup && !Object.op_Implicit((Object)(object)behaviour.effect))
		{
			AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Dragon_Fireball_Cast, ((EntityState)this).gameObject);
			behaviour.ID = AkSoundEngine.PostEvent(Sounds.Play_Shyvana_Dragon_Flames, ((EntityState)this).gameObject);
			behaviour.effect = Object.Instantiate<GameObject>(Prefabs.flameBreathEffect, muzzleTransform);
			behaviour.effect.transform.localPosition = Vector3.zero;
			behaviour.effect.transform.localScale = Vector3.one * -1f;
		}
		((EntityState)this).characterBody.isSprinting = false;
		if (((EntityState)this).isAuthority)
		{
			float y = ((EntityState)this).characterMotor.velocity.y;
			y = Mathf.MoveTowards(y, JetpackOn.hoverVelocity, JetpackOn.hoverAcceleration / 1.75f * Time.fixedDeltaTime);
			((EntityState)this).characterMotor.velocity = new Vector3(((EntityState)this).characterMotor.velocity.x, y, ((EntityState)this).characterMotor.velocity.z);
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
		{
			Ray val = ((BaseState)this).GetAimRay();
			Vector2 val2 = Util.Vector3XZToVector2XY(((Ray)(ref val)).direction);
			if (val2 != Vector2.zero)
			{
				((Vector2)(ref val2)).Normalize();
				Vector3 val3 = new Vector3(val2.x, 0f, val2.y);
				Vector3 normalized = ((Vector3)(ref val3)).normalized;
				((EntityState)this).characterDirection.moveVector = normalized;
			}
		}
		if (((EntityState)this).fixedAge >= startup)
		{
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= attackDelay)
			{
				stopwatch = 0f;
				Fire();
			}
		}
		if ((((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill2.down) || behaviour.powerupValue <= 0f)
		{
			((EntityState)this).outer.SetNextState((EntityState)(object)new DragonSecondaryEnd());
		}
		UpdateFlamethrowerEffect();
	}

	private void UpdateFlamethrowerEffect()
	{
		//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_002f: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)behaviour.effect))
		{
			Transform transform = behaviour.effect.transform;
			Ray val = ((BaseState)this).GetAimRay();
			transform.forward = ((Ray)(ref val)).direction;
		}
	}

	private void Fire()
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001