Decompiled source of ChensGradiusMod v3.6.0

ChensGradiusMod.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using Aetherium.Items;
using Aetherium.Items.Tier2;
using Aetherium.Items.Tier3;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using Chen.GradiusMod.Compatibility;
using Chen.GradiusMod.Drones;
using Chen.GradiusMod.Drones.EmergencyDrone;
using Chen.GradiusMod.Drones.EquipmentDrone;
using Chen.GradiusMod.Drones.GunnerDrone;
using Chen.GradiusMod.Drones.GunnerTurret;
using Chen.GradiusMod.Drones.HealingDrone;
using Chen.GradiusMod.Drones.IncineratorDrone;
using Chen.GradiusMod.Drones.MissileDrone;
using Chen.GradiusMod.Drones.TC280;
using Chen.GradiusMod.Items.GradiusOption;
using Chen.GradiusMod.Items.GradiusOption.Components;
using Chen.GradiusMod.Items.OptionSeed.Components;
using Chen.Helpers.CollectionHelpers;
using Chen.Helpers.GeneralHelpers;
using Chen.Helpers.LogHelpers;
using Chen.Helpers.MathHelpers;
using Chen.Helpers.UnityHelpers;
using EntityStates;
using EntityStates.Bandit2.Weapon;
using EntityStates.BeetleGuardMonster;
using EntityStates.Captain.Weapon;
using EntityStates.Chef;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Croco;
using EntityStates.Drone;
using EntityStates.Drone.DroneWeapon;
using EntityStates.Engi.EngiMissilePainter;
using EntityStates.Engi.EngiWeapon;
using EntityStates.EngiTurret.EngiTurretWeapon;
using EntityStates.FalseSon;
using EntityStates.GolemMonster;
using EntityStates.Huntress;
using EntityStates.Huntress.HuntressWeapon;
using EntityStates.Loader;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.Railgunner.Weapon;
using EntityStates.Seeker;
using EntityStates.Squid.SquidWeapon;
using EntityStates.TitanMonster;
using EntityStates.Toolbot;
using EntityStates.Treebot;
using EntityStates.Treebot.Weapon;
using EntityStates.VoidSurvivor.Weapon;
using On.EntityStates;
using On.EntityStates.Bandit2.Weapon;
using On.EntityStates.BeetleGuardMonster;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.Chef;
using On.EntityStates.Commando.CommandoWeapon;
using On.EntityStates.Croco;
using On.EntityStates.Drone.DroneWeapon;
using On.EntityStates.Engi.EngiMissilePainter;
using On.EntityStates.Engi.EngiWeapon;
using On.EntityStates.EngiTurret.EngiTurretWeapon;
using On.EntityStates.FalseSon;
using On.EntityStates.Huntress;
using On.EntityStates.Huntress.HuntressWeapon;
using On.EntityStates.Loader;
using On.EntityStates.Mage.Weapon;
using On.EntityStates.Merc;
using On.EntityStates.Railgunner.Weapon;
using On.EntityStates.Seeker;
using On.EntityStates.Squid.SquidWeapon;
using On.EntityStates.TitanMonster;
using On.EntityStates.Toolbot;
using On.EntityStates.Treebot;
using On.EntityStates.Treebot.Weapon;
using On.EntityStates.VoidSurvivor.Weapon;
using On.RoR2;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TILER2;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("ChensGradiusMod.Tests")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("ChensGradiusMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("3.5.4.0")]
[assembly: AssemblyInformationalVersion("3.5.4")]
[assembly: AssemblyProduct("ChensGradiusMod")]
[assembly: AssemblyTitle("ChensGradiusMod")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/cheeeeeeeeeen/RoR2-ChensGradiusMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("3.5.4.0")]
[module: UnverifiableCode]
namespace Chen.GradiusMod
{
	public static class Extensions
	{
		public static bool SafeCheck(this Dictionary<string, Object> dictionary, string key)
		{
			if (dictionary.ContainsKey(key))
			{
				return Object.op_Implicit(dictionary[key]);
			}
			return false;
		}

		public static void MuzzleEffect(this GameObject catalyst, GameObject effectPrefab, bool transmit)
		{
			//IL_0000: 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)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			EffectData val = new EffectData
			{
				origin = catalyst.transform.position,
				rotation = catalyst.transform.rotation,
				rootObject = catalyst
			};
			EffectManager.SpawnEffect(effectPrefab, val, transmit);
		}

		public static void SetAllDriversToAimTowardsEnemies(this GameObject masterObject)
		{
			AISkillDriver[] components = masterObject.GetComponents<AISkillDriver>();
			components.SetAllDriversToAimTowardsEnemies();
		}

		public static void SetAllDriversToAimTowardsEnemies(this AISkillDriver[] skillDrivers)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			foreach (AISkillDriver val in skillDrivers)
			{
				val.aimType = (AimType)2;
			}
		}

		public static void AssignDeathBehavior(this GameObject masterObject, Type newStateType)
		{
			//IL_002f: 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)
			CharacterMaster component = masterObject.GetComponent<CharacterMaster>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				GradiusModPlugin.Log.Warning((object)"Extensions.AssignDeathBehavior: CharacterMaster component not found!");
				return;
			}
			GameObject bodyPrefab = component.bodyPrefab;
			CharacterDeathBehavior orAddComponent = Extensions.GetOrAddComponent<CharacterDeathBehavior>(bodyPrefab);
			orAddComponent.deathState = new SerializableEntityStateType(newStateType);
		}

		public static void FilterOutOwnerFromAttack(this BulletAttack bulletAttack)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			bulletAttack.filterCallback = (FilterCallback)delegate(BulletAttack attack, ref BulletHit hitInfo)
			{
				return !((Object)(object)bulletAttack.owner == (Object)(object)hitInfo.entityObject) && !((Object)(object)bulletAttack.weapon == (Object)(object)hitInfo.entityObject) && BulletAttack.defaultFilterCallback.Invoke(attack, ref hitInfo);
			};
			bulletAttack.hitCallback = (HitCallback)delegate(BulletAttack attack, ref BulletHit hitInfo)
			{
				return !((Object)(object)bulletAttack.owner == (Object)(object)hitInfo.entityObject) && !((Object)(object)bulletAttack.weapon == (Object)(object)hitInfo.entityObject) && BulletAttack.defaultHitCallback.Invoke(attack, ref hitInfo);
			};
		}

		public static void InitializeDroneModelComponents(this GameObject droneModel, CharacterBody droneBody, float colliderMultiplier)
		{
			//IL_008b: 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)
			CapsuleCollider componentInChildren = droneModel.GetComponentInChildren<CapsuleCollider>();
			if (!Object.op_Implicit((Object)(object)componentInChildren))
			{
				GradiusModPlugin.Log.Warning((object)"Extensions.InitializeDroneModelComponents: CapsuleCollider not found! Cannot setup HurtBoxes without it.");
				return;
			}
			CharacterModel val = droneModel.AddComponent<CharacterModel>();
			val.body = droneBody;
			Extensions.BuildRendererInfos(val, droneModel);
			val.autoPopulateLightInfos = true;
			val.invisibilityCount = 0;
			val.temporaryOverlays = new List<TemporaryOverlayInstance>();
			HurtBoxGroup val2 = droneModel.AddComponent<HurtBoxGroup>();
			HurtBox val3 = ((Component)componentInChildren).gameObject.AddComponent<HurtBox>();
			((Component)val3).gameObject.layer = LayerIndex.entityPrecise.intVal;
			val3.healthComponent = ((Component)droneBody).GetComponent<HealthComponent>();
			val3.isBullseye = true;
			val3.damageModifier = (DamageModifier)0;
			val3.hurtBoxGroup = val2;
			val3.indexInGroup = 0;
			val2.hurtBoxes = (HurtBox[])(object)new HurtBox[1] { val3 };
			val2.mainHurtBox = val3;
			val2.bullseyeCount = 1;
			CapsuleCollider component = ((Component)droneBody).GetComponent<CapsuleCollider>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.center = componentInChildren.center;
				component.radius = componentInChildren.radius * colliderMultiplier;
				component.height = componentInChildren.height * colliderMultiplier;
				component.direction = componentInChildren.direction;
			}
		}
	}
	[BepInPlugin("com.Chen.ChensGradiusMod", "ChensGradiusMod", "3.6.0")]
	[BepInDependency("com.bepis.r2api", "5.1.1")]
	[BepInDependency("com.ThinkInvisible.TILER2", "7.4.0")]
	[BepInDependency("com.Chen.ChensHelpers", "1.1.3")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "NetworkingAPI", "DirectorAPI", "ContentAddition" })]
	public class GradiusModPlugin : BaseUnityPlugin
	{
		internal class GlobalConfig : AutoConfigContainer
		{
			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool emergencyDroneFix { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool gunnerDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool turretsAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool healingDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool emergencyDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool flameDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool missileDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool megaDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool equipmentDronesAreRepurchaseable { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public float dropEquipFromDroneChance { get; private set; }

			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public int flameDroneWeightScorchedAcres { get; private set; } = 1;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public int flameDroneWeightAbyssalDepths { get; private set; } = 3;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool turretsAsDroneCategory { get; private set; } = true;


			[AutoConfig(/*Could not decode attribute arguments.*/)]
			public bool equipmentDroneInspire { get; private set; } = true;

		}

		internal static readonly GlobalConfig generalCfg = new GlobalConfig();

		public const string ModVer = "3.6.0";

		public const string ModName = "ChensGradiusMod";

		public const string ModGuid = "com.Chen.ChensGradiusMod";

		internal static ConfigFile cfgFile;

		internal static FilingDictionary<CatalogBoilerplate> chensItemList = new FilingDictionary<CatalogBoilerplate>();

		internal static List<DroneInfo> gradiusDronesList = new List<DroneInfo>();

		internal static Log Log;

		internal static AssetBundle assetBundle;

		private static readonly Lazy<GameObject> _backupDroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/DroneBackupMaster")));

		private static readonly Lazy<GameObject> _drone1Master = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/Drone1Master")));

		private static readonly Lazy<GameObject> _drone2Master = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/Drone2Master")));

		private static readonly Lazy<GameObject> _emergencyDroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/EmergencyDroneMaster")));

		private static readonly Lazy<GameObject> _flameDroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/FlameDroneMaster")));

		private static readonly Lazy<GameObject> _missileDroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/DroneMissileMaster")));

		private static readonly Lazy<GameObject> _turret1Master = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/Turret1Master")));

		private static readonly Lazy<GameObject> _tc280DroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/MegaDroneMaster")));

		private static readonly Lazy<GameObject> _equipmentDroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/EquipmentDroneMaster")));

		private static readonly Lazy<GameObject> _helperPrefab = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("SpawnCards/HelperPrefab")));

		private static readonly Lazy<InteractableSpawnCard> _drone1SpawnCard = new Lazy<InteractableSpawnCard>((Func<InteractableSpawnCard>)(() => Resources.Load<InteractableSpawnCard>("spawncards/interactablespawncard/iscBrokenDrone1")));

		private static readonly Lazy<SkillDef> _drone1Skill = new Lazy<SkillDef>((Func<SkillDef>)(() => Resources.Load<SkillDef>("skilldefs/drone1body/Drone1BodyGun")));

		private static readonly Lazy<Material> _summonDroneMaterial = new Lazy<Material>((Func<Material>)(() => Resources.Load<Material>("Materials/matSummonDrone")));

		internal static SoundPlayer soundPlayer = new SoundPlayer(Array.Empty<EventPosterKey>());

		internal static GameObject backupDroneMaster => _backupDroneMaster.Value;

		internal static GameObject drone1Master => _drone1Master.Value;

		internal static GameObject drone2Master => _drone2Master.Value;

		internal static GameObject emergencyDroneMaster => _emergencyDroneMaster.Value;

		internal static GameObject flameDroneMaster => _flameDroneMaster.Value;

		internal static GameObject missileDroneMaster => _missileDroneMaster.Value;

		internal static GameObject turret1Master => _turret1Master.Value;

		internal static GameObject tc280DroneMaster => _tc280DroneMaster.Value;

		internal static GameObject equipmentDroneMaster => _equipmentDroneMaster.Value;

		internal static GameObject helperPrefab => _helperPrefab.Value;

		internal static InteractableSpawnCard drone1SpawnCard => _drone1SpawnCard.Value;

		internal static SkillDef drone1Skill => _drone1Skill.Value;

		internal static Material summonDroneMaterial => _summonDroneMaterial.Value;

		private void RegisterVanillaChanges()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			if (generalCfg.emergencyDroneFix)
			{
				Log.Debug((object)"Vanilla Fix: Applying Emergency Drone Fix.");
				HealBeamController.HealBeamAlreadyExists_GameObject_HealthComponent += new hook_HealBeamAlreadyExists_GameObject_HealthComponent(HealBeamController_HealBeamAlreadyExists_GO_HC);
			}
			if (generalCfg.flameDroneWeightScorchedAcres > 1 || generalCfg.flameDroneWeightAbyssalDepths > 1)
			{
				Log.Debug((object)"Vanilla Change: Modifying Flame Drone spawn weight on Abyssal Depths or Scorched Acres (or both).");
				DirectorAPI.InteractableActions += FlameDrone_InteractableActions;
			}
			if (generalCfg.turretsAsDroneCategory)
			{
				Log.Debug((object)"Vanilla Change: Modifying category of Gunner Turrets to Drones category.");
				DirectorAPI.InteractableActions += Turret1_InteractableActions;
			}
		}

		private void Turret1_InteractableActions(DccsPool arg1, StageInfo arg2)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)arg1))
			{
				return;
			}
			Helpers.ForEachPoolEntryInDccsPool(arg1, (Action<PoolEntry>)delegate(PoolEntry poolEntry)
			{
				//IL_002f: 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_0045: 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_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_0078: Unknown result type (might be due to invalid IL or missing references)
				//IL_008a: Expected O, but got Unknown
				//IL_008a: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_0098: Unknown result type (might be due to invalid IL or missing references)
				//IL_009d: 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_00a5: Expected O, but got Unknown
				DirectorCard turretDirectorCard = null;
				poolEntry.dccs.RemoveCardsThatFailFilter((Predicate<DirectorCard>)delegate(DirectorCard dCard)
				{
					if (((Object)dCard.spawnCard).name.Contains("Turret1"))
					{
						turretDirectorCard = dCard;
						return false;
					}
					return true;
				});
				if (turretDirectorCard != null)
				{
					DirectorCard card = new DirectorCard
					{
						spawnCard = turretDirectorCard.spawnCard,
						selectionWeight = turretDirectorCard.selectionWeight,
						minimumStageCompletions = turretDirectorCard.minimumStageCompletions,
						spawnDistance = turretDirectorCard.spawnDistance,
						preventOverhead = turretDirectorCard.preventOverhead
					};
					DirectorCardHolder val = new DirectorCardHolder
					{
						Card = card,
						MonsterCategory = (MonsterCategory)0,
						InteractableCategory = (InteractableCategory)5
					};
					DirectorAPI.AddCard(poolEntry.dccs, val);
				}
				else
				{
					Log.Warning((object)("GradiusModPlugin.Turret1_InteractableActions: Turret Director Card not found. (arg1: " + ((Object)arg1).name + ", arg2: " + ((StageInfo)(ref arg2)).ToInternalStageName() + ")"));
				}
			});
		}

		private void FlameDrone_InteractableActions(DccsPool arg1, StageInfo arg2)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if ((!Object.op_Implicit((Object)(object)arg1) || !((StageInfo)(ref arg2)).CheckStage((Stage)128, Array.Empty<string>())) && !((StageInfo)(ref arg2)).CheckStage((Stage)64, Array.Empty<string>()))
			{
				return;
			}
			float weightMultiplier = 1f;
			if (((StageInfo)(ref arg2)).CheckStage((Stage)128, Array.Empty<string>()))
			{
				weightMultiplier = generalCfg.flameDroneWeightAbyssalDepths;
			}
			else if (((StageInfo)(ref arg2)).CheckStage((Stage)64, Array.Empty<string>()))
			{
				weightMultiplier = generalCfg.flameDroneWeightScorchedAcres;
			}
			Helpers.ForEachPoolEntryInDccsPool(arg1, (Action<PoolEntry>)delegate(PoolEntry poolEntry)
			{
				//IL_002f: 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_0045: 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_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0080: Unknown result type (might be due to invalid IL or missing references)
				//IL_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: Expected O, but got Unknown
				//IL_0097: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a3: 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)
				//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Expected O, but got Unknown
				DirectorCard flameDroneDirectorCard = null;
				poolEntry.dccs.RemoveCardsThatFailFilter((Predicate<DirectorCard>)delegate(DirectorCard dCard)
				{
					if (((Object)dCard.spawnCard).name.Contains("FlameDrone"))
					{
						flameDroneDirectorCard = dCard;
						return false;
					}
					return true;
				});
				if (flameDroneDirectorCard != null)
				{
					DirectorCard card = new DirectorCard
					{
						spawnCard = flameDroneDirectorCard.spawnCard,
						selectionWeight = Mathf.RoundToInt((float)flameDroneDirectorCard.selectionWeight * weightMultiplier),
						minimumStageCompletions = flameDroneDirectorCard.minimumStageCompletions,
						spawnDistance = flameDroneDirectorCard.spawnDistance,
						preventOverhead = flameDroneDirectorCard.preventOverhead
					};
					DirectorCardHolder val = new DirectorCardHolder
					{
						Card = card,
						MonsterCategory = (MonsterCategory)0,
						InteractableCategory = (InteractableCategory)5
					};
					DirectorAPI.AddCard(poolEntry.dccs, val);
				}
				else
				{
					Log.Warning((object)("GradiusModPlugin.FlameDrone_InteractableActions: Flame Drone Director Card not found. (arg1: " + ((Object)arg1).name + ", arg2: " + ((StageInfo)(ref arg2)).ToInternalStageName() + ")"));
				}
			});
		}

		private bool HealBeamController_HealBeamAlreadyExists_GO_HC(orig_HealBeamAlreadyExists_GameObject_HealthComponent orig, GameObject owner, HealthComponent targetHealthComponent)
		{
			List<HealBeamController> instancesList = InstanceTracker.GetInstancesList<HealBeamController>();
			for (int i = 0; i < instancesList.Count; i++)
			{
				HealBeamController val = instancesList[i];
				if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.target) && Object.op_Implicit((Object)(object)val.target.healthComponent) && Object.op_Implicit((Object)(object)targetHealthComponent) && Object.op_Implicit((Object)(object)val.ownership) && Object.op_Implicit((Object)(object)val.ownership.ownerObject) && (Object)(object)val.target.healthComponent == (Object)(object)targetHealthComponent && (Object)(object)val.ownership.ownerObject == (Object)(object)owner)
				{
					return true;
				}
			}
			return false;
		}

		private void Update()
		{
			DropletGenerator.Update();
			bool keyDown = Input.GetKeyDown((KeyCode)290);
			if (keyDown)
			{
				CharacterMaster master = PlayerCharacterMasterController.instances[0].master;
				CharacterBody body = master.GetBody();
				Transform transform = ((Component)body).gameObject.transform;
				if (keyDown)
				{
					OptionMasterTracker.SpawnOption(((Component)transform).gameObject, 1);
					return;
				}
			}
			soundPlayer.Update();
		}

		private void Awake()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			Log = new Log(((BaseUnityPlugin)this).Logger);
			Log.Debug((object)"Loading assets...");
			BundleInfo val = default(BundleInfo);
			((BundleInfo)(ref val))..ctor("Chen.GradiusMod.chensgradiusmod_assets", (BundleType)0);
			BundleInfo val2 = default(BundleInfo);
			((BundleInfo)(ref val2))..ctor("Chen.GradiusMod.chensgradiusmod_soundbank.bnk", (BundleType)1);
			AssetsManager val3 = new AssetsManager(val);
			AssetsManager val4 = new AssetsManager(val2);
			assetBundle = val3.Register();
			Extensions.ConvertShaders(assetBundle);
			val4.Register();
			cfgFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "com.Chen.ChensGradiusMod.cfg"), true);
			Log.Debug((object)"Loading global configs...");
			((AutoConfigContainer)generalCfg).BindAll(cfgFile, "ChensGradiusMod", "General");
			Log.Debug((object)"Modifying vanilla drone behavior...");
			ModifyVanillaDroneDeathBehaviors();
			ModifyVanillaDronesSkillDrivers();
			Log.Debug((object)"Instantiating item classes...");
			ModInfo val5 = default(ModInfo);
			val5.displayName = "Chen's Gradius Mod";
			val5.longIdentifier = "ChensGradiusMod";
			val5.shortIdentifier = "CGM";
			val5.mainConfigFile = cfgFile;
			chensItemList = T2Module.InitAll<CatalogBoilerplate>(val5, (Func<Type, bool>)null);
			T2Module.SetupAll_PluginAwake((IEnumerable<T2Module>)chensItemList);
			T2Module.SetupAll_PluginStart((IEnumerable<T2Module>)chensItemList, false);
			Log.Debug((object)"Instantiating custom drones...");
			gradiusDronesList = DroneCatalog.Initialize("com.Chen.ChensGradiusMod", cfgFile);
			DroneCatalog.EfficientSetupAll(gradiusDronesList);
			Log.Debug((object)"Applying vanilla changes and fixes...");
			RegisterVanillaChanges();
			Log.Debug((object)"Applying compatibility changes...");
			if (Aetherium.enabled)
			{
				Aetherium.Setup();
			}
		}

		private void ModifyVanillaDroneDeathBehaviors()
		{
			emergencyDroneMaster.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.EmergencyDrone.DeathState));
			equipmentDroneMaster.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.EquipmentDrone.DeathState));
			drone1Master.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.GunnerDrone.DeathState));
			turret1Master.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.GunnerTurret.DeathState));
			drone2Master.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.HealingDrone.DeathState));
			flameDroneMaster.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.IncineratorDrone.DeathState));
			missileDroneMaster.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.MissileDrone.DeathState));
			tc280DroneMaster.AssignDeathBehavior(typeof(Chen.GradiusMod.Drones.TC280.DeathState));
		}

		private void ModifyVanillaDronesSkillDrivers()
		{
			drone1Master.SetAllDriversToAimTowardsEnemies();
			tc280DroneMaster.SetAllDriversToAimTowardsEnemies();
			missileDroneMaster.SetAllDriversToAimTowardsEnemies();
			backupDroneMaster.SetAllDriversToAimTowardsEnemies();
			flameDroneMaster.SetAllDriversToAimTowardsEnemies();
			equipmentDroneMaster.SetAllDriversToAimTowardsEnemies();
		}

		internal static bool DebugCheck()
		{
			return true;
		}
	}
}
namespace Chen.GradiusMod.Items.OptionSeed
{
	public class OptionSeed : Item<OptionSeed>
	{
		private int punchUseCounter;

