Decompiled source of Jakaka Skills v2.1.0

JakakaSkills.dll

Decompiled 3 weeks ago
using System;
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.Logging;
using EntityStates;
using EntityStates.Bandit2.Weapon;
using EntityStates.Commando.CommandoWeapon;
using JakakaSkills.MyEntityStates;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("JakakaSkills")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+049c3be7af0e46428622a88b75fe9bc350f2961e")]
[assembly: AssemblyProduct("JakakaSkills")]
[assembly: AssemblyTitle("JakakaSkills")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace JakakaSkills
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Mephy.Jakaka_Skills", "Jakaka Skills", "2.1.0")]
	public class Main : BaseUnityPlugin
	{
		public const string PluginGUID = "com.Mephy.Jakaka_Skills";

		public const string PluginName = "Jakaka Skills";

		public const string PluginVersion = "2.1.0";

		private AssetBundle jakakaassets;

		public void Awake()
		{
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			LoadAssetBundle();
			AddKeywords();
			AddVendettaSkill();
			AddBlunderbussSkill();
			AddMolotovSkill();
			AddSwitchbackSkill();
			AddLightshowSkill();
			Assembly assembly = typeof(Main).Assembly;
			bool flag = false;
			Type[] types = assembly.GetTypes();
			foreach (Type type in types)
			{
				if (type.Namespace != null && type.Namespace.StartsWith("JakakaSkills.MyEntityStates") && type.IsSubclassOf(typeof(EntityState)) && !type.IsAbstract)
				{
					ContentAddition.AddEntityState(type, ref flag);
				}
			}
		}

		private void LoadAssetBundle()
		{
			string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "jakakaassets");
			if (!File.Exists(text))
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Asset bundle not found at path: " + text));
				return;
			}
			jakakaassets = AssetBundle.LoadFromFile(text);
			if ((Object)(object)jakakaassets == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load asset bundle!");
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Asset bundle loaded successfully.");
			}
		}

		public void AddKeywords()
		{
			LanguageAPI.Add("KEYWORD_RELOADABLE", "<style=cKeywordName>Reloadable</style><style=cSub>Cooldown can be manually triggered by pressing <style=cIsDamage>fire</style> and <style=cIsUtility>interact</style> at the same time.</style>");
			LanguageAPI.Add("KEYWORD_VENDETTA_ATK_EFFECT", "<style=cKeywordName><style=cDeath>Vendetta</style></style><style=cSub><style=cIsUtility>Attack speed doesn't apply normally</style>, it instead increases <style=cDeath>Vendetta</style> damage at <style=cIsDamage>50% effectiveness</style>.</style>");
			LanguageAPI.Add("KEYWORD_BLUNDERBUSS_ATK_EFFECT", "<style=cKeywordName><style=cDeath>Blunderbuss</style></style><style=cSub><style=cIsUtility>Attack speed doesn't apply normally</style>, it instead increases <style=cDeath>Blunderbuss</style> projectile count at <style=cIsDamage>100% effectiveness</style>.</style>");
			LanguageAPI.Add("KEYWORD_MOLOTOV_ATK_EFFECT", "<style=cKeywordName><style=cDeath>Molotov</style></style><style=cSub><style=cIsUtility>Attack speed</style> is <style=cIsDamage>67% as effective</style>, and also increases <style=cDeath>Molotov</style> radius at <style=cIsDamage>100% effectiveness</style>.</style>");
			LanguageAPI.Add("KEYWORD_SWITCHBACK_SHOTGUN_ATK_EFFECT", "<style=cKeywordName><style=cDeath>Shotgun</style></style><style=cSub><style=cIsUtility>Attack speed doesn't apply normally</style>, it instead increases <style=cDeath>Shotgun</style> projectile count at <style=cIsDamage>33% effectiveness</style>.</style>");
			LanguageAPI.Add("KEYWORD_SWITCHBACK_AUTO_ATK_EFFECT", "<style=cKeywordName><style=cDeath>Full Auto</style></style><style=cSub><style=cIsUtility>Attack speed</style> applies to <style=cDeath>Full Auto</style> at <style=cIsDamage>100% effectiveness</style>.</style>");
			LanguageAPI.Add("KEYWORD_LIGHTSHOW_EFFECT", "<style=cKeywordName><style=cDeath>Lightshow</style></style><style=cSub><style=cIsUtility>Attack speed doesn't apply normally</style>, it instead increases your <style=cIsUtility>max stock</style> at <style=cIsDamage>50% effectiveness</style>. This ability consumes all stock for damage <style=cIsUtility>proportional</style> to stock consumed. <style=cEvent><size=80%>The damage is equal to the shown numbers at 100 stock we are not liable for any absurd damage numbers caused by this mechanic.</size></style></style>");
		}

		public void AddVendettaSkill()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: 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_018b: Expected O, but got Unknown
			//IL_018b: 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)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2Body.prefab").WaitForCompletion();
			LanguageAPI.Add("REVOLVER_NAME", "Vendetta");
			LanguageAPI.Add("REVOLVER_DESCRIPTION", "<style=cDeath>Vendetta</style>. <style=cIsUtility>Reloadable</style>. Tap to fire a single shot for <style=cIsDamage>450% damage</style>. Hold down to blindly fire every remaining bullet in the gun for <style=cIsDamage>300% damage each</style>.");
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(Vendetta));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 6;
			val2.rechargeStock = 9999;
			val2.baseRechargeInterval = 0.85f;
			val2.dontAllowPastMaxStocks = true;
			val2.isCooldownBlockedUntilManuallyReset = true;
			val2.beginSkillCooldownOnSkillEnd = true;
			val2.resetCooldownTimerOnUse = true;
			val2.canceledFromSprinting = true;
			val2.cancelSprintingOnActivation = true;
			val2.fullRestockOnAssign = true;
			val2.interruptPriority = (InterruptPriority)0;
			val2.isCombatSkill = true;
			val2.mustKeyPress = false;
			val2.requiredStock = 1;
			val2.stockToConsume = 0;
			val2.autoHandleLuminousShot = true;
			val2.icon = jakakaassets.LoadAsset<Sprite>("Vendetta.png");
			val2.skillDescriptionToken = "REVOLVER_DESCRIPTION";
			val2.skillName = "Vendetta";
			val2.skillNameToken = "REVOLVER_NAME";
			val2.keywordTokens = new string[2] { "KEYWORD_VENDETTA_ATK_EFFECT", "KEYWORD_RELOADABLE" };
			ContentAddition.AddSkillDef(val2);
			SkillFamily skillFamily = val.GetComponent<SkillLocator>().primary.skillFamily;
			Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
			Variant[] variants = skillFamily.variants;
			int num = skillFamily.variants.Length - 1;
			Variant val3 = new Variant
			{
				skillDef = val2,
				unlockableDef = null
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[num] = val3;
		}

		private void AddBlunderbussSkill()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Expected O, but got Unknown
			//IL_017f: 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)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2Body.prefab").WaitForCompletion();
			LanguageAPI.Add("SHOTGUN_NAME", "Blunderbuss");
			LanguageAPI.Add("SHOTGUN_DESCRIPTION", "<style=cDeath>Blunderbuss</style>. Fire a powerful blunderbuss that gets more projectiles per stock for <style=cIsDamage>3-7-14-24x65% damage</style>.");
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(Blunderbuss));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 4;
			val2.rechargeStock = 1;
			val2.baseRechargeInterval = 0.5f;
			val2.dontAllowPastMaxStocks = true;
			val2.beginSkillCooldownOnSkillEnd = true;
			val2.resetCooldownTimerOnUse = true;
			val2.canceledFromSprinting = false;
			val2.cancelSprintingOnActivation = true;
			val2.hideStockCount = false;
			val2.fullRestockOnAssign = true;
			val2.interruptPriority = (InterruptPriority)0;
			val2.isCombatSkill = true;
			val2.mustKeyPress = true;
			val2.autoHandleLuminousShot = true;
			val2.requiredStock = 1;
			val2.stockToConsume = 4;
			val2.icon = jakakaassets.LoadAsset<Sprite>("Blunder.png");
			val2.skillDescriptionToken = "SHOTGUN_DESCRIPTION";
			val2.skillName = "Blunderbuss";
			val2.skillNameToken = "SHOTGUN_NAME";
			val2.keywordTokens = new string[1] { "KEYWORD_BLUNDERBUSS_ATK_EFFECT" };
			ContentAddition.AddSkillDef(val2);
			SkillFamily skillFamily = val.GetComponent<SkillLocator>().primary.skillFamily;
			Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
			Variant[] variants = skillFamily.variants;
			int num = skillFamily.variants.Length - 1;
			Variant val3 = new Variant
			{
				skillDef = val2,
				unlockableDef = null
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[num] = val3;
		}

		private void AddMolotovSkill()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_009c: 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_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Expected O, but got Unknown
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2Body.prefab").WaitForCompletion();
			LanguageAPI.Add("MOLOTOV_NAME", "Molotov");
			LanguageAPI.Add("MOLOTOV_DESCRIPTION", "<style=cDeath>Molotov</style>. Throw a molotov that shatters on the ground for <style=cIsDamage>350% damage</style>, creating a pool of fire that <style=cIsDamage>Ignites</style> enemies and deals <style=cIsDamage>175% damage per second</style>.");
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(Molotov));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 3;
			val2.rechargeStock = 1;
			val2.baseRechargeInterval = 6f;
			val2.beginSkillCooldownOnSkillEnd = true;
			val2.resetCooldownTimerOnUse = true;
			val2.canceledFromSprinting = false;
			val2.cancelSprintingOnActivation = false;
			val2.hideStockCount = false;
			val2.fullRestockOnAssign = false;
			val2.interruptPriority = (InterruptPriority)0;
			val2.isCombatSkill = true;
			val2.mustKeyPress = true;
			val2.autoHandleLuminousShot = true;
			val2.requiredStock = 1;
			val2.stockToConsume = 1;
			val2.icon = jakakaassets.LoadAsset<Sprite>("Molotov.png");
			val2.skillDescriptionToken = "MOLOTOV_DESCRIPTION";
			val2.skillName = "Molotov";
			val2.skillNameToken = "MOLOTOV_NAME";
			val2.keywordTokens = new string[2] { "KEYWORD_MOLOTOV_ATK_EFFECT", "KEYWORD_IGNITE" };
			ContentAddition.AddSkillDef(val2);
			SkillFamily skillFamily = val.GetComponent<SkillLocator>().secondary.skillFamily;
			Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
			Variant[] variants = skillFamily.variants;
			int num = skillFamily.variants.Length - 1;
			Variant val3 = new Variant
			{
				skillDef = val2,
				unlockableDef = null
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[num] = val3;
		}

		private void AddSwitchbackSkill()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Expected O, but got Unknown
			//IL_0194: 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)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoBody.prefab").WaitForCompletion();
			LanguageAPI.Add("SWITCHBACK_NAME", "Switchback");
			LanguageAPI.Add("SWITCHBACK_DESCRIPTION", "<style=cDeath>Shotgun</style>. <style=cDeath>Full Auto</style>. <style=cIsUtility>Reloadable</style>. Tap to fire a shotgun blast that deals <style=cIsDamage>2x6x100% damage</style>. Hold down to rapidly fire at full auto for <style=cIsDamage>85% damage</style> a shot.");
			SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
			val2.activationState = new SerializableEntityStateType(typeof(Switchback));
			val2.activationStateMachineName = "Weapon";
			val2.baseMaxStock = 48;
			val2.rechargeStock = 9999;
			val2.baseRechargeInterval = 1.15f;
			val2.isCooldownBlockedUntilManuallyReset = true;
			val2.dontAllowPastMaxStocks = true;
			val2.beginSkillCooldownOnSkillEnd = true;
			val2.resetCooldownTimerOnUse = true;
			val2.canceledFromSprinting = false;
			val2.cancelSprintingOnActivation = true;
			val2.fullRestockOnAssign = true;
			val2.interruptPriority = (InterruptPriority)0;
			val2.isCombatSkill = true;
			val2.mustKeyPress = false;
			val2.requiredStock = 1;
			val2.stockToConsume = 0;
			val2.autoHandleLuminousShot = true;
			val2.icon = jakakaassets.LoadAsset<Sprite>("Switchback.png");
			val2.skillDescriptionToken = "SWITCHBACK_DESCRIPTION";
			val2.skillName = "Switchback";
			val2.skillNameToken = "SWITCHBACK_NAME";
			val2.keywordTokens = new string[3] { "KEYWORD_SWITCHBACK_SHOTGUN_ATK_EFFECT", "KEYWORD_SWITCHBACK_AUTO_ATK_EFFECT", "KEYWORD_RELOADABLE" };
			ContentAddition.AddSkillDef(val2);
			SkillFamily skillFamily = val.GetComponent<SkillLocator>().primary.skillFamily;
			Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
			Variant[] variants = skillFamily.variants;
			int num = skillFamily.variants.Length - 1;
			Variant val3 = new Variant
			{
				skillDef = val2,
				unlockableDef = null
			};
			((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
			variants[num] = val3;
		}

		private void AddLightshowSkill()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Expected O, but got Unknown
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drone Tech/DroneTechBody.prefab").WaitForCompletion();
			LanguageAPI.Add("LIGHTSHOW_NAME", "L-34 Lightshow");
			LanguageAPI.Add("LIGHTSHOW_DESCRIPTION", "<style=cDeath>Lightshow</style>. Charge your arm to fire a array of multipule lasers with teal doing <style=cIsDamage>12x225% damage</style> and red doing <style=cIsDamage>4x800% damage</style> at 100% charge");
			SkillDef Lightshow = ScriptableObject.CreateInstance<SkillDef>();
			GenericSkill.RecalculateMaxStock += (hook_RecalculateMaxStock)delegate(orig_RecalculateMaxStock orig, GenericSkill self)
			{
				orig.Invoke(self);
				if ((Object)(object)self.skillDef == (Object)(object)Lightshow)
				{
					CharacterBody characterBody = self.characterBody;
					if (Object.op_Implicit((Object)(object)characterBody))
					{
						self.maxStock = Mathf.Max(1, Mathf.RoundToInt(100f * (1f + (characterBody.attackSpeed - 1f) * 0.5f)));
						self.stock = Mathf.Min(self.stock, self.maxStock);
					}
				}
			};
			Lightshow.activationState = new SerializableEntityStateType(typeof(LightshowCharge));
			Lightshow.activationStateMachineName = "Weapon";
			Lightshow.baseMaxStock = 100;
			Lightshow.rechargeStock = 1;
			Lightshow.baseRechargeInterval = 0.185f;
			Lightshow.isCooldownBlockedUntilManuallyReset = false;
			Lightshow.dontAllowPastMaxStocks = true;
			Lightshow.beginSkillCooldownOnSkillEnd = true;
			Lightshow.resetCooldownTimerOnUse = true;
			Lightshow.canceledFromSprinting = false;
			Lightshow.cancelSprintingOnActivation = true;
			Lightshow.fullRestockOnAssign = true;
			Lightshow.interruptPriority = (InterruptPriority)0;
			Lightshow.isCombatSkill = true;
			Lightshow.mustKeyPress = false;
			Lightshow.requiredStock = 20;
			Lightshow.stockToConsume = 0;
			Lightshow.autoHandleLuminousShot = true;
			Lightshow.icon = jakakaassets.LoadAsset<Sprite>("Lightshow.png");
			Lightshow.skillDescriptionToken = "LIGHTSHOW_DESCRIPTION";
			Lightshow.skillName = "L-34 Lightshow";
			Lightshow.skillNameToken = "LIGHTSHOW_NAME";
			Lightshow.keywordTokens = new string[1] { "KEYWORD_LIGHTSHOW_EFFECT" };
			ContentAddition.AddSkillDef(Lightshow);
			SkillFamily skillFamily = val.GetComponent<SkillLocator>().special.skillFamily;
			Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
			Variant[] variants = skillFamily.variants;
			int num = skillFamily.variants.Length - 1;
			Variant val2 = new Variant
			{
				skillDef = Lightshow,
				unlockableDef = null
			};
			((Variant)(ref val2)).viewableNode = new Node(Lightshow.skillNameToken, false, (Node)null);
			variants[num] = val2;
		}
	}
}
namespace JakakaSkills.MyEntityStates
{
	public class Blunderbuss : BaseSkillState
	{
		private float Duration = 0.25f;

