Decompiled source of SeekerTweaks v1.0.3

SeekerTweaks.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Seeker;
using HG.Reflection;
using JetBrains.Annotations;
using KinematicCharacterController;
using On.EntityStates.Seeker;
using On.RoR2;
using R2API;
using Rewired;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.HudOverlay;
using RoR2.Navigation;
using RoR2.Networking;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: AssemblyTitle("SeekerTweaks")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SeekerTweaks")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("01975351-76aa-42c2-b6bc-2d9d8d247413")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace SeekerTweaks;

internal class AllyTracker : MonoBehaviour
{
	private float stopwatch;

	private CharacterBody body;

	private readonly BullseyeSearch search = new BullseyeSearch();

	public CharacterBody lastTarget;

	public CharacterBody target;

	private TemporaryOverlayInstance overlay;

	private NetworkLoadout networkLoadout;

	private bool active;

	public float castDuration = 1.2f;

	public float maxDistance = Configs.veilBaseMaxDistance.Value;

	public float maxAngle = 20f;

	public float buffMaxDistance = Configs.veilBuffBaseMaxDistance.Value;

	public Indicator indicator;

	public SpriteRenderer sprite;

	private AnimationCurve curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 0f);

	private void Awake()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Expected O, but got Unknown
		body = ((Component)this).GetComponent<CharacterBody>();
		indicator = new Indicator(((Component)this).gameObject, Prefabs.allyIndicator);
	}

	private void Active()
	{
		active = body.skillLocator.utility.skillNameToken == "SEEKERTWEAKS_UTIL2";
	}

	private void Start()
	{
		curve.AddKey(0.5f, 1f);
		indicator.active = true;
		LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser();
		NetworkUser val = ((firstLocalUser != null) ? firstLocalUser.currentNetworkUser : null);
		if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.networkLoadout))
		{
			networkLoadout = val.networkLoadout;
			networkLoadout.onLoadoutUpdated += Active;
		}
		Active();
	}

	private void OnDisable()
	{
		if (Object.op_Implicit((Object)(object)networkLoadout))
		{
			networkLoadout.onLoadoutUpdated -= Active;
		}
	}

	private void FixedUpdate()
	{
		//IL_007b: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_012b: Unknown result type (might be due to invalid IL or missing references)
		if (active)
		{
			if (!Object.op_Implicit((Object)(object)sprite) && Object.op_Implicit((Object)(object)indicator.visualizerInstance))
			{
				sprite = indicator.visualizerInstance.GetComponentInChildren<SpriteRenderer>();
			}
			if (Object.op_Implicit((Object)(object)target) && Object.op_Implicit((Object)(object)sprite))
			{
				float num = Vector3.Distance(target.transform.position, body.transform.position);
				float num2 = maxDistance + buffMaxDistance * 6f;
				float num3 = Util.Remap((num2 - num) / num2, 0f, 1f, 0.02f, 0.17f);
				((Component)sprite).transform.localPosition = Vector3.up * num3;
			}
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= 0.1f)
			{
				stopwatch = 0f;
				SearchForTarget(body.inputBank.GetAimRay());
			}
		}
	}

	private void SearchForTarget(Ray aimRay)
	{
		//IL_0007: 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_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: 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_0069: Unknown result type (might be due to invalid IL or missing references)
		search.teamMaskFilter = TeamMask.none;
		((TeamMask)(ref search.teamMaskFilter)).AddTeam(body.teamComponent.teamIndex);
		search.filterByLoS = false;
		search.searchOrigin = ((Ray)(ref aimRay)).origin;
		search.searchDirection = ((Ray)(ref aimRay)).direction;
		search.sortMode = (SortMode)3;
		search.maxDistanceFilter = maxDistance + buffMaxDistance * (float)body.GetBuffCount(Buffs.ChakraBuff);
		search.maxAngleFilter = maxAngle;
		search.RefreshCandidates();
		search.FilterOutGameObject(((Component)this).gameObject);
		HurtBox val = search.GetResults().FirstOrDefault();
		if (Object.op_Implicit((Object)(object)val))
		{
			Sprite value = null;
			if (Prefabs.bodyIcons.TryGetValue(val.healthComponent.body.baseNameToken, out value))
			{
				indicator.targetTransform = ((Component)val).transform;
				sprite.sprite = value;
			}
			lastTarget = target;
			target = val.healthComponent.body;
			if (Object.op_Implicit((Object)(object)lastTarget) && !((Object)(object)lastTarget != (Object)(object)target))
			{
				return;
			}
			if (overlay != null)
			{
				overlay.CleanupEffect();
			}
			if (Object.op_Implicit((Object)(object)val.healthComponent.body.modelLocator.modelTransform))
			{
				CharacterModel component = ((Component)val.healthComponent.body.modelLocator.modelTransform).GetComponent<CharacterModel>();
				if (Object.op_Implicit((Object)(object)component))
				{
					overlay = TemporaryOverlayManager.AddOverlay(((Component)component).gameObject);
					overlay.duration = 9999f;
					overlay.originalMaterial = Prefabs.tpTargetMat;
					overlay.animateShaderAlpha = false;
					overlay.destroyComponentOnEnd = true;
					overlay.inspectorCharacterModel = component;
					overlay.AddToCharacterModel(component);
				}
			}
		}
		else
		{
			indicator.targetTransform = null;
			lastTarget = null;
			target = null;
			if (overlay != null)
			{
				overlay.CleanupEffect();
			}
		}
	}
}
internal class AutoCastBehaviour : MonoBehaviour
{
	private SeekerController controller;

	private SkillLocator skillLocator;

	private bool spiralSelected;

	private NetworkLoadout networkLoadout;

	private void Awake()
	{
		skillLocator = ((Component)this).GetComponent<SkillLocator>();
		controller = ((Component)this).GetComponent<SeekerController>();
	}

	private void Start()
	{
		if (Object.op_Implicit((Object)(object)skillLocator))
		{
			LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser();
			NetworkUser val = ((firstLocalUser != null) ? firstLocalUser.currentNetworkUser : null);
			if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.networkLoadout))
			{
				networkLoadout = val.networkLoadout;
				networkLoadout.onLoadoutUpdated += NetworkLoadout_onLoadoutUpdated;
			}
			spiralSelected = skillLocator.secondary.skillNameToken == "SEEKER_SECONDARY_ALT1_NAME";
		}
	}

	private void NetworkLoadout_onLoadoutUpdated()
	{
		spiralSelected = skillLocator.secondary.skillNameToken == "SEEKER_SECONDARY_ALT1_NAME";
	}

	private void FixedUpdate()
	{
		if (Object.op_Implicit((Object)(object)skillLocator) && spiralSelected && Object.op_Implicit((Object)(object)controller) && skillLocator.secondary.CanExecute() && (controller.soulSpiralManager == null || controller.soulSpiralManager.soulSpiralArray.Length < controller.soulSpiralManager.soulSpiralLimit))
		{
			skillLocator.secondary.ExecuteIfReady();
		}
	}
}
internal class HealingBeamBehaviour : MonoBehaviour
{
	public GameObject owner;

	public TeamIndex teamIndex;

	public float healAmount;

	private float stopwatch;

	private int hitsPerSec = 6;

	public float radius = 0.5f;

	public float maxDistance = 4f;

	private void FixedUpdate()
	{
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: 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_0058: 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_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_00a6: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: 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_00d9: 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_00eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0109: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: 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)
		//IL_013a: 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_0150: 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_015f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0169: Expected O, but got Unknown
		//IL_016a: Expected O, but got Unknown
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		if (!NetworkServer.active)
		{
			return;
		}
		stopwatch += Time.fixedDeltaTime;
		if (!(stopwatch >= 1f / (float)hitsPerSec))
		{
			return;
		}
		stopwatch = 0f;
		BulletAttack val = new BulletAttack
		{
			bulletCount = 1u,
			aimVector = Vector3.up,
			origin = ((Component)this).transform.position,
			damage = 0f,
			damageColorIndex = (DamageColorIndex)0,
			damageType = DamageTypeCombo.op_Implicit((DamageType)0),
			falloffModel = (FalloffModel)1,
			maxDistance = maxDistance,
			force = 0f,
			hitMask = CommonMasks.bullet,
			minSpread = 0f,
			maxSpread = 0f,
			isCrit = false,
			owner = null,
			muzzleName = "",
			smartCollision = false,
			procChainMask = default(ProcChainMask),
			procCoefficient = 1f,
			radius = radius,
			sniper = false,
			stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask,
			weapon = null,
			tracerEffectPrefab = null,
			spreadPitchScale = 1f,
			spreadYawScale = 1f,
			hitEffectPrefab = null,
			hitCallback = (HitCallback)delegate(BulletAttack _bulletAttack, ref BulletHit info)
			{
				//IL_0038: 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_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: 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)
				if (Object.op_Implicit((Object)(object)info.hitHurtBox) && Object.op_Implicit((Object)(object)info.hitHurtBox.healthComponent) && info.hitHurtBox.healthComponent.body.teamComponent.teamIndex == teamIndex)
				{
					info.hitHurtBox.healthComponent.Heal(healAmount / (float)hitsPerSec, default(ProcChainMask), true);
					EffectManager.SimpleEffect(Prefabs.Load<GameObject>("RoR2/Base/Medkit/MedkitHealEffect.prefab"), info.hitHurtBox.healthComponent.body.corePosition, Quaternion.identity, true);
				}
				return BulletAttack.defaultHitCallback.Invoke(_bulletAttack, ref info);
			}
		};
		DamageAPI.AddModdedDamageType(val, Prefabs.noHit);
		val.Fire();
	}
}
internal class DamagingBeamBehaviour : MonoBehaviour
{
	public GameObject owner;

	public float damage;

	public bool crit;

	public TeamIndex teamIndex;

	private float stopwatch;

	public int hitsPerSec = 6;

	public float radius = 2f;

	public float maxDistance = 22f;

	public float force = 120f;

