using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Seeker;
using IL.EntityStates.Seeker;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using RoR2;
using RoR2.Projectile;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("RiskySeeker")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+dfdd1c81cea4e920476c54447e92e7b901284b63")]
[assembly: AssemblyProduct("RiskySeeker")]
[assembly: AssemblyTitle("RiskySeeker")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
}
namespace R2API.Utils
{
[AttributeUsage(AttributeTargets.Assembly)]
public class ManualNetworkRegistrationAttribute : Attribute
{
}
}
namespace RiskySeeker
{
[BepInPlugin("com.RiskyLives.RiskySeeker", "RiskySeeker", "1.0.2")]
public class RiskySeeker : BaseUnityPlugin
{
public static class ConfigOptions
{
public static bool buffSpiritPunch;
public static bool buffUnseenHand;
public static bool buffMeditate;
}
private static GameObject cleanseEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Seeker/SpiritPunchMuzzleFlashVFX.prefab").WaitForCompletion();
private void Awake()
{
ReadConfig();
BuffSpiritPunch();
BuffUnseenHand();
BuffMeditate();
}
private void ReadConfig()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
//IL_002c: Expected O, but got Unknown
//IL_0046: 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_0061: Expected O, but got Unknown
//IL_0061: Expected O, but got Unknown
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
//IL_0096: Expected O, but got Unknown
ConfigOptions.buffSpiritPunch = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Settings", "Spirit Punch"), true, new ConfigDescription("Increase fire rate.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
ConfigOptions.buffUnseenHand = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Settings", "Unseen Hand"), true, new ConfigDescription("Damage scales with Tranquility stacks.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
ConfigOptions.buffMeditate = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Settings", "Meditate"), true, new ConfigDescription("Stun and increase damage.", (AcceptableValueBase)null, Array.Empty<object>())).Value;
}
private void BuffSpiritPunch()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
if (ConfigOptions.buffSpiritPunch)
{
SpiritPunch.OnEnter += new Manipulator(SpiritPunch_OnEnter);
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Seeker/SpiritPunchFinisherProjectile.prefab").WaitForCompletion();
ProjectileImpactExplosion component = val.GetComponent<ProjectileImpactExplosion>();
((ProjectileExplosion)component).blastProcCoefficient = 1f;
}
}
private void SpiritPunch_OnEnter(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(SpiritPunch), "baseDuration")
}))
{
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<float, SpiritPunch, float>>((Func<float, SpiritPunch, float>)((float duration, SpiritPunch self) => duration * (((int)self.gauntlet != 2) ? 0.5f : 1f)));
}
else
{
Debug.LogError((object)"RiskySeeker: Spirit Punch IL Hook failed.");
}
}
private void BuffUnseenHand()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
if (ConfigOptions.buffUnseenHand)
{
UnseenHand.FixedUpdate += new Manipulator(UnseenHand_FixedUpdate);
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Seeker/UnseenHandMovingProjectile.prefab").WaitForCompletion();
UnseenHandHealingProjectile component = val.GetComponent<UnseenHandHealingProjectile>();
component.chakraIncrease = 0f;
}
}
private void UnseenHand_FixedUpdate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(BaseState), "damageStat")
}))
{
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<float, UnseenHand, float>>((Func<float, UnseenHand, float>)delegate(float damage, UnseenHand self)
{
float num = 1f;
if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody))
{
num += (float)((EntityState)self).characterBody.GetBuffCount(Buffs.ChakraBuff) / 6f;
}
return damage * num;
});
}
else
{
Debug.LogError((object)"RiskySeeker: Unseen Hand IL Hook failed.");
}
}
private void BuffMeditate()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Expected O, but got Unknown
if (ConfigOptions.buffMeditate)
{
MeditationUI.Update += new Manipulator(MeditationUI_Update);
SetAddressableEntityStateField("RoR2/DLC2/Seeker/EntityStates.Seeker.Meditate2.asset", "damageCoefficient", "9");
Language.SetCurrentLanguage += new hook_SetCurrentLanguage(Language_SetCurrentLanguage);
SeekerController.CmdTriggerHealPulse += new hook_CmdTriggerHealPulse(SeekerController_CmdTriggerHealPulse);
}
}
private void SeekerController_CmdTriggerHealPulse(orig_CmdTriggerHealPulse orig, SeekerController self, float value, Vector3 corePosition, float blastRadius)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: 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_0104: 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_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, value, corePosition, blastRadius);
if (!NetworkServer.active)
{
return;
}
List<ProjectileController> instancesList = InstanceTracker.GetInstancesList<ProjectileController>();
List<GameObject> list = new List<GameObject>();
foreach (ProjectileController item in instancesList)
{
TeamIndex val = (TeamIndex)((!Object.op_Implicit((Object)(object)self.characterBody.teamComponent)) ? (-1) : ((int)self.characterBody.teamComponent.teamIndex));
if (!item.cannotBeDeleted && item.teamFilter.teamIndex != val)
{
Vector3 val2 = ((Component)item).transform.position - ((Component)self).transform.position;
if (!(((Vector3)(ref val2)).sqrMagnitude >= blastRadius * blastRadius))
{
list.Add(((Component)item).gameObject);
}
}
}
GameObject[] array = list.ToArray();
for (int i = 0; i < array.Length; i++)
{
EffectManager.SimpleEffect(cleanseEffect, array[i].transform.position, array[i].transform.rotation, true);
Object.Destroy((Object)(object)array[i]);
}
}
private void MeditationUI_Update(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallvirt<BlastAttack>(x, "Fire")
}))
{
val.EmitDelegate<Func<BlastAttack, BlastAttack>>((Func<BlastAttack, BlastAttack>)delegate(BlastAttack blast)
{
ref DamageType damageType = ref blast.damageType.damageType;
damageType = (DamageType)((uint)damageType | 0x20u);
return blast;
});
}
else
{
Debug.LogError((object)"RiskySeeker: Meditate IL Hook failed.");
}
}
private void Language_SetCurrentLanguage(orig_SetCurrentLanguage orig, string newCurrentLanguageName)
{
orig.Invoke(newCurrentLanguageName);
string text = Language.GetString("SEEKER_SPECIAL_DESCRIPTION", newCurrentLanguageName).Replace("450", "900");
Language.currentLanguage.SetStringByToken("SEEKER_SPECIAL_DESCRIPTION", text);
}
internal static bool SetAddressableEntityStateField(string fullEntityStatePath, string fieldName, string value)
{
//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)
EntityStateConfiguration val = Addressables.LoadAssetAsync<EntityStateConfiguration>((object)fullEntityStatePath).WaitForCompletion();
for (int i = 0; i < val.serializedFieldsCollection.serializedFields.Length; i++)
{
if (val.serializedFieldsCollection.serializedFields[i].fieldName == fieldName)
{
val.serializedFieldsCollection.serializedFields[i].fieldValue.stringValue = value;
return true;
}
}
return false;
}
}
}