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.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using EntityStates;
using EntityStates.GravekeeperBoss;
using EntityStates.Huntress;
using EntityStates.Huntress.HuntressWeapon;
using EntityStates.Huntress.Weapon;
using HuntressSkills.Skills;
using Microsoft.CodeAnalysis;
using On.EntityStates;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Orbs;
using RoR2.Skills;
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("HuntressSkills")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+054f0df2b0fd7e764e0c97a7852d70dd5cdd7801")]
[assembly: AssemblyProduct("HuntressSkills")]
[assembly: AssemblyTitle("HuntressSkills")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace HuntressSkills
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("pablest.MoreHuntressSkills", "MoreHuntressSkills", "0.7.0")]
public class HuntressSkillsPlugin : BaseUnityPlugin
{
public const string PluginGUID = "pablest.MoreHuntressSkills";
public const string PluginAuthor = "pablest";
public const string PluginName = "MoreHuntressSkills";
public const string PluginVersion = "0.7.0";
public const string DEVELOPER_PREFIX = "PBLST";
public static AssetBundle mainAssets;
public static string assetBundleFolder = "Assets";
public static string assetName = "icons";
public static PluginInfo PInfo { get; private set; }
private void Awake()
{
PInfo = ((BaseUnityPlugin)this).Info;
string text = Path.Combine(Path.GetDirectoryName(PInfo.Location), assetBundleFolder, assetName);
mainAssets = AssetBundle.LoadFromFile(text);
TranceFire.Initialize(this);
SplittingGlaive.Initialize(this);
StalkingThePrey.Initialize(this);
SwiftManeuver.Initialize(this);
}
}
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(object data)
{
_logSource.LogDebug(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
internal static void Fatal(object data)
{
_logSource.LogFatal(data);
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Message(object data)
{
_logSource.LogMessage(data);
}
internal static void Warning(object data)
{
_logSource.LogWarning(data);
}
}
internal class MyAssets
{
}
}
namespace HuntressSkills.Skills
{
public class FireHeavyArrow
{
public class HuntressTargetSkillDef : SkillDef
{
public override bool CanExecute(GenericSkill skillSlot)
{
if (((SkillDef)this).CanExecute(skillSlot))
{
CharacterBody characterBody = skillSlot.characterBody;
if (Object.op_Implicit((Object)(object)characterBody))
{
HuntressTracker component = ((Component)characterBody).GetComponent<HuntressTracker>();
return Object.op_Implicit((Object)(object)component) && (Object)(object)component.GetTrackingTarget() != (Object)null;
}
}
return false;
}
}
public class FireHeavyArrowAttack : BaseSkillState
{
public float orbDamageCoefficient = 5f;
public float orbProcCoefficient = 3f;
public float attackSpeedDamageConversion = 3f;
public float attackSpeedProcConversion = 2f;
public float fixedAttackSpeed = 1f;
[SerializeField]
public string muzzleString;
[SerializeField]
public GameObject muzzleflashEffectPrefab;
[SerializeField]
public string attackSoundString;
public float baseDuration = 1.5f;
public float baseArrowReloadDuration = 0f;
private float duration;
protected float arrowReloadTimer;
protected bool isCrit;
private int firedArrowCount = 0;
private HurtBox initialOrbTarget;
private ChildLocator childLocator;
private HuntressTracker huntressTracker;
private Animator animator;
public override void OnEnter()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
((BaseState)this).OnEnter();
FireSeekingArrow val = new FireSeekingArrow();
muzzleString = val.muzzleString;
muzzleflashEffectPrefab = val.muzzleflashEffectPrefab;
attackSoundString = val.attackSoundString;
Transform modelTransform = ((EntityState)this).GetModelTransform();
huntressTracker = ((EntityState)this).GetComponent<HuntressTracker>();
if (Object.op_Implicit((Object)(object)modelTransform))
{
childLocator = ((Component)modelTransform).GetComponent<ChildLocator>();
animator = ((Component)modelTransform).GetComponent<Animator>();
}
Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, fixedAttackSpeed);
if (Object.op_Implicit((Object)(object)huntressTracker) && ((EntityState)this).isAuthority)
{
initialOrbTarget = huntressTracker.GetTrackingTarget();
}
duration = baseDuration / fixedAttackSpeed;
arrowReloadTimer = baseArrowReloadDuration / fixedAttackSpeed;
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
((EntityState)this).characterBody.SetAimTimer(duration + 1f);
}
((EntityState)this).PlayCrossfade("Gesture, Override", "FireSeekingShot", "FireSeekingShot.playbackRate", duration, duration * 1f / fixedAttackSpeed);
((EntityState)this).PlayCrossfade("Gesture, Additive", "FireSeekingShot", "FireSeekingShot.playbackRate", duration, duration * 0.2f / fixedAttackSpeed);
isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
protected virtual GenericDamageOrb CreateArrowOrb()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
return (GenericDamageOrb)new HuntressArrowOrb();
}
private void FireOrbArrow()
{
//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_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: 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_0135: Unknown result type (might be due to invalid IL or missing references)
if (firedArrowCount < 1 && !(arrowReloadTimer > 0f) && NetworkServer.active)
{
firedArrowCount++;
float num = Math.Max(0f, attackSpeedDamageConversion * (((BaseState)this).attackSpeedStat - 1f));
float num2 = Math.Max(0f, attackSpeedProcConversion * (((BaseState)this).attackSpeedStat - 1f));
GenericDamageOrb val = CreateArrowOrb();
val.damageValue = ((EntityState)this).characterBody.damage * (orbDamageCoefficient + num);
val.damageType = DamageTypeCombo.op_Implicit((DamageType)2);
val.isCrit = isCrit;
val.teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject);
val.attacker = ((EntityState)this).gameObject;
val.procCoefficient = orbProcCoefficient + num2;
val.speed = 7f;
val.scale = 50f;
HurtBox val2 = initialOrbTarget;
if (Object.op_Implicit((Object)(object)val2))
{
Transform val3 = childLocator.FindChild(muzzleString);
EffectManager.SimpleMuzzleFlash(muzzleflashEffectPrefab, ((EntityState)this).gameObject, muzzleString, true);
((Orb)val).origin = val3.position;
((Orb)val).target = val2;
OrbManager.instance.AddOrb((Orb)(object)val);
}
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
arrowReloadTimer -= Time.fixedDeltaTime;
if (animator.GetFloat("FireSeekingShot.fire") > 0f)
{
FireOrbArrow();
}
if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
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)1;
}
}
public static void Initialize(HuntressSkillsPlugin pluginInfo)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_008b: 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_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Expected O, but got Unknown
//IL_014c: 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)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressBody.prefab").WaitForCompletion();
LanguageAPI.Add("PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_NAME", "Heavy Arrow");
LanguageAPI.Add("PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_DESCRIPTION", "Fire a boomerang for <style=cIsDamage>300% damage</style>.");
SkillDef val2 = (SkillDef)(object)ScriptableObject.CreateInstance<HuntressTargetSkillDef>();
val2.activationState = new SerializableEntityStateType(typeof(FireHeavyArrowAttack));
val2.activationStateMachineName = "Weapon";
val2.baseMaxStock = 1;
val2.baseRechargeInterval = 0f;
val2.beginSkillCooldownOnSkillEnd = false;
val2.canceledFromSprinting = false;
val2.cancelSprintingOnActivation = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)0;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.rechargeStock = 1;
val2.requiredStock = 1;
val2.stockToConsume = 1;
val2.icon = null;
val2.skillDescriptionToken = "PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_DESCRIPTION";
val2.skillName = "PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_NAME";
val2.skillNameToken = "PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_NAME";
ContentAddition.AddSkillDef(val2);
SkillLocator component = val.GetComponent<SkillLocator>();
SkillFamily skillFamily = component.primary.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val3 = new Variant
{
skillDef = val2,
unlockableName = ""
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
}
}
public class FireChargeArrow
{
public class HuntressTargetSkillDef : SkillDef
{
public override bool CanExecute(GenericSkill skillSlot)
{
if (((SkillDef)this).CanExecute(skillSlot))
{
CharacterBody characterBody = skillSlot.characterBody;
if (Object.op_Implicit((Object)(object)characterBody))
{
HuntressTracker component = ((Component)characterBody).GetComponent<HuntressTracker>();
return Object.op_Implicit((Object)(object)component) && (Object)(object)component.GetTrackingTarget() != (Object)null;
}
}
return false;
}
}
public class FireHeavyArrowAttack : BaseSkillState
{
public float orbDamageCoefficient = 5f;
public float orbProcCoefficient = 3f;
public float attackSpeedDamageConversion = 3f;
public float attackSpeedProcConversion = 2f;
public float fixedAttackSpeed = 1f;
[SerializeField]
public string muzzleString;
[SerializeField]
public GameObject muzzleflashEffectPrefab;
[SerializeField]
public string attackSoundString;
public float baseDuration = 1.5f;
public float baseArrowReloadDuration = 0f;
private float duration;
protected float arrowReloadTimer;
protected bool isCrit;
private int firedArrowCount = 0;
private HurtBox initialOrbTarget;
private ChildLocator childLocator;
private HuntressTracker huntressTracker;
private Animator animator;
public override void OnEnter()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
((BaseState)this).OnEnter();
FireSeekingArrow val = new FireSeekingArrow();
muzzleString = val.muzzleString;
muzzleflashEffectPrefab = val.muzzleflashEffectPrefab;
attackSoundString = val.attackSoundString;
Transform modelTransform = ((EntityState)this).GetModelTransform();
huntressTracker = ((EntityState)this).GetComponent<HuntressTracker>();
if (Object.op_Implicit((Object)(object)modelTransform))
{
childLocator = ((Component)modelTransform).GetComponent<ChildLocator>();
animator = ((Component)modelTransform).GetComponent<Animator>();
}
Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, fixedAttackSpeed);
if (Object.op_Implicit((Object)(object)huntressTracker) && ((EntityState)this).isAuthority)
{
initialOrbTarget = huntressTracker.GetTrackingTarget();
}
duration = baseDuration / fixedAttackSpeed;
arrowReloadTimer = baseArrowReloadDuration / fixedAttackSpeed;
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
((EntityState)this).characterBody.SetAimTimer(duration + 1f);
}
((EntityState)this).PlayCrossfade("Gesture, Override", "FireSeekingShot", "FireSeekingShot.playbackRate", duration, duration * 1f / fixedAttackSpeed);
((EntityState)this).PlayCrossfade("Gesture, Additive", "FireSeekingShot", "FireSeekingShot.playbackRate", duration, duration * 0.2f / fixedAttackSpeed);
isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
protected virtual GenericDamageOrb CreateArrowOrb()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
return (GenericDamageOrb)new HuntressArrowOrb();
}
private void FireOrbArrow()
{
//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_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: 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_0135: Unknown result type (might be due to invalid IL or missing references)
if (firedArrowCount < 1 && !(arrowReloadTimer > 0f) && NetworkServer.active)
{
firedArrowCount++;
float num = Math.Max(0f, attackSpeedDamageConversion * (((BaseState)this).attackSpeedStat - 1f));
float num2 = Math.Max(0f, attackSpeedProcConversion * (((BaseState)this).attackSpeedStat - 1f));
GenericDamageOrb val = CreateArrowOrb();
val.damageValue = ((EntityState)this).characterBody.damage * (orbDamageCoefficient + num);
val.damageType = DamageTypeCombo.op_Implicit((DamageType)2);
val.isCrit = isCrit;
val.teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject);
val.attacker = ((EntityState)this).gameObject;
val.procCoefficient = orbProcCoefficient + num2;
val.speed = 7f;
val.scale = 50f;
HurtBox val2 = initialOrbTarget;
if (Object.op_Implicit((Object)(object)val2))
{
Transform val3 = childLocator.FindChild(muzzleString);
EffectManager.SimpleMuzzleFlash(muzzleflashEffectPrefab, ((EntityState)this).gameObject, muzzleString, true);
((Orb)val).origin = val3.position;
((Orb)val).target = val2;
OrbManager.instance.AddOrb((Orb)(object)val);
}
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
arrowReloadTimer -= Time.fixedDeltaTime;
if (animator.GetFloat("FireSeekingShot.fire") > 0f)
{
FireOrbArrow();
}
if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
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)1;
}
}
public static void Initialize(HuntressSkillsPlugin pluginInfo)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_008b: 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_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Expected O, but got Unknown
//IL_014c: 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)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressBody.prefab").WaitForCompletion();
LanguageAPI.Add("PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_NAME", "Heavy Arrow");
LanguageAPI.Add("PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_DESCRIPTION", "Fire a boomerang for <style=cIsDamage>300% damage</style>.");
SkillDef val2 = (SkillDef)(object)ScriptableObject.CreateInstance<HuntressTargetSkillDef>();
val2.activationState = new SerializableEntityStateType(typeof(FireHeavyArrowAttack));
val2.activationStateMachineName = "Weapon";
val2.baseMaxStock = 1;
val2.baseRechargeInterval = 0f;
val2.beginSkillCooldownOnSkillEnd = false;
val2.canceledFromSprinting = false;
val2.cancelSprintingOnActivation = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)0;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.rechargeStock = 1;
val2.requiredStock = 1;
val2.stockToConsume = 1;
val2.icon = null;
val2.skillDescriptionToken = "PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_DESCRIPTION";
val2.skillName = "PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_NAME";
val2.skillNameToken = "PBLSTHUNTRESS_PRIMARY_FIREHEAVYARROW_NAME";
ContentAddition.AddSkillDef(val2);
SkillLocator component = val.GetComponent<SkillLocator>();
SkillFamily skillFamily = component.primary.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val3 = new Variant
{
skillDef = val2,
unlockableName = ""
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
}
}
public class SplittingGlaive
{
public class HuntressTargetSkillDef : SkillDef
{
public override bool CanExecute(GenericSkill skillSlot)
{
if (((SkillDef)this).CanExecute(skillSlot))
{
CharacterBody characterBody = skillSlot.characterBody;
if (Object.op_Implicit((Object)(object)characterBody))
{
HuntressTracker component = ((Component)characterBody).GetComponent<HuntressTracker>();
return Object.op_Implicit((Object)(object)component) && (Object)(object)component.GetTrackingTarget() != (Object)null;
}
}
return false;
}
}
public class SplittingGlaiveAttack : BaseSkillState
{
public float baseDuration = 1f;
private float duration;
public static float smallHopStrength = 1f;
public static float antigravityStrength = 20f;
public static float damageCoefficient = 4.6f;
public static float damageCoefficientPerBounce = 0.7f;
public static float glaiveProcCoefficient = 0.8f;
public static int maxBounceCount = 3;
public static float glaiveTravelSpeed = 45f;
public static float glaiveBounceRange = 30f;
public static GameObject chargePrefab = ThrowGlaive.chargePrefab;
public static GameObject muzzleFlashPrefab = ThrowGlaive.muzzleFlashPrefab;
private GameObject chargeEffect;
private Animator animator;
private float stopwatch;
private HuntressTracker huntressTracker;
private Transform modelTransform;
private HurtBox initialOrbTarget;
private ChildLocator childLocator;
private bool hasTriedToThrowGlaive = false;
private bool hasSuccessfullyThrownGlaive = false;
public override void OnEnter()
{
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
stopwatch = 0f;
duration = baseDuration / ((BaseState)this).attackSpeedStat;
modelTransform = ((EntityState)this).GetModelTransform();
animator = ((EntityState)this).GetModelAnimator();
huntressTracker = ((EntityState)this).GetComponent<HuntressTracker>();
Util.PlaySound(ThrowGlaive.attackSoundString, ((EntityState)this).gameObject);
if (Object.op_Implicit((Object)(object)huntressTracker) && ((EntityState)this).isAuthority)
{
initialOrbTarget = huntressTracker.GetTrackingTarget();
}
if (!Object.op_Implicit((Object)(object)initialOrbTarget))
{
return;
}
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && smallHopStrength != 0f)
{
((EntityState)this).characterMotor.velocity.y = smallHopStrength;
}
((EntityState)this).PlayAnimation("FullBody, Override", "ThrowGlaive", "ThrowGlaive.playbackRate", duration, 0f);
if (Object.op_Implicit((Object)(object)modelTransform))
{
childLocator = ((Component)modelTransform).GetComponent<ChildLocator>();
if (Object.op_Implicit((Object)(object)childLocator))
{
Transform val = childLocator.FindChild("HandR");
if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)chargePrefab))
{
chargeEffect = Object.Instantiate<GameObject>(chargePrefab, val.position, val.rotation);
chargeEffect.transform.parent = val;
}
}
}
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
((EntityState)this).characterBody.SetAimTimer(duration);
}
}
public override void OnExit()
{
((EntityState)this).OnExit();
if (Object.op_Implicit((Object)(object)chargeEffect))
{
EntityState.Destroy((Object)(object)chargeEffect);
}
int layerIndex = animator.GetLayerIndex("Impact");
if (layerIndex >= 0)
{
animator.SetLayerWeight(layerIndex, 1.5f);
animator.PlayInFixedTime("LightImpact", layerIndex, 0f);
}
if (!hasTriedToThrowGlaive)
{
FireOrbGlaive();
}
if (!hasSuccessfullyThrownGlaive && NetworkServer.active)
{
((EntityState)this).skillLocator.secondary.AddOneStock();
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
stopwatch += Time.fixedDeltaTime;
if (!hasTriedToThrowGlaive && animator.GetFloat("ThrowGlaive.fire") > 0f)
{
if (Object.op_Implicit((Object)(object)chargeEffect))
{
EntityState.Destroy((Object)(object)chargeEffect);
}
FireOrbGlaive();
}
((EntityState)this).characterMotor.velocity.y += antigravityStrength * Time.fixedDeltaTime * (1f - stopwatch / duration);
if (stopwatch >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
private void FireOrbGlaive()
{
//IL_0068: 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_0105: 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)
if (NetworkServer.active && !hasTriedToThrowGlaive)
{
hasTriedToThrowGlaive = true;
DividingGlaiveOrb dividingGlaiveOrb = new DividingGlaiveOrb();
dividingGlaiveOrb.damageValue = ((EntityState)this).characterBody.damage * damageCoefficient;
dividingGlaiveOrb.isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
dividingGlaiveOrb.teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject);
dividingGlaiveOrb.attacker = ((EntityState)this).gameObject;
dividingGlaiveOrb.procCoefficient = glaiveProcCoefficient;
dividingGlaiveOrb.bouncesRemaining = maxBounceCount;
dividingGlaiveOrb.speed = glaiveTravelSpeed;
dividingGlaiveOrb.bouncedObjects = new List<HealthComponent>();
dividingGlaiveOrb.range = glaiveBounceRange;
dividingGlaiveOrb.damageCoefficientPerBounce = damageCoefficientPerBounce;
HurtBox val = initialOrbTarget;
if (Object.op_Implicit((Object)(object)val))
{
hasSuccessfullyThrownGlaive = true;
Transform val2 = childLocator.FindChild("HandR");
EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, "HandR", true);
((Orb)dividingGlaiveOrb).origin = val2.position;
((Orb)dividingGlaiveOrb).target = val;
OrbManager.instance.AddOrb((Orb)(object)dividingGlaiveOrb);
}
}
}
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)1;
}
}
public class DividingGlaiveOrb : Orb
{
public float speed = 100f;
public int glaiveSplitCount = 2;
public float damageValue;
public GameObject attacker;
public GameObject inflictor;
public int bouncesRemaining;
public List<HealthComponent> bouncedObjects;
public TeamIndex teamIndex;
public bool isCrit;
public ProcChainMask procChainMask;
public float procCoefficient = 1f;
public DamageColorIndex damageColorIndex;
public float range = 40f;
public float damageCoefficientPerBounce = 0.75f;
public DamageType damageType;
private BullseyeSearch search;
public static string path = "Prefabs/Effects/OrbEffects/HuntressGlaiveOrbEffect";
public float currentReductionRatio = 1f;
public float reductionPerBounce = 0.5f;
public override void Begin()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Expected O, but got Unknown
((Orb)this).duration = 0.1f;
((Orb)this).duration = ((Orb)this).distanceToTarget / speed;
EffectData val = new EffectData
{
origin = base.origin,
genericFloat = ((Orb)this).duration,
scale = currentReductionRatio
};
val.SetHurtBoxReference(base.target);
EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>(path), val, true);
}
public override void OnArrival()
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01d6: 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_0220: Unknown result type (might be due to invalid IL or missing references)
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_023a: 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_026e: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)base.target))
{
return;
}
HealthComponent healthComponent = base.target.healthComponent;
if (Object.op_Implicit((Object)(object)healthComponent))
{
DamageInfo val = new DamageInfo();
val.damage = damageValue;
val.attacker = attacker;
val.inflictor = inflictor;
val.force = Vector3.zero;
val.crit = isCrit;
val.procChainMask = procChainMask;
val.procCoefficient = procCoefficient;
val.position = ((Component)base.target).transform.position;
val.damageColorIndex = damageColorIndex;
val.damageType = DamageTypeCombo.op_Implicit(damageType);
healthComponent.TakeDamage(val);
GlobalEventManager.instance.OnHitEnemy(val, ((Component)healthComponent).gameObject);
GlobalEventManager.instance.OnHitAll(val, ((Component)healthComponent).gameObject);
}
bool flag = !Object.op_Implicit((Object)(object)healthComponent) || healthComponent.alive;
if (bouncesRemaining <= 0)
{
return;
}
if (bouncedObjects != null)
{
bouncedObjects.Clear();
bouncedObjects.Add(base.target.healthComponent);
}
for (int i = 0; i < glaiveSplitCount; i++)
{
HurtBox val2 = PickNextTarget(((Component)base.target).transform.position);
if (Object.op_Implicit((Object)(object)val2))
{
DividingGlaiveOrb dividingGlaiveOrb = new DividingGlaiveOrb();
dividingGlaiveOrb.search = search;
((Orb)dividingGlaiveOrb).origin = ((Component)base.target).transform.position;
((Orb)dividingGlaiveOrb).target = val2;
dividingGlaiveOrb.attacker = attacker;
dividingGlaiveOrb.inflictor = inflictor;
dividingGlaiveOrb.teamIndex = teamIndex;
dividingGlaiveOrb.damageValue = damageValue * damageCoefficientPerBounce;
dividingGlaiveOrb.bouncesRemaining = bouncesRemaining - 1;
dividingGlaiveOrb.isCrit = isCrit;
dividingGlaiveOrb.bouncedObjects = bouncedObjects;
dividingGlaiveOrb.procChainMask = procChainMask;
dividingGlaiveOrb.procCoefficient = procCoefficient;
dividingGlaiveOrb.damageColorIndex = damageColorIndex;
dividingGlaiveOrb.damageCoefficientPerBounce = damageCoefficientPerBounce;
dividingGlaiveOrb.speed = speed;
dividingGlaiveOrb.range = range;
dividingGlaiveOrb.damageType = damageType;
dividingGlaiveOrb.currentReductionRatio = currentReductionRatio * reductionPerBounce;
dividingGlaiveOrb.reductionPerBounce = reductionPerBounce;
OrbManager.instance.AddOrb((Orb)(object)dividingGlaiveOrb);
}
}
}
public HurtBox PickNextTarget(Vector3 position)
{
//IL_0021: 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_002d: 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_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
if (search == null)
{
search = new BullseyeSearch();
}
search.searchOrigin = position;
search.searchDirection = Vector3.zero;
search.teamMaskFilter = TeamMask.allButNeutral;
((TeamMask)(ref search.teamMaskFilter)).RemoveTeam(teamIndex);
search.filterByLoS = false;
search.sortMode = (SortMode)1;
search.maxDistanceFilter = range;
search.RefreshCandidates();
HurtBox val = (from v in search.GetResults()
where !bouncedObjects.Contains(v.healthComponent)
select v).FirstOrDefault();
if (Object.op_Implicit((Object)(object)val))
{
bouncedObjects.Add(val.healthComponent);
}
return val;
}
}
public static void Initialize(HuntressSkillsPlugin pluginInfo)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_008b: 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)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Expected O, but got Unknown
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressBody.prefab").WaitForCompletion();
LanguageAPI.Add("PBLSTHUNTRESS_SECONDARY_SPLITTINGGLAIVE_NAME", "Splitting Glaive");
LanguageAPI.Add("PBLSTHUNTRESS_SECONDARY_SPLITTINGGLAIVE_DESCRIPTION", "Throw a boomerang for <style=cIsDamage>460% damage</style>. On hit, it splits into 2, each dealing <style=cIsDamage>70%</style> of the original damage, up to <style=cIsDamage>3</style> times.");
SkillDef val2 = (SkillDef)(object)ScriptableObject.CreateInstance<HuntressTargetSkillDef>();
val2.activationState = new SerializableEntityStateType(typeof(SplittingGlaiveAttack));
val2.activationStateMachineName = "Weapon";
val2.baseMaxStock = 1;
val2.baseRechargeInterval = 7f;
val2.beginSkillCooldownOnSkillEnd = true;
val2.canceledFromSprinting = false;
val2.cancelSprintingOnActivation = true;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)1;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.rechargeStock = 1;
val2.requiredStock = 1;
val2.stockToConsume = 1;
val2.icon = HuntressSkillsPlugin.mainAssets.LoadAsset<Sprite>("Glaive_orange");
val2.skillDescriptionToken = "PBLSTHUNTRESS_SECONDARY_SPLITTINGGLAIVE_DESCRIPTION";
val2.skillName = "PBLSTHUNTRESS_SECONDARY_SPLITTINGGLAIVE_NAME";
val2.skillNameToken = "PBLSTHUNTRESS_SECONDARY_SPLITTINGGLAIVE_NAME";
ContentAddition.AddSkillDef(val2);
SkillLocator component = val.GetComponent<SkillLocator>();
SkillFamily skillFamily = component.secondary.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val3 = new Variant
{
skillDef = val2,
unlockableName = ""
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
}
}
public class StalkingThePrey
{
public class StalkingThePreySkill : BaseSkillState
{
public static float buffDuration = 4f;
public static string enterStealthSound = "Play_bandit2_shift_enter";
public static GameObject featherEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Feather/FeatherEffect.prefab").WaitForCompletion();
private Animator animator;
public override void OnEnter()
{
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: 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_0075: Expected O, but got Unknown
((BaseState)this).OnEnter();
animator = ((EntityState)this).GetModelAnimator();
Object.op_Implicit((Object)(object)animator);
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/SprintOutOfCombat/SprintActivate.prefab").WaitForCompletion();
EffectManager.SpawnEffect(val, new EffectData
{
origin = ((EntityState)this).transform.position,
rotation = ((EntityState)this).transform.rotation
}, true);
if (NetworkServer.active)
{
((EntityState)this).characterBody.AddBuff(Buffs.Cloak);
((EntityState)this).characterBody.AddBuff(Buffs.CloakSpeed);
((EntityState)this).characterBody.AddBuff(StalkingThePreyFirstHit);
}
((EntityState)this).characterBody.onSkillActivatedAuthority += OnSkillActivatedRemoveInvis;
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
((EntityState)this).outer.SetNextStateToMain();
}
public override void OnExit()
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
((EntityState)this).OnExit();
EntityState.OnExit += new hook_OnExit(RemoveFirstHitBuff);
}
private void RemoveFirstHitBuff(orig_OnExit orig, EntityState self)
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Expected O, but got Unknown
orig.Invoke(self);
BaseState val = (BaseState)(object)((self is BaseState) ? self : null);
if (val == null)
{
return;
}
CharacterBody characterBody = self.characterBody;
if (((Object)(object)characterBody != (Object)null) & ((Object)(object)characterBody == (Object)(object)((EntityState)this).characterBody))
{
CharacterBody component = ((Component)characterBody).GetComponent<CharacterBody>();
if (NetworkServer.active && component.HasBuff(StalkingThePreyFirstHit))
{
component.RemoveBuff(StalkingThePreyFirstHit);
EntityState.OnExit -= new hook_OnExit(RemoveFirstHitBuff);
}
}
}
private void OnSkillActivatedRemoveInvis(GenericSkill skill)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
if (skill.skillDef.isCombatSkill && (Object)(object)((EntityState)this).characterBody != (Object)null)
{
EffectManager.SpawnEffect(featherEffectPrefab, new EffectData
{
origin = ((EntityState)this).transform.position,
rotation = ((EntityState)this).transform.rotation
}, true);
((EntityState)this).characterBody.RemoveBuff(Buffs.CloakSpeed);
((EntityState)this).characterBody.RemoveBuff(Buffs.Cloak);
if (((EntityState)this).characterBody.HasBuff(StalkingThePreyFirstHit))
{
((EntityState)this).characterBody.RemoveBuff(StalkingThePreyFirstHit);
}
((EntityState)this).characterBody.AddTimedBuff(PredatorFocus, buffDuration);
((EntityState)this).characterBody.onSkillActivatedAuthority -= OnSkillActivatedRemoveInvis;
}
}
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;
}
}
[CompilerGenerated]
private static class <>O
{
public static StatHookEventHandler <0>__StalkingThePreyFirstHitStatIncrease;
public static StatHookEventHandler <1>__PredatorFocusStatIncrease;
}
public static BuffDef StalkingThePreyFirstHit;
public static BuffDef PredatorFocus;
public static float PredatorFocusCritMultDamage = 0.3f;
public static float PredatorFocusCritChance = 25f;
public static void Initialize(HuntressSkillsPlugin pluginInfo)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Expected O, but got Unknown
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressBody.prefab").WaitForCompletion();
LanguageAPI.Add("PBLSTHUNTRESS_UTILITY_STALKINGTHEPREY_NAME", "Stalking The Prey");
LanguageAPI.Add("PBLSTHUNTRESS_UTILITY_STALKINGTHEPREY_DESCRIPTION", "<style=cIsUtility>Agile</style>. Become <style=cIsUtility>Invisible</style>, making your next ability <style=cIsHealth>Critical</style> and increasing movement speed until you deal damage. On use, <style=cIsHealth>increase Critical Damage by 30%</style> and gain <style=cIsHealth>25% Critical Chance</style> for 4 seconds.");
CreateBuffs();
SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
val2.activationState = new SerializableEntityStateType(typeof(StalkingThePreySkill));
val2.activationStateMachineName = "Body";
val2.baseMaxStock = 1;
val2.baseRechargeInterval = 8f;
val2.beginSkillCooldownOnSkillEnd = true;
val2.canceledFromSprinting = false;
val2.cancelSprintingOnActivation = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)1;
val2.isCombatSkill = false;
val2.mustKeyPress = false;
val2.rechargeStock = 1;
val2.requiredStock = 1;
val2.stockToConsume = 1;
val2.icon = HuntressSkillsPlugin.mainAssets.LoadAsset<Sprite>("huntress_invis");
val2.skillDescriptionToken = "PBLSTHUNTRESS_UTILITY_STALKINGTHEPREY_DESCRIPTION";
val2.skillName = "PBLSTHUNTRESS_UTILITY_STALKINGTHEPREY_NAME";
val2.skillNameToken = "PBLSTHUNTRESS_UTILITY_STALKINGTHEPREY_NAME";
ContentAddition.AddSkillDef(val2);
SkillLocator component = val.GetComponent<SkillLocator>();
SkillFamily skillFamily = component.utility.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val3 = new Variant
{
skillDef = val2,
unlockableName = ""
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
}
public static void StalkingThePreyFirstHitStatIncrease(CharacterBody characterBody, StatHookEventArgs args)
{
if (characterBody.HasBuff(StalkingThePreyFirstHit))
{
args.critAdd += 100f;
}
}
public static void PredatorFocusStatIncrease(CharacterBody characterBody, StatHookEventArgs args)
{
if (characterBody.HasBuff(PredatorFocus))
{
args.critDamageMultAdd += PredatorFocusCritMultDamage;
args.critAdd += PredatorFocusCritChance;
}
}
public static void CreateBuffs()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Expected O, but got Unknown
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Expected O, but got Unknown
StalkingThePreyFirstHit = ScriptableObject.CreateInstance<BuffDef>();
((Object)StalkingThePreyFirstHit).name = "StalkingThePrey: CritGuaranteed";
StalkingThePreyFirstHit.buffColor = new Color(255f, 255f, 255f);
StalkingThePreyFirstHit.isHidden = true;
StalkingThePreyFirstHit.canStack = false;
StalkingThePreyFirstHit.isDebuff = false;
ContentAddition.AddBuffDef(StalkingThePreyFirstHit);
object obj = <>O.<0>__StalkingThePreyFirstHitStatIncrease;
if (obj == null)
{
StatHookEventHandler val = StalkingThePreyFirstHitStatIncrease;
<>O.<0>__StalkingThePreyFirstHitStatIncrease = val;
obj = (object)val;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
PredatorFocus = ScriptableObject.CreateInstance<BuffDef>();
((Object)PredatorFocus).name = "Stalking The Prey";
PredatorFocus.buffColor = new Color(255f, 255f, 255f);
PredatorFocus.iconSprite = HuntressSkillsPlugin.mainAssets.LoadAsset<Sprite>("critBuff_orange");
PredatorFocus.isHidden = false;
PredatorFocus.canStack = false;
PredatorFocus.isDebuff = false;
ContentAddition.AddBuffDef(PredatorFocus);
object obj2 = <>O.<1>__PredatorFocusStatIncrease;
if (obj2 == null)
{
StatHookEventHandler val2 = PredatorFocusStatIncrease;
<>O.<1>__PredatorFocusStatIncrease = val2;
obj2 = (object)val2;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj2;
}
}
internal class SwiftManeuver
{
public class SwiftManeuverSkill : BaseSkillState
{
private Transform modelTransform;
public static float baseFirstBlinkDuration = 0.15f;
public static float baseShotDuration = 0.3f;
public static float baseSecondBlinkDuration = 0.15f;
public static float distanceCoefficient = 5f;
public static float damageCoefficient = 7.5f;
public static float procCoefficient = 1f;
public static float cooldownReductionOnCrit = 2f;
public static GameObject blinkPrefab = BaseBeginArrowBarrage.blinkPrefab;
public static string blinkSoundString = BaseBeginArrowBarrage.blinkSoundString;
public static string shotMuzzleString;
public static GameObject shotMuzzleEffectPrefab;
public static GameObject projectilePrefab = ArrowRain.projectilePrefab;
public static SkillDef primarySkillDef = AimArrowSnipe.primarySkillDef;
public static GameObject crosshairOverridePrefab = AimArrowSnipe.crosshairOverridePrefab;
public HuntressTracker huntressTracker;
public Vector3 blinkVector = Vector3.zero;
public float firstBlinkUpForce = 0.3f;
public float secondBlinkDownForce = 0.3f;
private float firstBlinkDuration;
public float shotDuration;
public float fsDuration;
private float secondBlinkDuration;
public float fssDuration;
public HurtBox huntressTrackerTarget;
private bool beginShot = false;
private bool beginSecondBlink = false;
public Vector3 GetUserMovVector()
{
//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_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector);
return ((Vector3)(ref val)).normalized;
}
private void CreateBlinkEffect(Vector3 origin)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
EffectData val = new EffectData();
val.rotation = Util.QuaternionSafeLookRotation(blinkVector);
val.origin = origin;
EffectManager.SpawnEffect(blinkPrefab, val, false);
}
public override void OnEnter()
{
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: 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_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: 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_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
Util.PlaySound(blinkSoundString, ((EntityState)this).gameObject);
huntressTracker = ((EntityState)this).GetComponent<HuntressTracker>();
if (Object.op_Implicit((Object)(object)huntressTracker))
{
huntressTrackerTarget = huntressTracker.GetTrackingTarget();
((Behaviour)huntressTracker).enabled = false;
}
modelTransform = ((EntityState)this).GetModelTransform();
if (Object.op_Implicit((Object)(object)modelTransform))
{
}
firstBlinkDuration = baseFirstBlinkDuration / ((BaseState)this).attackSpeedStat;
secondBlinkDuration = baseSecondBlinkDuration / ((BaseState)this).attackSpeedStat;
shotDuration = baseShotDuration / ((BaseState)this).attackSpeedStat;
fsDuration = firstBlinkDuration + shotDuration;
fssDuration = fsDuration + secondBlinkDuration;
shotMuzzleString = FireHook.muzzleString;
shotMuzzleEffectPrefab = FireHook.muzzleflashEffectPrefab;
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
{
((EntityState)this).characterMotor.velocity = Vector3.zero;
}
CharacterMotor characterMotor = ((EntityState)this).characterMotor;
characterMotor.rootMotion += Vector3.up;
Vector3 up = Vector3.up;
Vector3 val = GetUserMovVector() + up * firstBlinkUpForce;
blinkVector = ((Vector3)(ref val)).normalized;
CreateBlinkEffect(((EntityState)this).transform.position);
}
public override void FixedUpdate()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: 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_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)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).FixedUpdate();
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
{
((EntityState)this).characterMotor.velocity = Vector3.zero;
CharacterMotor characterMotor = ((EntityState)this).characterMotor;
characterMotor.rootMotion += blinkVector * (((BaseState)this).moveSpeedStat * distanceCoefficient * Time.fixedDeltaTime);
}
if (((EntityState)this).fixedAge >= firstBlinkDuration && !beginShot)
{
beginShot = true;
blinkVector = Vector3.zero;
((EntityState)this).PlayAnimation("Body", "FireArrowSnipe", "FireArrowSnipe.playbackRate", shotDuration, 0f);
SwiftShot();
}
if (((EntityState)this).fixedAge >= fsDuration && !beginSecondBlink)
{
Vector3 down = Vector3.down;
Vector3 val = GetUserMovVector() + down * secondBlinkDownForce;
blinkVector = ((Vector3)(ref val)).normalized;
CreateBlinkEffect(((EntityState)this).transform.position);
beginSecondBlink = true;
}
if (((EntityState)this).fixedAge >= fssDuration && ((EntityState)this).isAuthority)
{
((EntityState)this).PlayAnimation("Body", "FireArrowSnipe", "FireArrowSnipe.playbackRate", shotDuration, 0f);
SwiftShot();
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
CreateBlinkEffect(((EntityState)this).transform.position);
((EntityState)this).PlayAnimation("Body", "Idle");
if (Object.op_Implicit((Object)(object)huntressTracker))
{
((Behaviour)huntressTracker).enabled = true;
}
((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;
}
public void SwiftShot()
{
//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)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_0068: 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_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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_0058: 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_0061: 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_007e: 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_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_0215: Expected O, but got Unknown
Ray aimRay = ((BaseState)this).GetAimRay();
FireArrowSnipe val = new FireArrowSnipe();
Util.PlayAttackSpeedSound(((GenericBulletBaseState)val).fireSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
Vector3 val3;
if (Object.op_Implicit((Object)(object)huntressTrackerTarget))
{
Vector3 position = ((Component)huntressTrackerTarget).transform.position;
Vector3 val2 = position - ((Ray)(ref aimRay)).origin;
val3 = ((Vector3)(ref val2)).normalized;
}
else
{
val3 = ((Ray)(ref aimRay)).direction;
}
Vector3 val4 = default(Vector3);
((Vector3)(ref val4))..ctor(val3.x, 0f, ((Ray)(ref aimRay)).origin.z);
if (val4 != Vector3.zero)
{
modelTransform.forward = val4;
}
((EntityState)this).healthComponent.TakeDamageForce(((Ray)(ref aimRay)).direction * -400f, true, false);
bool flag = ((BaseState)this).RollCrit();
if (flag)
{
GenericSkill special = ((EntityState)this).characterBody.skillLocator.special;
if (special.stock < special.maxStock)
{
special.rechargeStopwatch += cooldownReductionOnCrit;
if (special.rechargeStopwatch > special.skillDef.baseRechargeInterval)
{
special.rechargeStopwatch = special.skillDef.baseRechargeInterval;
}
}
}
BulletAttack val5 = new BulletAttack
{
aimVector = val3,
origin = ((Ray)(ref aimRay)).origin,
owner = ((EntityState)this).gameObject,
weapon = null,
bulletCount = 1u,
damage = ((BaseState)this).damageStat * damageCoefficient,
damageColorIndex = (DamageColorIndex)0,
falloffModel = (FalloffModel)0,
force = 2f,
procChainMask = default(ProcChainMask),
procCoefficient = procCoefficient,
maxDistance = 1000f,
isCrit = flag,
muzzleName = ((GenericBulletBaseState)val).muzzleName,
hitEffectPrefab = ((GenericBulletBaseState)val).hitEffectPrefab,
spreadPitchScale = ((GenericBulletBaseState)val).spreadPitchScale,
spreadYawScale = ((GenericBulletBaseState)val).spreadYawScale,
tracerEffectPrefab = ((GenericBulletBaseState)val).tracerEffectPrefab
};
val5.Fire();
}
}
public static void Initialize(HuntressSkillsPlugin pluginInfo)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_008b: 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)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Expected O, but got Unknown
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressBody.prefab").WaitForCompletion();
LanguageAPI.Add("PBLSTHUNTRESS_SPECIAL_SWIFTMANEUVERSKILL_NAME", "Swift Maneuver");
LanguageAPI.Add("PBLSTHUNTRESS_SPECIAL_SWIFTMANEUVERSKILL_DESCRIPTION", "<style=cIsUtility>Agile</style>. <style=cIsUtility>Disappear</style> and <style=cIsUtility>teleport</style> a short distance, firing an arrow for <style=cIsDamage>750% damage</style>. <style=cIsUtility>Teleport</style> again and fire another arrow for <style=cIsDamage>750% damage</style>. Can store up to <style=cIsUtility>2 charges</style>. <style=cIsHealth>Critical Strikes</style> reduce cooldown by <style=cIsUtility>3 seconds</style>.");
SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
val2.activationState = new SerializableEntityStateType(typeof(SwiftManeuverSkill));
val2.activationStateMachineName = "Weapon";
val2.baseMaxStock = 2;
val2.baseRechargeInterval = 7f;
val2.beginSkillCooldownOnSkillEnd = true;
val2.canceledFromSprinting = false;
val2.cancelSprintingOnActivation = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)1;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.rechargeStock = 1;
val2.requiredStock = 1;
val2.stockToConsume = 1;
val2.icon = HuntressSkillsPlugin.mainAssets.LoadAsset<Sprite>("ballista_orange");
val2.skillDescriptionToken = "PBLSTHUNTRESS_SPECIAL_SWIFTMANEUVERSKILL_DESCRIPTION";
val2.skillName = "PBLSTHUNTRESS_SPECIAL_SWIFTMANEUVERSKILL_NAME ";
val2.skillNameToken = "PBLSTHUNTRESS_SPECIAL_SWIFTMANEUVERSKILL_NAME";
ContentAddition.AddSkillDef(val2);
SkillLocator component = val.GetComponent<SkillLocator>();
SkillFamily skillFamily = component.special.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val3 = new Variant
{
skillDef = val2,
unlockableName = ""
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
}
}
public class TranceFire
{
public class HuntressTargetSkillDef : SkillDef
{
public override bool CanExecute(GenericSkill skillSlot)
{
if (((SkillDef)this).CanExecute(skillSlot))
{
CharacterBody characterBody = skillSlot.characterBody;
if (Object.op_Implicit((Object)(object)characterBody))
{
HuntressTracker component = ((Component)characterBody).GetComponent<HuntressTracker>();
return Object.op_Implicit((Object)(object)component) && (Object)(object)component.GetTrackingTarget() != (Object)null;
}
}
return false;
}
}
public class FireHeavyArrowAttack : BaseSkillState
{
public static float orbDamageCoefficient = 1f;
public static float orbProcCoefficient = 1f;
public static float baseDuration = 0.75f;
public static float durationReductionPerBuff = 0.05f;
private static float buffDuration = 3.5f;
private static int maxBuffStack = 10;
private float duration;
protected bool isCrit;
private int firedArrowCount = 0;
private int numArrows = 1;
private HurtBox initialOrbTarget;
private HuntressTracker huntressTracker;
private Animator animator;
public override void OnEnter()
{
((BaseState)this).OnEnter();
Transform modelTransform = ((EntityState)this).GetModelTransform();
huntressTracker = ((EntityState)this).GetComponent<HuntressTracker>();
if (((EntityState)this).isAuthority && (Object)(object)huntressTracker != (Object)null)
{
initialOrbTarget = huntressTracker.GetTrackingTarget();
}
if (!Object.op_Implicit((Object)(object)modelTransform) || !Object.op_Implicit((Object)(object)initialOrbTarget))
{
return;
}
animator = ((Component)modelTransform).GetComponent<Animator>();
if (Object.op_Implicit((Object)(object)huntressTracker) || !((EntityState)this).isAuthority)
{
int buffCount = ((EntityState)this).characterBody.GetBuffCount(TranceBuff);
duration = (baseDuration - durationReductionPerBuff * (float)buffCount) / ((BaseState)this).attackSpeedStat;
if (buffCount >= maxBuffStack)
{
numArrows = 2;
}
isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
((EntityState)this).characterBody.SetAimTimer(duration + 1f);
}
((EntityState)this).PlayCrossfade("Gesture, Override", "FireSeekingShot", "FireSeekingShot.playbackRate", duration, duration);
}
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
protected virtual GenericDamageOrb CreateArrowOrb()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
return (GenericDamageOrb)new HuntressArrowOrb();
}
private void FireOrbArrow()
{
//IL_0105: 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_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_015e: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
if (firedArrowCount < numArrows && NetworkServer.active)
{
int buffCount = ((EntityState)this).characterBody.GetBuffCount(TranceBuff);
((EntityState)this).characterBody.ClearTimedBuffs(TranceBuff);
for (int i = 0; i < buffCount; i++)
{
((EntityState)this).characterBody.AddTimedBuff(TranceBuff, buffDuration, maxBuffStack);
}
if (isCrit)
{
((EntityState)this).characterBody.AddTimedBuff(TranceBuff, buffDuration, maxBuffStack);
((EntityState)this).characterBody.AddTimedBuff(TranceBuff, buffDuration, maxBuffStack);
}
else
{
((EntityState)this).characterBody.AddTimedBuff(TranceBuff, buffDuration, maxBuffStack);
}
firedArrowCount++;
GenericDamageOrb val = CreateArrowOrb();
val.damageValue = ((EntityState)this).characterBody.damage * orbDamageCoefficient;
val.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
val.isCrit = isCrit;
val.teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject);
val.attacker = ((EntityState)this).gameObject;
val.procCoefficient = orbProcCoefficient;
HurtBox val2 = initialOrbTarget;
if (Object.op_Implicit((Object)(object)val2))
{
((Orb)val).origin = ((EntityState)this).transform.position;
((Orb)val).target = val2;
OrbManager.instance.AddOrb((Orb)(object)val);
}
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (animator.GetFloat("FireSeekingShot.fire") > 0f)
{
FireOrbArrow();
}
if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
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)1;
}
}
[CompilerGenerated]
private static class <>O
{
public static hook_OnHitEnemy <0>__OnHitTranceBuffElimination;
}
public static BuffDef TranceBuff;
public static void Initialize(HuntressSkillsPlugin pluginInfo)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Expected O, but got Unknown
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressBody.prefab").WaitForCompletion();
LanguageAPI.Add("PBLSTHUNTRESS_PRIMARY_TRANCEFIRE_NAME", "Trance Fire");
LanguageAPI.Add("PBLSTHUNTRESS_PRIMARY_TRANCEFIRE_DESCRIPTION", "<style=cIsUtility>Agile</style>. Fire a seeking arrow for <style=cIsDamage>100% damage</style>. Consecutive shots without taking damage grant <style=cIsDamage>Focus</style>, increasing attack speed up to <style=cIsUtility>10</style> stacks. At max <style=cIsDamage>Focus</style>, fire <style=cIsDamage>2</style> arrows.");
SkillDef val2 = (SkillDef)(object)ScriptableObject.CreateInstance<HuntressTargetSkillDef>();
CreateBuff();
val2.activationState = new SerializableEntityStateType(typeof(FireHeavyArrowAttack));
val2.activationStateMachineName = "Weapon";
val2.baseMaxStock = 1;
val2.baseRechargeInterval = 0f;
val2.beginSkillCooldownOnSkillEnd = false;
val2.canceledFromSprinting = false;
val2.cancelSprintingOnActivation = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)0;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.rechargeStock = 1;
val2.requiredStock = 1;
val2.stockToConsume = 1;
val2.icon = HuntressSkillsPlugin.mainAssets.LoadAsset<Sprite>("strafe_orange");
val2.skillDescriptionToken = "PBLSTHUNTRESS_PRIMARY_TRANCEFIRE_DESCRIPTION";
val2.skillName = "PBLSTHUNTRESS_PRIMARY_TRANCEFIRE_NAME";
val2.skillNameToken = "PBLSTHUNTRESS_PRIMARY_TRANCEFIRE_NAME";
ContentAddition.AddSkillDef(val2);
SkillLocator component = val.GetComponent<SkillLocator>();
SkillFamily skillFamily = component.primary.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val3 = new Variant
{
skillDef = val2,
unlockableName = ""
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
}
public static void CreateBuff()
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
TranceBuff = ScriptableObject.CreateInstance<BuffDef>();
((Object)TranceBuff).name = "Huntress Focus";
TranceBuff.iconSprite = HuntressSkillsPlugin.mainAssets.LoadAsset<Sprite>("huntress_trance_buff");
TranceBuff.isHidden = false;
TranceBuff.canStack = true;
TranceBuff.isDebuff = false;
ContentAddition.AddBuffDef(TranceBuff);
object obj = <>O.<0>__OnHitTranceBuffElimination;
if (obj == null)
{
hook_OnHitEnemy val = OnHitTranceBuffElimination;
<>O.<0>__OnHitTranceBuffElimination = val;
obj = (object)val;
}
GlobalEventManager.OnHitEnemy += (hook_OnHitEnemy)obj;
}
public static void OnHitTranceBuffElimination(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
orig.Invoke(self, damageInfo, victim);
if (Object.op_Implicit((Object)(object)victim))
{
CharacterBody component = victim.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component) && component.HasBuff(TranceBuff))
{
component.ClearTimedBuffs(TranceBuff);
}
}
}
}
}