	private void FixedUpdate()
	{
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: 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_0058: 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_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: 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_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: 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_00c6: 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_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0136: Unknown result type (might be due to invalid IL or missing references)
		//IL_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0140: 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_014e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0159: Unknown result type (might be due to invalid IL or missing references)
		//IL_0164: Unknown result type (might be due to invalid IL or missing references)
		if (NetworkServer.active)
		{
			stopwatch += Time.fixedDeltaTime;
			if (stopwatch >= 1f / (float)hitsPerSec)
			{
				stopwatch = 0f;
				new BulletAttack
				{
					bulletCount = 1u,
					aimVector = Vector3.up,
					origin = ((Component)this).transform.position,
					damage = damage / (float)hitsPerSec,
					damageColorIndex = (DamageColorIndex)0,
					damageType = DamageTypeCombo.op_Implicit((DamageType)0),
					falloffModel = (FalloffModel)1,
					maxDistance = maxDistance,
					force = force,
					hitMask = CommonMasks.bullet,
					minSpread = 0f,
					maxSpread = 0f,
					isCrit = crit,
					owner = owner,
					muzzleName = "",
					smartCollision = true,
					procChainMask = default(ProcChainMask),
					procCoefficient = 1f,
					radius = radius,
					sniper = false,
					stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask,
					weapon = null,
					tracerEffectPrefab = null,
					spreadPitchScale = 1f,
					spreadYawScale = 1f,
					hitEffectPrefab = Prefabs.beamHitEffect
				}.Fire();
			}
		}
	}
}
internal class DestroyOnDistanceReach : MonoBehaviour
{
	public Transform target;

	public float maxDistance = 35f;

	private void FixedUpdate()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		if (Vector3.Distance(((Component)this).transform.position, target.position) <= maxDistance)
		{
			Object.Destroy((Object)(object)((Component)this).gameObject);
		}
	}
}
internal class MantraStacks : MonoBehaviour
{
	public int stacks = 0;

	public CharacterBody ownerBody;
}
internal class PetalTracker : MonoBehaviour
{
	private HudElement hudElement;

	private SeekerController controller;

	private float stopwatch = 0.1f;

	public Image[] dots;

	private Color color => (controller.currentChakraGate == 7) ? Color32.op_Implicit(new Color32((byte)59, (byte)243, (byte)173, byte.MaxValue)) : Color.white;

	private void Awake()
	{
		hudElement = ((Component)this).GetComponent<HudElement>();
	}

	private void FixedUpdate()
	{
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		stopwatch += Time.fixedDeltaTime;
		if (!Object.op_Implicit((Object)(object)controller) && Object.op_Implicit((Object)(object)hudElement) && Object.op_Implicit((Object)(object)hudElement.targetBodyObject))
		{
			controller = hudElement.targetBodyObject.GetComponent<SeekerController>();
		}
		else
		{
			if (!(stopwatch >= 0.1f) || !Util.HasEffectiveAuthority(hudElement.targetBodyObject))
			{
				return;
			}
			stopwatch = 0f;
			for (int i = 0; i < dots.Length; i++)
			{
				bool active = false;
				if (i <= controller.currentChakraGate - 1)
				{
					active = true;
				}
				((Graphic)dots[i]).color = color;
				((Component)dots[i]).gameObject.SetActive(active);
			}
		}
	}
}
internal class SeekerTracker : HuntressTracker
{
	private NetworkLoadout networkLoadout;

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

	private void Active()
	{
		base.indicator.active = base.characterBody.skillLocator.primary.skillNameToken == "SEEKERTWEAKS_PRIMARY";
	}

	private void Start()
	{
		((HuntressTracker)this).Start();
		LocalUser firstLocalUser = LocalUserManager.GetFirstLocalUser();
		NetworkUser val = ((firstLocalUser != null) ? firstLocalUser.currentNetworkUser : null);
		if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.networkLoadout))
		{
			networkLoadout = val.networkLoadout;
			networkLoadout.onLoadoutUpdated += Active;
		}
		Active();
	}

	private void OnDisable()
	{
		if (Object.op_Implicit((Object)(object)networkLoadout))
		{
			networkLoadout.onLoadoutUpdated -= Active;
		}
		((HuntressTracker)this).OnDisable();
	}
}
internal class SeekerTweakBehaviour : MonoBehaviour
{
	public SeekerController controller;

	public string sound = "Play_seeker_skill4_win";

	private void Awake()
	{
		controller = ((Component)this).GetComponent<SeekerController>();
	}

	private void OnEnable()
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Expected O, but got Unknown
		int value = Configs.spiralLimit.Value;
		if (value != 6)
		{
			controller.soulSpiralManager = new SeekerSoulSpiralManager(controller);
			int num = value;
			controller.soulSpiralManager.soulSpiralLimit = num;
			controller.soulSpiralManager.soulSpiralArray = (SoulSpiralProjectile[])(object)new SoulSpiralProjectile[num * 2];
		}
	}
}
internal class SojournIndicatorBehaviour : MonoBehaviour
{
	public Image upper;

	private float stopwatch;

	public float duration = 2f;

	private void Start()
	{
		upper.type = (Type)3;
		upper.fillOrigin = 1;
		upper.fillAmount = 0f;
	}

	private void FixedUpdate()
	{
		stopwatch += Time.fixedDeltaTime;
		upper.fillAmount = stopwatch / duration;
	}
}
internal class SoulSpiralTracker : MonoBehaviour
{
	private SoulSpiralProjectile projectile;

	private ProjectileController controller;

	public GameObject owner;

	public CharacterBody ownerBody;

	private void Awake()
	{
		projectile = ((Component)this).GetComponent<SoulSpiralProjectile>();
		controller = ((Component)this).GetComponent<ProjectileController>();
	}

	private void OnEnable()
	{
		InstanceTracker.Add<SoulSpiralTracker>(this);
	}

	private void Start()
	{
		owner = controller.owner;
		ownerBody = (Object.op_Implicit((Object)(object)owner) ? owner.GetComponent<CharacterBody>() : null);
		UpdateProjectile(owner);
	}

	private void FixedUpdate()
	{
		if (Object.op_Implicit((Object)(object)ownerBody) && Object.op_Implicit((Object)(object)projectile))
		{
			projectile.easeInDuration /= ownerBody.attackSpeed;
		}
	}

	public void UpdateProjectile(GameObject owner)
	{
		//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_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: 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_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)owner))
		{
			Debug.LogWarning((object)("no owner: " + ((Object)this).name));
			return;
		}
		List<SoulSpiralTracker> instancesList = InstanceTracker.GetInstancesList<SoulSpiralTracker>();
		if (instancesList == null || instancesList.Count <= 0)
		{
			return;
		}
		SoulSpiralTracker[] array = instancesList.Where((SoulSpiralTracker x) => Object.op_Implicit((Object)(object)x.owner) && (Object)(object)x.owner == (Object)(object)owner).ToArray();
		if (array == null || array.Length == 0)
		{
			return;
		}
		float value = Configs.spiralRadius.Value;
		bool flag = value != 4.75f;
		bool flag2 = Configs.spiralLimit.Value != 6;
		float num = 360f / (float)array.Length;
		Vector3 val = Vector3.ProjectOnPlane(owner.transform.forward, Vector3.up);
		for (int i = 0; i < array.Length; i++)
		{
			if (flag2)
			{
				Vector3 initialRadialDirection = Quaternion.AngleAxis(num * (float)(i + 1), Vector3.up) * val;
				array[i].projectile.initialRadialDirection = initialRadialDirection;
			}
			if (flag)
			{
				array[i].projectile.radius = value;
			}
		}
	}

	private void OnDisable()
	{
		InstanceTracker.Remove<SoulSpiralTracker>(this);
		UpdateProjectile(owner);
	}
}
internal class VehicleTimer : MonoBehaviour
{
	public float duration = 4f;

	private VehicleSeat vehicle;

	private float stopwatch;

	private void Awake()
	{
		vehicle = ((Component)this).GetComponent<VehicleSeat>();
	}

	private void FixedUpdate()
	{
		stopwatch += Time.fixedDeltaTime;
		if (stopwatch >= duration && NetworkServer.active)
		{
			vehicle.EjectPassenger();
		}
	}
}
internal class Configs
{
	internal static ConfigFile config;

	internal static ConfigEntry<bool> addAlts;

	internal static ConfigEntry<bool> canInterrupt;

	internal static ConfigEntry<bool> petalIndicatorReplacer;

	internal static ConfigEntry<bool> targetedHand;

	internal static ConfigEntry<int> spiralLimit;

	internal static ConfigEntry<bool> autoCastSpiral;

	internal static ConfigEntry<bool> spiralSpeedScaling;

	internal static ConfigEntry<float> spiralRadius;

	internal static ConfigEntry<bool> spiralSmallHop;

	internal static ConfigEntry<float> spiralSmallHopAmount;

	internal static ConfigEntry<bool> spiralSmallHopWhileGrounded;

	internal static ConfigEntry<bool> sojournTimer;

	internal static ConfigEntry<bool> castSecondary;

	internal static ConfigEntry<bool> castSpecial;

	internal static ConfigEntry<bool> wasdMovement;

	internal static ConfigEntry<bool> noMinigame;

	internal static ConfigEntry<bool> minigameRevive;

	internal static ConfigEntry<float> spiritSojournDuration;

	internal static ConfigEntry<float> spiritSojournBuffDuration;

	internal static ConfigEntry<float> spiritSojournBaseSpeed;

	internal static ConfigEntry<float> spiritSojournBuffBaseSpeed;

	internal static ConfigEntry<float> rayDamage;

	internal static ConfigEntry<float> rayExplosionDamage;

	internal static ConfigEntry<float> rayExplosionBuffDamage;

	internal static ConfigEntry<float> rayFireRate;

	internal static ConfigEntry<float> rayHealAmount;

	internal static ConfigEntry<float> veilBarrierAmount;

	internal static ConfigEntry<float> veilBuffBarrierAmount;

	internal static ConfigEntry<float> veilBaseMaxDistance;

	internal static ConfigEntry<float> veilBuffBaseMaxDistance;

	internal static ConfigEntry<float> skyBeamDamageCoefficient;

	internal static ConfigEntry<float> skyBeamBuffDamageCoefficient;

	internal static ConfigEntry<float> skyBeamHealCoefficient;

	internal static ConfigEntry<float> skyBeamBuffHealCoefficient;

	internal static ConfigEntry<float> skyBeamRadius;

