Decompiled source of AutoShot v1.2.3

AutoShot.dll

Decompiled a month ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Commando.CommandoWeapon;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Skills;
using TILER2;
using ThinkInvisible.ClassicItems;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("AutoShot")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+3d3dd6ee2027d811563caaf12221670ea0dcdf12")]
[assembly: AssemblyProduct("AutoShot")]
[assembly: AssemblyTitle("AutoShot")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace AutoShot
{
	public class AutoShot : BaseState
	{
		public float BaseDuration = 1.3f;

		public float Duration;

		public float FireTimer;

		public float TimeBetweenBullets;

		public float FiringDuration;

		public static GameObject hitEffectPrefab = Resources.Load<GameObject>("prefabs/effects/impacteffects/critspark");

		public static GameObject tracerEffectPrefab = Resources.Load<GameObject>("prefabs/effects/tracers/tracerbanditshotgun");

		private List<HurtBox> _targetHurtboxes = new List<HurtBox>();

		public int TotalBulletsToFire;

		public int TotalBulletsFired;

		private int _targetHurtboxIndex;

		private bool _hasSuccessfullyFoundTarget;

		public virtual float FieldOfView => 100f;

		public virtual float MaxDistance => 150f;

		public virtual DamageType DamageType => (DamageType)32;

		public virtual int MinimumFireCount => AutoShotPlugin.MinimumFireCount.Value;

		public virtual float Damage => AutoShotPlugin.DamageCoefficient.Value;

		public virtual float RecoilAmplitude => 2f;

		public override void OnEnter()
		{
			//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_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_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_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_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Expected O, but got Unknown
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			Duration = BaseDuration / base.attackSpeedStat;
			FiringDuration = BaseDuration / base.attackSpeedStat;
			Ray aimRay = ((BaseState)this).GetAimRay();
			((EntityState)this).characterBody.SetAimTimer(3f);
			((EntityState)this).PlayAnimation("Gesture, Additive", "FireSweepBarrage", "FireSweepBarrage.playbackRate", BaseDuration * 1.1f, 0f);
			((EntityState)this).PlayAnimation("Gesture, Override", "FireSweepBarrage", "FireSweepBarrage.playbackRate", BaseDuration * 1.1f, 0f);
			BullseyeSearch val = new BullseyeSearch
			{
				teamMaskFilter = TeamMask.GetEnemyTeams(((BaseState)this).GetTeam()),
				filterByLoS = true,
				searchOrigin = ((Ray)(ref aimRay)).origin,
				searchDirection = ((Ray)(ref aimRay)).direction,
				sortMode = (SortMode)3,
				maxDistanceFilter = MaxDistance,
				maxAngleFilter = FieldOfView * 0.5f
			};
			val.RefreshCandidates();
			_targetHurtboxes = val.GetResults().Where((Func<HurtBox, bool>)Util.IsValid).Distinct((IEqualityComparer<HurtBox>?)(object)default(EntityEqualityComparer))
				.ToList();
			TotalBulletsToFire = Mathf.Max(_targetHurtboxes.Count, MinimumFireCount);
			TimeBetweenBullets = FiringDuration / (float)TotalBulletsToFire;
		}

		private void Fire()
		{
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_024b: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_025c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			if (isListEmpty(_targetHurtboxes) || TotalBulletsFired >= TotalBulletsToFire)
			{
				return;
			}
			LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser();
			PlayerCharacterMasterController cachedMasterController = firstLocalUser.cachedMasterController;
			if (!Object.op_Implicit((Object)(object)cachedMasterController))
			{
				return;
			}
			CharacterBody body = cachedMasterController.master.GetBody();
			if (!Object.op_Implicit((Object)(object)body))
			{
				return;
			}
			InputBankTest component = ((Component)body).GetComponent<InputBankTest>();
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(component.aimOrigin, component.aimDirection);
			((BaseState)this).AddRecoil(-0.8f * RecoilAmplitude, -1f * RecoilAmplitude, -0.1f * RecoilAmplitude, 0.15f * RecoilAmplitude);
			if (_targetHurtboxIndex >= _targetHurtboxes.Count)
			{
				_targetHurtboxIndex = 0;
			}
			HurtBox val2 = _targetHurtboxes[_targetHurtboxIndex];
			if (_targetHurtboxes.Count > 0 && Object.op_Implicit((Object)(object)val2))
			{
				_hasSuccessfullyFoundTarget = true;
				_targetHurtboxIndex++;
				Vector3 val3 = ((Component)val2).transform.position - ((Ray)(ref val)).origin;
				((EntityState)this).inputBank.aimDirection = val3;
				HealthComponent healthComponent = val2.healthComponent;
				if (Object.op_Implicit((Object)(object)healthComponent) && ((EntityState)this).isAuthority)
				{
					new BulletAttack
					{
						owner = ((EntityState)this).gameObject,
						weapon = ((EntityState)this).gameObject,
						origin = ((Ray)(ref val)).origin,
						muzzleName = "MuzzleRight",
						aimVector = val3,
						minSpread = 0f,
						maxSpread = ((EntityState)this).characterBody.spreadBloomAngle,
						bulletCount = 1u,
						procCoefficient = AutoShotPlugin.ProcCoefficient.Value,
						damage = ((EntityState)this).characterBody.damage * Damage,
						force = 3f,
						falloffModel = (FalloffModel)1,
						tracerEffectPrefab = tracerEffectPrefab,
						hitEffectPrefab = hitEffectPrefab,
						isCrit = ((BaseState)this).RollCrit(),
						HitEffectNormal = false,
						damageType = DamageTypeCombo.op_Implicit(DamageType),
						stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask,
						smartCollision = true,
						maxDistance = MaxDistance
					}.Fire();
				}
				Util.PlaySound(FireBarrage.fireBarrageSoundString, ((EntityState)this).gameObject);
				((EntityState)this).characterBody.AddSpreadBloom(FireBarrage.spreadBloomValue);
			}
			TotalBulletsFired++;
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (!_hasSuccessfullyFoundTarget && NetworkServer.active)
			{
				((EntityState)this).skillLocator.special.AddOneStock();
			}
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			FireTimer -= Time.fixedDeltaTime;
			if (FireTimer <= 0f)
			{
				Fire();
				FireTimer += TimeBetweenBullets;
			}
			if (((EntityState)this).fixedAge >= Duration && ((EntityState)this).isAuthority)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public bool isListEmpty(List<HurtBox> list)
		{
			return !list.Any();
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)7;
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "ContentAddition" })]
	[BepInPlugin("com.lodington.AutoShot", "AutoShot", "1.2.0")]
	public sealed class AutoShotPlugin : BaseUnityPlugin
	{
		public const string MODNAME = "AutoShot";

		public const string AUTHOR = "lodington";

		public const string GUID = "com.lodington.AutoShot";

		public const string VERSION = "1.2.0";

		private SkillDef _autoShot;

		private SkillDef _autoShotScepter;

		private static GameObject _commandoBody = Resources.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody");

		private SkillLocator skillLocator = _commandoBody.GetComponent<SkillLocator>();

		public static AssetBundle _assets;

		public static ConfigEntry<float> DamageCoefficient { get; set; }

		public static ConfigEntry<int> MinimumFireCount { get; set; }

		public static ConfigEntry<float> ProcCoefficient { get; set; }

		public static ConfigEntry<float> StunEnabled { get; set; }

		private void Awake()
		{
			string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			_assets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "commandoskills"));
			DamageCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>("Damage Coefficient", "Damage Coefficient", 0.9f, "This Will set Damage Coefficient of Sweeping Barrage Skill Default Value is 0.9f");
			MinimumFireCount = ((BaseUnityPlugin)this).Config.Bind<int>("minimum Fire Count", "minimum Fire Count", 10, "The minimum amount of times Sweeping barrage will shoot at targets less than X amount of enemys in range.");
			ProcCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>("Proc CoEfficient", "Proc CoEfficient", 1f, "This Will set proc Coefficient of Sweeping Barrage Skill Default Value is 1.0f");
			SetupAutoShot();
			if (Chainloader.PluginInfos.ContainsKey("com.ThinkInvisible.ClassicItems"))
			{
				ScepterSkillSetup();
				ScepterSetup();
			}
		}

		private void SetupAutoShot()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Expected O, but got Unknown
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			_autoShot = ScriptableObject.CreateInstance<SkillDef>();
			_autoShot.activationState = new SerializableEntityStateType(typeof(AutoShot));
			_autoShot.skillNameToken = "Auto Shot";
			_autoShot.skillName = "C_AUTO_SHOT";
			_autoShot.skillDescriptionToken = "Fires a minimum of " + MinimumFireCount.Value + " <style=cIsUtility>auto-targeting</style> shots. Fire more shots depending on how many enemies are in your sights.";
			_autoShot.activationStateMachineName = "Weapon";
			_autoShot.baseMaxStock = 1;
			_autoShot.baseRechargeInterval = 12f;
			_autoShot.beginSkillCooldownOnSkillEnd = false;
			_autoShot.canceledFromSprinting = false;
			_autoShot.fullRestockOnAssign = true;
			_autoShot.interruptPriority = (InterruptPriority)1;
			_autoShot.isCombatSkill = true;
			_autoShot.mustKeyPress = false;
			_autoShot.rechargeStock = 1;
			_autoShot.requiredStock = 1;
			_autoShot.cancelSprintingOnActivation = true;
			_autoShot.stockToConsume = 1;
			_autoShot.icon = _assets.LoadAsset<Sprite>("SWEEPING_BARRAGE");
			ContentAddition.AddSkillDef(_autoShot);
			SkillFamily skillFamily = skillLocator.special.skillFamily;
			Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
			Variant[] variants = skillFamily.variants;
			int num = skillFamily.variants.Length - 1;
			Variant val = new Variant
			{
				skillDef = _autoShot,
				unlockableDef = ScriptableObject.CreateInstance<UnlockableDef>()
			};
			((Variant)(ref val)).viewableNode = new Node(_autoShot.skillNameToken, false, (Node)null);
			variants[num] = val;
		}

		private void ScepterSkillSetup()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			_autoShotScepter = ScriptableObject.CreateInstance<SkillDef>();
			_autoShotScepter.activationState = new SerializableEntityStateType(typeof(BulletHell));
			_autoShotScepter.skillNameToken = "Bullet Hell";
			_autoShotScepter.skillName = "C_AUTO_SHOT_SCEPTER";
			_autoShotScepter.skillDescriptionToken = "Fires a minimum of 25 <style=cIsUtility>auto-targeting</style> shots. Fires at everything on your screen.";
			_autoShotScepter.activationStateMachineName = "Weapon";
			_autoShotScepter.baseMaxStock = 1;
			_autoShotScepter.baseRechargeInterval = 6f;
			_autoShotScepter.beginSkillCooldownOnSkillEnd = false;
			_autoShotScepter.canceledFromSprinting = false;
			_autoShotScepter.fullRestockOnAssign = true;
			_autoShotScepter.interruptPriority = (InterruptPriority)1;
			_autoShotScepter.isCombatSkill = true;
			_autoShotScepter.mustKeyPress = false;
			_autoShot.cancelSprintingOnActivation = false;
			_autoShotScepter.rechargeStock = 1;
			_autoShotScepter.requiredStock = 1;
			_autoShotScepter.stockToConsume = 1;
			_autoShotScepter.icon = _assets.LoadAsset<Sprite>("SWEEPING_BARRAGE_SCEPTER");
			ContentAddition.AddSkillDef(_autoShotScepter);
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void ScepterSetup()
		{
			Item<Scepter>.instance.RegisterScepterSkill(_autoShotScepter, "CommandoBody", (SkillSlot)3, _autoShot);
		}
	}
	internal class BulletHell : AutoShot
	{
		public override float FieldOfView => float.MaxValue;

		public override float MaxDistance => float.MaxValue;

		public override DamageType DamageType => (DamageType)160;

		public override int MinimumFireCount => 25;

		public override float Damage => 1.3f;
	}
}
namespace AutoShot.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("AutoShot.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal static byte[] commandoskills
		{
			get
			{
				object @object = ResourceManager.GetObject("commandoskills", resourceCulture);
				return (byte[])@object;
			}
		}

		internal Resources()
		{
		}
	}
}