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 AncientScepter;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Bandit2;
using EntityStates.Croco;
using EntityStates.Merc;
using JetBrains.Annotations;
using On.EntityStates.Croco;
using On.EntityStates.Merc;
using On.RoR2;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;
[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.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("LevSkills")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("LevSkills")]
[assembly: AssemblyTitle("LevSkills")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace LevSkills;
internal class Assets
{
public static AssetBundle MainAssetBundle;
public static void PopulateAssets()
{
if ((Object)(object)MainAssetBundle == (Object)null)
{
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("LevSkills.levassets"))
{
MainAssetBundle = AssetBundle.LoadFromStream(stream);
}
}
}
}
internal class MercMdlBehaviour : MonoBehaviour
{
private ChildLocator childLocator;
private CharacterBody body;
public GameObject sword;
public GameObject backSword;
public GameObject kunai;
public GameObject dagger;
public GameObject shuriken;
private void Start()
{
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_024e: Unknown result type (might be due to invalid IL or missing references)
//IL_02f0: 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_032b: 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_0367: Unknown result type (might be due to invalid IL or missing references)
//IL_0387: Unknown result type (might be due to invalid IL or missing references)
//IL_043c: Unknown result type (might be due to invalid IL or missing references)
//IL_0461: Unknown result type (might be due to invalid IL or missing references)
//IL_0486: Unknown result type (might be due to invalid IL or missing references)
body = ((Component)this).GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.skillLocator) && Object.op_Implicit((Object)(object)body.skillLocator.primary) && Object.op_Implicit((Object)(object)body.skillLocator.secondary) && Object.op_Implicit((Object)(object)body.skillLocator.special) && Object.op_Implicit((Object)(object)body.modelLocator) && Object.op_Implicit((Object)(object)body.modelLocator.modelTransform))
{
if (Object.op_Implicit((Object)(object)body.skillLocator.primary.skillDef) && body.skillLocator.primary.skillDef.skillNameToken == "MERC_DRG_ALT_M1")
{
childLocator = ((Component)body.modelLocator.modelTransform).GetComponent<ChildLocator>();
sword = ((Component)body.modelLocator.modelTransform.Find("MercSwordMesh")).gameObject;
sword.SetActive(false);
backSword = Object.Instantiate<GameObject>(Prefabs.sword);
backSword.transform.SetParent(childLocator.FindChild("Chest"));
backSword.transform.localPosition = new Vector3(0.15f, 0.5f, -0.21f);
backSword.transform.localRotation = Quaternion.Euler(95f, 250f, 180f);
kunai = Object.Instantiate<GameObject>(Prefabs.kunai);
kunai.transform.SetParent(childLocator.FindChild("HandL"));
kunai.transform.localPosition = new Vector3(0.03f, 0.12f, 0f);
kunai.transform.localRotation = Quaternion.Euler(5f, 85f, 90f);
kunai.transform.localScale = new Vector3(0.5f, 0.5f, -0.5f);
}
if (Object.op_Implicit((Object)(object)body.skillLocator.secondary.skillDef) && body.skillLocator.secondary.skillDef.skillNameToken == "MERC_DRG_ALT_M2")
{
shuriken = Object.Instantiate<GameObject>(Prefabs.shuriken);
shuriken.transform.SetParent(childLocator.FindChild("Chest"));
shuriken.transform.localPosition = new Vector3(-0.2f, 0.12f, -0.2f);
shuriken.transform.localRotation = Quaternion.Euler(95f, 35f, 0f);
shuriken.transform.localScale = Vector3.one * 0.45f;
Transform child = shuriken.transform.GetChild(0);
((Component)child).transform.localPosition = new Vector3(-0.1f, 0f, -0.1f);
((Component)child).transform.localRotation = Quaternion.Euler(5f, 325f, 355f);
}
if (Object.op_Implicit((Object)(object)body.skillLocator.special.skillDef) && body.skillLocator.special.skillDef.skillNameToken == "MERC_DRG_ALT_SPEC")
{
dagger = Object.Instantiate<GameObject>(Prefabs.dagger);
Object.Destroy((Object)(object)dagger.GetComponentInChildren<TrailRenderer>());
dagger.transform.SetParent(childLocator.FindChild("Pelvis"));
dagger.transform.localPosition = new Vector3(0.1f, 0.04f, 0.12f);
dagger.transform.localRotation = Quaternion.Euler(0f, 75f, 65f);
dagger.transform.localScale = new Vector3(0.45f, 0.45f, -0.45f);
}
}
else
{
Object.Destroy((Object)(object)this);
}
}
public void Swap()
{
if (Object.op_Implicit((Object)(object)kunai))
{
if (kunai.activeInHierarchy)
{
kunai.SetActive(false);
}
else
{
kunai.SetActive(true);
}
}
if (Object.op_Implicit((Object)(object)sword))
{
if (sword.activeInHierarchy)
{
sword.SetActive(false);
}
else
{
sword.SetActive(true);
}
}
if (Object.op_Implicit((Object)(object)backSword))
{
if (backSword.activeInHierarchy)
{
backSword.SetActive(false);
}
else
{
backSword.SetActive(true);
}
}
}
}
internal class MercSkillAimDef : SkillDef
{
private class InstanceData : BaseSkillInstanceData
{
public MercTracker behaviour;
}
public override BaseSkillInstanceData OnAssigned([NotNull] GenericSkill skillSlot)
{
return (BaseSkillInstanceData)(object)new InstanceData
{
behaviour = ((Component)skillSlot).GetComponent<MercTracker>()
};
}
internal static bool IsExecutable([NotNull] GenericSkill skillSlot)
{
MercTracker behaviour = ((InstanceData)(object)skillSlot.skillInstanceData).behaviour;
return Object.op_Implicit((Object)(object)((HuntressTracker)behaviour).GetTrackingTarget());
}
public override bool CanExecute([NotNull] GenericSkill skillSlot)
{
return IsExecutable(skillSlot) && ((SkillDef)this).CanExecute(skillSlot);
}
public override bool IsReady([NotNull] GenericSkill skillSlot)
{
return ((SkillDef)this).IsReady(skillSlot) && IsExecutable(skillSlot);
}
}
internal class MercTracker : HuntressTracker
{
public SkillLocator skillLocator;
public bool target => Object.op_Implicit((Object)(object)base.trackingTarget) ? true : false;
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.mercIndicator);
}
private void OnEnable()
{
((HuntressTracker)this).OnEnable();
base.maxTrackingDistance = 35f;
}
private void FixedUpdate()
{
((HuntressTracker)this).FixedUpdate();
if (!Object.op_Implicit((Object)(object)skillLocator))
{
skillLocator = ((Component)this).GetComponent<SkillLocator>();
}
if (Object.op_Implicit((Object)(object)skillLocator) && Object.op_Implicit((Object)(object)skillLocator.secondary) && Object.op_Implicit((Object)(object)skillLocator.secondary.skillDef))
{
base.indicator.active = skillLocator.secondary.skillDef.skillNameToken == "MERC_DRG_ALT_M2";
}
}
}
internal class Hook
{
internal static void Hooks()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Expected O, but got Unknown
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Expected O, but got Unknown
CharacterBody.Start += new hook_Start(CharacterBody_Start);
WhirlwindBase.OnEnter += new hook_OnEnter(WhirlwindBase_OnEnter);
WhirlwindBase.OnExit += new hook_OnExit(WhirlwindBase_OnExit);
Uppercut.OnEnter += new hook_OnEnter(Uppercut_OnEnter);
Uppercut.OnExit += new hook_OnExit(Uppercut_OnExit);
Slash.AuthorityModifyOverlapAttack += new hook_AuthorityModifyOverlapAttack(Slash_AuthorityModifyOverlapAttack);
Language.Init += new hook_Init(Language_Init);
}
private static void Language_Init(orig_Init orig)
{
orig.Invoke();
string text = "MERC_DESCRIPTION";
string @string = Language.GetString(text);
string text2 = @string + "<style=cSub>\r\n\r\n< ! > If you get enough hardlight afterburners, Mercenary can fight god.";
LanguageAPI.AddOverlay(text, text2);
}
private static void Slash_AuthorityModifyOverlapAttack(orig_AuthorityModifyOverlapAttack orig, Slash self, OverlapAttack overlapAttack)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.skillLocator) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.skillLocator.primary) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.skillLocator.primary.skillDef) && ((EntityState)self).characterBody.skillLocator.primary.skillDef.skillNameToken == "CROCO_DRG_ALT_M1_2" && self.isComboFinisher && overlapAttack != null)
{
overlapAttack.damageType = (DamageType)4096;
}
orig.Invoke(self, overlapAttack);
}
private static void Uppercut_OnEnter(orig_OnEnter orig, Uppercut self)
{
MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>();
if (Object.op_Implicit((Object)(object)component))
{
component.Swap();
}
orig.Invoke(self);
}
private static void Uppercut_OnExit(orig_OnExit orig, Uppercut self)
{
MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>();
if (Object.op_Implicit((Object)(object)component))
{
component.Swap();
}
orig.Invoke(self);
}
private static void WhirlwindBase_OnEnter(orig_OnEnter orig, WhirlwindBase self)
{
MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>();
if (Object.op_Implicit((Object)(object)component))
{
component.Swap();
}
orig.Invoke(self);
}
private static void WhirlwindBase_OnExit(orig_OnExit orig, WhirlwindBase self)
{
MercMdlBehaviour component = ((EntityState)self).gameObject.GetComponent<MercMdlBehaviour>();
if (Object.op_Implicit((Object)(object)component))
{
component.Swap();
}
orig.Invoke(self);
}
private static void CharacterBody_Start(orig_Start orig, CharacterBody self)
{
orig.Invoke(self);
}
}
[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.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Dragonyck.LeviathanSkills", "LeviathanSkills", "1.0.0")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
public class MainPlugin : BaseUnityPlugin
{
public const string MODUID = "com.Dragonyck.LeviathanSkills";
public const string MODNAME = "LeviathanSkills";
public const string VERSION = "1.0.0";
public static SkillDef scepterOverrideDef0;
public static SkillDef scepterOverrideDef1;
private ConfigEntry<bool> croco;
private void Awake()
{
//IL_0012: 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_002d: Expected O, but got Unknown
//IL_002d: Expected O, but got Unknown
croco = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Enable WIP Acrid Skills", "Enable"), false, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>()));
Assets.PopulateAssets();
Prefabs.CreatePrefabs();
AcridSetup();
MercSetup();
Hook.Hooks();
if (ModCompat.AncientScepterEnabled)
{
ModCompat.AddScepterSupport();
}
}
private void AcridSetup()
{
//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_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: 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_0147: Expected O, but got Unknown
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
//IL_0277: Unknown result type (might be due to invalid IL or missing references)
//IL_0291: Unknown result type (might be due to invalid IL or missing references)
//IL_029b: Expected O, but got Unknown
//IL_029c: Unknown result type (might be due to invalid IL or missing references)
//IL_029e: 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_02b0: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoBody.prefab").WaitForCompletion();
if (Object.op_Implicit((Object)(object)val) && croco.Value)
{
SkillLocator component = val.GetComponent<SkillLocator>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.primary) && Object.op_Implicit((Object)(object)component.secondary))
{
LanguageAPI.Add("CROCO_DRG_ALT_M1_2", "Envenomed Claws");
LanguageAPI.Add("CROCO_DRG_ALT_M1_DESCRIPTION_2", "Perform a slower three hit combo for <style=cIsDamage>800% damage</style> that applies <style=cIsHealing>poison</style> on the last hit.");
SkillDef val2 = Object.Instantiate<SkillDef>(Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoSlash.asset").WaitForCompletion());
val2.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("crocoBite");
val2.skillDescriptionToken = "CROCO_DRG_ALT_M1_DESCRIPTION_2";
val2.skillName = "CROCO_DRG_ALT_M1_2";
val2.skillNameToken = "CROCO_DRG_ALT_M1_2";
val2.cancelSprintingOnActivation = true;
ContentAddition.AddSkillDef(val2);
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
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
SkillFamily skillFamily2 = component.secondary.skillFamily;
LanguageAPI.Add("CROCO_DRG_ALT_M1", "Toxic Slam");
LanguageAPI.Add("CROCO_DRG_ALT_M1_DESCRIPTION", "<style=cIsDamage>Charge</style> up a radial slam for <style=cIsDamage>200-650% damage</style> that <style=cIsHealing>poisons</style> everything it hits, and at full charge leaves a poisonous puddle.");
val2 = ScriptableObject.CreateInstance<SkillDef>();
val2.activationStateMachineName = "Weapon";
val2.activationState = new SerializableEntityStateType(typeof(BaseCrocoCharge));
val2.baseMaxStock = 0;
val2.baseRechargeInterval = 0f;
val2.beginSkillCooldownOnSkillEnd = true;
val2.canceledFromSprinting = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)0;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.cancelSprintingOnActivation = true;
val2.rechargeStock = 0;
val2.requiredStock = 0;
val2.stockToConsume = 0;
val2.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("crocoSwipe");
val2.skillDescriptionToken = "CROCO_DRG_ALT_M1_DESCRIPTION";
val2.skillName = "CROCO_DRG_ALT_M1";
val2.skillNameToken = "CROCO_DRG_ALT_M1";
ContentAddition.AddSkillDef(val2);
Array.Resize(ref skillFamily2.variants, skillFamily2.variants.Length + 1);
Variant[] variants2 = skillFamily2.variants;
int num2 = skillFamily2.variants.Length - 1;
val3 = new Variant
{
skillDef = val2
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants2[num2] = val3;
bool flag = false;
ContentAddition.AddEntityState<BaseCrocoCharge>(ref flag);
ContentAddition.AddEntityState<SlashCrocoCharge>(ref flag);
ContentAddition.AddEntityState<EndSlashCrocoCharge>(ref flag);
}
}
}
private void MercSetup()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: 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_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_019f: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Expected O, but got Unknown
//IL_01c4: 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_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_022b: Unknown result type (might be due to invalid IL or missing references)
//IL_0230: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: 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_0343: Unknown result type (might be due to invalid IL or missing references)
//IL_034d: Expected O, but got Unknown
//IL_034e: Unknown result type (might be due to invalid IL or missing references)
//IL_0350: Unknown result type (might be due to invalid IL or missing references)
//IL_035a: Unknown result type (might be due to invalid IL or missing references)
//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
//IL_04d7: Expected O, but got Unknown
//IL_04d8: Unknown result type (might be due to invalid IL or missing references)
//IL_04da: Unknown result type (might be due to invalid IL or missing references)
//IL_04e4: Unknown result type (might be due to invalid IL or missing references)
//IL_0568: Unknown result type (might be due to invalid IL or missing references)
//IL_056d: Unknown result type (might be due to invalid IL or missing references)
//IL_05b3: Unknown result type (might be due to invalid IL or missing references)
//IL_069c: Unknown result type (might be due to invalid IL or missing references)
//IL_06bc: Unknown result type (might be due to invalid IL or missing references)
//IL_06c6: Expected O, but got Unknown
//IL_06c7: Unknown result type (might be due to invalid IL or missing references)
//IL_06c9: Unknown result type (might be due to invalid IL or missing references)
//IL_06f6: Unknown result type (might be due to invalid IL or missing references)
//IL_06fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0741: Unknown result type (might be due to invalid IL or missing references)
//IL_07f6: Unknown result type (might be due to invalid IL or missing references)
//IL_07fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0806: Unknown result type (might be due to invalid IL or missing references)
//IL_080e: Unknown result type (might be due to invalid IL or missing references)
OrbAPI.AddOrb<MercOrb>();
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercBody.prefab").WaitForCompletion();
if (!Object.op_Implicit((Object)(object)val))
{
return;
}
val.AddComponent<MercMdlBehaviour>();
val.AddComponent<MercTracker>();
SkillLocator component = val.GetComponent<SkillLocator>();
if (Object.op_Implicit((Object)(object)component))
{
Variant val3;
if (Object.op_Implicit((Object)(object)component.primary))
{
LanguageAPI.Add("MERC_DRG_ALT_M1", "T125 Hardlight Blades");
LanguageAPI.Add("MERC_DRG_ALT_M1_DESCRIPTION", "Hurl three fighting knives for <style=cIsDamage>100% damage</style> each. On critical strikes, throw double.");
SkillDef val2 = ScriptableObject.CreateInstance<SkillDef>();
val2.activationStateMachineName = "Weapon";
val2.activationState = new SerializableEntityStateType(typeof(KunaiThrow));
val2.baseMaxStock = 0;
val2.baseRechargeInterval = 0f;
val2.beginSkillCooldownOnSkillEnd = true;
val2.canceledFromSprinting = false;
val2.fullRestockOnAssign = true;
val2.interruptPriority = (InterruptPriority)0;
val2.isCombatSkill = true;
val2.mustKeyPress = false;
val2.cancelSprintingOnActivation = false;
val2.rechargeStock = 0;
val2.requiredStock = 0;
val2.stockToConsume = 0;
val2.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercPrimary");
val2.skillDescriptionToken = "MERC_DRG_ALT_M1_DESCRIPTION";
val2.skillName = "MERC_DRG_ALT_M1";
val2.skillNameToken = "MERC_DRG_ALT_M1";
val2.keywordTokens = new string[1] { "KEYWORD_AGILE" };
ContentAddition.AddSkillDef(val2);
SkillFamily skillFamily = component.primary.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
val3 = new Variant
{
skillDef = val2
};
((Variant)(ref val3)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
variants[num] = val3;
bool flag = false;
ContentAddition.AddEntityState<KunaiThrow>(ref flag);
}
if (Object.op_Implicit((Object)(object)component.secondary))
{
LanguageAPI.Add("MERC_DRG_ALT_M2", "Hunter-Killer Fuma");
LanguageAPI.Add("MERC_DRG_ALT_M2_DESCRIPTION", "Throw a bouncing bladed shuriken that strikes multiple targets for <style=cIsDamage>280% damage</style>.");
MercSkillAimDef mercSkillAimDef = ScriptableObject.CreateInstance<MercSkillAimDef>();
((SkillDef)mercSkillAimDef).activationStateMachineName = "Weapon";
((SkillDef)mercSkillAimDef).activationState = new SerializableEntityStateType(typeof(SecondaryMerc));
((SkillDef)mercSkillAimDef).baseMaxStock = 1;
((SkillDef)mercSkillAimDef).baseRechargeInterval = 5f;
((SkillDef)mercSkillAimDef).beginSkillCooldownOnSkillEnd = true;
((SkillDef)mercSkillAimDef).canceledFromSprinting = false;
((SkillDef)mercSkillAimDef).fullRestockOnAssign = true;
((SkillDef)mercSkillAimDef).interruptPriority = (InterruptPriority)0;
((SkillDef)mercSkillAimDef).isCombatSkill = true;
((SkillDef)mercSkillAimDef).mustKeyPress = false;
((SkillDef)mercSkillAimDef).cancelSprintingOnActivation = false;
((SkillDef)mercSkillAimDef).rechargeStock = 1;
((SkillDef)mercSkillAimDef).requiredStock = 1;
((SkillDef)mercSkillAimDef).stockToConsume = 1;
((SkillDef)mercSkillAimDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercSecondary");
((SkillDef)mercSkillAimDef).skillDescriptionToken = "MERC_DRG_ALT_M2_DESCRIPTION";
((SkillDef)mercSkillAimDef).skillName = "MERC_DRG_ALT_M2";
((SkillDef)mercSkillAimDef).skillNameToken = "MERC_DRG_ALT_M2";
((SkillDef)mercSkillAimDef).keywordTokens = new string[1] { "KEYWORD_AGILE" };
ContentAddition.AddSkillDef((SkillDef)(object)mercSkillAimDef);
SkillFamily skillFamily2 = component.secondary.skillFamily;
Array.Resize(ref skillFamily2.variants, skillFamily2.variants.Length + 1);
Variant[] variants2 = skillFamily2.variants;
int num2 = skillFamily2.variants.Length - 1;
val3 = new Variant
{
skillDef = (SkillDef)(object)mercSkillAimDef
};
((Variant)(ref val3)).viewableNode = new Node(((SkillDef)mercSkillAimDef).skillNameToken, false, (Node)null);
variants2[num2] = val3;
bool flag2 = false;
ContentAddition.AddEntityState<SecondaryMerc>(ref flag2);
}
if (Object.op_Implicit((Object)(object)component.utility))
{
LanguageAPI.Add("MERC_DRG_ALT_UTIL", "Nanoshield Bomb");
LanguageAPI.Add("MERC_DRG_ALT_UTIL_DESCRIPTION", "Hurl a package of high-durability nanites at the ground, which use their brief battery power to render you and nearby allies <style=cIsUtility>invulnerable</style> for a short period.");
SkillDef val4 = ScriptableObject.CreateInstance<SkillDef>();
val4.activationStateMachineName = "Weapon";
val4.activationState = new SerializableEntityStateType(typeof(UtilityMerc));
val4.baseMaxStock = 1;
val4.baseRechargeInterval = 3f;
val4.beginSkillCooldownOnSkillEnd = true;
val4.canceledFromSprinting = false;
val4.fullRestockOnAssign = true;
val4.interruptPriority = (InterruptPriority)0;
val4.isCombatSkill = true;
val4.mustKeyPress = false;
val4.cancelSprintingOnActivation = false;
val4.rechargeStock = 1;
val4.requiredStock = 1;
val4.stockToConsume = 1;
val4.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercUtil");
val4.skillDescriptionToken = "MERC_DRG_ALT_UTIL_DESCRIPTION";
val4.skillName = "MERC_DRG_ALT_UTIL";
val4.skillNameToken = "MERC_DRG_ALT_UTIL";
val4.keywordTokens = new string[1] { "KEYWORD_AGILE" };
ContentAddition.AddSkillDef(val4);
SkillFamily skillFamily3 = component.utility.skillFamily;
Array.Resize(ref skillFamily3.variants, skillFamily3.variants.Length + 1);
Variant[] variants3 = skillFamily3.variants;
int num3 = skillFamily3.variants.Length - 1;
val3 = new Variant
{
skillDef = val4
};
((Variant)(ref val3)).viewableNode = new Node(val4.skillNameToken, false, (Node)null);
variants3[num3] = val3;
bool flag3 = false;
ContentAddition.AddEntityState<UtilityMerc>(ref flag3);
}
if (Object.op_Implicit((Object)(object)component.special))
{
LanguageAPI.Add("MERC_DRG_ALT_SPEC", "Detonator Spikes");
LanguageAPI.Add("MERC_DRG_ALT_SPEC_DESCRIPTION", "Hurl a Barrage of impact activated explosive knives for <style=cIsDamage>600% damage</style>.");
LanguageAPI.Add("MERC_DRG_ALT_SPEC_ITEM", "C40 Detonator Spikes");
LanguageAPI.Add("MERC_DRG_ALT_SPEC_DESCRIPTION_ITEM", "Hurl a smaller Barrage of impact activated explosive knives for <style=cIsDamage>450% damage</style>. Hold up to three <style=cIsDamage>charges</style>.");
scepterOverrideDef0 = ScriptableObject.CreateInstance<SkillDef>();
scepterOverrideDef0.activationStateMachineName = "Body";
scepterOverrideDef0.activationState = new SerializableEntityStateType(typeof(SpecialMerc));
scepterOverrideDef0.baseMaxStock = 1;
scepterOverrideDef0.baseRechargeInterval = 5f;
scepterOverrideDef0.beginSkillCooldownOnSkillEnd = true;
scepterOverrideDef0.canceledFromSprinting = false;
scepterOverrideDef0.fullRestockOnAssign = true;
scepterOverrideDef0.interruptPriority = (InterruptPriority)0;
scepterOverrideDef0.isCombatSkill = true;
scepterOverrideDef0.mustKeyPress = false;
scepterOverrideDef0.cancelSprintingOnActivation = false;
scepterOverrideDef0.rechargeStock = 1;
scepterOverrideDef0.requiredStock = 1;
scepterOverrideDef0.stockToConsume = 1;
scepterOverrideDef0.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial");
scepterOverrideDef0.skillDescriptionToken = "MERC_DRG_ALT_SPEC_DESCRIPTION";
scepterOverrideDef0.skillName = "MERC_DRG_ALT_SPEC";
scepterOverrideDef0.skillNameToken = "MERC_DRG_ALT_SPEC";
scepterOverrideDef0.keywordTokens = new string[1] { "KEYWORD_AGILE" };
ContentAddition.AddSkillDef(scepterOverrideDef0);
SkillFamily skillFamily4 = component.special.skillFamily;
Array.Resize(ref skillFamily4.variants, skillFamily4.variants.Length + 1);
Variant[] variants4 = skillFamily4.variants;
int num4 = skillFamily4.variants.Length - 1;
val3 = new Variant
{
skillDef = scepterOverrideDef0
};
((Variant)(ref val3)).viewableNode = new Node(scepterOverrideDef0.skillNameToken, false, (Node)null);
variants4[num4] = val3;
scepterOverrideDef1 = ScriptableObject.CreateInstance<SkillDef>();
scepterOverrideDef1.activationStateMachineName = "Body";
scepterOverrideDef1.activationState = new SerializableEntityStateType(typeof(ItemSpecialMerc));
scepterOverrideDef1.baseMaxStock = 3;
scepterOverrideDef1.baseRechargeInterval = 5f;
scepterOverrideDef1.beginSkillCooldownOnSkillEnd = true;
scepterOverrideDef1.canceledFromSprinting = false;
scepterOverrideDef1.fullRestockOnAssign = true;
scepterOverrideDef1.interruptPriority = (InterruptPriority)0;
scepterOverrideDef1.isCombatSkill = true;
scepterOverrideDef1.mustKeyPress = false;
scepterOverrideDef1.cancelSprintingOnActivation = false;
scepterOverrideDef1.rechargeStock = 1;
scepterOverrideDef1.requiredStock = 1;
scepterOverrideDef1.stockToConsume = 1;
scepterOverrideDef0.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("mercSpecial");
scepterOverrideDef1.skillDescriptionToken = "MERC_DRG_ALT_SPEC_DESCRIPTION_ITEM";
scepterOverrideDef1.skillName = "MERC_DRG_ALT_SPEC_ITEM";
scepterOverrideDef1.skillNameToken = "MERC_DRG_ALT_SPEC_ITEM";
scepterOverrideDef1.keywordTokens = new string[1] { "KEYWORD_AGILE" };
ContentAddition.AddSkillDef(scepterOverrideDef1);
bool flag4 = false;
ContentAddition.AddEntityState<SpecialMerc>(ref flag4);
ContentAddition.AddEntityState<SpecialMercFire>(ref flag4);
ContentAddition.AddEntityState<ItemSpecialMerc>(ref flag4);
ContentAddition.AddEntityState<ItemSpecialMercFire>(ref flag4);
}
}
}
}
public static class ModCompat
{
private static bool? ancientEnabled;
public static bool AncientScepterEnabled
{
get
{
if (!ancientEnabled.HasValue)
{
ancientEnabled = Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter");
}
return ancientEnabled.Value;
}
}
public static void AddScepterSupport()
{
ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(MainPlugin.scepterOverrideDef0, "RahkshiBody", (SkillSlot)3, 0);
ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(MainPlugin.scepterOverrideDef1, "RahkshiBody", (SkillSlot)3, 1);
}
}
internal class Prefabs
{
internal static GameObject kunai;
internal static GameObject dagger;
internal static GameObject shuriken;
internal static GameObject sword;
internal static GameObject daggerProjectile;
internal static GameObject shurikenOrbEffect;
internal static GameObject kunaiProjectile;
internal static GameObject kunaiSlashEffect;
internal static GameObject shurikenImpactEffect;
internal static GameObject dashEffect;
internal static GameObject mercIndicator;
internal static void CreatePrefabs()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Expected O, but got Unknown
//IL_00d9: 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_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_020c: Unknown result type (might be due to invalid IL or missing references)
//IL_0240: Unknown result type (might be due to invalid IL or missing references)
//IL_0245: Unknown result type (might be due to invalid IL or missing references)
//IL_0281: Unknown result type (might be due to invalid IL or missing references)
//IL_0286: Unknown result type (might be due to invalid IL or missing references)
//IL_036a: Unknown result type (might be due to invalid IL or missing references)
//IL_036f: Unknown result type (might be due to invalid IL or missing references)
//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0469: Unknown result type (might be due to invalid IL or missing references)
//IL_046e: Unknown result type (might be due to invalid IL or missing references)
//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
//IL_052d: Unknown result type (might be due to invalid IL or missing references)
//IL_0532: Unknown result type (might be due to invalid IL or missing references)
//IL_05df: Unknown result type (might be due to invalid IL or missing references)
//IL_05e4: Unknown result type (might be due to invalid IL or missing references)
//IL_05ed: Unknown result type (might be due to invalid IL or missing references)
//IL_05f2: Unknown result type (might be due to invalid IL or missing references)
//IL_05fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0600: Unknown result type (might be due to invalid IL or missing references)
//IL_0609: Unknown result type (might be due to invalid IL or missing references)
//IL_060e: Unknown result type (might be due to invalid IL or missing references)
//IL_0694: Unknown result type (might be due to invalid IL or missing references)
//IL_0699: Unknown result type (might be due to invalid IL or missing references)
//IL_070b: Unknown result type (might be due to invalid IL or missing references)
//IL_0710: Unknown result type (might be due to invalid IL or missing references)
//IL_0726: Unknown result type (might be due to invalid IL or missing references)
//IL_0742: Unknown result type (might be due to invalid IL or missing references)
//IL_077d: Unknown result type (might be due to invalid IL or missing references)
//IL_0799: Unknown result type (might be due to invalid IL or missing references)
//IL_07b4: Unknown result type (might be due to invalid IL or missing references)
//IL_07b9: Unknown result type (might be due to invalid IL or missing references)
//IL_07de: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Assets.MainAssetBundle.LoadAsset<GameObject>("shuriken");
Material val2 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarWisp/matLunarWispBombChargeTrail.mat").WaitForCompletion());
val2.mainTexture = (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"Calm Water/DistTex.jpg").WaitForCompletion();
TrailRenderer[] componentsInChildren = val.GetComponentsInChildren<TrailRenderer>();
foreach (TrailRenderer val3 in componentsInChildren)
{
((Renderer)val3).material = val2;
}
dashEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/BrotherDashEffect.prefab").WaitForCompletion(), "SpearmanUtilityDashEffect", true);
dashEffect.AddComponent<NetworkIdentity>();
foreach (Transform item in dashEffect.transform)
{
Transform val4 = item;
val4.localRotation = new Quaternion(90f, 0f, 0f, 0f);
val4.localScale = new Vector3(0.4f, 0.4f, 0.4f);
if (!(((Object)((Component)val4).gameObject).name == "Dash"))
{
}
}
ContentAddition.AddEffect(dashEffect);
sword = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("MercSwordMesh"), "backSword", false);
((Renderer)sword.GetComponentInChildren<MeshRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Merc/matMercSword.mat").WaitForCompletion();
kunai = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("Kunaimdl"), "Kunai", false);
Assets.MainAssetBundle.LoadAsset<Material>("kunaiMat").shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion();
dagger = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("dagger"), "Dagger", false);
Assets.MainAssetBundle.LoadAsset<Material>("daggerMat").shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion();
shuriken = PrefabAPI.InstantiateClone(val, "Shuriken", false);
Assets.MainAssetBundle.LoadAsset<Material>("shurikenMat").shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion();
GameObject val5 = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("dagger"), "DaggerGhost", false);
val5.AddComponent<ProjectileGhostController>();
((Renderer)val5.GetComponentInChildren<TrailRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/Railgunner/matRailgunBeamFlashCryo.mat").WaitForCompletion();
RotateAroundAxis val6 = ((Component)val5.transform.GetChild(0)).gameObject.AddComponent<RotateAroundAxis>();
val6.speed = (Speed)2;
val6.fastRotationSpeed = 2880f;
val6.rotateAroundAxis = (RotationAxis)2;
ObjectScaleCurve val7 = val5.AddComponent<ObjectScaleCurve>();
val7.useOverallCurveOnly = true;
val7.overallCurve = AnimationCurve.Linear(0f, 0.5f, 1f, 1.4f);
val7.timeMax = 0.1f;
GameObject val8 = PrefabAPI.InstantiateClone(Assets.MainAssetBundle.LoadAsset<GameObject>("Kunaimdl"), "KunaiGhost", false);
val8.AddComponent<ProjectileGhostController>();
ObjectScaleCurve val9 = val8.AddComponent<ObjectScaleCurve>();
val9.useOverallCurveOnly = true;
val9.overallCurve = AnimationCurve.Linear(0f, 0.5f, 1f, 1.4f);
val9.timeMax = 0.1f;
kunaiProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2ShivProjectile.prefab").WaitForCompletion(), "MercKunaiProjectile", true);
kunaiProjectile.GetComponent<Rigidbody>().useGravity = false;
kunaiProjectile.GetComponent<ProjectileDamage>().damageType = (DamageType)0;
Object.Destroy((Object)(object)((Component)kunaiProjectile.transform.Find("InFlight")).gameObject);
kunaiProjectile.GetComponent<ProjectileController>().ghostPrefab = val8;
ContentAddition.AddProjectile(kunaiProjectile);
kunaiSlashEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercSwordFinisherSlash.prefab").WaitForCompletion(), "MercKunaiSlashEffect", false);
ParticleSystem[] componentsInChildren2 = kunaiSlashEffect.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem val10 in componentsInChildren2)
{
val10.scalingMode = (ParticleSystemScalingMode)0;
}
kunaiSlashEffect.GetComponent<ScaleParticleSystemDuration>().initialDuration = 0.6f;
Utils.RegisterEffect(kunaiSlashEffect, 1f);
daggerProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageFireboltBasic.prefab").WaitForCompletion(), "MercDaggerProjectile", true);
daggerProjectile.GetComponent<ProjectileController>().ghostPrefab = val5;
ProjectileImpactExplosion component = daggerProjectile.GetComponent<ProjectileImpactExplosion>();
((ProjectileExplosion)component).blastRadius = 6f;
((ProjectileExplosion)component).explosionEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispTrackingBombExplosion.prefab").WaitForCompletion();
component.impactEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispTrackingBombExplosion.prefab").WaitForCompletion();
ContentAddition.AddProjectile(daggerProjectile);
shurikenImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/OmniImpactVFXBrotherLunarShardExplosion.prefab").WaitForCompletion(), "MercShurikenImpactEffect", false);
Utils.RegisterEffect(shurikenImpactEffect, 1f, "Play_bandit2_m2_impact");
OrbEffect component2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Huntress/HuntressGlaiveOrbEffect.prefab").WaitForCompletion().GetComponent<OrbEffect>();
shurikenOrbEffect = PrefabAPI.InstantiateClone(val, "MercShurikenOrb", true);
GameObject gameObject = ((Component)shurikenOrbEffect.transform.GetChild(0)).gameObject;
RotateAroundAxis val11 = gameObject.AddComponent<RotateAroundAxis>();
val11.speed = (Speed)2;
val11.fastRotationSpeed = 720f;
val11.rotateAroundAxis = (RotationAxis)1;
ObjectScaleCurve val12 = gameObject.AddComponent<ObjectScaleCurve>();
val12.useOverallCurveOnly = true;
val12.overallCurve = AnimationCurve.Linear(0f, 0.25f, 1f, 1.2f);
val12.timeMax = 0.1f;
OrbEffect val13 = shurikenOrbEffect.AddComponent<OrbEffect>();
val13.startVelocity1 = component2.startVelocity1;
val13.startVelocity2 = component2.startVelocity2;
val13.endVelocity1 = component2.endVelocity1;
val13.endVelocity2 = component2.endVelocity2;
val13.movementCurve = component2.movementCurve;
val13.faceMovement = true;
val13.callArrivalIfTargetIsGone = false;
val13.startEffect = null;
val13.startEffectScale = 2f;
val13.startEffectCopiesRotation = false;
val13.endEffectScale = 1f;
val13.endEffectCopiesRotation = false;
val13.endEffect = shurikenImpactEffect;
shurikenOrbEffect.AddComponent<Rigidbody>();
Utils.RegisterEffect(shurikenOrbEffect, 99f, "", parentToReferencedTransform: false, positionAtReferencedTransform: false);
mercIndicator = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiMissileTrackingIndicator.prefab").WaitForCompletion(), "MercIndicator", false);
Transform[] componentsInChildren3 = mercIndicator.GetComponentsInChildren<Transform>(true);
foreach (Transform val14 in componentsInChildren3)
{
string name = ((Object)val14).name;
if (name == "Arrow")
{
((Component)val14.parent).gameObject.SetActive(true);
((Component)val14).GetComponent<SpriteRenderer>().sprite = Utils.CreateSprite(Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/MiscIcons/texOptionsArrowLeft.png").WaitForCompletion());
val14.localPosition = Vector3.zero;
val14.localRotation = Quaternion.Euler(0f, 0f, 90f);
}
if (name == "Base Core")
{
Object.Destroy((Object)(object)((Component)val14.parent).GetComponent<RotateAroundAxis>());
val14.parent.localRotation = Quaternion.identity;
val14.localRotation = Quaternion.Euler(0f, 0f, 45f);
SpriteRenderer component3 = ((Component)val14).GetComponent<SpriteRenderer>();
component3.sprite = Utils.CreateSprite(Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/UI/texUICornerTier2.png").WaitForCompletion());
component3.color = new Color(0.13725f, 1f, 0.99216f);
}
}
}
}
internal class MercOrb : Orb
{
public float speed = 66f;
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 = 35f;
public float damageCoefficientPerBounce = 1f;
public int targetsToFindPerBounce = 1;
public DamageType damageType;
private bool failedToKill;
private BullseyeSearch search;
public override void Begin()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: 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_0033: Expected O, but got Unknown
((Orb)this).Begin();
((Orb)this).duration = 0.25f;
EffectData val = new EffectData
{
origin = base.origin,
genericFloat = ((Orb)this).duration
};
val.SetHurtBoxReference(base.target);
EffectManager.SpawnEffect(Prefabs.shurikenOrbEffect, val, true);
}
public override void OnArrival()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//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_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)
//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_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_00cc: 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_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_022e: Unknown result type (might be due to invalid IL or missing references)
//IL_0243: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_0277: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)base.target))
{
return;
}
EffectManager.SimpleEffect(Prefabs.shurikenImpactEffect, ((Component)base.target).transform.position, Quaternion.identity, true);
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 = damageType;
healthComponent.TakeDamage(val);
GlobalEventManager.instance.OnHitEnemy(val, ((Component)healthComponent).gameObject);
GlobalEventManager.instance.OnHitAll(val, ((Component)healthComponent).gameObject);
}
failedToKill |= !Object.op_Implicit((Object)(object)healthComponent) || healthComponent.alive;
if (bouncesRemaining <= 0)
{
return;
}
for (int i = 0; i < targetsToFindPerBounce; i++)
{
if (bouncedObjects != null)
{
bouncedObjects.Add(base.target.healthComponent);
}
HurtBox val2 = PickNextTarget(((Component)base.target).transform.position);
if (Object.op_Implicit((Object)(object)val2))
{
MercOrb mercOrb = new MercOrb();
mercOrb.search = search;
((Orb)mercOrb).origin = ((Component)base.target).transform.position;
((Orb)mercOrb).target = val2;
mercOrb.attacker = attacker;
mercOrb.inflictor = inflictor;
mercOrb.teamIndex = teamIndex;
mercOrb.damageValue = damageValue * damageCoefficientPerBounce;
mercOrb.bouncesRemaining = bouncesRemaining - 1;
mercOrb.isCrit = isCrit;
mercOrb.bouncedObjects = bouncedObjects;
mercOrb.procChainMask = procChainMask;
mercOrb.procCoefficient = procCoefficient;
mercOrb.damageColorIndex = damageColorIndex;
mercOrb.damageCoefficientPerBounce = damageCoefficientPerBounce;
mercOrb.speed = speed;
mercOrb.range = range;
mercOrb.damageType = damageType;
mercOrb.failedToKill = failedToKill;
OrbManager.instance.AddOrb((Orb)(object)mercOrb);
}
}
}
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;
}
}
internal class BaseCrocoCharge : BaseSkillState
{
private float duration = 1.5f;
private SlashCrocoCharge state;
public override void OnEnter()
{
((EntityState)this).characterBody.isSprinting = false;
((EntityState)this).GetModelAnimator().SetBool("isSprinting", false);
((EntityState)this).PlayAnimation("Body", "Run");
((BaseState)this).OnEnter();
((BaseState)this).StartAimMode(2f, false);
state = new SlashCrocoCharge();
((EntityState)this).PlayAnimation("Gesture, Additive", "Slash3", "Slash.playbackRate", 10f);
((EntityState)this).PlayAnimation("Gesture, Override", "Slash3", "Slash.playbackRate", 10f);
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
((EntityState)this).characterBody.isSprinting = false;
if (state != null)
{
state.charge = Mathf.Clamp(Mathf.Clamp01(((EntityState)this).fixedAge / 1.5f), 0f, 1f);
}
if ((((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) || !((EntityState)this).inputBank.skill2.down)
{
((EntityState)this).outer.SetNextState((EntityState)(object)state);
}
}
public override void OnExit()
{
((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 SlashCrocoCharge : Slash
{
public float charge = 0f;
private float blastDamageCoefficient;
public override void OnEnter()
{
//IL_002b: 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)
blastDamageCoefficient = Util.Remap(charge, 0f, 1f, 2f, 6.5f);
Slash.comboFinisherSwingEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoComboFinisherSlash.prefab").WaitForCompletion();
((BasicMeleeAttack)this).baseDuration = 0.25f;
base.hasGrantedBuff = true;
base.step = 2;
((BasicMeleeAttack)this).hitBoxGroupName = "Slash";
((BasicMeleeAttack)this).mecanimHitboxActiveParameter = "Slash.hitBoxActive";
((BasicMeleeAttack)this).hitPauseDuration = 0.07f;
((Slash)this).OnEnter();
((BaseState)this).StartAimMode(2f, false);
base.durationBeforeInterruptable = 9f;
Slash.comboFinisherDamageCoefficient = 0f;
}
public override void PlayAnimation()
{
//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_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: 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: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: 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_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00dc: 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_00e7: 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_00f8: 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_0104: 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_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)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: 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)
Vector3 footPosition = ((EntityState)this).characterBody.footPosition;
((EntityState)this).GetModelAnimator().SetFloat("Slash.playbackRate", 1f);
EffectManager.SpawnEffect(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoLeapExplosion.prefab").WaitForCompletion(), new EffectData
{
origin = footPosition,
scale = BaseLeap.blastRadius
}, false);
if (((EntityState)this).isAuthority)
{
new BlastAttack
{
attacker = ((EntityState)this).gameObject,
teamIndex = ((EntityState)this).teamComponent.teamIndex,
baseDamage = ((BaseState)this).damageStat * blastDamageCoefficient,
crit = ((BaseState)this).RollCrit(),
radius = Util.Remap(charge, 0f, 1f, 4.8f, 7.5f),
damageType = (DamageType)4096,
damageColorIndex = (DamageColorIndex)0,
falloffModel = (FalloffModel)0,
procChainMask = default(ProcChainMask),
procCoefficient = 1f,
position = ((EntityState)this).characterBody.footPosition,
impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoDiseaseImpactEffect.prefab").WaitForCompletion()),
attackerFiltering = (AttackerFiltering)0
}.Fire();
if (Util.Remap(charge, 0f, 1f, 0f, 1f) == 1f)
{
FireProjectileInfo val = default(FireProjectileInfo);
val.projectilePrefab = BaseLeap.projectilePrefab;
val.crit = ((BasicMeleeAttack)this).isCritAuthority;
val.force = 0f;
val.damage = ((BaseState)this).damageStat;
val.owner = ((EntityState)this).gameObject;
val.rotation = Quaternion.identity;
val.position = footPosition;
FireProjectileInfo val2 = val;
ProjectileManager.instance.FireProjectile(val2);
}
}
}
public override void AuthorityOnFinish()
{
((EntityState)this).outer.SetNextState((EntityState)(object)new EndSlashCrocoCharge());
}
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 EndSlashCrocoCharge : BaseSkillState
{
private float duration = 0.3f;
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
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)2;
}
}
internal class KunaiThrow : BaseSkillState
{
private float duration;
private float baseDuration = 0.55f;
private float delay;
private float baseDelay = 0.1f;
private float damageCoefficient = 1f;
private bool crit;
private bool hasFired;
public override void OnEnter()
{
((BaseState)this).OnEnter();
duration = baseDuration / ((BaseState)this).attackSpeedStat;
delay = baseDelay / ((BaseState)this).attackSpeedStat;
PlayAnimation(duration);
crit = ((BaseState)this).RollCrit();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= delay && !hasFired)
{
hasFired = true;
Util.PlaySound("Play_merc_R_slicingBlades_throw", ((EntityState)this).gameObject);
FireProjectiles();
}
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
private void PlayAnimation(float duration)
{
Animator modelAnimator = ((EntityState)this).GetModelAnimator();
if (Object.op_Implicit((Object)(object)modelAnimator))
{
bool @bool = modelAnimator.GetBool("isMoving");
bool bool2 = modelAnimator.GetBool("isGrounded");
if (@bool || !bool2)
{
((EntityState)this).PlayAnimation("Gesture, Additive", "GroundLight3", "GroundLight.playbackRate", duration);
((EntityState)this).PlayAnimation("Gesture, Override", "GroundLight3", "GroundLight.playbackRate", duration);
}
else
{
((EntityState)this).PlayAnimation("FullBody, Override", "GroundLight3", "GroundLight.playbackRate", duration);
}
}
}
private void FireProjectiles()
{
//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_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: 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_007e: 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_008c: 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_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: 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_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
EffectData val = new EffectData
{
scale = 0.3f,
rotation = Quaternion.Euler(90f, 115f, 0f),
origin = ((BaseState)this).FindModelChild("GroundLight3").position
};
EffectManager.SpawnEffect(Prefabs.kunaiSlashEffect, val, false);
if (((EntityState)this).isAuthority)
{
int num = 3;
if (crit)
{
num = 6;
}
Ray aimRay = ((BaseState)this).GetAimRay();
Vector3 val2 = Vector3.Cross(Vector3.up, ((Ray)(ref aimRay)).direction);
Vector3 val3 = Vector3.Cross(((Ray)(ref aimRay)).direction, val2);
float num2 = 4f;
float num3 = num2 / (float)(num - 1);
Vector3 val4 = Quaternion.AngleAxis((0f - num2) * 0.5f, val3) * ((Ray)(ref aimRay)).direction;
Quaternion val5 = Quaternion.AngleAxis(num3, val3);
Ray val6 = default(Ray);
((Ray)(ref val6))..ctor(((Ray)(ref aimRay)).origin, val4);
for (int i = 0; i < num; i++)
{
NewProjectile(((Ray)(ref val6)).direction, aimRay);
((Ray)(ref val6)).direction = val5 * ((Ray)(ref val6)).direction;
}
}
}
private void NewProjectile(Vector3 direction, Ray aimRay)
{
//IL_000d: 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)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
ProjectileManager.instance.FireProjectile(Prefabs.kunaiProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 120f, crit, (DamageColorIndex)0, (GameObject)null, -1f);
}
public override void OnExit()
{
((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 SecondaryMerc : BaseSkillState
{
private float duration;
private float baseDuration = 0.55f;
private float delay;
private float baseDelay = 0.1f;
private float damageCoefficient = 2.8f;
private bool crit;
private bool hasFired;
private HurtBox target;
public override void OnEnter()
{
((BaseState)this).OnEnter();
duration = baseDuration / ((BaseState)this).attackSpeedStat;
delay = baseDelay / ((BaseState)this).attackSpeedStat;
PlayAnimation(duration);
crit = ((BaseState)this).RollCrit();
MercTracker component = ((EntityState)this).GetComponent<MercTracker>();
if (Object.op_Implicit((Object)(object)component))
{
target = ((HuntressTracker)component).GetTrackingTarget();
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= delay && !hasFired)
{
hasFired = true;
Util.PlaySound("Play_bandit2_m2_alt_throw", ((EntityState)this).gameObject);
FireProjectiles();
}
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
private void PlayAnimation(float duration)
{
Animator modelAnimator = ((EntityState)this).GetModelAnimator();
if (Object.op_Implicit((Object)(object)modelAnimator))
{
bool @bool = modelAnimator.GetBool("isMoving");
bool bool2 = modelAnimator.GetBool("isGrounded");
if (@bool || !bool2)
{
((EntityState)this).PlayAnimation("Gesture, Additive", "GroundLight3", "GroundLight.playbackRate", duration);
((EntityState)this).PlayAnimation("Gesture, Override", "GroundLight3", "GroundLight.playbackRate", duration);
}
else
{
((EntityState)this).PlayAnimation("FullBody, Override", "GroundLight3", "GroundLight.playbackRate", duration);
}
}
}
private void FireProjectiles()
{
//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_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: 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_0109: Unknown result type (might be due to invalid IL or missing references)
EffectData val = new EffectData
{
scale = 0.3f,
rotation = Quaternion.Euler(90f, -15f, 0f),
origin = ((BaseState)this).FindModelChild("GroundLight3").position
};
EffectManager.SpawnEffect(Prefabs.kunaiSlashEffect, val, false);
if (NetworkServer.active)
{
MercOrb mercOrb = new MercOrb();
mercOrb.damageValue = ((EntityState)this).characterBody.damage * damageCoefficient;
mercOrb.isCrit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master);
mercOrb.teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject);
mercOrb.attacker = ((EntityState)this).gameObject;
mercOrb.procCoefficient = 0.5f;
mercOrb.bouncesRemaining = 3;
mercOrb.bouncedObjects = new List<HealthComponent>();
mercOrb.damageCoefficientPerBounce = 1f;
mercOrb.procChainMask = default(ProcChainMask);
if (Object.op_Implicit((Object)(object)target))
{
((Orb)mercOrb).origin = ((EntityState)this).transform.position;
((Orb)mercOrb).target = target;
OrbManager.instance.AddOrb((Orb)(object)mercOrb);
}
}
}
public override void OnExit()
{
((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 SpecialMerc : BaseSkillState
{
private float duration = 0.25f;
private Vector3 direction;
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
//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_0019: 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_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
EffectData val = new EffectData();
val.rotation = Util.QuaternionSafeLookRotation(Vector3.up);
val.origin = ((EntityState)this).characterBody.corePosition;
val.SetHurtBoxReference(((EntityState)this).characterBody.mainHurtBox);
EffectManager.SpawnEffect(Prefabs.dashEffect, val, false);
direction = -((EntityState)this).characterDirection.forward;
((EntityState)this).PlayAnimation("FullBody, Override", "EvisPrep", "EvisPrep.playbackRate", duration);
Util.PlaySound("Play_moonBrother_phaseJump_jumpAway", ((EntityState)this).gameObject);
}
protected virtual void SetState()
{
((EntityState)this).outer.SetNextState((EntityState)(object)new SpecialMercFire());
}
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_002e: 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_0050: 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_0076: 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;
((EntityState)this).characterMotor.rootMotion = Vector3.up * (((EntityState)this).characterBody.jumpPower * 5f * Time.fixedDeltaTime) + direction * (((EntityState)this).characterBody.jumpPower * 10f * Time.fixedDeltaTime);
}
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
SetState();
}
}
public override void OnExit()
{
((EntityState)this).OnExit();
((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty");
}
}
internal class SpecialMercFire : BaseSkillState
{
private float duration;
private float baseDuration = 0.3f;
private float delay;
private float baseDelay = 0.08f;
public float damageCoefficient = 1f;
private bool crit;
private bool hasFired;
public int maxProjectilesFired = 6;
public int firedProjectiles = 0;
public override void OnEnter()
{
((BaseState)this).OnEnter();
duration = baseDuration / ((BaseState)this).attackSpeedStat;
delay = baseDelay / ((BaseState)this).attackSpeedStat;
PlayAnimation(duration);
crit = ((BaseState)this).RollCrit();
((BaseState)this).SmallHop(((EntityState)this).characterMotor, 4f);
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (firedProjectiles < maxProjectilesFired)
{
if (((EntityState)this).fixedAge >= delay && !hasFired)
{
hasFired = true;
Util.PlaySound("Play_bandit2_m2_alt_throw", ((EntityState)this).gameObject);
FireProjectiles();
}
}
else if (((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
if (((EntityState)this).fixedAge >= duration)
{
SpecialMercFire specialMercFire = new SpecialMercFire();
specialMercFire.firedProjectiles = firedProjectiles + 1;
if (((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextState((EntityState)(object)specialMercFire);
}
}
}
private void PlayAnimation(float duration)
{
Animator modelAnimator = ((EntityState)this).GetModelAnimator();
if (Object.op_Implicit((Object)(object)modelAnimator))
{
bool @bool = modelAnimator.GetBool("isMoving");
bool bool2 = modelAnimator.GetBool("isGrounded");
string text = "";
switch (RoR2Application.rng.RangeInt(1, 4))
{
case 1:
text = "GroundLight1";
break;
case 2:
text = "GroundLight2";
break;
case 3:
text = "GroundLight3";
break;
}
if (@bool || !bool2)
{
((EntityState)this).PlayCrossfade("Gesture, Additive", text, "GroundLight.playbackRate", duration, 0.05f);
((EntityState)this).PlayCrossfade("Gesture, Override", text, "GroundLight.playbackRate", duration, 0.05f);
}
else
{
((EntityState)this).PlayCrossfade("FullBody, Override", text, "GroundLight.playbackRate", duration, 0.05f);
}
}
}
private void FireProjectiles()
{
//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_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//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_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: 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)
EffectData val = new EffectData
{
scale = 0.3f,
rotation = Quaternion.Euler(90f, -15f, 0f),
origin = ((BaseState)this).FindModelChild("GroundLight3").position
};
EffectManager.SpawnEffect(GroundLight.comboSwingEffectPrefab, val, false);
if (((EntityState)this).isAuthority)
{
Ray aimRay = ((BaseState)this).GetAimRay();
float num = 5f;
float num2 = Random.Range(0f - num, num) / 2f;
float num3 = Random.Range(0f - num, num) / 2f;
Vector3 direction = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 0f, 1f, 1f, num3, num2);
NewProjectile(direction, aimRay);
}
}
private void NewProjectile(Vector3 direction, Ray aimRay)
{
//IL_000d: 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)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
ProjectileManager.instance.FireProjectile(Prefabs.daggerProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(direction), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 440f, crit, (DamageColorIndex)0, (GameObject)null, 220f);
}
public override void OnExit()
{
((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 ItemSpecialMerc : SpecialMerc
{
protected override void SetState()
{
((EntityState)this).outer.SetNextState((EntityState)(object)new ItemSpecialMercFire());
}
}
internal class ItemSpecialMercFire : SpecialMercFire
{
public override void OnEnter()
{
maxProjectilesFired = 3;
damageCoefficient = 1.5f;
base.OnEnter();
}
}
internal class UtilityMerc : BaseSkillState
{
private SphereSearch sphereSearch = new SphereSearch();
public override void OnEnter()
{
//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_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_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_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Invalid comparison between Unknown and I4
((BaseState)this).OnEnter();
((BaseState)this).SmallHop(((EntityState)this).characterMotor, 18f);
EffectManager.SimpleEffect(StealthMode.smokeBombEffectPrefab, ((EntityState)this).characterBody.footPosition, Quaternion.identity, false);
sphereSearch.origin = ((EntityState)this).characterBody.corePosition;
sphereSearch.radius = 12f;
sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
HurtBox[] hurtBoxes = sphereSearch.RefreshCandidates().OrderCandidatesByDistance().FilterCandidatesByDistinctHurtBoxEntities()
.GetHurtBoxes();
foreach (HurtBox val in hurtBoxes)
{
if (Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body) && Object.op_Implicit((Object)(object)val.healthComponent.body.teamComponent) && NetworkServer.active && (int)val.healthComponent.body.teamComponent.teamIndex == 1 && val.healthComponent.body.isPlayerControlled)
{
val.healthComponent.body.AddTimedBuff(Buffs.Cloak, 1f);
val.healthComponent.body.AddTimedBuff(Buffs.HiddenInvincibility, 1f);
}
}
Util.PlaySound(StealthMode.enterStealthSound, ((EntityState)this).gameObject);
if (((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
((EntityState)this).OnExit();
Util.PlaySound(StealthMode.exitStealthSound, ((EntityState)this).gameObject);
}
}
internal class Utils
{
internal static RendererInfo NewRendererInfo(Renderer renderer)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: 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_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
RendererInfo result = default(RendererInfo);
result.renderer = renderer;
result.defaultMaterial = renderer.material;
result.defaultShadowCastingMode = (ShadowCastingMode)1;
result.ignoreOverlays = false;
return result;
}
internal static NameTransformPair NewTransformPair(string name, Transform transform)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
NameTransformPair result = default(NameTransformPair);
result.name = name;
result.transform = transform;
return result;
}
internal static Sprite CreateSprite(Texture2D tex)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
return Sprite.Create(tex, new Rect(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height), new Vector2(0.5f, 0.5f), 128f);
}
internal static SkinDefInfo CreateNewSkinDefInfo(List<GameObject> childList, GameObject rootObject, string skinName, string objectToEnable, RendererInfo[] rendererInfos)
{
//IL_0003: 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_006b: 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_0070: 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_00e9: 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)
SkinDefInfo result = default(SkinDefInfo);
result.BaseSkins = Array.Empty<SkinDef>();
result.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
result.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
List<GameObjectActivation> list = new List<GameObjectActivation>();
foreach (GameObject child in childList)
{
GameObjectActivation val = default(GameObjectActivation);
val.gameObject = child;
val.shouldActivate = ((Object)child).name == objectToEnable;
GameObjectActivation item = val;
list.Add(item);
}
result.GameObjectActivations = list.ToArray();
result.Icon = Assets.MainAssetBundle.LoadAsset<Sprite>(objectToEnable);
result.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
result.Name = skinName;
result.NameToken = skinName;
result.RendererInfos = rendererInfos;
result.RootObject = rootObject;
result.UnlockableDef = null;
return result;
}
internal static T CopyComponent<T>(T original, GameObject destination) where T : Component
{
Type type = ((object)original).GetType();
Component val = destination.AddComponent(type);
FieldInfo[] fields = type.GetFields();
FieldInfo[] array = fields;
foreach (FieldInfo fieldInfo in array)
{
fieldInfo.SetValue(val, fieldInfo.GetValue(original));
}
return (T)(object)((val is T) ? val : null);
}
public static Sprite CreateSpriteFromTexture(Texture2D texture)
{
//IL_0025: 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)
if (Object.op_Implicit((Object)(object)texture))
{
return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), new Vector2(0.5f, 0.5f));
}
return null;
}
public static GameObject FindInActiveObjectByName(string name)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
Transform[] array = Resources.FindObjectsOfTypeAll<Transform>();
for (int i = 0; i < array.Length; i++)
{
if ((int)((Object)array[i]).hideFlags == 0 && ((Object)array[i]).name == name)
{
return ((Component)array[i]).gameObject;
}
}
return null;
}
public static GameObject CreateHitbox(string name, Transform parent, Vector3 scale)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: 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)
GameObject val = new GameObject(name);
val.transform.SetParent(parent);
val.transform.localPosition = Vector3.zero;
val.transform.localRotation = Quaternion.identity;
val.transform.localScale = scale;
HitBoxGroup val2 = ((Component)parent).gameObject.AddComponent<HitBoxGroup>();
HitBox val3 = val.AddComponent<HitBox>();
val.layer = LayerIndex.projectile.intVal;
val2.hitBoxes = (HitBox[])(object)new HitBox[1] { val3 };
val2.groupName = name;
return val;
}
internal static void RegisterEffect(GameObject effect, float duration, string soundName = "", bool parentToReferencedTransform = true, bool positionAtReferencedTransform = true)
{
//IL_0084: 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)
EffectComponent val = effect.GetComponent<EffectComponent>();
if (!Object.op_Implicit((Object)(object)val))
{
val = effect.AddComponent<EffectComponent>();
}
if (!Object.op_Implicit((Object)(object)effect.GetComponent<DestroyOnTimer>()))
{
effect.AddComponent<DestroyOnTimer>().duration = duration;
}
if (!Object.op_Implicit((Object)(object)effect.GetComponent<NetworkIdentity>()))
{
effect.AddComponent<NetworkIdentity>();
}
if (!Object.op_Implicit((Object)(object)effect.GetComponent<VFXAttributes>()))
{
effect.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2;
}
val.applyScale = true;
val.effectIndex = (EffectIndex)(-1);
val.parentToReferencedTransform = parentToReferencedTransform;
val.positionAtReferencedTransform = positionAtReferencedTransform;
val.soundName = soundName;
ContentAddition.AddEffect(effect);
}
public static Material InstantiateMaterial(Texture tex)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
Material val = Object.Instantiate<Material>(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial);
if (Object.op_Implicit((Object)(object)val))
{
val.SetColor("_Color", Color.white);
val.SetTexture("_MainTex", tex);
val.SetColor("_EmColor", Color.black);
val.SetFloat("_EmPower", 0f);
val.SetTexture("_EmTex", (Texture)null);
val.SetFloat("_NormalStrength", 1f);
val.SetTexture("_NormalTex", (Texture)null);
return val;
}
return val;
}
public static Material InstantiateMaterial(Color color, Texture tex, Color emColor, float emPower, Texture emTex, float normStr, Texture normTex)
{
//IL_0037: 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)
Material val = Object.Instantiate<Material>(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial);
if (Object.op_Implicit((Object)(object)val))
{
val.SetColor("_Color", color);
val.SetTexture("_MainTex", tex);
val.SetColor("_EmColor", emColor);
val.SetFloat("_EmPower", emPower);
val.SetTexture("_EmTex", emTex);
val.SetFloat("_NormalStrength", 1f);
val.SetTexture("_NormalTex", normTex);
return val;
}
return val;
}
public static Material FindMaterial(string name)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
Material[] array = Resources.FindObjectsOfTypeAll<Material>();
for (int i = 0; i < array.Length; i++)
{
if ((int)((Object)array[i]).hideFlags == 0 && ((Object)array[i]).name == name)
{
return array[i];
}
}
return null;
}
}