	internal static void Init()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Expected O, but got Unknown
		config = new ConfigFile(Paths.ConfigPath + "\\com.Dragonyck.SeekerTweaks.cfg", true);
		string text = "01 - General";
		addAlts = config.Bind<bool>(text, "Add Alt Skills", true, (ConfigDescription)null);
		canInterrupt = config.Bind<bool>(text, "Spirit Punch Is Interruptable", true, "Enables all skills to be activatable during Spirit Punch.");
		petalIndicatorReplacer = config.Bind<bool>(text, "HG Style Petal Counter", true, (ConfigDescription)null);
		string text2 = "02 - Unseen Hand";
		targetedHand = config.Bind<bool>(text2, "Targeted Unseen Hand", true, "Can be cast by aiming directly at an enemy. It places the projectile on the ground below the target, *if* it has enough range to reach it, otherwise it will be placed directly on the target.");
		string text3 = "03 - Soul Spiral";
		spiralLimit = config.Bind<int>(text3, "Soul Spiral Limit", 999, "Default is 6");
		autoCastSpiral = config.Bind<bool>(text3, "Auto Cast Soul Spiral", true, (ConfigDescription)null);
		spiralSpeedScaling = config.Bind<bool>(text3, "Soul Spiral Orbiting Speed Scale w/ Attack Speed", true, (ConfigDescription)null);
		spiralRadius = config.Bind<float>(text3, "Soul Spiral Orbiting Radius", 6f, "Default is 4.75");
		spiralSmallHop = config.Bind<bool>(text3, "Soul Spiral Hop On Hit", true, (ConfigDescription)null);
		spiralSmallHopAmount = config.Bind<float>(text3, "Soul Spiral Hop Amount", 4f, (ConfigDescription)null);
		spiralSmallHopWhileGrounded = config.Bind<bool>(text3, "Soul Spiral Hop While Grounded", false, "Needs Soul Spiral Hop On Hit to be enabled.");
		string text4 = "04 - Sojourn";
		sojournTimer = config.Bind<bool>(text4, "Sojourn Timer On Crosshair", true, (ConfigDescription)null);
		castSecondary = config.Bind<bool>(text4, "Cast Secondary While In Sojourn", true, (ConfigDescription)null);
		castSpecial = config.Bind<bool>(text4, "Cast Special While In Sojourn", true, (ConfigDescription)null);
		wasdMovement = config.Bind<bool>(text4, "Directional Input Movement Sojourn", true, "Aim up/down, directional input for movement.");
		string text5 = "05 - Meditate";
		noMinigame = config.Bind<bool>(text5, "No Meditate QTE", true, "Functions like usual, but lets you move and removes the minigame.");
		minigameRevive = config.Bind<bool>(text5, "QTE On Revive", true, "Enables minigame for the revive only. Requires No Minigame to be enabled.");
		string text6 = "06 - Sojourn Spirit";
		spiritSojournDuration = config.Bind<float>(text6, "Sojourn Spirit Duration", 3.5f, (ConfigDescription)null);
		spiritSojournBuffDuration = config.Bind<float>(text6, "Sojourn Spirit Additional Duration Per Tranquility", 0.5f, (ConfigDescription)null);
		spiritSojournBaseSpeed = config.Bind<float>(text6, "Sojourn Spirit Base Speed", 15f, (ConfigDescription)null);
		spiritSojournBuffBaseSpeed = config.Bind<float>(text6, "Sojourn Spirit Additional Base Speed Per Tranquility", 2.5f, (ConfigDescription)null);
		string text7 = "07 - Mantra Ray";
		rayDamage = config.Bind<float>(text7, "Mantra Ray Damage Coefficient", 0.9f, (ConfigDescription)null);
		rayExplosionDamage = config.Bind<float>(text7, "Mantra Ray Explosion Damage Coefficient", 2f, (ConfigDescription)null);
		rayExplosionBuffDamage = config.Bind<float>(text7, "Mantra Ray Additional Explosion Damage Coefficient Per Tranquility", 0.2f, (ConfigDescription)null);
		rayFireRate = config.Bind<float>(text7, "Mantra Ray Fire Interval", 0.25f, (ConfigDescription)null);
		rayHealAmount = config.Bind<float>(text7, "Mantra Ray Explosion Heal Coefficient", 0.02f, (ConfigDescription)null);
		string text8 = "08 - SpiritVeil";
		veilBarrierAmount = config.Bind<float>(text8, "Spirit Veil Barrier Coefficient", 0.2f, (ConfigDescription)null);
		veilBuffBarrierAmount = config.Bind<float>(text8, "Spirit Veil Additional Barrier Coefficient Per Tranquility", 0.05f, (ConfigDescription)null);
		veilBaseMaxDistance = config.Bind<float>(text8, "Spirit Veil Base Max Distance", 70f, (ConfigDescription)null);
		veilBuffBaseMaxDistance = config.Bind<float>(text8, "Spirit Veil Additional Base Max Distance Per Tranquility", 15f, (ConfigDescription)null);
		string text9 = "09 - Dhamma";
		skyBeamDamageCoefficient = config.Bind<float>(text9, "Dhamma Damage Coefficient", 4f, "Damage Per Second");
		skyBeamBuffDamageCoefficient = config.Bind<float>(text9, "Dhamma Additional Damage Coefficient Per Tranquility", 0.35f, "Additional Damage Per Second");
		skyBeamHealCoefficient = config.Bind<float>(text9, "Dhamma Heal Coefficient", 0.05f, "Total Heal Max HP Per Second");
		skyBeamBuffHealCoefficient = config.Bind<float>(text9, "Dhamma Additional Heal Coefficient Per Tranquility", 0.025f, "Additional Total Heal Max HP Per Second");
		skyBeamRadius = config.Bind<float>(text9, "Dhamma Radius", 35f, (ConfigDescription)null);
	}
}
internal class TravelSojourn : Sojourn
{
	private float skillDuration;

	private GameObject indicator;

	private SojournVehicle vehicle;

	private float stopwatch;

	private bool triggeredExit;