		internal const uint GetOptionEventId = 649757048u;

		internal const uint LoseOptionEventId = 2603869165u;

		internal const float DefaultVerticalOffsetMultiplier = 0.4f;

		internal const float DefaultHorizontalOffsetMultiplier = 0.8f;

		internal const float DefaultRotationRadius = 0.3f;

		private static readonly Dictionary<string, float> VerticalOffsetMultipliers = new Dictionary<string, float>
		{
			{ "EngiTurretBody", 0.5f },
			{ "EngiWalkerTurretBody", 1.3f },
			{ "ToolbotBody", 0.5f },
			{ "MageBody", 0.8f },
			{ "LoaderBody", 0.7f }
		};

		private static readonly Dictionary<string, float> HorizontalOffsetMultipliers = new Dictionary<string, float>
		{
			{ "ToolbotBody", 1f },
			{ "CrocoBody", 1f }
		};

		private static readonly Dictionary<string, float> RotationRadius = new Dictionary<string, float>
		{
			{ "ToolbotBody", 0.5f },
			{ "CrocoBody", 0.5f }
		};

		private static readonly Lazy<GameObject> _loaderZapCone = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("Prefabs/Projectiles/LoaderZapCone")));

		private static readonly Lazy<Material> _evisTargetMaterial = new Lazy<Material>((Func<Material>)(() => Resources.Load<Material>("Materials/matMercEvisTarget")));

		public override string displayName => "Gradius' Option Seed";

		public override ItemTier itemTier => (ItemTier)1;

		public override ReadOnlyCollection<ItemTag> itemTags => new ReadOnlyCollection<ItemTag>((IList<ItemTag>)(object)new ItemTag[1] { (ItemTag)3 });

		[AutoConfigUpdateActions(/*Could not decode attribute arguments.*/)]
		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public float damageMultiplier { get; private set; } = 0.2f;


		[AutoConfigUpdateActions(/*Could not decode attribute arguments.*/)]
		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public float stackDamageMultiplier { get; private set; } = 0.05f;


		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public bool mobileTurretsSeedSyncEffect { get; private set; } = true;


		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public bool flamethrowerSeedSyncEffect { get; private set; } = true;


		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public bool includeModelInsideOrb { get; private set; } = true;


		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public bool staticPositions { get; private set; }

		[AutoConfig(/*Could not decode attribute arguments.*/)]
		public float rotationSpeed { get; private set; } = 10f;


		public override bool itemIsAIBlacklisted { get; protected set; } = true;


		internal static GameObject optionSeedPrefab { get; private set; }

		private static GameObject loaderZapCone => _loaderZapCone.Value;

		private static Material evisTargetMaterial => _evisTargetMaterial.Value;

		public void FireForSeeds(CharacterBody optionSeedOwner, Action<GameObject, SeedBehavior, SeedTracker, float> actionToRun)
		{
			if (!Object.op_Implicit((Object)(object)optionSeedOwner))
			{
				return;
			}
			SeedTracker component = ((Component)optionSeedOwner).GetComponent<SeedTracker>();
			if (Object.op_Implicit((Object)(object)component))
			{
				InputBankTest inputBankTest = component.inputBankTest;
				if (Object.op_Implicit((Object)(object)inputBankTest))
				{
					float arg = ComputeMultiplier(optionSeedOwner);
					actionToRun(component.leftSeed, component.leftBehavior, component, arg);
					actionToRun(component.rightSeed, component.rightBehavior, component, arg);
				}
			}
		}

		public void SetVerticalOffsetMultiplier(string bodyName, float newValue)
		{
			VerticalOffsetMultipliers[bodyName] = newValue;
		}

		public void SetHorizontalOffsetMultiplier(string bodyName, float newValue)
		{
			HorizontalOffsetMultipliers[bodyName] = newValue;
		}

		public void SetRotationalRadius(string bodyName, float newValue)
		{
			RotationRadius[bodyName] = newValue;
		}

		public override void Install()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Expected O, but got Unknown
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Expected O, but got Unknown
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Expected O, but got Unknown
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Expected O, but got Unknown
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Expected O, but got Unknown
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Expected O, but got Unknown
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Expected O, but got Unknown
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Expected O, but got Unknown
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Expected O, but got Unknown
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Expected O, but got Unknown
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Expected O, but got Unknown
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Expected O, but got Unknown
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Expected O, but got Unknown
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Expected O, but got Unknown
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Expected O, but got Unknown
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Expected O, but got Unknown
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Expected O, but got Unknown
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Expected O, but got Unknown
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Expected O, but got Unknown
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Expected O, but got Unknown
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Expected O, but got Unknown
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Expected O, but got Unknown
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Expected O, but got Unknown
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Expected O, but got Unknown
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Expected O, but got Unknown
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Expected O, but got Unknown
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Expected O, but got Unknown
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Expected O, but got Unknown
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Expected O, but got Unknown
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Expected O, but got Unknown
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Expected O, but got Unknown
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Expected O, but got Unknown
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0314: Expected O, but got Unknown
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Expected O, but got Unknown
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0336: Expected O, but got Unknown
			//IL_033d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Expected O, but got Unknown
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0358: Expected O, but got Unknown
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0369: Expected O, but got Unknown
			//IL_0370: Unknown result type (might be due to invalid IL or missing references)
			//IL_037a: Expected O, but got Unknown
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_038b: Expected O, but got Unknown
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Expected O, but got Unknown
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ad: Expected O, but got Unknown
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Expected O, but got Unknown
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Expected O, but got Unknown
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Expected O, but got Unknown
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f1: Expected O, but got Unknown
			((Item)this).Install();
			CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged);
			CharacterBody.onBodyStartGlobal += CharacterBody_onBodyStartGlobal;
			FireGrenades.FireGrenade += new hook_FireGrenade(FireGrenades_FireGrenade);
			FirePistol2.FireBullet += new hook_FireBullet(FirePistol2_FireBullet);
			GenericBulletBaseState.FireBullet += new hook_FireBullet(GenericBulletBaseState_FireBullet);
			FireBarrage.FireBullet += new hook_FireBullet(FireBarrage_FireBullet);
			GenericProjectileBaseState.FireProjectile += new hook_FireProjectile(GenericProjectileBaseState_FireProjectile);
			Fire.FireMissile += new hook_FireMissile(Fire_FireMissile);
			FireGauss.OnEnter += new hook_OnEnter(FireGauss_OnEnter);
			FireBeam.FixedUpdate += new hook_FixedUpdate(FireBeam_FixedUpdate);
			FireBeam.OnEnter += new hook_OnEnter(FireBeam_OnEnter);
			FireBeam.OnExit += new hook_OnExit(FireBeam_OnExit);
			FireSeekingArrow.FireOrbArrow += new hook_FireOrbArrow(FireSeekingArrow_FireOrbArrow);
			ThrowGlaive.FireOrbGlaive += new hook_FireOrbGlaive(ThrowGlaive_FireOrbGlaive);
			BasicMeleeAttack.OnEnter += new hook_OnEnter(BasicMeleeAttack_OnEnter);
			BasicMeleeAttack.AuthorityFireAttack += new hook_AuthorityFireAttack(BasicMeleeAttack_AuthorityFireAttack);
			Evis.FixedUpdate += new hook_FixedUpdate(Evis_FixedUpdate);
			WhirlwindBase.OnEnter += new hook_OnEnter(WhirlwindBase_OnEnter);
			WhirlwindBase.FixedUpdate += new hook_FixedUpdate(WhirlwindBase_FixedUpdate);
			FocusedAssaultDash.OnMeleeHitAuthority += new hook_OnMeleeHitAuthority(FocusedAssaultDash_OnMeleeHitAuthority);
			Uppercut.OnEnter += new hook_OnEnter(Uppercut_OnEnter);
			Uppercut.FixedUpdate += new hook_FixedUpdate(Uppercut_FixedUpdate);
			FireShotgun2.FireBullet += new hook_FireBullet(FireShotgun2_FireBullet);
			BaseFireSidearmRevolverState.OnEnter += new hook_OnEnter(BaseFireSidearmRevolverState_OnEnter);
			Bandit2FireShiv.FireShiv += new hook_FireShiv(Bandit2FireShiv_FireShiv);
			BaseNailgunState.FireBullet += new hook_FireBullet(BaseNailgunState_FireBullet);
			AimThrowableBase.FireProjectile += new hook_FireProjectile(AimThrowableBase_FireProjectile);
			RecoverAimStunDrone.OnEnter += new hook_OnEnter(RecoverAimStunDrone_OnEnter);
			FireBuzzsaw.FixedUpdate += new hook_FixedUpdate(FireBuzzsaw_FixedUpdate);
			FireFireBolt.FireGauntlet += new hook_FireGauntlet(FireFireBolt_FireGauntlet);
			BaseThrowBombState.Fire += new hook_Fire(BaseThrowBombState_Fire);
			Flamethrower.OnEnter += new hook_OnEnter(Flamethrower_OnEnter);
			Flamethrower.FireGauntlet += new hook_FireGauntlet(Flamethrower_FireGauntlet);
			Flamethrower.FixedUpdate += new hook_FixedUpdate(Flamethrower_FixedUpdate);
			Flamethrower.OnExit += new hook_OnExit(Flamethrower_OnExit);
			FireSyringe.FixedUpdate += new hook_FixedUpdate(FireSyringe_FixedUpdate);
			TreebotFireFruitSeed.OnEnter += new hook_OnEnter(TreebotFireFruitSeed_OnEnter);
			FireFlower2.OnEnter += new hook_OnEnter(FireFlower2_OnEnter);
			ArrowRain.DoFireArrowRain += new hook_DoFireArrowRain(ArrowRain_DoFireArrowRain);
			ThrowPylon.OnEnter += new hook_OnEnter(ThrowPylon_OnEnter);
			SwingZapFist.OnMeleeHitAuthority += new hook_OnMeleeHitAuthority(SwingZapFist_OnMeleeHitAuthority);
			GroundSlam.DetonateAuthority += new hook_DetonateAuthority(GroundSlam_DetonateAuthority);
			BaseLeap.DetonateAuthority += new hook_DetonateAuthority(BaseLeap_DetonateAuthority);
			BaseLeap.DropAcidPoolAuthority += new hook_DropAcidPoolAuthority(BaseLeap_DropAcidPoolAuthority);
			FireSpit.OnEnter += new hook_OnEnter(FireSpit_OnEnter);
			FireTazer.Fire += new hook_Fire(FireTazer_Fire);
			FirePistol.OnEnter += new hook_OnEnter(FirePistol_OnEnter);
			BaseFireSnipe.OnEnter += new hook_OnEnter(BaseFireSnipe_OnEnter);
			FireBlasterBase.OnEnter += new hook_OnEnter(FireBlasterBase_OnEnter);
			FireCorruptDisks.OnEnter += new hook_OnEnter(FireCorruptDisks_OnEnter);
			FireCorruptHandBeam.OnEnter += new hook_OnEnter(FireCorruptHandBeam_OnEnter);
			FireHandBeam.OnEnter += new hook_OnEnter(FireHandBeam_OnEnter);
			FireMegaBlasterBase.OnEnter += new hook_OnEnter(FireMegaBlasterBase_OnEnter);
			FireTwinBlaster.OnEnter += new hook_OnEnter(FireTwinBlaster_OnEnter);
			SpiritPunch.OnEnter += new hook_OnEnter(SpiritPunch_OnEnter);
			Dice.OnEnter += new hook_OnEnter(Dice_OnEnter);
			Glaze.OnEnter += new hook_OnEnter(Glaze_OnEnter);
			LunarSpikes.OnEnter += new hook_OnEnter(LunarSpikes_OnEnter);
			LunarSpikesShotgun.OnEnter += new hook_OnEnter(LunarSpikesShotgun_OnEnter);
		}

		public override void Uninstall()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Expected O, but got Unknown
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Expected O, but got Unknown
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Expected O, but got Unknown
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Expected O, but got Unknown
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Expected O, but got Unknown
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Expected O, but got Unknown
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Expected O, but got Unknown
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Expected O, but got Unknown
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Expected O, but got Unknown
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Expected O, but got Unknown
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Expected O, but got Unknown
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Expected O, but got Unknown
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Expected O, but got Unknown
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Expected O, but got Unknown
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Expected O, but got Unknown
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Expected O, but got Unknown
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Expected O, but got Unknown
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Expected O, but got Unknown
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Expected O, but got Unknown
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Expected O, but got Unknown
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Expected O, but got Unknown
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Expected O, but got Unknown
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Expected O, but got Unknown
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Expected O, but got Unknown
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Expected O, but got Unknown
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Expected O, but got Unknown
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Expected O, but got Unknown
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Expected O, but got Unknown
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Expected O, but got Unknown
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Expected O, but got Unknown
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Expected O, but got Unknown
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Expected O, but got Unknown
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0314: Expected O, but got Unknown
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Expected O, but got Unknown
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0336: Expected O, but got Unknown
			//IL_033d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Expected O, but got Unknown
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0358: Expected O, but got Unknown
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0369: Expected O, but got Unknown
			//IL_0370: Unknown result type (might be due to invalid IL or missing references)
			//IL_037a: Expected O, but got Unknown
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_038b: Expected O, but got Unknown
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Expected O, but got Unknown
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ad: Expected O, but got Unknown
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Expected O, but got Unknown
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Expected O, but got Unknown
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Expected O, but got Unknown
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f1: Expected O, but got Unknown
			((Item)this).Uninstall();
			CharacterBody.OnInventoryChanged -= new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged);
			CharacterBody.onBodyStartGlobal -= CharacterBody_onBodyStartGlobal;
			FireGrenades.FireGrenade -= new hook_FireGrenade(FireGrenades_FireGrenade);
			FirePistol2.FireBullet -= new hook_FireBullet(FirePistol2_FireBullet);
			GenericBulletBaseState.FireBullet -= new hook_FireBullet(GenericBulletBaseState_FireBullet);
			FireBarrage.FireBullet -= new hook_FireBullet(FireBarrage_FireBullet);
			GenericProjectileBaseState.FireProjectile -= new hook_FireProjectile(GenericProjectileBaseState_FireProjectile);
			Fire.FireMissile -= new hook_FireMissile(Fire_FireMissile);
			FireGauss.OnEnter -= new hook_OnEnter(FireGauss_OnEnter);
			FireBeam.FixedUpdate -= new hook_FixedUpdate(FireBeam_FixedUpdate);
			FireBeam.OnEnter -= new hook_OnEnter(FireBeam_OnEnter);
			FireBeam.OnExit -= new hook_OnExit(FireBeam_OnExit);
			FireSeekingArrow.FireOrbArrow -= new hook_FireOrbArrow(FireSeekingArrow_FireOrbArrow);
			ThrowGlaive.FireOrbGlaive -= new hook_FireOrbGlaive(ThrowGlaive_FireOrbGlaive);
			BasicMeleeAttack.OnEnter -= new hook_OnEnter(BasicMeleeAttack_OnEnter);
			BasicMeleeAttack.AuthorityFireAttack -= new hook_AuthorityFireAttack(BasicMeleeAttack_AuthorityFireAttack);
			Evis.FixedUpdate -= new hook_FixedUpdate(Evis_FixedUpdate);
			WhirlwindBase.OnEnter -= new hook_OnEnter(WhirlwindBase_OnEnter);
			WhirlwindBase.FixedUpdate -= new hook_FixedUpdate(WhirlwindBase_FixedUpdate);
			FocusedAssaultDash.OnMeleeHitAuthority -= new hook_OnMeleeHitAuthority(FocusedAssaultDash_OnMeleeHitAuthority);
			Uppercut.OnEnter -= new hook_OnEnter(Uppercut_OnEnter);
			Uppercut.FixedUpdate -= new hook_FixedUpdate(Uppercut_FixedUpdate);
			FireShotgun2.FireBullet -= new hook_FireBullet(FireShotgun2_FireBullet);
			BaseFireSidearmRevolverState.OnEnter -= new hook_OnEnter(BaseFireSidearmRevolverState_OnEnter);
			Bandit2FireShiv.FireShiv -= new hook_FireShiv(Bandit2FireShiv_FireShiv);
			BaseNailgunState.FireBullet -= new hook_FireBullet(BaseNailgunState_FireBullet);
			AimThrowableBase.FireProjectile -= new hook_FireProjectile(AimThrowableBase_FireProjectile);
			RecoverAimStunDrone.OnEnter -= new hook_OnEnter(RecoverAimStunDrone_OnEnter);
			FireBuzzsaw.FixedUpdate -= new hook_FixedUpdate(FireBuzzsaw_FixedUpdate);
			FireFireBolt.FireGauntlet -= new hook_FireGauntlet(FireFireBolt_FireGauntlet);
			BaseThrowBombState.Fire -= new hook_Fire(BaseThrowBombState_Fire);
			Flamethrower.OnEnter -= new hook_OnEnter(Flamethrower_OnEnter);
			Flamethrower.FireGauntlet -= new hook_FireGauntlet(Flamethrower_FireGauntlet);
			Flamethrower.FixedUpdate -= new hook_FixedUpdate(Flamethrower_FixedUpdate);
			Flamethrower.OnExit -= new hook_OnExit(Flamethrower_OnExit);
			FireSyringe.FixedUpdate -= new hook_FixedUpdate(FireSyringe_FixedUpdate);
			TreebotFireFruitSeed.OnEnter -= new hook_OnEnter(TreebotFireFruitSeed_OnEnter);
			FireFlower2.OnEnter -= new hook_OnEnter(FireFlower2_OnEnter);
			ArrowRain.DoFireArrowRain -= new hook_DoFireArrowRain(ArrowRain_DoFireArrowRain);
			ThrowPylon.OnEnter -= new hook_OnEnter(ThrowPylon_OnEnter);
			SwingZapFist.OnMeleeHitAuthority -= new hook_OnMeleeHitAuthority(SwingZapFist_OnMeleeHitAuthority);
			GroundSlam.DetonateAuthority -= new hook_DetonateAuthority(GroundSlam_DetonateAuthority);
			BaseLeap.DetonateAuthority -= new hook_DetonateAuthority(BaseLeap_DetonateAuthority);
			BaseLeap.DropAcidPoolAuthority -= new hook_DropAcidPoolAuthority(BaseLeap_DropAcidPoolAuthority);
			FireSpit.OnEnter -= new hook_OnEnter(FireSpit_OnEnter);
			FireTazer.Fire -= new hook_Fire(FireTazer_Fire);
			FirePistol.OnEnter -= new hook_OnEnter(FirePistol_OnEnter);
			BaseFireSnipe.OnEnter -= new hook_OnEnter(BaseFireSnipe_OnEnter);
			FireBlasterBase.OnEnter -= new hook_OnEnter(FireBlasterBase_OnEnter);
			FireCorruptDisks.OnEnter -= new hook_OnEnter(FireCorruptDisks_OnEnter);
			FireCorruptHandBeam.OnEnter -= new hook_OnEnter(FireCorruptHandBeam_OnEnter);
			FireHandBeam.OnEnter -= new hook_OnEnter(FireHandBeam_OnEnter);
			FireMegaBlasterBase.OnEnter -= new hook_OnEnter(FireMegaBlasterBase_OnEnter);
			FireTwinBlaster.OnEnter -= new hook_OnEnter(FireTwinBlaster_OnEnter);
			SpiritPunch.OnEnter -= new hook_OnEnter(SpiritPunch_OnEnter);
			Dice.OnEnter -= new hook_OnEnter(Dice_OnEnter);
			Glaze.OnEnter -= new hook_OnEnter(Glaze_OnEnter);
			LunarSpikes.OnEnter -= new hook_OnEnter(LunarSpikes_OnEnter);
			LunarSpikesShotgun.OnEnter -= new hook_OnEnter(LunarSpikesShotgun_OnEnter);
		}

		private void CharacterBody_OnInventoryChanged(orig_OnInventoryChanged orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.master))
			{
				if (((Item)this).GetCount(self) > 0)
				{
					SeedTracker.SpawnSeeds(((Component)self).gameObject);
				}
				else
				{
					SeedTracker.DestroySeeds(((Component)self).gameObject);
				}
			}
		}

		private void CharacterBody_onBodyStartGlobal(CharacterBody obj)
		{
			if (Object.op_Implicit((Object)(object)obj.master) && ((Item)this).GetCount(obj) > 0)
			{
				SeedTracker.SpawnSeeds(((Component)obj).gameObject);
			}
		}

		private void FireTazer_Fire(orig_Fire orig, FireTazer self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_002a: 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_0049: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: 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_0068: 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_00d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)FireTazer.muzzleflashEffectPrefab))
				{
					seed.MuzzleEffect(FireTazer.muzzleflashEffectPrefab, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					FireProjectileInfo val = default(FireProjectileInfo);
					val.projectilePrefab = FireTazer.projectilePrefab;
					val.position = seed.transform.position;
					Ray aimRay = ((BaseState)self).GetAimRay();
					val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
					val.owner = ((EntityState)self).gameObject;
					val.damage = ((BaseState)self).damageStat * FireTazer.damageCoefficient * multiplier;
					val.force = FireTazer.force * multiplier;
					val.crit = Util.CheckRoll(((BaseState)self).critStat, ((EntityState)self).characterBody.master);
					FireProjectileInfo val2 = val;
					ProjectileManager.instance.FireProjectile(val2);
				}
			});
		}

		private void FireSpit_OnEnter(orig_OnEnter orig, FireSpit self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_0087: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: Unknown result type (might be due to invalid IL or missing references)
				//IL_0099: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e0: 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_012c: 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_0133: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)self.effectPrefab))
				{
					seed.MuzzleEffect(self.effectPrefab, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					DamageType val = (DamageType)(((Object)(object)self.crocoDamageTypeController != (Object)null) ? ((int)DamageTypeCombo.op_Implicit(self.crocoDamageTypeController.GetDamageType())) : 0);
					FireProjectileInfo val2 = default(FireProjectileInfo);
					val2.projectilePrefab = self.projectilePrefab;
					val2.position = seed.transform.position;
					Ray aimRay = ((BaseState)self).GetAimRay();
					val2.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
					val2.owner = ((EntityState)self).gameObject;
					val2.damage = ((BaseState)self).damageStat * self.damageCoefficient * multiplier;
					val2.damageTypeOverride = DamageTypeCombo.op_Implicit(val);
					val2.force = self.force * multiplier;
					val2.crit = Util.CheckRoll(((BaseState)self).critStat, ((EntityState)self).characterBody.master);
					FireProjectileInfo val3 = val2;
					ProjectileManager.instance.FireProjectile(val3);
				}
			});
		}

		private void BaseLeap_DropAcidPoolAuthority(orig_DropAcidPoolAuthority orig, BaseLeap self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_0079: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0080: Unknown result type (might be due to invalid IL or missing references)
				Vector3 position = seed.transform.position;
				FireProjectileInfo val = default(FireProjectileInfo);
				val.projectilePrefab = BaseLeap.projectilePrefab;
				val.crit = self.isCritAuthority;
				val.force = 0f;
				val.damage = ((BaseState)self).damageStat * multiplier;
				val.owner = ((EntityState)self).gameObject;
				val.rotation = Quaternion.identity;
				val.position = position;
				FireProjectileInfo val2 = val;
				ProjectileManager.instance.FireProjectile(val2);
			});
		}

		private Result BaseLeap_DetonateAuthority(orig_DetonateAuthority orig, BaseLeap self)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			Result result = orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0000: 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)
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0051: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_0078: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: 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)
				//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d9: 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)
				new BlastAttack
				{
					attacker = ((EntityState)self).gameObject,
					baseDamage = ((BaseState)self).damageStat * self.blastDamageCoefficient * multiplier,
					baseForce = self.blastForce * multiplier,
					bonusForce = self.blastBonusForce,
					crit = ((BaseState)self).RollCrit(),
					damageType = self.GetBlastDamageType(),
					falloffModel = (FalloffModel)0,
					procCoefficient = BaseLeap.blastProcCoefficient,
					radius = BaseLeap.blastRadius,
					position = seed.transform.position,
					attackerFiltering = (AttackerFiltering)2,
					impactEffect = EffectCatalog.FindEffectIndexFromPrefab(self.blastImpactEffectPrefab),
					teamIndex = ((EntityState)self).teamComponent.teamIndex
				}.Fire();
			});
			return result;
		}

		private Result GroundSlam_DetonateAuthority(orig_DetonateAuthority orig, GroundSlam self)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			Result result = orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0000: 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)
				//IL_0016: 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_003e: 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_0044: 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_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: 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_0084: 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)
				//IL_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a2: 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_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
				new BlastAttack
				{
					attacker = ((EntityState)self).gameObject,
					baseDamage = ((BaseState)self).damageStat * GroundSlam.blastDamageCoefficient * multiplier,
					baseForce = GroundSlam.blastForce * multiplier,
					bonusForce = GroundSlam.blastBonusForce,
					crit = ((BaseState)self).RollCrit(),
					damageType = DamageTypeCombo.op_Implicit((DamageType)32),
					falloffModel = (FalloffModel)0,
					procCoefficient = GroundSlam.blastProcCoefficient,
					radius = GroundSlam.blastRadius,
					position = seed.transform.position,
					attackerFiltering = (AttackerFiltering)2,
					impactEffect = EffectCatalog.FindEffectIndexFromPrefab(GroundSlam.blastImpactEffectPrefab),
					teamIndex = ((EntityState)self).teamComponent.teamIndex
				}.Fire();
			});
			return result;
		}

		private void SwingZapFist_OnMeleeHitAuthority(orig_OnMeleeHitAuthority orig, SwingZapFist self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0022: 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_0035: 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_004c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: Unknown result type (might be due to invalid IL or missing references)
				//IL_009d: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)((BaseState)self).FindModelChild(((BasicMeleeAttack)self).swingEffectMuzzleString)))
				{
					FireProjectileInfo val = default(FireProjectileInfo);
					val.position = seed.transform.position;
					val.rotation = Quaternion.LookRotation(((BaseSwingChargedFist)self).punchVelocity);
					val.crit = ((BasicMeleeAttack)self).isCritAuthority;
					val.damage = ((BaseState)self).damageStat * multiplier;
					val.owner = ((EntityState)self).gameObject;
					val.projectilePrefab = loaderZapCone;
					FireProjectileInfo val2 = val;
					ProjectileManager.instance.FireProjectile(val2);
				}
			});
		}

		private void ThrowPylon_OnEnter(orig_OnEnter orig, ThrowPylon self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_002e: 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_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: 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)
				//IL_00c8: 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_00d6: 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)
				if (Object.op_Implicit((Object)(object)ThrowPylon.muzzleflashObject))
				{
					seed.MuzzleEffect(ThrowPylon.muzzleflashObject, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					Ray aimRay = ((BaseState)self).GetAimRay();
					FireProjectileInfo val = default(FireProjectileInfo);
					val.crit = ((BaseState)self).RollCrit();
					val.damage = ((BaseState)self).damageStat * ThrowPylon.damageCoefficient * multiplier;
					val.damageColorIndex = (DamageColorIndex)0;
					val.force = 0f;
					val.owner = ((EntityState)self).gameObject;
					val.position = seed.transform.position;
					val.procChainMask = default(ProcChainMask);
					val.projectilePrefab = ThrowPylon.projectilePrefab;
					val.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
					val.target = null;
					FireProjectileInfo val2 = val;
					ProjectileManager.instance.FireProjectile(val2);
				}
			});
		}

		private void ArrowRain_DoFireArrowRain(orig_DoFireArrowRain orig, ArrowRain self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)ArrowRain.muzzleFlashEffect))
				{
					seed.MuzzleEffect(ArrowRain.muzzleFlashEffect, transmit: false);
				}
				if (((EntityState)self).isAuthority && Object.op_Implicit((Object)(object)self.areaIndicatorInstance) && self.shouldFireArrowRain)
				{
					ProjectileManager.instance.FireProjectile(ArrowRain.projectilePrefab, self.areaIndicatorInstance.transform.position, self.areaIndicatorInstance.transform.rotation, ((EntityState)self).gameObject, ((BaseState)self).damageStat * ArrowRain.damageCoefficient * multiplier, 0f, Util.CheckRoll(((BaseState)self).critStat, ((EntityState)self).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f);
				}
			});
		}

		private void FireFlower2_OnEnter(orig_OnEnter orig, FireFlower2 self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_002e: 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_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: 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)
				//IL_00c8: 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_00d6: 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)
				if (Object.op_Implicit((Object)(object)FireFlower2.muzzleFlashPrefab))
				{
					seed.MuzzleEffect(FireFlower2.muzzleFlashPrefab, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					Ray aimRay = ((BaseState)self).GetAimRay();
					FireProjectileInfo val = default(FireProjectileInfo);
					val.crit = ((BaseState)self).RollCrit();
					val.damage = FireFlower2.damageCoefficient * ((BaseState)self).damageStat * multiplier;
					val.damageColorIndex = (DamageColorIndex)0;
					val.force = 0f;
					val.owner = ((EntityState)self).gameObject;
					val.position = seed.transform.position;
					val.procChainMask = default(ProcChainMask);
					val.projectilePrefab = FireFlower2.projectilePrefab;
					val.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
					val.useSpeedOverride = false;
					FireProjectileInfo val2 = val;
					ProjectileManager.instance.FireProjectile(val2);
				}
			});
		}

		private void TreebotFireFruitSeed_OnEnter(orig_OnEnter orig, TreebotFireFruitSeed self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//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_007e: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00db: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e0: 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_00ee: 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)
				if (Object.op_Implicit((Object)(object)self.muzzleFlashPrefab))
				{
					seed.MuzzleEffect(self.muzzleFlashPrefab, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					Ray aimRay = ((BaseState)self).GetAimRay();
					FireProjectileInfo val = default(FireProjectileInfo);
					val.crit = ((BaseState)self).RollCrit();
					val.damage = self.damageCoefficient * ((BaseState)self).damageStat * multiplier;
					val.damageColorIndex = (DamageColorIndex)0;
					val.force = 0f;
					val.owner = ((EntityState)self).gameObject;
					val.position = seed.transform.position;
					val.procChainMask = default(ProcChainMask);
					val.projectilePrefab = self.projectilePrefab;
					val.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
					val.useSpeedOverride = false;
					FireProjectileInfo val2 = val;
					ProjectileManager.instance.FireProjectile(val2);
				}
			});
		}

		private void FireSyringe_FixedUpdate(orig_FixedUpdate orig, FireSyringe self)
		{
			int projectilesFired = self.projectilesFired;
			orig.Invoke(self);
			int rate = Mathf.FloorToInt(((EntityState)self).fixedAge / self.fireDuration * (float)FireSyringe.projectileCount);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
				if (projectilesFired <= rate && projectilesFired < FireSyringe.projectileCount)
				{
					GameObject val = FireSyringe.projectilePrefab;
					string attackSound = FireSyringe.attackSound;
					if (projectilesFired == FireSyringe.projectileCount - 1)
					{
						val = FireSyringe.finalProjectilePrefab;
						attackSound = FireSyringe.finalAttackSound;
					}
					if (Object.op_Implicit((Object)(object)FireSyringe.muzzleflashEffectPrefab))
					{
						seed.MuzzleEffect(FireSyringe.muzzleflashEffectPrefab, transmit: false);
					}
					if (((EntityState)self).isAuthority)
					{
						Ray aimRay = ((BaseState)self).GetAimRay();
						float num = (float)self.projectilesFired - (float)(FireSyringe.projectileCount - 1) / 2f;
						num = (float)(Mathf.FloorToInt(num) / (FireSyringe.projectileCount - 1)) * FireSyringe.totalYawSpread;
						Vector3 val2 = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 0f, 1f, 1f, num, 0f);
						ProjectileManager.instance.FireProjectile(val, seed.transform.position, Util.QuaternionSafeLookRotation(val2), ((EntityState)self).gameObject, ((BaseState)self).damageStat * FireSyringe.damageCoefficient * multiplier, FireSyringe.force * multiplier, Util.CheckRoll(((BaseState)self).critStat, ((EntityState)self).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f);
					}
				}
			});
		}

		private void Flamethrower_OnEnter(orig_OnEnter orig, Flamethrower self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject _s, SeedBehavior behavior, SeedTracker _t, float _m)
			{
				behavior.O[((object)self).GetType().FullName + ".IsCrit"] = ((BaseState)self).RollCrit();
			});
		}

		private void Flamethrower_OnExit(orig_OnExit orig, Flamethrower self)
		{
			orig.Invoke(self);
			if (!flamethrowerSeedSyncEffect)
			{
				return;
			}
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject _s, SeedBehavior behavior, SeedTracker _t, float _m)
			{
				string key = ((object)self).GetType().FullName + ".flamethrower";
				if (behavior.U.SafeCheck(key))
				{
					EntityState.Destroy(behavior.U[key]);
				}
			});
		}

		private void Flamethrower_FixedUpdate(orig_FixedUpdate orig, Flamethrower self)
		{
			bool oldBegunFlamethrower = self.hasBegunFlamethrower;
			orig.Invoke(self);
			if (!flamethrowerSeedSyncEffect)
			{
				return;
			}
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior behavior, SeedTracker _t, float _m)
			{
				//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e0: 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)
				string key = ((object)self).GetType().FullName + ".flamethrower";
				bool flag = oldBegunFlamethrower;
				if (self.stopwatch >= self.entryDuration && !flag)
				{
					flag = true;
					if (behavior.U.SafeCheck(key))
					{
						EntityState.Destroy(behavior.U[key]);
					}
					behavior.U[key] = (Object)(object)Object.Instantiate<GameObject>(self.flamethrowerEffectPrefab, seed.transform);
					((GameObject)behavior.U[key]).GetComponent<ScaleParticleSystemDuration>().newDuration = self.flamethrowerDuration;
				}
				if (flag && Object.op_Implicit(behavior.U[key]))
				{
					Transform transform = ((GameObject)behavior.U[key]).transform;
					Ray aimRay = ((BaseState)self).GetAimRay();
					transform.forward = ((Ray)(ref aimRay)).direction;
				}
			});
		}

		private void Flamethrower_FireGauntlet(orig_FireGauntlet orig, Flamethrower self, string muzzleString)
		{
			orig.Invoke(self, muzzleString);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior behavior, SeedTracker _t, float multiplier)
			{
				//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_0026: 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_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_004d: 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_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_0090: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d7: 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_00de: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e4: 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_00ee: 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_010a: Unknown result type (might be due to invalid IL or missing references)
				//IL_012f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0134: Unknown result type (might be due to invalid IL or missing references)
				//IL_0139: 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_014c: Expected O, but got Unknown
				if (((EntityState)self).isAuthority)
				{
					BulletAttack val = new BulletAttack
					{
						owner = ((EntityState)self).gameObject,
						weapon = seed,
						origin = seed.transform.position
					};
					Ray aimRay = ((BaseState)self).GetAimRay();
					val.aimVector = ((Ray)(ref aimRay)).direction;
					val.minSpread = 0f;
					val.damage = self.tickDamageCoefficient * ((BaseState)self).damageStat * multiplier;
					val.force = Flamethrower.force * multiplier;
					val.muzzleName = muzzleString;
					val.hitEffectPrefab = Flamethrower.impactEffectPrefab;
					val.isCrit = (bool)behavior.O[((object)self).GetType().FullName + ".IsCrit"];
					val.falloffModel = (FalloffModel)0;
					val.stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask;
					val.procCoefficient = Flamethrower.procCoefficientPerTick;
					val.maxDistance = self.maxDistance;
					val.damageType = DamageTypeCombo.op_Implicit((DamageType)(Util.CheckRoll(Flamethrower.ignitePercentChance, ((EntityState)self).characterBody.master) ? 128 : 0));
					val.radius = Flamethrower.radius;
					val.smartCollision = true;
					BulletAttack val2 = val;
					if (!flamethrowerSeedSyncEffect)
					{
						val2.tracerEffectPrefab = FireGatling.tracerEffectPrefab;
					}
					val2.FilterOutOwnerFromAttack();
					val2.Fire();
				}
			});
		}

		private void BaseThrowBombState_Fire(orig_Fire orig, BaseThrowBombState self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_007c: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0128: Unknown result type (might be due to invalid IL or missing references)
				if (((EntityState)self).isAuthority && Object.op_Implicit((Object)(object)self.projectilePrefab))
				{
					float damage = Util.Remap(self.charge, 0f, 1f, self.minDamageCoefficient, self.maxDamageCoefficient) * ((BaseState)self).damageStat;
					float force = self.charge * self.force;
					FireProjectileInfo val = default(FireProjectileInfo);
					val.projectilePrefab = self.projectilePrefab;
					val.position = seed.transform.position;
					Ray aimRay = ((BaseState)self).GetAimRay();
					val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction);
					val.owner = ((EntityState)self).gameObject;
					val.damage = damage;
					val.force = force;
					val.crit = ((BaseState)self).RollCrit();
					FireProjectileInfo val2 = val;
					self.ModifyProjectile(ref val2);
					val2.damage *= multiplier;
					val2.force *= multiplier;
					ProjectileManager.instance.FireProjectile(val2);
				}
			});
		}

		private void FireFireBolt_FireGauntlet(orig_FireGauntlet orig, FireFireBolt self)
		{
			bool hasFiredGauntlet = self.hasFiredGauntlet;
			orig.Invoke(self);
			if (hasFiredGauntlet)
			{
				return;
			}
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0047: 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_0057: Unknown result type (might be due to invalid IL or missing references)
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)self.muzzleflashEffectPrefab))
				{
					seed.MuzzleEffect(self.muzzleflashEffectPrefab, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					ProjectileManager instance = ProjectileManager.instance;
					GameObject projectilePrefab = self.projectilePrefab;
					Vector3 position = seed.transform.position;
					Ray aimRay = ((BaseState)self).GetAimRay();
					instance.FireProjectile(projectilePrefab, position, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)self).gameObject, self.damageCoefficient * ((BaseState)self).damageStat * multiplier, 0f, ((BaseState)self).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f);
				}
			});
		}

		private void FireBuzzsaw_FixedUpdate(orig_FixedUpdate orig, FireBuzzsaw self)
		{
			float fireAge = self.fireAge + Time.fixedDeltaTime;
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject _s, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//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_0042: 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_0064: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cc: Expected O, but got Unknown
				if (((EntityState)self).isAuthority && fireAge >= 1f / self.fireFrequency)
				{
					OverlapAttack val = new OverlapAttack
					{
						attacker = ((EntityState)self).gameObject,
						inflictor = ((EntityState)self).gameObject,
						teamIndex = TeamComponent.GetObjectTeam(self.attack.attacker),
						damage = FireBuzzsaw.damageCoefficientPerSecond * ((BaseState)self).damageStat / FireBuzzsaw.baseFireFrequency * multiplier,
						procCoefficient = FireBuzzsaw.procCoefficientPerSecond / FireBuzzsaw.baseFireFrequency,
						hitBoxGroup = self.attack.hitBoxGroup,
						isCrit = ((EntityState)self).characterBody.RollCrit()
					};
					if (Object.op_Implicit((Object)(object)FireBuzzsaw.impactEffectPrefab))
					{
						val.hitEffectPrefab = FireBuzzsaw.impactEffectPrefab;
					}
					val.ResetIgnoredHealthComponents();
					val.Fire((List<HurtBox>)null);
				}
			});
		}

		private void AimThrowableBase_FireProjectile(orig_FireProjectile orig, AimThrowableBase self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//IL_0002: 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_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
				FireProjectileInfo val = default(FireProjectileInfo);
				val.crit = ((BaseState)self).RollCrit();
				val.owner = ((EntityState)self).gameObject;
				val.position = seed.transform.position;
				val.projectilePrefab = self.projectilePrefab;
				val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref self.currentTrajectoryInfo.finalRay)).direction, Vector3.up);
				((FireProjectileInfo)(ref val)).speedOverride = self.currentTrajectoryInfo.speedOverride;
				val.damage = self.damageCoefficient * ((BaseState)self).damageStat;
				FireProjectileInfo val2 = val;
				if (self.setFuse)
				{
					((FireProjectileInfo)(ref val2)).fuseOverride = self.currentTrajectoryInfo.travelTime;
				}
				self.ModifyProjectile(ref val2);
				val2.force *= multiplier;
				val2.damage *= multiplier;
				ProjectileManager.instance.FireProjectile(val2);
			});
		}

		private void RecoverAimStunDrone_OnEnter(orig_OnEnter orig, RecoverAimStunDrone self)
		{
			orig.Invoke(self);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float _m)
			{
				if (Object.op_Implicit((Object)(object)RecoverAimStunDrone.muzzleEffectPrefab))
				{
					seed.MuzzleEffect(RecoverAimStunDrone.muzzleEffectPrefab, transmit: false);
				}
			});
		}

		private void BaseNailgunState_FireBullet(orig_FireBullet orig, BaseNailgunState self, Ray aimRay, int bulletCount, float spreadPitchScale, float spreadYawScale)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: 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)
			orig.Invoke(self, aimRay, bulletCount, spreadPitchScale, spreadYawScale);
			FireForSeeds(((EntityState)self).characterBody, delegate(GameObject seed, SeedBehavior _b, SeedTracker _t, float multiplier)
			{
				//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_0034: 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_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_004f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: 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_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c2: 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_00d3: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fa: 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_0110: Unknown result type (might be due to invalid IL or missing references)
				//IL_0126: Unknown result type (might be due to invalid IL or missing references)
				//IL_012d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0134: Unknown result type (might be due to invalid IL or missing references)
				//IL_0147: Unknown result type (might be due to invalid IL or missing references)
				//IL_015a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0165: Unknown result type (might be due to invalid IL or missing references)
				//IL_0171: Expected O, but got Unknown
				if (Object.op_Implicit((Object)(object)BaseNailgunState.muzzleFlashPrefab))
				{
					seed.MuzzleEffect(BaseNailgunState.muzzleFlashPrefab, transmit: false);
				}
				if (((EntityState)self).isAuthority)
				{
					BulletAttack val = new BulletAttack
					{
						aimVector = ((Ray)(ref aimRay)).direction,
						origin = seed.transform.position,
						owner = ((EntityState)self).gameObject,
						weapon = seed,
						bulletCount = (uint)bulletCount,
						damage = ((BaseState)self).damageStat * BaseNailgunState.damageCoefficient * multiplier,
						damageColorIndex = (DamageColorIndex)0,
						damageType = DamageTypeCombo.op_Implicit((DamageType)0),
						falloffModel = (FalloffModel)1,
						force = BaseNailgunState.force * multiplier,
						HitEffectNormal = false,
						procChainMask = default(ProcChainMask),
						procCoefficient = BaseNailgunState.procCoefficient,
						maxDistance = BaseNailgunState.maxDistance,
						isCrit = ((BaseState)self).RollCrit(),
						muzzleName = "Muzzle",
						minSpread = 0f,
						hitEffectPrefab = BaseNailgunState.hitEffectPrefab,
						maxSpread = ((EntityState)self).characterBody.spreadBloomAngle,
						smartCollision = false,
						sniper = false,
						spreadPitchS