		private float SpreadMult;

		private float RecoilMult;

		private uint BulletAmount;

		private GameObject HitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/HitsparkBandit.prefab").WaitForCompletion();

		private GameObject TracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/TracerBandit2Shotgun.prefab").WaitForCompletion();

		private GameObject MuzzleFlash = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/MuzzleflashBandit2.prefab").WaitForCompletion();

		public override void OnEnter()
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: 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_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: 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_019b: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			GetStock();
			((EntityState)this).PlayAnimation("Gesture, Additive", "FireMainWeapon", "FireMainWeapon.playbackRate", 0.65f, 0f);
			Ray aimRay = ((BaseState)this).GetAimRay();
			Util.PlaySound("Play_bandit2_m1_rifle", ((EntityState)this).gameObject);
			((BaseState)this).StartAimMode(aimRay, 2f, false);
			((BaseState)this).AddRecoil(-24f * RecoilMult, -32f * RecoilMult, -12f * RecoilMult, 12f * RecoilMult);
			if (((EntityState)this).isAuthority)
			{
				EffectManager.SimpleMuzzleFlash(MuzzleFlash, ((EntityState)this).gameObject, "MuzzleShotgun", false);
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = (((EntityState)this).characterBody.spreadBloomAngle + 2.2f) * SpreadMult,
					bulletCount = BulletAmount,
					procCoefficient = 0.15f,
					damage = ((EntityState)this).characterBody.damage * 0.65f,
					force = 32f,
					falloffModel = (FalloffModel)1,
					tracerEffectPrefab = TracerEffectPrefab,
					muzzleName = "MuzzleShotgun",
					hitEffectPrefab = HitEffectPrefab,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = false,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericPrimary,
					maxDistance = 800f
				}.Fire();
			}
		}

		private void GetStock()
		{
			switch (((BaseSkillState)this).activatorSkillSlot.stock)
			{
			case -3:
				SpreadMult = 0.2f;
				RecoilMult = 0.33f;
				BulletAmount = (uint)(((BaseState)this).attackSpeedStat * 3f);
				break;
			case -2:
				SpreadMult = 0.45f;
				RecoilMult = 0.5f;
				BulletAmount = (uint)(((BaseState)this).attackSpeedStat * 7f);
				break;
			case -1:
				SpreadMult = 0.8f;
				RecoilMult = 0.8f;
				BulletAmount = (uint)(((BaseState)this).attackSpeedStat * 14f);
				break;
			default:
				SpreadMult = 1f;
				RecoilMult = 1f;
				BulletAmount = (uint)(((BaseState)this).attackSpeedStat * 24f);
				break;
			}
		}

		public override void OnExit()
		{
			if (((BaseSkillState)this).activatorSkillSlot.stock <= 0)
			{
				((BaseSkillState)this).activatorSkillSlot.stock = 0;
			}
			((EntityState)this).OnExit();
		}

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class Lightshow : BaseSkillState
	{
		private float Duration = 0.25f;

		private GameObject HitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drone Tech/NanoPistolImpactVFX.prefab").WaitForCompletion();

		private GameObject TracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drone Tech/TracerNanoPistolCharged.prefab").WaitForCompletion();

		private GameObject TracerEffectPrefab2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/TracerGolem.prefab").WaitForCompletion();

		private GameObject MuzzleFlash = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/Drone Tech/NanoPistolMuzzleFlashVFX.prefab").WaitForCompletion();

		public override void OnEnter()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: 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_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: 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_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_027d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			((EntityState)this).PlayAnimation("Gesture, Override", "CommandReleaseShield", "CommandReleaseShield.playbackRate", 0.45f, 0f);
			Util.PlaySound("Play_railgunner_R_alt_fire", ((EntityState)this).gameObject);
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).StartAimMode(aimRay, 2f, false);
			((BaseState)this).AddRecoil(-7f, -12f, -3f, 3f);
			if (((EntityState)this).isAuthority)
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
				{
					Vector3 val = -((Ray)(ref aimRay)).direction * 32.5f;
					CharacterMotor characterMotor = ((EntityState)this).characterMotor;
					characterMotor.velocity += val;
				}
				EffectManager.SimpleMuzzleFlash(MuzzleFlash, ((EntityState)this).gameObject, "Muzzle", false);
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle + 3.2f,
					bulletCount = 12u,
					procCoefficient = 0.25f,
					damage = ((EntityState)this).characterBody.damage * (0.0225f * (float)((EntityState)this).skillLocator.special.stock),
					force = 32f,
					falloffModel = (FalloffModel)0,
					tracerEffectPrefab = TracerEffectPrefab,
					muzzleName = "Muzzle",
					hitEffectPrefab = HitEffectPrefab,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = false,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericSpecial,
					maxDistance = 1450f
				}.Fire();
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle + 1.45f,
					bulletCount = 4u,
					procCoefficient = 0.5f,
					damage = ((EntityState)this).characterBody.damage * (0.08f * (float)((EntityState)this).skillLocator.special.stock),
					force = 128f,
					falloffModel = (FalloffModel)0,
					tracerEffectPrefab = TracerEffectPrefab2,
					muzzleName = "Muzzle",
					hitEffectPrefab = HitEffectPrefab,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = false,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericSpecial,
					maxDistance = 2250f
				}.Fire();
			}
			((EntityState)this).skillLocator.special.stock = 0;
		}

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

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class LightshowCharge : BaseSkillState
	{
		private float Duration = 0.65f;

		private bool hasSwitchedToTimerLoop;

		private Animator modelAnimator;

		public override void OnEnter()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			uint num = default(uint);
			AkSoundEngine.LoadBank("char_railgunner", ref num);
			((EntityState)this).PlayAnimation("Gesture, Override", "CommandPaint");
			modelAnimator = ((EntityState)this).GetModelAnimator();
			if (Object.op_Implicit((Object)(object)modelAnimator))
			{
				modelAnimator.SetBool("paintActive", true);
			}
			Util.PlaySound("Play_railgunner_R_preFire", ((EntityState)this).gameObject);
		}

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

		public override void FixedUpdate()
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (!((EntityState)this).isAuthority || !(((EntityState)this).fixedAge >= Duration))
			{
				return;
			}
			int num;
			if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank))
			{
				num = (((EntityState)this).inputBank.skill4.down ? 1 : 0);
				if (num != 0 && !hasSwitchedToTimerLoop)
				{
					AkSoundEngine.ExecuteActionOnEvent("Play_railgunner_R_preFire", (AkActionOnEventType)0, ((EntityState)this).gameObject);
					Util.PlaySound("Play_railgunner_R_gun_timer_loop", ((EntityState)this).gameObject);
					hasSwitchedToTimerLoop = true;
				}
			}
			else
			{
				num = 0;
			}
			if (num == 0)
			{
				Util.PlaySound("Stop_railgunner_R_gun_timer_loop", ((EntityState)this).gameObject);
				if (Object.op_Implicit((Object)(object)modelAnimator))
				{
					modelAnimator.SetBool("paintActive", false);
				}
				((EntityState)this).outer.SetNextState((EntityState)(object)new Lightshow());
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class Molotov : BaseSkillState
	{
		private float BaseDuration = 0.25f;

		private float Duration;

		public override void OnEnter()
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: 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_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			GameObject obj = LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/MolotovSingleProjectile");
			GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/MolotovProjectileDotZone");
			GameObject val2 = PrefabAPI.InstantiateClone(obj, "BanditMolotov", true);
			GameObject val3 = PrefabAPI.InstantiateClone(val, "BanditMolotovPool", true);
			Duration = BaseDuration / ((BaseState)this).attackSpeedStat;
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).StartAimMode(aimRay, 2f, false);
			((EntityState)this).PlayAnimation("Gesture, Additive", "SlashBlade", "SlashBlade.playbackRate", 0.5f, 0f);
			Util.PlaySound("bandit_shift_land_01", ((EntityState)this).gameObject);
			val2.GetComponent<ProjectileSimple>().lifetime = 12f;
			ProjectileImpactExplosion component = val2.GetComponent<ProjectileImpactExplosion>();
			((ProjectileExplosion)component).blastDamageCoefficient = 3.5f;
			((ProjectileExplosion)component).blastProcCoefficient = 1f;
			((ProjectileExplosion)component).blastRadius = ((ProjectileExplosion)component).blastRadius * ((BaseState)this).attackSpeedStat;
			((ProjectileExplosion)component).childrenProjectilePrefab = val3;
			((ProjectileExplosion)component).childrenCount = 1;
			ProjectileDotZone component2 = val3.GetComponent<ProjectileDotZone>();
			component2.damageCoefficient = 0.25f;
			component2.overlapProcCoefficient = 0.5f;
			component2.lifetime = 8f;
			component2.fireFrequency = ((BaseState)this).attackSpeedStat * 2f / 3f * 10.5f;
			component2.resetFrequency = -0f;
			val3.GetComponent<ProjectileDamage>().damageType = DamageTypeCombo.op_Implicit((DamageType)128);
			Transform transform = val3.transform;
			transform.localScale *= ((BaseState)this).attackSpeedStat;
			if (((EntityState)this).isAuthority)
			{
				ProjectileManager.instance.FireProjectile(val2, ((Ray)(ref aimRay)).origin, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), ((Component)((EntityState)this).characterBody).gameObject, ((EntityState)this).characterBody.damage, 0f, Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, 80f, (DamageTypeCombo?)null);
			}
		}

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

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class Switchback : BaseSkillState
	{
		private float Duration = 0.15f;

		private int Shots;

		private float Threshold = 0.185f;

		private float FireInt = 0.0575f;

		private float Timer;

		private bool Magdump;

		private bool AllTheSingleLadies;

		private float FireRate;

		private GameObject ShottyFlash = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/MuzzleflashFMJ.prefab").WaitForCompletion();

		private GameObject SmgFlash = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/MuzzleflashBarrage.prefab").WaitForCompletion();

		private GameObject HitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/Hitspark1.prefab").WaitForCompletion();

		private GameObject TracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/TracerCommandoDefault.prefab").WaitForCompletion();

		private GameObject ShotgunHitSpark = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/HitsparkCommandoShotgun.prefab").WaitForCompletion();

		private GameObject ShotgunTracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/TracerCommandoShotgun.prefab").WaitForCompletion();

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			FireRate = FireInt / ((BaseState)this).attackSpeedStat;
			((EntityState)this).skillLocator.primary.isCooldownBlocked = true;
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).inputBank.interact.down && ((EntityState)this).inputBank.skill1.down)
			{
				((EntityState)this).skillLocator.primary.stock = 0;
			}
			if (!Magdump && !((EntityState)this).inputBank.skill1.down && ((EntityState)this).fixedAge < Threshold && ((BaseSkillState)this).activatorSkillSlot.stock >= 12)
			{
				FireMulti();
			}
			if (((BaseSkillState)this).activatorSkillSlot.stock < 12)
			{
				Threshold = 0f;
			}
			if (!Magdump && ((EntityState)this).fixedAge >= Threshold && ((EntityState)this).inputBank.skill1.down)
			{
				Magdump = true;
				Timer = 0f;
			}
			if (Magdump)
			{
				Timer += Time.fixedDeltaTime;
				if (Timer >= FireRate && ((BaseSkillState)this).activatorSkillSlot.stock > 0)
				{
					Timer = 0f;
					FireSmg();
					((EntityState)this).skillLocator.primary.DeductStock(1);
				}
			}
			if (((BaseSkillState)this).activatorSkillSlot.stock <= 0)
			{
				((EntityState)this).skillLocator.primary.isCooldownBlocked = false;
				((EntityState)this).outer.SetNextState((EntityState)(object)new SwitchbackReload());
			}
			if (((EntityState)this).fixedAge >= Duration && !((EntityState)this).inputBank.skill1.down)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void FireMulti()
		{
			if (!AllTheSingleLadies)
			{
				AllTheSingleLadies = true;
				if (((EntityState)this).skillLocator.primary.stock > 0)
				{
					((EntityState)this).skillLocator.primary.DeductStock(12);
				}
				FireMultiBullet("MuzzleRight");
				FireMultiBullet("MuzzleLeft");
			}
		}

		private void FireMultiBullet(string ShottyMuzzle)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: 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_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: 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_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).characterBody.isSprinting)
			{
				((EntityState)this).characterBody.isSprinting = false;
			}
			Util.PlaySound("Play_commando_M2", ((EntityState)this).gameObject);
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).StartAimMode(aimRay, 2f, false);
			((EntityState)this).PlayAnimation("Gesture Additive, Right", FirePistol2.FirePistolRightStateHash);
			((EntityState)this).PlayAnimation("Gesture Additive, Left", FirePistol2.FirePistolLeftStateHash);
			EffectManager.SimpleMuzzleFlash(ShottyFlash, ((EntityState)this).gameObject, "Muzzle", false);
			Util.PlaySound("Play_commando_M2", ((EntityState)this).gameObject);
			((BaseState)this).AddRecoil(-7f, -12f, -7f, 9f);
			if (((EntityState)this).isAuthority)
			{
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle + 1.85f,
					bulletCount = (uint)(((BaseState)this).attackSpeedStat / 3f * 18f),
					procCoefficient = 0.275f,
					damage = ((EntityState)this).characterBody.damage * 1f,
					force = 16f,
					falloffModel = (FalloffModel)2,
					tracerEffectPrefab = ShotgunTracerEffectPrefab,
					muzzleName = "Muzzle",
					hitEffectPrefab = ShotgunHitSpark,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = true,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericPrimary,
					maxDistance = 250f
				}.Fire();
			}
		}

		private void FireSmg()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: 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_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: 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)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			Shots++;
			if (((EntityState)this).characterBody.isSprinting)
			{
				((EntityState)this).characterBody.isSprinting = false;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			((BaseState)this).StartAimMode(aimRay, 2f, false);
			string text;
			if (Shots % 2 == 0)
			{
				text = "MuzzleRight";
				((EntityState)this).PlayAnimation("Gesture Additive, Right", FirePistol2.FirePistolRightStateHash);
			}
			else
			{
				text = "MuzzleLeft";
				((EntityState)this).PlayAnimation("Gesture Additive, Left", FirePistol2.FirePistolLeftStateHash);
			}
			EffectManager.SimpleMuzzleFlash(SmgFlash, ((EntityState)this).gameObject, text, false);
			Util.PlaySound("Play_commando_M1", ((EntityState)this).gameObject);
			((BaseState)this).AddRecoil(-1.25f, -3f, -1.25f, 2f);
			if (((EntityState)this).isAuthority)
			{
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle + 1.2f,
					bulletCount = 1u,
					procCoefficient = 1f,
					damage = ((EntityState)this).characterBody.damage * 0.85f,
					force = 4f,
					falloffModel = (FalloffModel)0,
					tracerEffectPrefab = TracerEffectPrefab,
					muzzleName = text,
					hitEffectPrefab = HitEffectPrefab,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = true,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericPrimary,
					maxDistance = 1500f
				}.Fire();
			}
		}

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

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class SwitchbackReload : GenericReload
	{
		private static int ReloadPistolsStateHash = Animator.StringToHash("ReloadPistols");

		private static int ReloadPistolsParamHash = Animator.StringToHash("ReloadPistols.playbackRate");

		private static int ReloadPistolsExitStateHash = Animator.StringToHash("ReloadPistolsExit");

		public override void OnEnter()
		{
			((GenericReload)this).OnEnter();
			Util.PlaySound("Play_bandit2_R_load", ((EntityState)this).gameObject);
			((EntityState)this).PlayAnimation("Gesture, Override", ReloadPistolsStateHash, ReloadPistolsParamHash, 1.15f);
			((EntityState)this).PlayAnimation("Gesture, Additive", ReloadPistolsStateHash, ReloadPistolsParamHash, 1.15f);
			((Component)((BaseState)this).FindModelChild("GunMeshL")).gameObject.SetActive(false);
			((Component)((BaseState)this).FindModelChild("GunMeshR")).gameObject.SetActive(false);
		}

		public override void OnExit()
		{
			((Component)((BaseState)this).FindModelChild("ReloadFXL")).gameObject.SetActive(false);
			((Component)((BaseState)this).FindModelChild("ReloadFXR")).gameObject.SetActive(false);
			((Component)((BaseState)this).FindModelChild("GunMeshL")).gameObject.SetActive(true);
			((Component)((BaseState)this).FindModelChild("GunMeshR")).gameObject.SetActive(true);
			((EntityState)this).PlayAnimation("Gesture, Override", ReloadPistolsExitStateHash);
			((EntityState)this).PlayAnimation("Gesture, Additive", ReloadPistolsExitStateHash);
			((GenericReload)this).OnExit();
		}
	}
	public class Vendetta : BaseSkillState
	{
		private float Duration = 0.45f;

		private Animator Animator;

		private int BodySideWeaponLayerIndex;

		private float Threshold = 0.8f;

		private float FireInt = 0.05f;

		private float Timer;

		private bool Magdump;

		private bool AllTheSingleLadies;

		private GameObject MuzzleFlash = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/MuzzleflashBandit2.prefab").WaitForCompletion();

		private GameObject CrosshairOverridePrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2CrosshairPrepRevolverFire.prefab").WaitForCompletion();

		private GameObject HitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/HitsparkBandit2Pistol.prefab").WaitForCompletion();

		private GameObject TracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/TracerBanditPistol.prefab").WaitForCompletion();

		public override void OnEnter()
		{
			((BaseState)this).OnEnter();
			((EntityState)this).skillLocator.primary.isCooldownBlocked = true;
			Animator = ((EntityState)this).GetModelAnimator();
			BodySideWeaponLayerIndex = Animator.GetLayerIndex("Body, SideWeapon");
			Animator.SetLayerWeight(BodySideWeaponLayerIndex, 1f);
			CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, CrosshairOverridePrefab, (OverridePriority)1);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).inputBank.interact.down && ((EntityState)this).inputBank.skill1.down)
			{
				((EntityState)this).skillLocator.primary.stock = 0;
			}
			if (!Magdump && !((EntityState)this).inputBank.skill1.down && ((EntityState)this).fixedAge < Threshold)
			{
				FireNormalShot();
			}
			if (!Magdump && ((EntityState)this).fixedAge >= Threshold && ((EntityState)this).inputBank.skill1.down)
			{
				Magdump = true;
				Timer = 0f;
			}
			if (!Magdump && ((EntityState)this).fixedAge == 0.15f && ((EntityState)this).skillLocator.primary.stock > 0)
			{
				((EntityState)this).PlayAnimation("Gesture, Additive", "MainToSide", "MainToSide.playbackRate", 0.65f, 0f);
				Util.PlaySound("Play_bandit2_R_load", ((EntityState)this).gameObject);
			}
			if (Magdump)
			{
				if (((EntityState)this).skillLocator.primary.stock <= 0)
				{
					((EntityState)this).PlayAnimation("Gesture, Additive", "MainToSide", "MainToSide.playbackRate", 0.85f, 0f);
					Util.PlaySound("Play_bandit2_R_load", ((EntityState)this).gameObject);
					((EntityState)this).skillLocator.primary.isCooldownBlocked = false;
					((EntityState)this).outer.SetNextState((EntityState)(object)new VendettaExit());
				}
				Timer += Time.fixedDeltaTime;
				if (Timer >= FireInt && ((EntityState)this).skillLocator.primary.stock > 0)
				{
					Timer = 0f;
					FireDumpShot();
					GenericSkill primary = ((EntityState)this).skillLocator.primary;
					int stock = primary.stock;
					primary.stock = stock - 1;
				}
			}
			if (((EntityState)this).skillLocator.primary.stock <= 0)
			{
				((EntityState)this).PlayAnimation("Gesture, Additive", "MainToSide", "MainToSide.playbackRate", 0.85f, 0f);
				Util.PlaySound("Play_bandit2_R_load", ((EntityState)this).gameObject);
				((EntityState)this).skillLocator.primary.isCooldownBlocked = false;
				((EntityState)this).outer.SetNextState((EntityState)(object)new VendettaExit());
			}
			if (((EntityState)this).fixedAge >= Duration && !((EntityState)this).inputBank.skill1.down)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new VendettaExit());
			}
		}

		private void FireNormalShot()
		{
			if (!AllTheSingleLadies)
			{
				AllTheSingleLadies = true;
				if (((EntityState)this).skillLocator.primary.stock > 0)
				{
					GenericSkill primary = ((EntityState)this).skillLocator.primary;
					int stock = primary.stock;
					primary.stock = stock - 1;
				}
				FireBulletSingle();
			}
		}

		private void FireDumpShot()
		{
			DumpBullet();
		}

		private void DumpBullet()
		{
			//IL_0020: 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_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			if (((EntityState)this).isAuthority)
			{
				((Component)((BaseState)this).FindModelChild("SpinningPistolFX")).gameObject.SetActive(false);
				Ray aimRay = ((BaseState)this).GetAimRay();
				Animator = ((EntityState)this).GetModelAnimator();
				((BaseState)this).StartAimMode(aimRay, 2f, false);
				BodySideWeaponLayerIndex = Animator.GetLayerIndex("Body, SideWeapon");
				Animator.SetLayerWeight(BodySideWeaponLayerIndex, 1f);
				((EntityState)this).PlayAnimation("Gesture, Additive", "FireSideWeapon", "FireSideWeapon.playbackRate", 1f, 0f);
				Util.PlaySound("Play_bandit2_R_fire", ((EntityState)this).gameObject);
				((BaseState)this).AddRecoil(-2f, -6f, -2f, 3f);
				EffectManager.SimpleMuzzleFlash(MuzzleFlash, ((EntityState)this).gameObject, "MuzzlePistol", false);
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle * 1.85f,
					bulletCount = 1u,
					procCoefficient = 0.65f,
					damage = ((EntityState)this).characterBody.damage * (((BaseState)this).attackSpeedStat / 2f * 6f),
					force = 4f,
					falloffModel = (FalloffModel)1,
					tracerEffectPrefab = TracerEffectPrefab,
					muzzleName = "MuzzlePistol",
					hitEffectPrefab = HitEffectPrefab,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = false,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericPrimary,
					maxDistance = 450f
				}.Fire();
			}
		}

		private void FireBulletSingle()
		{
			//IL_0020: 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_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: 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_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: 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_019d: 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_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: 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)
			if (((EntityState)this).isAuthority)
			{
				((Component)((BaseState)this).FindModelChild("SpinningPistolFX")).gameObject.SetActive(false);
				Ray aimRay = ((BaseState)this).GetAimRay();
				Animator = ((EntityState)this).GetModelAnimator();
				((BaseState)this).StartAimMode(aimRay, 2f, false);
				BodySideWeaponLayerIndex = Animator.GetLayerIndex("Body, SideWeapon");
				Animator.SetLayerWeight(BodySideWeaponLayerIndex, 1f);
				((EntityState)this).PlayAnimation("Gesture, Additive", "FireSideWeapon", "FireSideWeapon.playbackRate", 1f, 0f);
				Util.PlaySound("Play_bandit2_R_fire", ((EntityState)this).gameObject);
				((BaseState)this).AddRecoil(-2f, -6f, -2f, 3f);
				EffectManager.SimpleMuzzleFlash(MuzzleFlash, ((EntityState)this).gameObject, "MuzzlePistol", false);
				new BulletAttack
				{
					owner = ((EntityState)this).gameObject,
					weapon = ((EntityState)this).gameObject,
					origin = ((Ray)(ref aimRay)).origin,
					aimVector = ((Ray)(ref aimRay)).direction,
					minSpread = 0f,
					maxSpread = ((EntityState)this).characterBody.spreadBloomAngle,
					bulletCount = 1u,
					procCoefficient = 1.5f,
					damage = ((EntityState)this).characterBody.damage * (((BaseState)this).attackSpeedStat / 2f * 9f),
					force = 4f,
					falloffModel = (FalloffModel)0,
					tracerEffectPrefab = TracerEffectPrefab,
					muzzleName = "MuzzlePistol",
					hitEffectPrefab = HitEffectPrefab,
					isCrit = ((BaseState)this).RollCrit(),
					HitEffectNormal = false,
					stopperMask = CommonMasks.bullet,
					smartCollision = true,
					damageType = DamageTypeCombo.GenericPrimary,
					maxDistance = 3000f
				}.Fire();
			}
		}

		public override void OnExit()
		{
			if ((Object)(object)Animator != (Object)null)
			{
				Animator.SetLayerWeight(BodySideWeaponLayerIndex, 0f);
			}
			((EntityState)this).OnExit();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)1;
		}
	}
	public class VendettaExit : BaseSidearmState
	{
		public override void OnEnter()
		{
			((BaseSidearmState)this).OnEnter();
		}

		public override void FixedUpdate()
		{
			((BaseSidearmState)this).FixedUpdate();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)0;
		}
	}
}
namespace ExamplePlugin
{
	internal static class Log
	{
		private static ManualLogSource _logSource;

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

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

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

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

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

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

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
}