	public override void OnEnter()
	{
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		((Sojourn)this).OnEnter();
		skillDuration = Configs.spiritSojournDuration.Value + Configs.spiritSojournBuffDuration.Value * (float)((EntityState)this).characterBody.GetBuffCount(Buffs.ChakraBuff);
		base.vehiclePrefab = Prefabs.vehiclePrefab;
		Debug.LogWarning((object)base.vehiclePrefab);
		if (((EntityState)this).isAuthority && Configs.sojournTimer.Value)
		{
			CrosshairManager val = CrosshairManager.instancesList.Find((CrosshairManager x) => (Object)(object)x.crosshairHudElement.targetBodyObject == (Object)(object)((EntityState)this).gameObject);
			if (Object.op_Implicit((Object)(object)val))
			{
				indicator = Object.Instantiate<GameObject>(Prefabs.sojournIndicator, (Transform)(object)val.container);
				indicator.transform.localPosition = Vector3.zero;
				indicator.GetComponent<SojournIndicatorBehaviour>().duration = skillDuration;
			}
		}
		if (NetworkServer.active)
		{
			((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility);
		}
	}

	public override void Update()
	{
		((EntityState)this).Update();
		if (Configs.castSecondary.Value && ((ButtonState)(ref ((EntityState)this).inputBank.skill2)).justPressed && ((EntityState)this).skillLocator.secondary.CanExecute())
		{
			((EntityState)this).skillLocator.secondary.ExecuteIfReady();
		}
		if (Configs.castSpecial.Value && ((ButtonState)(ref ((EntityState)this).inputBank.skill4)).justPressed && ((EntityState)this).skillLocator.special.CanExecute())
		{
			((EntityState)this).skillLocator.special.ExecuteIfReady();
		}
	}

	public override void FixedUpdate()
	{
		((Sojourn)this).FixedUpdate();
		stopwatch += Time.fixedDeltaTime;
		if (!Object.op_Implicit((Object)(object)vehicle) && (Object)(object)((EntityState)this).characterBody.currentVehicle != (Object)null)
		{
			vehicle = ((Component)((EntityState)this).characterBody.currentVehicle).GetComponent<SojournVehicle>();
		}
		if (Object.op_Implicit((Object)(object)vehicle) && stopwatch >= 0.1f)
		{
			stopwatch = 0f;
			vehicle.currentSpeed = Configs.spiritSojournBaseSpeed.Value + Configs.spiritSojournBuffBaseSpeed.Value * (float)((EntityState)this).characterBody.GetBuffCount(Buffs.ChakraBuff);
		}
		if (NetworkServer.active && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.currentVehicle) && ((EntityState)this).fixedAge >= skillDuration && !triggeredExit)
		{
			((EntityState)this).characterBody.currentVehicle.SetPassenger((GameObject)null);
		}
		if (((EntityState)this).isAuthority && base.seekerController.doesExitVehicle)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override void OnExit()
	{
		if (NetworkServer.active)
		{
			((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility);
		}
		if (Object.op_Implicit((Object)(object)indicator))
		{
			EntityState.Destroy((Object)(object)indicator);
		}
		((Sojourn)this).OnExit();
	}
}
internal class BetterSojourn : Sojourn
{
	private GameObject indicator;

	public override void OnEnter()
	{
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		((Sojourn)this).OnEnter();
		base.vehiclePrefab = Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/SojournVehicle/SojournVehicle.prefab");
		if (((EntityState)this).isAuthority && Configs.sojournTimer.Value)
		{
			CrosshairManager val = CrosshairManager.instancesList.Find((CrosshairManager x) => (Object)(object)x.crosshairHudElement.targetBodyObject == (Object)(object)((EntityState)this).gameObject);
			if (Object.op_Implicit((Object)(object)val))
			{
				indicator = Object.Instantiate<GameObject>(Prefabs.sojournIndicator, (Transform)(object)val.container);
				indicator.transform.localPosition = Vector3.zero;
			}
		}
	}

	public override void Update()
	{
		((EntityState)this).Update();
		if (Configs.castSecondary.Value && ((ButtonState)(ref ((EntityState)this).inputBank.skill2)).justPressed && ((EntityState)this).skillLocator.secondary.CanExecute())
		{
			((EntityState)this).skillLocator.secondary.ExecuteIfReady();
		}
		if (Configs.castSpecial.Value && ((ButtonState)(ref ((EntityState)this).inputBank.skill4)).justPressed && ((EntityState)this).skillLocator.special.CanExecute())
		{
			((EntityState)this).skillLocator.special.ExecuteIfReady();
		}
	}

	public override void OnExit()
	{
		if (Object.op_Implicit((Object)(object)indicator))
		{
			EntityState.Destroy((Object)(object)indicator);
		}
		((Sojourn)this).OnExit();
	}
}
internal class SkyBeam : BaseSkillState
{
	private SeekerController controller;

	private Dictionary<CharacterBody, GameObject> enemyIndicators = new Dictionary<CharacterBody, GameObject>();

	private Dictionary<CharacterBody, GameObject> allyIndicators = new Dictionary<CharacterBody, GameObject>();

	private AimRequest request;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		controller = ((EntityState)this).GetComponent<SeekerController>();
		((EntityState)this).PlayAnimation("Gesture, Override", "SojournEnterTransform", "SojournEnterTransform.playbackRate", 0.5f, 0f);
		request = ((EntityState)this).cameraTargetParams.RequestAimType((AimType)5);
		((EntityState)this).GetModelAnimator().SetLayerWeight(6, 0.5f);
		AkSoundEngine.PostEvent("Play_seeker_skill4_timeout", ((EntityState)this).gameObject);
	}

	private void UpdateAreaIndicators()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: 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_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0183: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		TeamMask none = TeamMask.none;
		((TeamMask)(ref none)).AddTeam(((EntityState)this).teamComponent.teamIndex);
		TeamMask enemyTeams = TeamMask.GetEnemyTeams(((EntityState)this).teamComponent.teamIndex);
		GameObject value = null;
		float value2 = Configs.skyBeamRadius.Value;
		bool flag = ((EntityState)this).characterBody.HasBuff(Buffs.RevitalizeBuff);
		foreach (CharacterBody instances in CharacterBody.instancesList)
		{
			bool flag2 = Vector3.Distance(instances.transform.position, ((EntityState)this).transform.position) <= value2;
			if ((Object)(object)instances != (Object)(object)((EntityState)this).characterBody && ((TeamMask)(ref enemyTeams)).HasTeam(instances.teamComponent.teamIndex))
			{
				if (!enemyIndicators.TryGetValue(instances, out value) && flag2)
				{
					enemyIndicators.Add(instances, Object.Instantiate<GameObject>(Prefabs.skyBeamAreaIndicator, instances.footPosition, Quaternion.identity, instances.transform));
				}
				else if (Object.op_Implicit((Object)(object)value) && !flag2)
				{
					enemyIndicators.Remove(instances);
					EntityState.Destroy((Object)(object)value);
				}
			}
			else
			{
				if (!((TeamMask)(ref none)).HasTeam(((EntityState)this).teamComponent.teamIndex))
				{
					continue;
				}
				if (!allyIndicators.TryGetValue(instances, out value))
				{
					if (flag2 || flag)
					{
						allyIndicators.Add(instances, Object.Instantiate<GameObject>(Prefabs.skyBeamHealingAreaIndicator, instances.footPosition, Quaternion.identity, instances.transform));
					}
				}
				else if (Object.op_Implicit((Object)(object)value) && !flag2 && !flag)
				{
					allyIndicators.Remove(instances);
					EntityState.Destroy((Object)(object)value);
				}
			}
		}
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= 0.1f)
		{
			((EntityState)this).fixedAge = 0f;
			UpdateAreaIndicators();
		}
		if (((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority())
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override void OnExit()
	{
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: 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_00ce: 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_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b7: 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_01c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: 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)
		AkSoundEngine.PostEvent("Play_seeker_skill4_win", ((EntityState)this).gameObject);
		AkSoundEngine.PostEvent("Play_seeker_skill3_explo", ((EntityState)this).gameObject);
		((EntityState)this).GetModelAnimator().SetLayerWeight(6, 1f);
		if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
		{
			request.Dispose();
		}
		int buffCount = ((EntityState)this).characterBody.GetBuffCount(Buffs.ChakraBuff);
		bool flag = ((EntityState)this).characterBody.HasBuff(Buffs.RevitalizeBuff);
		foreach (KeyValuePair<CharacterBody, GameObject> enemyIndicator in enemyIndicators)
		{
			CharacterBody key = enemyIndicator.Key;
			GameObject value = enemyIndicator.Value;
			if (Object.op_Implicit((Object)(object)value))
			{
				GameObject val = Object.Instantiate<GameObject>(Prefabs.skyBeamBeam, key.footPosition, Quaternion.Euler(Vector3.right * -90f), key.transform);
				if (NetworkServer.active)
				{
					DamagingBeamBehaviour damagingBeamBehaviour = val.AddComponent<DamagingBeamBehaviour>();
					damagingBeamBehaviour.owner = ((EntityState)this).gameObject;
					damagingBeamBehaviour.damage = ((BaseState)this).damageStat * (Configs.skyBeamDamageCoefficient.Value + (float)buffCount * Configs.skyBeamBuffDamageCoefficient.Value);
					damagingBeamBehaviour.crit = ((BaseState)this).RollCrit();
					damagingBeamBehaviour.teamIndex = ((EntityState)this).teamComponent.teamIndex;
				}
				EntityState.Destroy((Object)(object)value);
			}
		}
		foreach (KeyValuePair<CharacterBody, GameObject> allyIndicator in allyIndicators)
		{
			CharacterBody key2 = allyIndicator.Key;
			GameObject value2 = allyIndicator.Value;
			if (Object.op_Implicit((Object)(object)value2))
			{
				GameObject val2 = Object.Instantiate<GameObject>(Prefabs.skyHealingBeamBeam, key2.footPosition, Quaternion.Euler(Vector3.right * -90f), key2.transform);
				if (NetworkServer.active)
				{
					HealingBeamBehaviour healingBeamBehaviour = val2.AddComponent<HealingBeamBehaviour>();
					healingBeamBehaviour.owner = ((EntityState)this).gameObject;
					healingBeamBehaviour.healAmount = ((EntityState)this).healthComponent.fullCombinedHealth * (Configs.skyBeamHealCoefficient.Value + (float)buffCount * Configs.skyBeamBuffHealCoefficient.Value);
					healingBeamBehaviour.teamIndex = ((EntityState)this).teamComponent.teamIndex;
				}
				EntityState.Destroy((Object)(object)value2);
			}
		}
		if (NetworkServer.active)
		{
			if (!flag)
			{
				if (buffCount < 6)
				{
					((EntityState)this).characterBody.AddBuff(Buffs.ChakraBuff);
					controller.currentChakraGate = (byte)(buffCount + 1);
				}
				else
				{
					((EntityState)this).characterBody.AddBuff(Buffs.RevitalizeBuff);
					controller.currentChakraGate = 7;
				}
			}
			else
			{
				controller.currentChakraGate = 0;
				((EntityState)this).characterBody.RemoveBuff(Buffs.RevitalizeBuff);
				for (int i = 0; i < 6; i++)
				{
					((EntityState)this).characterBody.RemoveBuff(Buffs.ChakraBuff);
				}
			}
			Debug.LogWarning((object)controller.currentChakraGate);
			controller.CallRpcSetPedalsValue(controller.currentChakraGate);
		}
		((EntityState)this).PlayAnimation("Gesture, Override", "SoulSpiralFinish");
		((EntityState)this).OnExit();
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)4;
	}
}
internal class SpiritRay : BaseSkillState
{
	private float fireRate;

	private float baseFireRate = Configs.rayFireRate.Value;

	private Transform muzzle;

	private BezierCurveLine beamEffect;

	private CharacterBody cachedBody;

	private Animator animator;

	private float startupDuration = 0.5f;

	private float stopwatch;

	private SeekerTracker tracker;

	private float damageCoefficient = Configs.rayDamage.Value;

	private float explosionDamageCoefficient = Configs.rayExplosionDamage.Value;

	private GameObject muzzleEffect;

	private float downPos = 1.8f;

	private float backPos = 0.3f;

	private uint ID;

	private bool soundLoop;

	private bool pLaYiTagAin;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		Configs.config.Reload();
		tracker = ((EntityState)this).GetComponent<SeekerTracker>();
		startupDuration /= ((BaseState)this).attackSpeedStat;
		cachedBody = ((HuntressTracker)tracker).trackingTarget.healthComponent.body;
		((EntityState)this).PlayAnimation("Gesture, Override", "TargetHeal");
		animator = ((EntityState)this).GetModelAnimator();
		muzzle = ((Component)animator).GetComponent<ChildLocator>().FindChild("MuzzleEnergyBomb");
		((EntityState)this).PlayCrossfade("Gesture, Additive", "SpiritPunchFinisher", "FireGauntlet.playbackRate", startupDuration, 0.025f);
		((EntityState)this).PlayCrossfade("Gesture, Override", "SpiritPunchFinisher", "FireGauntlet.playbackRate", startupDuration, 0.025f);
		AkSoundEngine.PostEvent(Sounds.Play_SeekerTweaks_Beam_Start, ((EntityState)this).gameObject);
	}

	private void InstantiateBeamEffect()
	{
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: 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_00ff: 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_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)beamEffect) && Object.op_Implicit((Object)(object)cachedBody) && Object.op_Implicit((Object)(object)((Component)((HuntressTracker)tracker).trackingTarget).transform))
		{
			beamEffect = Object.Instantiate<GameObject>(Prefabs.beamEffect, muzzle.position + -((EntityState)this).characterDirection.forward * backPos + Vector3.down * downPos, Quaternion.identity, muzzle).GetComponent<BezierCurveLine>();
			beamEffect.endTransform = ((Component)((HuntressTracker)tracker).trackingTarget).transform;
			if (!Object.op_Implicit((Object)(object)muzzleEffect))
			{
				muzzleEffect = Object.Instantiate<GameObject>(Prefabs.muzzleEffect, muzzle.position + -((EntityState)this).characterDirection.forward * backPos + Vector3.down * downPos, Quaternion.identity, muzzle);
			}
		}
	}

	public override void Update()
	{
		((EntityState)this).Update();
		if (Object.op_Implicit((Object)(object)cachedBody))
		{
			if (Object.op_Implicit((Object)(object)beamEffect) && Object.op_Implicit((Object)(object)beamEffect.endTransform) && Object.op_Implicit((Object)(object)((HuntressTracker)tracker).trackingTarget) && (Object)(object)beamEffect.endTransform != (Object)(object)((HuntressTracker)tracker).trackingTarget)
			{
				beamEffect.endTransform = ((Component)((HuntressTracker)tracker).trackingTarget).transform;
				cachedBody = ((HuntressTracker)tracker).trackingTarget.healthComponent.body;
			}
			if (!cachedBody.healthComponent.alive || !Object.op_Implicit((Object)(object)((HuntressTracker)tracker).trackingTarget))
			{
				cachedBody = null;
			}
			if (!Object.op_Implicit((Object)(object)beamEffect))
			{
				InstantiateBeamEffect();
			}
			return;
		}
		if (soundLoop)
		{
			soundLoop = false;
			pLaYiTagAin = true;
			AkSoundEngine.StopPlayingID(ID);
			AkSoundEngine.PostEvent(Sounds.Play_SeekerTweaks_Beam_End, ((EntityState)this).gameObject);
		}
		if (Object.op_Implicit((Object)(object)beamEffect))
		{
			EntityState.Destroy((Object)(object)((Component)beamEffect).gameObject);
		}
		if (Object.op_Implicit((Object)(object)((HuntressTracker)tracker).trackingTarget))
		{
			cachedBody = ((HuntressTracker)tracker).trackingTarget.healthComponent.body;
		}
	}

	public override void FixedUpdate()
	{
		//IL_0170: 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_0177: Unknown result type (might be due to invalid IL or missing references)
		//IL_017c: Unknown result type (might be due to invalid IL or missing references)
		//IL_017d: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cf: Expected O, but got Unknown
		//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_02af: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Unknown result type (might be due to invalid IL or missing references)
		//IL_030e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0310: Unknown result type (might be due to invalid IL or missing references)
		//IL_0315: Unknown result type (might be due to invalid IL or missing references)
		//IL_031d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0324: Unknown result type (might be due to invalid IL or missing references)
		//IL_0329: Unknown result type (might be due to invalid IL or missing references)
		//IL_032e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0330: Unknown result type (might be due to invalid IL or missing references)
		//IL_0335: Unknown result type (might be due to invalid IL or missing references)
		//IL_0337: Unknown result type (might be due to invalid IL or missing references)
		//IL_033e: Expected O, but got Unknown
		//IL_0340: Unknown result type (might be due to invalid IL or missing references)
		//IL_034d: Unknown result type (might be due to invalid IL or missing references)
		//IL_035d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0362: Unknown result type (might be due to invalid IL or missing references)
		//IL_0363: Unknown result type (might be due to invalid IL or missing references)
		//IL_036b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0379: Expected O, but got Unknown
		((EntityState)this).FixedUpdate();
		((BaseState)this).StartAimMode(2f, false);
		fireRate = baseFireRate / ((BaseState)this).attackSpeedStat;
		if (((EntityState)this).fixedAge >= startupDuration * 0.9f)
		{
			animator.SetFloat("FireGauntlet.playbackRate", 0f);
		}
		if (((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority())
		{
			((EntityState)this).outer.SetNextStateToMain();
			return;
		}
		if (((EntityState)this).fixedAge >= startupDuration)
		{
			InstantiateBeamEffect();
			if (!soundLoop && Object.op_Implicit((Object)(object)cachedBody))
			{
				soundLoop = true;
				if (pLaYiTagAin)
				{
					pLaYiTagAin = false;
					AkSoundEngine.PostEvent(Sounds.Play_SeekerTweaks_Beam_Start, ((EntityState)this).gameObject);
				}
				ID = AkSoundEngine.PostEvent(Sounds.Play_SeekerTweaks_Beam_Loop, ((EntityState)this).gameObject);
			}
			stopwatch += Time.fixedDeltaTime;
		}
		if (!Object.op_Implicit((Object)(object)cachedBody) || !(stopwatch >= fireRate))
		{
			return;
		}
		stopwatch = 0f;
		AkSoundEngine.PostEvent(Sounds.Play_SeekerTweaks_Beam_Impact, ((EntityState)this).gameObject);
		if (!NetworkServer.active)
		{
			return;
		}
		Vector3 corePosition = cachedBody.corePosition;
		DamageInfo val = new DamageInfo
		{
			position = corePosition,
			attacker = ((EntityState)this).gameObject,
			inflictor = ((EntityState)this).gameObject,
			crit = ((BaseState)this).RollCrit(),
			damage = ((BaseState)this).damageStat * (damageCoefficient * fireRate),
			procCoefficient = 0.65f
		};
		cachedBody.healthComponent.TakeDamage(val);
		EffectManager.SimpleEffect(Prefabs.beamHitEffect, corePosition, Quaternion.identity, true);
		if (cachedBody.GetBuffCount(Prefabs.mantra) < 4)
		{
			cachedBody.AddTimedBuff(Prefabs.mantra, 10f);
			return;
		}
		MantraStacks mantraStacks = Array.Find(((Component)cachedBody).GetComponents<MantraStacks>(), (MantraStacks x) => (Object)(object)x != (Object)null && (Object)(object)x.ownerBody == (Object)(object)((EntityState)this).characterBody);
		if (!Object.op_Implicit((Object)(object)mantraStacks))
		{
			mantraStacks = ((Component)cachedBody).gameObject.AddComponent<MantraStacks>();
			mantraStacks.ownerBody = ((EntityState)this).characterBody;
		}
		mantraStacks.stacks++;
		cachedBody.ClearTimedBuffs(Prefabs.mantra);
		float num = 3.5f;
		BlastAttack val2 = new BlastAttack
		{
			position = corePosition,
			attacker = ((EntityState)this).gameObject,
			inflictor = ((EntityState)this).gameObject,
			crit = ((BaseState)this).RollCrit(),
			baseDamage = ((BaseState)this).damageStat * (explosionDamageCoefficient + Configs.rayExplosionBuffDamage.Value * (float)((EntityState)this).characterBody.GetBuffCount(Buffs.ChakraBuff)),
			procCoefficient = 0.35f,
			attackerFiltering = (AttackerFiltering)2,
			radius = num,
			teamIndex = ((EntityState)this).teamComponent.teamIndex,
			falloffModel = (FalloffModel)0,
			damageColorIndex = (DamageColorIndex)3
		};
		DamageAPI.AddModdedDamageType(val2, Prefabs.explosion);
		val2.Fire();
		EffectManager.SpawnEffect(Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/SoulSearchExplosionVFX.prefab"), new EffectData
		{
			origin = corePosition,
			scale = num
		}, true);
	}

	public override void OnExit()
	{
		AkSoundEngine.StopPlayingID(ID);
		AkSoundEngine.PostEvent(Sounds.Play_SeekerTweaks_Beam_End, ((EntityState)this).gameObject);
		animator.SetFloat("FireGauntlet.playbackRate", 1f);
		if (Object.op_Implicit((Object)(object)muzzleEffect))
		{
			EntityState.Destroy((Object)(object)muzzleEffect);
		}
		if (Object.op_Implicit((Object)(object)beamEffect))
		{
			EntityState.Destroy((Object)(object)((Component)beamEffect).gameObject);
		}
		animator.SetTrigger("trigger");
		((EntityState)this).OnExit();
	}

	public override InterruptPriority GetMinimumInterruptPriority()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		return (InterruptPriority)2;
	}
}
internal class SpiritVeil : BaseSkillState
{
	private Transform target;

	private CharacterBody targetBody;

	private Vector3 cachedPos;

	private float duration;

	private AllyTracker tracker;

	private ChildLocator lotusChildLocator;

	private GameObject lotus;

	private uint ID;

	private NetworkedBodyAttachment attachment;

	public override void OnEnter()
	{
		((BaseState)this).OnEnter();
		tracker = ((EntityState)this).GetComponent<AllyTracker>();
		targetBody = tracker.target;
		target = targetBody.transform;
		duration = tracker.castDuration;
		((EntityState)this).PlayAnimation("Body", "Idle");
		((EntityState)this).PlayAnimation("FullBody, Override", "MeditationStart", "Meditation.playbackRate", duration, 0f);
		lotusChildLocator = ((Component)((EntityState)this).GetModelTransform()).GetComponent<ChildLocator>();
		lotus = Object.Instantiate<GameObject>(Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/MeditateLotusVFX.prefab"), lotusChildLocator.FindChild("Lotus"), false);
		lotus.GetComponentInChildren<Animator>().Play("MeditationSuccess");
		ID = Util.PlaySound("Play_seeker_skill2_start", ((EntityState)this).gameObject);
		if (NetworkServer.active)
		{
			attachment = Object.Instantiate<GameObject>(Prefabs.shieldAttachment).GetComponent<NetworkedBodyAttachment>();
			attachment.AttachToGameObjectAndSpawn(((Component)((EntityState)this).characterBody).gameObject, (string)null);
		}
	}

	public override void FixedUpdate()
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (Object.op_Implicit((Object)(object)target))
		{
			cachedPos = target.position;
		}
		if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
		{
			TeleportHelper.TeleportBody(((EntityState)this).characterBody, Utils.FindNearestNodePosition(cachedPos, (GraphType)0));
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	public override void OnExit()
	{
		//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_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Expected O, but got Unknown
		if (NetworkServer.active)
		{
			float num = ((EntityState)this).healthComponent.combinedHealth * Configs.veilBarrierAmount.Value + Configs.veilBuffBarrierAmount.Value * (float)((EntityState)this).characterBody.GetBuffCount(Buffs.ChakraBuff);
			((EntityState)this).healthComponent.AddBarrier(num);
			if (Object.op_Implicit((Object)(object)targetBody))
			{
				targetBody.healthComponent.AddBarrier(num);
			}
		}
		((EntityState)this).PlayAnimation("FullBody, Override", "MeditationSuccess", "Meditation.playbackRate", duration, 0f);
		Util.PlaySound("Play_seeker_skill4_win", ((EntityState)this).gameObject);
		AkSoundEngine.StopPlayingID(ID);
		EffectManager.SpawnEffect(Prefabs.Load<GameObject>("RoR2/DLC2/Seeker/MeditateSuccessVFX.prefab"), new EffectData
		{
			origin = ((EntityState)this).characterBody.corePosition
		}, false);
		if (Object.op_Implicit((Object)(object)lotus))
		{
			EntityState.Destroy((Object)(object)lotus);
		}
		if (Object.op_Implicit((Object)(object)attachment))
		{
			EntityState.Destroy((Object)(object)((Component)attachment).gameObject);
		}
		((EntityState)this).OnExit();
	}
}
internal class Hook
{
	internal static void Hooks()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Expected O, but got Unknown
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Expected O, but got Unknown
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Expected O, but got Unknown
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Expected O, but got Unknown
		if (Configs.noMinigame.Value)
		{
			MeditationUI.OnEnter += new hook_OnEnter(MeditationUI_OnEnter);
		}
		if (Configs.spiralSpeedScaling.Value)
		{
			SoulSpiralOrbiter.UpdateCurrentSpeedAndDamage += new hook_UpdateCurrentSpeedAndDamage(SoulSpiralOrbiter_UpdateCurrentSpeedAndDamage);
		}
		if (Configs.targetedHand.Value)
		{
			UnseenHand.UpdateAreaIndicator += new hook_UpdateAreaIndicator(UnseenHand_UpdateAreaIndicator);
		}
		if (Configs.spiralSmallHop.Value)
		{
			GlobalEventManager.onClientDamageNotified += GlobalEventManager_onClientDamageNotified;
		}
		if (Configs.wasdMovement.Value)
		{
			SojournVehicle.FixedUpdateMovement += new hook_FixedUpdateMovement(SojournVehicle_FixedUpdateMovement);
		}
		if (Configs.addAlts.Value)
		{
			GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal;
			GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt;
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
		}
	}

	private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		if (DamageAPI.HasModdedDamageType(damageInfo, Prefabs.noHit))
		{
			damageInfo.rejected = true;
		}
		orig.Invoke(self, damageInfo);
	}

	private static void GlobalEventManager_onServerDamageDealt(DamageReport damageReport)
	{
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Expected O, but got Unknown
		//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)
		if (Object.op_Implicit((Object)(object)damageReport.attackerBody) && DamageAPI.HasModdedDamageType(damageReport.damageInfo, Prefabs.explosion))
		{
			HealthComponent healthComponent = damageReport.attackerBody.healthComponent;
			HealOrb val = new HealOrb();
			((Orb)val).origin = damageReport.damageInfo.position;
			((Orb)val).target = damageReport.attackerBody.mainHurtBox;
			val.healValue = healthComponent.fullCombinedHealth * Configs.rayHealAmount.Value;
			val.overrideDuration = 0.3f;
			OrbManager.instance.AddOrb((Orb)(object)val);
		}
	}

	private static void MeditationUI_OnEnter(orig_OnEnter orig, MeditationUI self)
	{
		orig.Invoke(self);
		bool value = Configs.minigameRevive.Value;
		if (!value || (value && !((EntityState)self).characterBody.HasBuff(Buffs.RevitalizeBuff)))
		{
			if (self.overlayController != null)
			{
				HudOverlayManager.RemoveOverlay(self.overlayController);
				self.overlayController = null;
			}
			self.meditationSuccess = true;
			self.meditationWrapUp = true;
			self.spawnedLotus = true;
			self.lotusChildLocator = ((Component)((EntityState)self).GetModelTransform()).GetComponent<ChildLocator>();
			self.lotus = Object.Instantiate<GameObject>(self.lotusPrefab, self.lotusChildLocator.FindChild("Lotus"), false);
		}
	}

	private static void GlobalEventManager_onCharacterDeathGlobal(DamageReport damageReport)
	{
		//IL_0094: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Expected O, but got Unknown
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)damageReport.victim) || !Object.op_Implicit((Object)(object)damageReport.victim.body))
		{
			return;
		}
		MantraStacks[] components = ((Component)damageReport.victim).GetComponents<MantraStacks>();
		MantraStacks[] array = components;
		foreach (MantraStacks mantraStacks in array)
		{
			if (!Object.op_Implicit((Object)(object)mantraStacks.ownerBody))
			{
				continue;
			}
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				CharacterBody body = instance.body;
				if (Object.op_Implicit((Object)(object)body) && Vector3.Distance(((Component)damageReport.victim).transform.position, body.transform.position) <= 35f)
				{
					HealOrb val = new HealOrb();
					((Orb)val).origin = damageReport.victim.body.corePosition;
					((Orb)val).target = damageReport.victim.body.mainHurtBox;
					val.healValue = mantraStacks.ownerBody.healthComponent.fullCombinedHealth * ((float)mantraStacks.stacks * 0.01f);
					val.overrideDuration = RoR2Application.rng.RangeFloat(0.3f, 0.75f);
					OrbManager.instance.AddOrb((Orb)(object)val);
				}
			}
		}
	}

	private static void SojournVehicle_FixedUpdateMovement(orig_FixedUpdateMovement orig, SojournVehicle self)
	{
		//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_00d6: 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_00df: 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_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)self.vehicleSeat) && Object.op_Implicit((Object)(object)self.vehicleSeat.currentPassengerBody) && (Object)(object)self.vehicleSeat.currentPassengerInputBank != (Object)null)
		{
			CharacterBody currentPassengerBody = self.vehicleSeat.currentPassengerBody;
			CharacterMaster master = currentPassengerBody.master;
			if (Object.op_Implicit((Object)(object)master.playerCharacterMasterController) && Object.op_Implicit((Object)(object)master.playerCharacterMasterController.networkUser) && master.playerCharacterMasterController.networkUser.inputPlayer != null)
			{
				Player inputPlayer = master.playerCharacterMasterController.networkUser.inputPlayer;
				InputBankTest currentPassengerInputBank = self.vehicleSeat.currentPassengerInputBank;
				Vector3 aimDirection = currentPassengerInputBank.aimDirection;
				Vector3 val = default(Vector3);
				((Vector3)(ref val))..ctor(inputPlayer.GetAxis(0), 0f, inputPlayer.GetAxis(1));
				Rigidbody vehicleRigidbody = self.vehicleRigidbody;
				Vector3 val2 = Util.QuaternionSafeLookRotation(aimDirection) * val;
				vehicleRigidbody.MoveRotation(Util.QuaternionSafeLookRotation(((Vector3)(ref val2)).normalized));
				self.vehicleRigidbody.velocity = ((val == Vector3.zero) ? val : (((Component)self.vehicleRigidbody).transform.forward * self.currentSpeed));
			}
		}
	}

	private static void GlobalEventManager_onClientDamageNotified(DamageDealtMessage damageMessage)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Invalid comparison between Unknown and I4
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)damageMessage.attacker) && (int)DamageTypeCombo.op_Implicit(damageMessage.damageType) == 262144 && damageMessage.attacker.GetComponent<CharacterBody>().baseNameToken == "SEEKER_BODY_NAME")
		{
			CharacterMotor component = damageMessage.attacker.GetComponent<CharacterMotor>();
			if ((Object.op_Implicit((Object)(object)component) && !component.isGrounded) || Configs.spiralSmallHopWhileGrounded.Value)
			{
				((BaseCharacterController)component).Motor.ForceUnground(0.1f);
				component.velocity = new Vector3(component.velocity.x, Mathf.Max(component.velocity.y, Configs.spiralSmallHopAmount.Value), component.velocity.z);
			}
		}
	}

	private static void UnseenHand_UpdateAreaIndicator(orig_UpdateAreaIndicator orig, UnseenHand self)
	{
		//IL_0028: 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_0044: 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_0077: 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_00cf: 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_0105: Unknown result type (might be due to invalid IL or missing references)
		self.goodPlacement = false;
		if (Object.op_Implicit((Object)(object)self.areaIndicatorInstance))
		{
			float maxDistance = UnseenHand.maxDistance;
			float num = 0f;
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(CameraRigController.ModifyAimRayIfApplicable(((BaseState)self).GetAimRay(), ((EntityState)self).gameObject, ref num), ref val, maxDistance + num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
			{
				self.areaIndicatorInstance.transform.position = ((RaycastHit)(ref val)).point;
				self.goodPlacement = true;
			}
			HurtBox val2 = (Object.op_Implicit((Object)(object)((RaycastHit)(ref val)).collider) ? ((Component)((RaycastHit)(ref val)).collider).GetComponent<HurtBox>() : null);
			if (Object.op_Implicit((Object)(object)val2) && Physics.Raycast(((Component)val2).transform.position, Vector3.down, ref val, 69f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
			{
				self.areaIndicatorInstance.transform.position = ((RaycastHit)(ref val)).point;
				self.goodPlacement = true;
			}
			self.areaIndicatorInstance.SetActive(self.goodPlacement);
		}
	}

	private static void SoulSpiralOrbiter_UpdateCurrentSpeedAndDamage(orig_UpdateCurrentSpeedAndDamage orig, SoulSpiralOrbiter self, float _currentTime)
	{
		if (Object.op_Implicit((Object)(object)self.seekerController) && Object.op_Implicit((Object)(object)self.seekerController.characterBody))
		{
			_currentTime *= self.seekerController.characterBody.attackSpeed;
		}
		orig.Invoke(self, _currentTime);
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Dragonyck.SeekerTweaks", "SeekerTweaks", "1.0.3")]
public class MainPlugin : BaseUnityPlugin
{
	public const string MODUID = "com.Dragonyck.SeekerTweaks";

	public const string MODNAME = "SeekerTweaks";

	public const string VERSION = "1.0.3";

	public const string MODNAMEKEY = "SEEKERTWEAKS";

	private void Awake()
	{
		Assets.PopulateAssets();
		Configs.Init();
		Prefabs.CreatePrefabs();
		Hook.Hooks();
	}
}
internal class Assets
{
	public static AssetBundle MainAssetBundle;

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

	public static void PopulateAssets()
	{
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		if ((Object)(object)MainAssetBundle == (Object)null)
		{
			using Stream stream = executingAssembly.GetManifestResourceStream("SeekerTweaks.AssetBundle.seekertweaksassets");
			MainAssetBundle = AssetBundle.LoadFromStream(stream);
		}
		using Stream stream2 = executingAssembly.GetManifestResourceStream("SeekerTweaks.SeekerTweaks.bnk");
		byte[] array = new byte[stream2.Length];
		stream2.Read(array, 0, array.Length);
		SoundBanks.Add(array);
	}
}
internal class Prefabs
{
	internal static GameObject seekerBodyPrefab;

	internal static GameObject vehiclePrefab;

	internal static GameObject sojournIndicator;

	internal static GameObject beamEffect;

	internal static GameObject muzzleEffect;

	internal static GameObject trackingIndicator;

	internal static GameObject beamHitEffect;

	internal static GameObject shieldAttachment;

	internal static GameObject allyIndicator;

	internal static GameObject areaIndicator;

	internal static GameObject skyBeamAreaIndicator;

	internal static GameObject skyBeamHealingAreaIndicator;

	internal static GameObject skyBeamBeam;

	internal static GameObject skyHealingBeamBeam;

	internal static Material tpTargetMat;

	internal static BuffDef mantra;

	internal static ModdedDamageType explosion;

	internal static ModdedDamageType noHit;

	internal static Dictionary<string, Sprite> bodyIcons = new Dictionary<string, Sprite>();

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

	internal static GameObject Instantiate(string path, string name, bool registerNetwork = false)
	{
		return PrefabAPI.InstantiateClone(Load<GameObject>(path), name, registerNetwork);
	}

	internal static GameObject Instantiate(GameObject obj, string name, bool registerNetwork = false)
	{
		return PrefabAPI.InstantiateClone(obj, name, registerNetwork);
	}

	[SystemInitializer(new Type[] { typeof(BodyCatalog) })]
	internal static void SetBodyIcons()
	{
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Expected O, but got Unknown
		foreach (CharacterBody allBodyPrefabBodyBodyComponent in BodyCatalog.allBodyPrefabBodyBodyComponents)
		{
			string baseNameToken = allBodyPrefabBodyBodyComponent.baseNameToken;
			Sprite value = null;
			if (Object.op_Implicit((Object)(object)allBodyPrefabBodyBodyComponent.portraitIcon) && !bodyIcons.TryGetValue(baseNameToken, out value))
			{
				bodyIcons.Add(baseNameToken, Utils.CreateSprite((Texture2D)allBodyPrefabBodyBodyComponent.portraitIcon));
			}
		}
	}

	internal static void CreatePrefabs()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01db: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_023f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0246: Expected O, but got Unknown
		//IL_0279: Unknown result type (might be due to invalid IL or missing references)
		//IL_0280: Expected O, but got Unknown
		//IL_0295: Unknown result type (might be due to invalid IL or missing references)
		//IL_029a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_111f: Unknown result type (might be due to invalid IL or missing references)
		//IL_1124: Unknown result type (might be due to invalid IL or missing references)
		//IL_1133: Unknown result type (might be due to invalid IL or missing references)
		//IL_1138: Unknown result type (might be due to invalid IL or missing references)
		//IL_1165: Unknown result type (might be due to invalid IL or missing references)
		//IL_116a: Unknown result type (might be due to invalid IL or missing references)
		//IL_1179: Unknown result type (might be due to invalid IL or missing references)
		//IL_117e: Unknown result type (might be due to invalid IL or missing references)
		//IL_11ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_11b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_11bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_11c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_11f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_11f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_1205: Unknown result type (might be due to invalid IL or missing references)
		//IL_120a: Unknown result type (might be due to invalid IL or missing references)
		//IL_1237: Unknown result type (might be due to invalid IL or missing references)
		//IL_123c: Unknown result type (might be due to invalid IL or missing references)
		//IL_124b: Unknown result type (might be due to invalid IL or missing references)
		//IL_1250: Unknown result type (might be due to invalid IL or missing references)
		//IL_127d: Unknown result type (might be due to invalid IL or missing references)
		//IL_1282: Unknown result type (might be due to invalid IL or missing references)
		//IL_1291: Unknown result type (might be due to invalid IL or missing references)
		//IL_1296: Unknown result type (might be due to invalid IL or missing references)
		//IL_12c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_12c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_12d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_12dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_1303: Unknown result type (might be due to invalid IL or missing references)
		//IL_1312: Unknown result type (might be due to invalid IL or missing references)
		//IL_1317: Unknown result type (might be due to invalid IL or missing references)
		//IL_1332: Unknown result type (might be due to invalid IL or missing references)
		//IL_1341: Unknown result type (might be due to invalid IL or missing references)
		//IL_1346: Unknown result type (might be due to invalid IL or missing references)
		//IL_1361: Unknown result type (might be due to invalid IL or missing references)
		//IL_1370: Unknown result type (might be due to invalid IL or missing references)
		//IL_1375: Unknown result type (might be due to invalid IL or missing references)
		//IL_1390: Unknown result type (might be due to invalid IL or missing references)
		//IL_139f: Unknown result type (might be due to invalid IL or missing references)
		//IL_13a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_13bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_13ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_13d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_13ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_13fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_1402: Unknown result type (might be due to invalid IL or missing references)
		//IL_141d: Unknown result type (might be due to invalid IL or missing references)
		//IL_142c: Unknown result type (might be due to invalid IL or missing references)
		//IL_1431: Unknown result type (might be due to invalid IL or missing references)
		//IL_047b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0494: Unknown result type (might be due to invalid IL or missing references)
		//IL_049b: Expected O, but got Unknown
		//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d5: Expected O, but got Unknown
		//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0565: Unknown result type (might be due to invalid IL or missing references)
		//IL_056a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0351: Unknown result type (might be due to invalid IL or missing references)
		//IL_035b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0607: Unknown result type (might be due to invalid IL or missing references)
		//IL_062a: Unknown result type (might be due to invalid IL or missing references)
		//IL_062f: Unknown result type (might be due to invalid IL or missing references)
		//IL_064f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0659: Expected O, but got Unknown
		//IL_069f: Unknown result type (might be due to invalid IL or missing references)
		//IL_06a9: Expected O, but got Unknown
		//IL_06b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d0: Expected O, but got Unknown
		//IL_0713: Unknown result type (might be due to invalid IL or missing references)
		//IL_071a: Expected O, but got Unknown
		//IL_0753: Unknown result type (might be due to invalid IL or missing references)
		//IL_075d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0772: Unknown result type (might be due to invalid IL or missing references)
		//IL_077c: Expected O, but got Unknown
		//IL_07e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0840: Unknown result type (might be due to invalid IL or missing references)
		//IL_0845: Unknown result type (might be due to invalid IL or missing references)
		//IL_0854: Unknown result type (might be due to invalid IL or missing references)
		//IL_0859: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_091e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0928: Unknown result type (might be due to invalid IL or missing references)
		//IL_0941: Unknown result type (might be due to invalid IL or missing references)
		//IL_0948: Expected O, but got Unknown
		//IL_0969: Unknown result type (might be due to invalid IL or missing references)
		//IL_0970: Expected O, but got Unknown
		//IL_0982: Unknown result type (might be due to invalid IL or missing references)
		//IL_0987: Unknown result type (might be due to invalid IL or missing references)
		//IL_09ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_09b2: Expected O, but got Unknown
		//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03dd: Expected O, but got Unknown
		//IL_0acd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ad2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0afe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b08: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a8a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b84: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b89: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b96: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b9b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ba4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c36: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c43: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c5a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c64: Expected O, but got Unknown
		//IL_0c85: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c9a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ca1: Expected O, but got Unknown
		//IL_0ccf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0db6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e3a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ed8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fa9: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = new GameObject("dontDestroyOnLoad");
		Object.DontDestroyOnLoad((Object)(object)val);
		val.SetActive(false);
		GameObject val2 = Load<GameObject>("RoR2/DLC2/Seeker/SoulSpiralProjectile.prefab");
		if (Configs.spiralSmallHop.Value)
		{
			val2.GetComponent<ProjectileDamage>().damageType = DamageTypeCombo.op_Implicit((DamageType)262144);
		}
		if (Configs.spiralLimit.Value != 6 || Configs.spiralRadius.Value != 4.75f)
		{
			val2.AddComponent<SoulSpiralTracker>();
		}
		seekerBodyPrefab = Load<GameObject>("RoR2/DLC2/Seeker/SeekerBody.prefab");
		Utils.NewStateMachine<Idle>(seekerBodyPrefab, "Sojourn");
		seekerBodyPrefab.GetComponent<NetworkStateMachine>().stateMachines = seekerBodyPrefab.GetComponents<EntityStateMachine>();
		bool flag = false;
		if (Configs.castSecondary.Value || Configs.castSpecial.Value || Configs.sojournTimer.Value)
		{
			ContentAddition.AddEntityState<BetterSojourn>(ref flag);
			SkillDef val3 = Load<SkillDef>("RoR2/DLC2/Seeker/SeekerBodySojourn.asset");
			val3.activationState = new SerializableEntityStateType(typeof(BetterSojourn));
			val3.activationStateMachineName = "Sojourn";
		}
		if (Configs.canInterrupt.Value)
		{
			SkillDef val4 = Load<SkillDef>("RoR2/DLC2/Seeker/SeekerBodyMeditate2.asset");
			val4.interruptPriority = (InterruptPriority)1;
		}
		seekerBodyPrefab.AddComponent<SeekerTweakBehaviour>();
		if (Configs.autoCastSpiral.Value)
		{
			seekerBodyPrefab.AddComponent<AutoCastBehaviour>();
		}
		if (Configs.addAlts.Value)
		{
			noHit = DamageAPI.ReserveDamageType();
			skyBeamBeam = Instantiate("RoR2/DLC1/VoidSurvivor/VoidSurvivorBeamCorrupt.prefab", "SkyBeamBeamBeam");
			skyBeamBeam.transform.localRotation = Quaternion.Euler(-90f, 0f, 0f);
			skyBeamBeam.transform.localScale = new Vector3(4f, 4f, 1f);
			skyBeamBeam.GetComponentInChildren<Light>().color = Color.green;
			Object.Destroy((Object)(object)skyBeamBeam.GetComponent<VfxKillBehavior>());
			DestroyOnTimer component = skyBeamBeam.GetComponent<DestroyOnTimer>();
			((Behaviour)component).enabled = true;
			component.duration = 2f;
			MeshRenderer componentInChildren = skyBeamBeam.GetComponentInChildren<MeshRenderer>();
			Material val5 = new Material(((Renderer)componentInChildren).material);
			val5.SetFloat("_DstBlend", 1f);
			val5.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampEngiOffset.png"));
			Material val6 = new Material(Load<Material>("RoR2/DLC2/Seeker/matSpiritPunchSphereOpaque.mat"));
			val6.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)87, (byte)250, (byte)100, (byte)180)));
			val6.SetTextureScale("_Cloud1Tex", Vector2.one * 2f);
			val6.SetFloat("_AlphaBoost", 1f);
			val6.SetVector("_CutoffScroll", new Vector4(20f, -60f, 40f, -10f));
			((Renderer)componentInChildren).materials = (Material[])(object)new Material[2] { val5, val6 };
			ParticleSystemRenderer[] componentsInChildren = skyBeamBeam.GetComponentsInChildren<ParticleSystemRenderer>();
			foreach (ParticleSystemRenderer val7 in componentsInChildren)
			{
				string name = ((Object)val7).name;
				if (name == "Particles")
				{
					((Component)val7).transform.localScale = Vector3.one * 2f;
					((Renderer)val7).material = Load<Material>("RoR2/DLC2/Seeker/matSpiritPunchSoftRay.mat");
				}
				if (name == "Particles, Bright")
				{
					((Renderer)val7).material = Load<Material>("RoR2/DLC2/Seeker/matSpiritPunchFistTendrilsOpaque.mat");
				}
				if (name == "MuzzleRayParticles")
				{
					((Component)val7).transform.localScale = Vector3.one;
					((Renderer)val7).material = new Material(Load<Material>("RoR2/DLC1/Railgunner/matRailgunImpact.mat"));
					((Renderer)val7).material.DisableKeyword("VERTEXCOLOR");
					((Renderer)val7).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampBeetleQueen2.png"));
					((Renderer)val7).material.SetFloat("_DstBlend", 1f);
					((Renderer)val7).material.SetFloat("_Boost", 4f);
				}
			}
			skyHealingBeamBeam = Instantiate(skyBeamBeam, "SkyHealingBeamBeamBeam");
			skyHealingBeamBeam.transform.localScale = new Vector3(1f, 1f, 0.15f);
			MeshRenderer componentInChildren2 = skyHealingBeamBeam.GetComponentInChildren<MeshRenderer>();
			Material val8 = new Material(val5);
			val8.SetTexture("_Cloud1Tex", (Texture)(object)Load<Texture2D>("RoR2/DLC2/Child/texChildPrimaryStarCloud.png"));
			val8.SetTextureScale("_Cloud1Tex", Vector2.one);
			Material val9 = new Material(Load<Material>("RoR2/Base/Captain/matCaptainAirstrikeAltAreaIndicatorOuter.mat"));
			val9.SetTexture("_Cloud1Tex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/texCloudBone1.png"));
			val8.SetTextureScale("_Cloud1Tex", Vector2.one * 0.6f);
			val9.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampAntler.png"));
			val9.SetFloat("_DstBlendFloat", 1f);
			((Renderer)componentInChildren2).materials = (Material[])(object)new Material[2] { val8, val8 };
			Light componentInChildren3 = skyHealingBeamBeam.GetComponentInChildren<Light>();
			componentInChildren3.color = Color32.op_Implicit(new Color32((byte)88, byte.MaxValue, (byte)107, byte.MaxValue));
			componentInChildren3.intensity = 20f;
			componentInChildren3.range = 3f;
			Object.Destroy((Object)(object)((Component)componentInChildren3).GetComponent<ShakeEmitter>());
			ParticleSystemRenderer[] componentsInChildren2 = skyHealingBeamBeam.GetComponentsInChildren<ParticleSystemRenderer>();
			foreach (ParticleSystemRenderer val10 in componentsInChildren2)
			{
				((Component)val10).gameObject.SetActive(false);
			}
			skyBeamAreaIndicator = Instantiate("RoR2/DLC2/Seeker/UnseenHandAreaIndicator.prefab", "SkyBeamHealingAreaIndicator");
			skyBeamHealingAreaIndicator = Instantiate(skyBeamAreaIndicator, "SkyBeamHealingAreaIndicator");
			skyBeamHealingAreaIndicator.transform.localScale = Vector3.one;
			skyBeamHealingAreaIndicator.GetComponentInChildren<Light>().color = Color32.op_Implicit(new Color32((byte)88, byte.MaxValue, (byte)107, byte.MaxValue));
			MeshRenderer componentInChildren4 = skyBeamHealingAreaIndicator.GetComponentInChildren<MeshRenderer>();
			((Renderer)componentInChildren4).material = new Material(((Renderer)componentInChildren4).material);
			((Renderer)componentInChildren4).material.SetFloat("_DstBlendFloat", 1f);
			((Renderer)componentInChildren4).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampAntler.png"));
			ParticleSystemRenderer componentInChildren5 = ((Component)componentInChildren4).GetComponentInChildren<ParticleSystemRenderer>();
			((Renderer)componentInChildren5).material = new Material(((Renderer)componentInChildren5).material);
			((Renderer)componentInChildren5).material.SetColor("_TintColor", Color.green);
			allyIndicator = new GameObject("Indicator");
			allyIndicator.layer = LayerIndex.ui.intVal;
			allyIndicator.transform.parent = val.transform;
			GameObject val11 = new GameObject("IndicatorSprite", new Type[1] { typeof(SpriteRenderer) });
			val11.layer = LayerIndex.ui.intVal;
			val11.transform.parent = allyIndicator.transform;
			SpriteRenderer component2 = val11.GetComponent<SpriteRenderer>();
			((Component)component2).transform.localScale = Vector3.one * 0.04f;
			tpTargetMat = new Material(Load<Material>("RoR2/InDev/matEcho.mat"));
			tpTargetMat.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampCaptainBodyArmor.png"));
			tpTargetMat.SetTexture("_MainTex", (Texture)null);
			tpTargetMat.SetTexture("_Cloud1Tex", (Texture)null);
			tpTargetMat.SetTexture("_Cloud2Tex", (Texture)null);
			tpTargetMat.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)59, (byte)243, (byte)173, byte.MaxValue)));
			tpTargetMat.SetFloat("_FresnelPower", 2f);
			tpTargetMat.SetFloat("_ZTest", 8f);
			mantra = Utils.NewBuffDef("Mantra", stack: true, hidden: false, Assets.Load<Sprite>("buff"), Color32.op_Implicit(new Color32((byte)59, (byte)243, (byte)173, byte.MaxValue)));
			explosion = DamageAPI.ReserveDamageType();
			vehiclePrefab = Instantiate("RoR2/DLC2/Seeker/SojournVehicle/SojournVehicle.prefab", "ChillVehicle", registerNetwork: true);
			SojournVehicle component3 = vehiclePrefab.GetComponent<SojournVehicle>();
			component3.initialFlightGracePeriod = 9999f;
			component3.overlapFirePeriod = 9999f;
			component3.blastRadiusIndicators = (GameObject[])(object)new GameObject[0];
			component3.blastDamageCoefficient = 0f;
			component3.blastDamageType = DamageTypeCombo.op_Implicit((DamageType)32);
			component3.sojournOverlayPrefab = null;
			component3.detonateOnCollision = false;
			component3.startingSpeedBoost = Configs.spiritSojournBaseSpeed.Value;
			vehiclePrefab.AddComponent<VehicleTimer>();
			vehiclePrefab.GetComponent<SphereCollider>().radius = 1f;
			shieldAttachment = Instantiate("RoR2/DLC1/MajorAndMinorConstruct/MegaConstructBubbleShield.prefab", "ShieldAttachment", registerNetwork: true);
			shieldAttachment.transform.localScale = Vector3.one * 0.2f;
			Material val12 = Load<Material>("RoR2/DLC1/MajorAndMinorConstruct/matMajorConstructDefenseMatrixEdges.mat");
			Material val13 = new Material(val12);
			val13.SetTexture("_Cloud1Tex", (Texture)(object)Load<Texture2D>("RoR2/DLC2/Seeker/texSeekerLotusMask3.png"));
			Material val14 = new Material(Load<Material>("RoR2/DLC2/Seeker/matSpiritPunchSphereFresnel.mat"));
			val14.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)34, (byte)34, (byte)34, byte.MaxValue)));
			val14.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/DLC1/Common/ColorRamps/texRampConstructLaserTypeB.png"));
			Material val15 = new Material(val12);
			val15.SetTexture("_Cloud1Tex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/VFX/ParticleMasks/texAlphaGradient2Mask.png"));
			((Renderer)shieldAttachment.GetComponentInChildren<MeshRenderer>()).materials = (Material[])(object)new Material[3] { val13, val14, val15 };
			seekerBodyPrefab.AddComponent<AllyTracker>();
			beamHitEffect = Instantiate("RoR2/DLC2/Seeker/SpiritPunchOmniImpactVFX.prefab", "BeamHitEffect");
			beamHitEffect.GetComponent<EffectComponent>().soundName = "Play_SeekerTweaks_Beam_Impact";
			ContentAddition.AddEffect(beamHitEffect);
			trackingIndicator = Instantiate("RoR2/Base/Huntress/HuntressTrackingIndicator.prefab", "TrackingIndicator");
			SpriteRenderer[] componentsInChildren3 = trackingIndicator.GetComponentsInChildren<SpriteRenderer>(true);
			for (int k = 0; k < componentsInChildren3.Length; k++)
			{
				if (k != 0)
				{
					((Component)componentsInChildren3[k]).gameObject.SetActive(false);
				}
				else
				{
					componentsInChildren3[k].color = new Color(0.8549f, 0.698f, 0.3137f);
				}
			}
			Transform child = trackingIndicator.transform.GetChild(1);
			GameObject val16 = Object.Instantiate<GameObject>(((Component)componentsInChildren3[0]).gameObject, ((Component)child).transform.position, Quaternion.identity, child);
			val16.GetComponent<SpriteRenderer>().sprite = Load<Sprite>("RoR2/DLC2/Seeker/texMeditationInputCircle.png");
			val16.transform.localScale = Vector3.one * 0.15f;
			muzzleEffect = Instantiate("RoR2/DLC2/Seeker/SpiritPunchMuzzleFlashVFX.prefab", "MuzzleEffect");
			Object.Destroy((Object)(object)muzzleEffect.GetComponent<EffectComponent>());
			Object.Destroy((Object)(object)muzzleEffect.GetComponent<DestroyOnParticleEnd>());
			Object.Destroy((Object)(object)muzzleEffect.GetComponent<EffectManagerHelper>());
			Object.Destroy((Object)(object)muzzleEffect.GetComponent<VFXAttributes>());
			ParticleSystem[] comp