Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of QueenGlandBuff v1.6.0
plugins/QueenGlandBuff.dll
Decompiled 5 months agousing System; using System.Collections; 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.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.BeetleGuardMonster; using On.RoR2; using On.RoR2.Items; using QueenGlandBuff.Changes; using QueenGlandBuff.Modules; using QueenGlandBuff.States; using QueenGlandBuff.Utils; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Items; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; 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 = "")] [assembly: AssemblyCompany("QueenGlandBuff")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("QueenGlandBuff")] [assembly: AssemblyTitle("QueenGlandBuff")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] namespace QueenGlandBuff { public static class Configs { public static ConfigFile MainConfig; private const string Section_Queens_Gland = "Queens Gland"; private const string Section_Primary_Skill = "Primary Skill - Slam"; private const string Section_Secondary_Skill = "Secondary Skill - Sunder"; private const string Section_Special_Skill = "Special Skill - Valor"; private const string Section_Stats_Base = "Beetle Guard Ally Stats Base"; private const string Section_Stats_Level = "Beetle Guard Ally Stats Level"; private const string Section_Misc = "Misc"; public static string ConfigFolderPath => Path.Combine(Paths.ConfigPath, MainPlugin.pluginInfo.Metadata.GUID); public static void Setup() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown MainConfig = new ConfigFile(Path.Combine(ConfigFolderPath, "MainConfig.cfg"), true); Read_Queens_Gland(); Read_Primary_SKill(); Read_Secondary_SKill(); Read_Special_SKill(); Read_Beetle_Stats(); Read_Misc(); } private static void Read_Queens_Gland() { QueensGland.Enable = MainConfig.Bind<bool>("Queens Gland", "Enable Changes", true, "Enable changes to the Queens Gland item.").Value; QueensGland.MaxSummons = MainConfig.Bind<int>("Queens Gland", "Max Summons", 1, "The Max amount of Beetle Guards each player can have.").Value; QueensGland.RespawnTime = MainConfig.Bind<int>("Queens Gland", "Respawn Time", 30, "How long it takes for Beetle Guards to respawn.").Value; QueensGland.BaseHealth = MainConfig.Bind<int>("Queens Gland", "BaseHealth", 10, "Extra health at a single stack. (1 = +10%)").Value; QueensGland.StackHealth = MainConfig.Bind<int>("Queens Gland", "StackHealth", 10, "Extra Health to give per stack after capping out the max summons. (1 = +10%)").Value; QueensGland.BaseDamage = MainConfig.Bind<int>("Queens Gland", "BaseDamage", 10, "Extra damage at a single stack. (1 = +10%)").Value; QueensGland.StackDamage = MainConfig.Bind<int>("Queens Gland", "StackDamage", 20, "Extra Damage to give per stack after capping out the max summons. (1 = +10%)").Value; QueensGland.AffixMode = MainConfig.Bind<int>("Queens Gland", "Become Elite", 1, "Makes Beetle Guard Ally spawn with an Elite Affix. (0 = never, 1 = always, 2 = only during Honor)").Value; QueensGland.DefaultAffixName = MainConfig.Bind<string>("Queens Gland", "Default Elite", "EliteFireEquipment", "The Fallback equipment to give if an Elite Affix wasn't selected. (Set to None to disable)").Value; QueensGland.AffixBlackList_Raw = MainConfig.Bind<string>("Queens Gland", "Elite Blacklist", "", "List of Elite Equipment the Beetle Guard cannot select. ('EliteAurelioniteEquipment, EliteLunarEquipment' for example disables Gilded and Perfected)").Value; } private static void Read_Primary_SKill() { BeetleGuardAlly.Enable_Slam_Skill = MainConfig.Bind<bool>("Primary Skill - Slam", "Enable Slam Changes", true, "Enable changes to its Slam skill.").Value; } private static void Read_Secondary_SKill() { BeetleGuardAlly.Enable_Sunder_Skill = MainConfig.Bind<bool>("Secondary Skill - Sunder", "Enable Sunder Changes", true, "Enable changes to its Sunder skill.").Value; } private static void Read_Special_SKill() { BeetleGuardAlly.Enable_Valor_Skill = MainConfig.Bind<bool>("Special Skill - Valor", "Enable Valor Changes", true, "Enable the custom Valor skill.").Value; ValorBuff.Aggro_Range = MainConfig.Bind<float>("Special Skill - Valor", "Aggro Range", 60f, "Regular enemies within this range will aggro onto affected characters.").Value; ValorBuff.Buff_Armor = MainConfig.Bind<float>("Special Skill - Valor", "Armor", 100f, "The amount of armor the user of this buff gets.").Value; } private static void Read_Beetle_Stats() { BeetleGuardAlly.Stats_Base_Health = MainConfig.Bind<float>("Beetle Guard Ally Stats Base", "Health", 480f, "Health at level 1. (Vanilla = 480)").Value; BeetleGuardAlly.Stats_Base_Damage = MainConfig.Bind<float>("Beetle Guard Ally Stats Base", "Damage", 12f, "Damage at level 1. (Vanilla = 14)").Value; BeetleGuardAlly.Stats_Base_Regen = MainConfig.Bind<float>("Beetle Guard Ally Stats Base", "Regen", 5f, "Regen at level 1. (Vanilla = 0.6)").Value; BeetleGuardAlly.Stats_Level_Health = MainConfig.Bind<float>("Beetle Guard Ally Stats Level", "Health", 144f, "Health gained per level. (Vanilla = 144)").Value; BeetleGuardAlly.Stats_Level_Damage = MainConfig.Bind<float>("Beetle Guard Ally Stats Level", "Damage", 2.4f, "Damage gained per level. (Vanilla = 2.4)").Value; BeetleGuardAlly.Stats_Level_Regen = MainConfig.Bind<float>("Beetle Guard Ally Stats Level", "Regen", 1f, "Regen gained per level. (Vanilla = 0.12)").Value; } private static void Read_Misc() { BeetleGuardAlly.Elite_Skills = MainConfig.Bind<bool>("Misc", "Elite Skills", true, "Changes how some of its skills function based on its Aspect.").Value; } } [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.kking117.QueenGlandBuff", "QueenGlandBuff", "1.6.0")] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.kking117.QueenGlandBuff"; public const string MODNAME = "QueenGlandBuff"; public const string MODVERSION = "1.6.0"; public const string MODTOKEN = "KKING117_QUEENGLANDBUFF_"; internal static ManualLogSource ModLogger; public static PluginInfo pluginInfo; internal static SceneDef BazaarSceneDef; internal static bool RiskyMod_Loaded; private void Awake() { ModLogger = ((BaseUnityPlugin)this).Logger; pluginInfo = ((BaseUnityPlugin)this).Info; Configs.Setup(); BeetleGuardAlly.Begin(); if (QueensGland.Enable) { QueensGland.Begin(); } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Initializing ContentPack."); new ContentPacks().Initialize(); ((ResourceAvailability)(ref GameModeCatalog.availability)).CallWhenAvailable((Action)PostLoad); } private void PostLoad() { if (QueensGland.Enable) { QueensGland.PostLoad(); } BazaarSceneDef = SceneCatalog.FindSceneDef("bazaar"); } } } namespace QueenGlandBuff.Utils { internal class Helpers { private static readonly Random rng = new Random(); internal static void GiveRandomEliteAffix(CharacterMaster self) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) if (QueensGland.AffixMode == 0 || (QueensGland.AffixMode == 2 && !RunArtifactManager.instance.IsArtifactEnabled(Artifacts.EliteOnly))) { return; } if (QueensGland.StageEliteEquipmentDefs.Count > 0) { int index = rng.Next(QueensGland.StageEliteEquipmentDefs.Count); if (Object.op_Implicit((Object)(object)QueensGland.StageEliteEquipmentDefs[index])) { self.inventory.SetEquipmentIndex(QueensGland.StageEliteEquipmentDefs[index].equipmentIndex, true); return; } } self.inventory.SetEquipmentIndex(QueensGland.DefaultAffixIndex, true); } } } namespace QueenGlandBuff.States { public class Slam : BaseSkillState { public static float baseDuration = 1.75f; public static float soundtime = 3.5f; public static float damageCoefficient = 4f; public static float forceMagnitude = 16f; public static float RockDamageCoefficient = 1.25f; public static int RockCount = 3; public static float RockSpeed = 25f; private static float RockRotateOffset = 9f; private OverlapAttack attack; public static string initialAttackSoundString = GroundSlam.initialAttackSoundString; public static GameObject chargeEffectPrefab = GroundSlam.chargeEffectPrefab; public static GameObject slamEffectPrefab = GroundSlam.slamEffectPrefab; public static GameObject hitEffectPrefab = GroundSlam.hitEffectPrefab; private Animator modelAnimator; private Transform modelTransform; private bool hasAttacked; private float duration; private bool crit; private GameObject leftHandChargeEffect; private GameObject rightHandChargeEffect; private ChildLocator modelChildLocator; private Transform groundSlamIndicatorInstance; private void EnableIndicator(Transform indicator) { if (Object.op_Implicit((Object)(object)indicator)) { ((Component)indicator).gameObject.SetActive(true); ObjectScaleCurve component = ((Component)indicator).gameObject.GetComponent<ObjectScaleCurve>(); if (Object.op_Implicit((Object)(object)component)) { component.time = 0f; } } } private void DisableIndicator(Transform indicator) { if (Object.op_Implicit((Object)(object)indicator)) { ((Component)indicator).gameObject.SetActive(false); } } public override void OnEnter() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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) ((BaseState)this).OnEnter(); modelAnimator = ((EntityState)this).GetModelAnimator(); modelTransform = ((EntityState)this).GetModelTransform(); attack = new OverlapAttack(); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.teamIndex = TeamComponent.GetObjectTeam(attack.attacker); attack.damage = damageCoefficient * ((BaseState)this).damageStat; attack.hitEffectPrefab = hitEffectPrefab; attack.forceVector = Vector3.up * forceMagnitude; attack.damageType = DamageTypeCombo.op_Implicit((DamageSource)1); if (Object.op_Implicit((Object)(object)modelTransform)) { attack.hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "GroundSlam"); } duration = baseDuration / ((BaseState)this).attackSpeedStat; Util.PlayAttackSpeedSound(initialAttackSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat * (soundtime / duration)); ((EntityState)this).PlayAnimation("Body", "GroundSlam", "GroundSlam.playbackRate", duration, 0f); if (!Object.op_Implicit((Object)(object)modelTransform)) { return; } modelChildLocator = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)modelChildLocator)) { GameObject val = chargeEffectPrefab; Transform val2 = modelChildLocator.FindChild("HandL"); Transform val3 = modelChildLocator.FindChild("HandR"); if (Object.op_Implicit((Object)(object)val2)) { leftHandChargeEffect = Object.Instantiate<GameObject>(val, val2); } if (Object.op_Implicit((Object)(object)val3)) { rightHandChargeEffect = Object.Instantiate<GameObject>(val, val3); } groundSlamIndicatorInstance = modelChildLocator.FindChild("GroundSlamIndicator"); EnableIndicator(groundSlamIndicatorInstance); } } public override void OnExit() { ((EntityState)this).OnExit(); EntityState.Destroy((Object)(object)leftHandChargeEffect); EntityState.Destroy((Object)(object)rightHandChargeEffect); DisableIndicator(groundSlamIndicatorInstance); } public override void PlayAnimation(string layerName, int animationStateHash) { } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)modelAnimator) && modelAnimator.GetFloat("GroundSlam.hitBoxActive") > 0.5f && !hasAttacked) { crit = ((EntityState)this).characterBody.RollCrit(); if (NetworkServer.active) { attack.isCrit = crit; attack.Fire((List<HurtBox>)null); } if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)modelTransform)) { FireProjectiles(); } hasAttacked = true; EntityState.Destroy((Object)(object)leftHandChargeEffect); EntityState.Destroy((Object)(object)rightHandChargeEffect); } 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; } private void FireProjectiles() { DisableIndicator(groundSlamIndicatorInstance); EffectManager.SimpleMuzzleFlash(slamEffectPrefab, ((EntityState)this).gameObject, "SlamZone", true); if (((EntityState)this).isAuthority) { if (BeetleGuardAlly.Elite_Skills && ((EntityState)this).characterBody.HasBuff(Buffs.AffixLunar)) { Perfected_SpewRocks(); } else { SpewRocks(); } } } private void Perfected_SpewRocks() { //IL_002e: 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) float num = (float)RockCount * RockDamageCoefficient / 8f; ProjectileManager.instance.FireProjectile(BeetleGuardAlly.Perfected_Slam_RockProjectile, modelChildLocator.FindChild("GroundSlamIndicator").position, Quaternion.identity, ((EntityState)this).gameObject, ((BaseState)this).damageStat * num, 1f, crit, (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } private void SpewRocks() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0066: 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_007c: 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_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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00ab: 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_0109: 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_011a: 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) Vector3 position = modelChildLocator.FindChild("GroundSlamIndicator").position; Vector3 forward = ((EntityState)this).characterDirection.forward; float num = Random.Range(0f, 360f); for (int i = 0; i < RockCount; i++) { Vector3 val = forward; val = Quaternion.AngleAxis(num + 360f / (float)RockCount * ((float)i - (float)RockCount / 2f), Vector3.up) * forward; val.y = RockRotateOffset; FireProjectileInfo val2 = default(FireProjectileInfo); val2.projectilePrefab = BeetleGuardAlly.Default_RockProjectile; val2.position = position + ((Vector3)(ref val)).normalized; val2.rotation = Util.QuaternionSafeLookRotation(val); val2.owner = ((EntityState)this).gameObject; val2.damage = ((BaseState)this).damageStat * RockDamageCoefficient; val2.crit = crit; val2.force = forceMagnitude; val2.damageColorIndex = (DamageColorIndex)0; ((FireProjectileInfo)(ref val2)).speedOverride = RockSpeed; val2.useSpeedOverride = true; val2.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageSource)1); FireProjectileInfo val3 = val2; ProjectileManager.instance.FireProjectile(val3); } } } public class Sunder : BaseSkillState { public static float baseDuration = 1.5f; public static float soundtime = 3f; public static float damageCoefficient = 4f; public static float forceMagnitude = 16f; public static float RockDamageCoefficient = 1.25f; public static int RockCount = 3; public static float RockSpeed = 55f; public static float RockFanSpreadAngle = 2f; public static float RockYLocOffset = 1f; public static float RockYawAdd = 2f; public static float RockYawOffset = -9f; public static string initialAttackSoundString = FireSunder.initialAttackSoundString; public static GameObject chargeEffectPrefab = FireSunder.chargeEffectPrefab; public static GameObject hitEffectPrefab = FireSunder.hitEffectPrefab; public static GameObject SunderProjectile = FireSunder.projectilePrefab; private Animator modelAnimator; private Transform modelTransform; private bool hasAttacked; private float duration; private bool crit; private GameObject rightHandChargeEffect; private ChildLocator modelChildLocator; private Transform handRTransform; public override void OnEnter() { ((BaseState)this).OnEnter(); modelAnimator = ((EntityState)this).GetModelAnimator(); modelTransform = ((EntityState)this).GetModelTransform(); duration = baseDuration / ((BaseState)this).attackSpeedStat; Util.PlayAttackSpeedSound(initialAttackSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat * (soundtime / duration)); ((EntityState)this).PlayAnimation("Body", "FireSunder", "FireSunder.playbackRate", duration, 0f); if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.SetAimTimer(duration + 2f); } if (Object.op_Implicit((Object)(object)modelTransform)) { AimAnimator component = ((Component)modelTransform).GetComponent<AimAnimator>(); if (Object.op_Implicit((Object)(object)component)) { ((Behaviour)component).enabled = true; } modelChildLocator = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)modelChildLocator)) { GameObject val = chargeEffectPrefab; handRTransform = modelChildLocator.FindChild("HandR"); if (Object.op_Implicit((Object)(object)handRTransform)) { rightHandChargeEffect = Object.Instantiate<GameObject>(val, handRTransform); } } } crit = ((EntityState)this).characterBody.RollCrit(); } public override void OnExit() { ((EntityState)this).OnExit(); EntityState.Destroy((Object)(object)rightHandChargeEffect); if (Object.op_Implicit((Object)(object)modelTransform)) { AimAnimator component = ((Component)modelTransform).GetComponent<AimAnimator>(); if (Object.op_Implicit((Object)(object)component)) { ((Behaviour)component).enabled = true; } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)modelAnimator) && modelAnimator.GetFloat("FireSunder.activate") > 0.5f && !hasAttacked) { if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)modelTransform)) { FireProjectiles(); } hasAttacked = true; EntityState.Destroy((Object)(object)rightHandChargeEffect); } 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; } private void FireProjectiles() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((Ray)(ref aimRay)).origin = handRTransform.position; if (BeetleGuardAlly.Elite_Skills && ((EntityState)this).characterBody.HasBuff(Buffs.AffixLunar)) { Perfected_FanRocks(); FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = BeetleGuardAlly.Perfected_Sunder_MainProjectile; val.position = handRTransform.position; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.owner = ((EntityState)this).gameObject; val.damage = ((BaseState)this).damageStat * damageCoefficient; val.crit = crit; val.force = forceMagnitude; val.damageColorIndex = (DamageColorIndex)0; val.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageSource)2); FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } else { FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = SunderProjectile; val.position = handRTransform.position; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.owner = ((EntityState)this).gameObject; val.damage = ((BaseState)this).damageStat * damageCoefficient; val.crit = crit; val.force = forceMagnitude; val.damageColorIndex = (DamageColorIndex)0; val.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageSource)2); FireProjectileInfo val3 = val; ProjectileManager.instance.FireProjectile(val3); FanRocks(); } } } private void Perfected_FanRocks() { //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_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_0017: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00af: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: 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_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0227: 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_0230: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = ((BaseState)this).GetAimRay(); Ray aimRay2 = ((BaseState)this).GetAimRay(); ((Ray)(ref aimRay2)).origin = handRTransform.position; ((Ray)(ref aimRay2)).origin = ((Ray)(ref aimRay2)).origin + new Vector3(0f, RockYLocOffset, 0f); int num = 5; float num2 = (float)RockCount * RockDamageCoefficient / (float)num / 5f; float speedOverride = RockSpeed * 1.25f; GameObject val = null; BullseyeSearch val2 = new BullseyeSearch(); val2.searchOrigin = ((Ray)(ref aimRay)).origin; val2.searchDirection = ((Ray)(ref aimRay)).direction; val2.maxDistanceFilter = 150f; val2.maxAngleFilter = 10f; val2.teamMaskFilter = TeamMask.allButNeutral; ((TeamMask)(ref val2.teamMaskFilter)).RemoveTeam(((EntityState)this).characterBody.teamComponent.teamIndex); val2.sortMode = (SortMode)1; val2.RefreshCandidates(); HurtBox val3 = val2.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val3)) { val = HurtBox.FindEntityObject(val3); if (Object.op_Implicit((Object)(object)val)) { ((Ray)(ref aimRay2)).direction = ((Component)val3).transform.position - ((Ray)(ref aimRay2)).origin; } } float num3 = (float)num / 2f + 0.5f; for (int i = 0; i < num; i++) { num3 -= 1f; Vector3 val4 = Util.ApplySpread(((Ray)(ref aimRay2)).direction, 0f, 0f, 1f, 1f, num3 * RockFanSpreadAngle, 0f); FireProjectileInfo val5 = default(FireProjectileInfo); val5.projectilePrefab = BeetleGuardAlly.Perfected_Sunder_RockProjectile; val5.position = ((Ray)(ref aimRay2)).origin; val5.rotation = Util.QuaternionSafeLookRotation(val4); val5.owner = ((EntityState)this).gameObject; val5.damage = ((BaseState)this).damageStat * num2; val5.crit = crit; val5.force = forceMagnitude; val5.damageColorIndex = (DamageColorIndex)0; val5.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageSource)2); val5.target = val; ((FireProjectileInfo)(ref val5)).speedOverride = speedOverride; val5.useSpeedOverride = true; FireProjectileInfo val6 = val5; ProjectileManager.instance.FireProjectile(val6); } } private void FanRocks() { //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_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_0017: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0089: 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_00a5: 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_0129: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_01b1: 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_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: 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_0202: 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_0209: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = ((BaseState)this).GetAimRay(); Ray aimRay2 = ((BaseState)this).GetAimRay(); ((Ray)(ref aimRay2)).origin = handRTransform.position; ((Ray)(ref aimRay2)).origin = ((Ray)(ref aimRay2)).origin + new Vector3(0f, RockYLocOffset, 0f); GameObject val = null; BullseyeSearch val2 = new BullseyeSearch(); val2.searchOrigin = ((Ray)(ref aimRay)).origin; val2.searchDirection = ((Ray)(ref aimRay)).direction; val2.maxDistanceFilter = 90f; val2.maxAngleFilter = 10f; val2.teamMaskFilter = TeamMask.allButNeutral; ((TeamMask)(ref val2.teamMaskFilter)).RemoveTeam(((EntityState)this).characterBody.teamComponent.teamIndex); val2.sortMode = (SortMode)1; val2.RefreshCandidates(); HurtBox val3 = val2.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val3)) { val = HurtBox.FindEntityObject(val3); if (Object.op_Implicit((Object)(object)val)) { ((Ray)(ref aimRay2)).direction = ((Component)val3).transform.position - ((Ray)(ref aimRay2)).origin; Vector3 direction = ((Ray)(ref aimRay2)).direction; ((Vector3)(ref direction)).Normalize(); } } float num = 0f; if (((Ray)(ref aimRay2)).direction.y < 0.93f || ((Ray)(ref aimRay2)).direction.y > 0f) { num = RockYawOffset; } float num2 = (float)RockCount / 2f + 0.5f; for (int i = 0; i < RockCount; i++) { num2 -= 1f; float num3 = num2; if (num3 < 0f) { num3 *= -1f; } num3 *= RockYawAdd; Vector3 val4 = Util.ApplySpread(((Ray)(ref aimRay2)).direction, 0f, 0f, 1f, 1f, num2 * RockFanSpreadAngle, num + num3); FireProjectileInfo val5 = default(FireProjectileInfo); val5.projectilePrefab = BeetleGuardAlly.Default_RockProjectile; val5.position = ((Ray)(ref aimRay2)).origin; val5.rotation = Util.QuaternionSafeLookRotation(val4); val5.owner = ((EntityState)this).gameObject; val5.damage = ((BaseState)this).damageStat * RockDamageCoefficient; val5.crit = crit; val5.force = forceMagnitude; val5.damageColorIndex = (DamageColorIndex)0; val5.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageSource)2); ((FireProjectileInfo)(ref val5)).speedOverride = RockSpeed; val5.useSpeedOverride = true; FireProjectileInfo val6 = val5; ProjectileManager.instance.FireProjectile(val6); } } } public class Valor : BaseSkillState { public static float baseDuration = 3f; public static float soundTime = 3.5f; public static float soundOffset = 1.25f; public static float buffDuration = 10f; public static GameObject defenseUpPrefab = DefenseUp.defenseUpPrefab; public static string initialSoundString = SpawnState.spawnSoundString; private Animator modelAnimator; private float duration; private bool hasCastBuff; private bool hasMadeSound; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { ((EntityState)this).PlayAnimation("Body", "DefenseUp", "DefenseUp.playbackRate", duration, 0f); } if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.SmallArmorBoost, duration); } } public override void FixedUpdate() { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)modelAnimator)) { if (modelAnimator.GetFloat("DefenseUp.activate") > 0f && !hasMadeSound) { Util.PlayAttackSpeedSound(initialSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat * (soundTime / duration) * soundOffset); hasMadeSound = true; } if (modelAnimator.GetFloat("DefenseUp.activate") > 0.5f && !hasCastBuff) { ScaleParticleSystemDuration component = Object.Instantiate<GameObject>(defenseUpPrefab, ((EntityState)this).transform.position, Quaternion.identity, ((EntityState)this).transform).GetComponent<ScaleParticleSystemDuration>(); if (Object.op_Implicit((Object)(object)component)) { component.newDuration = buffDuration; } hasCastBuff = true; if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(ValorBuff.ThisBuffDef, buffDuration); } } } 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; } } } namespace QueenGlandBuff.Modules { public static class Buffs { internal static List<BuffDef> buffDefs = new List<BuffDef>(); internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff, bool isCooldown) { //IL_001d: 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) buffName += "(QueenGlandBuff)"; BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = buffColor; val.canStack = canStack; val.isDebuff = isDebuff; val.isCooldown = isCooldown; val.eliteDef = null; val.iconSprite = buffIcon; ((Object)val).name = ((Object)val).name; buffDefs.Add(val); return val; } } internal class ContentPacks : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public string identifier => "com.kking117.QueenGlandBuff"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.buffDefs.Add(Buffs.buffDefs.ToArray()); contentPack.entityStateTypes.Add(States.entityStates.ToArray()); contentPack.projectilePrefabs.Add(Prefabs.projectilePrefabs.ToArray()); contentPack.skillDefs.Add(Skills.skillDefs.ToArray()); contentPack.skillFamilies.Add(Skills.skillFamilies.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } internal static class Prefabs { internal static List<GameObject> projectilePrefabs = new List<GameObject>(); } public static class Projectiles { internal static void AddProjectile(GameObject proj) { Prefabs.projectilePrefabs.Add(proj); } } internal static class Skills { internal static List<SkillFamily> skillFamilies = new List<SkillFamily>(); internal static List<SkillDef> skillDefs = new List<SkillDef>(); internal static void RegisterSkill(SkillDef skill) { skillDefs.Add(skill); } internal static void AddSkillToSlot(GameObject prefab, SkillDef skill, SkillSlot slot) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Invalid comparison between Unknown and I4 //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Invalid comparison between Unknown and I4 //IL_0028: 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_00b6: Invalid comparison between Unknown and I4 //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Expected O, but got Unknown //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = prefab.GetComponent<SkillLocator>(); SkillFamily val = null; if ((int)slot == 0) { if (!Object.op_Implicit((Object)(object)component.primary)) { AddSkillFamilyToSlot(prefab, component, slot); } val = component.primary.skillFamily; } else if ((int)slot == 1) { if (!Object.op_Implicit((Object)(object)component.secondary)) { AddSkillFamilyToSlot(prefab, component, slot); } val = component.secondary.skillFamily; } else if ((int)slot == 2) { if (!Object.op_Implicit((Object)(object)component.utility)) { AddSkillFamilyToSlot(prefab, component, slot); } val = component.utility.skillFamily; } else if ((int)slot == 3) { if (!Object.op_Implicit((Object)(object)component.special)) { AddSkillFamilyToSlot(prefab, component, slot); } val = component.special.skillFamily; } if (Object.op_Implicit((Object)(object)val)) { Array.Resize(ref val.variants, val.variants.Length + 1); Variant[] variants = val.variants; int num = val.variants.Length - 1; Variant val2 = new Variant { skillDef = skill }; ((Variant)(ref val2)).viewableNode = new Node(skill.skillNameToken, false, (Node)null); variants[num] = val2; } } internal static void AddSkillFamilyToSlot(GameObject prefab, SkillLocator skillLocator, SkillSlot slot) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Invalid comparison between Unknown and I4 //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Invalid comparison between Unknown and I4 //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Invalid comparison between Unknown and I4 if ((int)slot == 0) { skillLocator.primary = prefab.AddComponent<GenericSkill>(); SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val).name = ((Object)prefab).name + "PrimaryFamily"; val.variants = (Variant[])(object)new Variant[0]; skillLocator.primary._skillFamily = val; skillFamilies.Add(val); } else if ((int)slot == 1) { skillLocator.secondary = prefab.AddComponent<GenericSkill>(); SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val2).name = ((Object)prefab).name + "SecondaryFamily"; val2.variants = (Variant[])(object)new Variant[0]; skillLocator.secondary._skillFamily = val2; skillFamilies.Add(val2); } else if ((int)slot == 2) { skillLocator.utility = prefab.AddComponent<GenericSkill>(); SkillFamily val3 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val3).name = ((Object)prefab).name + "UtilityFamily"; val3.variants = (Variant[])(object)new Variant[0]; skillLocator.utility._skillFamily = val3; skillFamilies.Add(val3); } else if ((int)slot == 3) { skillLocator.special = prefab.AddComponent<GenericSkill>(); SkillFamily val4 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val4).name = ((Object)prefab).name + "SpecialFamily"; val4.variants = (Variant[])(object)new Variant[0]; skillLocator.special._skillFamily = val4; skillFamilies.Add(val4); } } internal static void WipeLoadout(GameObject prefab) { GenericSkill[] componentsInChildren = prefab.GetComponentsInChildren<GenericSkill>(); foreach (GenericSkill val in componentsInChildren) { Object.DestroyImmediate((Object)(object)val); } SkillLocator component = prefab.GetComponent<SkillLocator>(); } internal static AISkillDriver CopySkillDriver(AISkillDriver returnme, AISkillDriver copyme) { MonoBehaviour.print((object)("activationRequiresAimConfirmation = " + copyme.activationRequiresAimConfirmation)); MonoBehaviour.print((object)("activationRequiresAimTargetLoS = " + copyme.activationRequiresAimTargetLoS)); MonoBehaviour.print((object)("activationRequiresTargetLoS = " + copyme.activationRequiresTargetLoS)); MonoBehaviour.print((object)("aimType = " + ((object)(AimType)(ref copyme.aimType)).ToString())); MonoBehaviour.print((object)("buttonPressType = " + ((object)(ButtonPressType)(ref copyme.buttonPressType)).ToString())); MonoBehaviour.print((object)("driverUpdateTimerOverride = " + copyme.driverUpdateTimerOverride)); MonoBehaviour.print((object)("ignoreNodeGraph = " + copyme.ignoreNodeGraph)); MonoBehaviour.print((object)("maxDistance = " + copyme.maxDistance)); MonoBehaviour.print((object)("maxTargetHealthFraction = " + copyme.maxTargetHealthFraction)); MonoBehaviour.print((object)("maxUserHealthFractio = " + copyme.maxUserHealthFraction)); MonoBehaviour.print((object)("minDistance = " + copyme.minDistance)); MonoBehaviour.print((object)("minTargetHealthFraction = " + copyme.minTargetHealthFraction)); MonoBehaviour.print((object)("minUserHealthFraction = " + copyme.minUserHealthFraction)); MonoBehaviour.print((object)("moveInputScale = " + copyme.moveInputScale)); MonoBehaviour.print((object)("movementType = " + ((object)(MovementType)(ref copyme.movementType)).ToString())); MonoBehaviour.print((object)("moveTargetType = " + ((object)(TargetType)(ref copyme.moveTargetType)).ToString())); MonoBehaviour.print((object)("nextHighPriorityOverride = " + (object)copyme.nextHighPriorityOverride)); MonoBehaviour.print((object)("noRepeat = " + copyme.noRepeat)); MonoBehaviour.print((object)("requiredSkill = " + (object)copyme.requiredSkill)); MonoBehaviour.print((object)("requireEquipmentReady = " + copyme.requireEquipmentReady)); MonoBehaviour.print((object)("requireSkillReady = " + copyme.requireSkillReady)); MonoBehaviour.print((object)("resetCurrentEnemyOnNextDriverSelection = " + copyme.resetCurrentEnemyOnNextDriverSelection)); MonoBehaviour.print((object)("selectionRequiresAimTarget = " + copyme.selectionRequiresAimTarget)); MonoBehaviour.print((object)("selectionRequiresOnGround = " + copyme.selectionRequiresOnGround)); MonoBehaviour.print((object)("selectionRequiresTargetLoS = " + copyme.selectionRequiresTargetLoS)); MonoBehaviour.print((object)("shouldFireEquipment = " + copyme.shouldFireEquipment)); MonoBehaviour.print((object)("shouldSprint = " + copyme.shouldSprint)); MonoBehaviour.print((object)("skillSlot = " + ((object)(SkillSlot)(ref copyme.skillSlot)).ToString())); return returnme; } } public static class States { internal static List<Type> entityStates = new List<Type>(); public static void RegisterState(Type thistype) { entityStates.Add(thistype); } } } namespace QueenGlandBuff.Changes { public class BeetleGuardAlly { private static string LogName = "(BeetleGuardAlly)"; internal static float Stats_Base_Health = 480f; internal static float Stats_Base_Damage = 12f; internal static float Stats_Base_Regen = 5f; internal static float Stats_Level_Health = 144f; internal static float Stats_Level_Damage = 2.4f; internal static float Stats_Level_Regen = 1f; internal static bool Elite_Skills = true; internal static bool Enable_Slam_Skill = true; internal static bool Enable_Sunder_Skill = true; internal static bool Enable_Valor_Skill = true; public static GameObject Perfected_Slam_RockProjectile; public static GameObject Perfected_Sunder_RockProjectile; public static GameObject Perfected_Sunder_MainProjectile; public static GameObject Default_RockProjectile; public static GameObject BodyObject = Addressables.LoadAssetAsync<GameObject>((object)"e21e3b9cdc2802148986eda1c923c9a1").WaitForCompletion(); public static GameObject MasterObject = Addressables.LoadAssetAsync<GameObject>((object)"a8cc835d25f85d542aeb5bb59ebbe33b").WaitForCompletion(); public static BaseAI BaseAI; public static SkillDef SlamSkill; public static SkillDef SunderSkill; public static SkillDef ValorSkill; public static SkillDef OldSlamSkill = Addressables.LoadAssetAsync<SkillDef>((object)"9abaa52efee2e694ebd826739420d79a").WaitForCompletion(); public static SkillDef OldSunderSkill = Addressables.LoadAssetAsync<SkillDef>((object)"0ccf3c706488000478d0d07dff868bd7").WaitForCompletion(); public static void Begin() { MainPlugin.ModLogger.LogInfo((object)(LogName + " Beginning changes.")); CreateProjectiles(); UpdateBody(); CreateSkills(); UpdateLoadouts(); UpdateAI(); } private static void CreateProjectiles() { //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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) MainPlugin.ModLogger.LogInfo((object)"Creating BeetleGuardAlly projectiles."); if (Enable_Slam_Skill || Enable_Sunder_Skill) { Default_RockProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"25c3f321c934adf4cb0f223f62be964a").WaitForCompletion(), "KKING117_QUEENGLANDBUFF_RockProjectile", true); ProjectileExplosion component = Default_RockProjectile.GetComponent<ProjectileExplosion>(); component.falloffModel = (FalloffModel)2; component.bonusBlastForce = Vector3.down * 10f; component.blastRadius = 8f; component.blastProcCoefficient *= 0.3f; Projectiles.AddProjectile(Default_RockProjectile); if (Elite_Skills) { Perfected_Slam_RockProjectile = Addressables.LoadAssetAsync<GameObject>((object)"2d38e18b73708b6409e1f49d34566a89").WaitForCompletion(); Perfected_Sunder_RockProjectile = Addressables.LoadAssetAsync<GameObject>((object)"7fda9d7db9976544fa4061679fe7604a").WaitForCompletion(); Perfected_Sunder_MainProjectile = Addressables.LoadAssetAsync<GameObject>((object)"2bf848c66467fdf49a7b43a330e8dd80").WaitForCompletion(); } } } private static void UpdateBody() { MainPlugin.ModLogger.LogInfo((object)(LogName + " Changing body attributes.")); CharacterBody component = BodyObject.GetComponent<CharacterBody>(); component.baseAcceleration *= 1.5f; component.baseJumpPower *= 1.3f; CharacterDirection component2 = BodyObject.GetComponent<CharacterDirection>(); component2.turnSpeed *= 2f; component.baseMaxHealth = Stats_Base_Health; component.levelMaxHealth = Stats_Level_Health; component.baseDamage = Stats_Base_Damage; component.levelDamage = Stats_Level_Damage; component.baseRegen = Stats_Base_Regen; component.levelRegen = Stats_Level_Regen; } private static void CreateSkills() { //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_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_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: 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_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_04e8: Unknown result type (might be due to invalid IL or missing references) MainPlugin.ModLogger.LogInfo((object)(LogName + " Creating/Changing skills.")); SlamSkill = ScriptableObject.CreateInstance<SkillDef>(); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_PRIMARY_SLAM_NAME", "Slam"); if (Enable_Slam_Skill) { SlamSkill.activationState = new SerializableEntityStateType(typeof(Slam)); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_PRIMARY_SLAM_DESC", "Strike the ground for <style=cIsDamage>400%</style> and launch debris for <style=cIsDamage>3x125%</style> damage."); QueenGlandBuff.Modules.States.RegisterState(typeof(Slam)); } else { SlamSkill.activationState = new SerializableEntityStateType(typeof(GroundSlam)); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_PRIMARY_SLAM_DESC", "Strike the ground for <style=cIsDamage>400%</style> damage."); } SlamSkill.activationStateMachineName = "Body"; SlamSkill.dontAllowPastMaxStocks = false; SlamSkill.resetCooldownTimerOnUse = false; SlamSkill.keywordTokens = null; SlamSkill.baseMaxStock = 1; SlamSkill.rechargeStock = 1; SlamSkill.requiredStock = 1; SlamSkill.stockToConsume = 1; SlamSkill.fullRestockOnAssign = true; SlamSkill.baseRechargeInterval = 3f; SlamSkill.beginSkillCooldownOnSkillEnd = false; SlamSkill.canceledFromSprinting = false; SlamSkill.cancelSprintingOnActivation = true; SlamSkill.forceSprintDuringState = false; SlamSkill.interruptPriority = (InterruptPriority)1; SlamSkill.isCombatSkill = true; SlamSkill.mustKeyPress = false; SlamSkill.icon = null; SlamSkill.skillDescriptionToken = "KKING117_QUEENGLANDBUFF_PRIMARY_SLAM_DESC"; SlamSkill.skillNameToken = "KKING117_QUEENGLANDBUFF_PRIMARY_SLAM_NAME"; SlamSkill.skillName = SlamSkill.skillNameToken; Skills.RegisterSkill(SlamSkill); SunderSkill = ScriptableObject.CreateInstance<SkillDef>(); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_SECONDARY_SUNDER_NAME", "Sunder"); if (Enable_Sunder_Skill) { SunderSkill.activationState = new SerializableEntityStateType(typeof(Sunder)); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_SECONDARY_SUNDER_DESC", "Tear the ground infront of you for <style=cIsDamage>400%</style>, launching a cluster of rocks for <style=cIsDamage>3x125%</style> damage."); QueenGlandBuff.Modules.States.RegisterState(typeof(Sunder)); } else { SunderSkill.activationState = new SerializableEntityStateType(typeof(FireSunder)); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_SECONDARY_SUNDER_DESC", "Tear the ground infront of you for <style=cIsDamage>400%</style> damage."); } SunderSkill.activationStateMachineName = "Body"; SunderSkill.baseMaxStock = 2; SunderSkill.rechargeStock = 1; SunderSkill.requiredStock = 1; SunderSkill.stockToConsume = 1; SunderSkill.fullRestockOnAssign = true; SunderSkill.baseRechargeInterval = 8f; SunderSkill.beginSkillCooldownOnSkillEnd = false; SunderSkill.canceledFromSprinting = false; SunderSkill.cancelSprintingOnActivation = true; SunderSkill.forceSprintDuringState = false; SunderSkill.interruptPriority = (InterruptPriority)1; SunderSkill.isCombatSkill = true; SunderSkill.mustKeyPress = false; SunderSkill.icon = null; SunderSkill.skillDescriptionToken = "KKING117_QUEENGLANDBUFF_SECONDARY_SUNDER_DESC"; SunderSkill.skillNameToken = "KKING117_QUEENGLANDBUFF_SECONDARY_SUNDER_NAME"; SunderSkill.skillName = SunderSkill.skillNameToken; Skills.RegisterSkill(SunderSkill); if (Enable_Valor_Skill) { ValorBuff.Begin(); ValorSkill = ScriptableObject.CreateInstance<SkillDef>(); string text = ""; if (ValorBuff.Aggro_Range > 0f) { text = "Draw the <style=cIsHealth>attention</style> of nearby enemies"; } if (ValorBuff.Buff_Armor != 0f) { text = ((ValorBuff.Buff_Armor > 0f) ? ((!(ValorBuff.Aggro_Range > 0f)) ? (text + "Gain") : (text + " and gain")) : ((!(ValorBuff.Aggro_Range > 0f)) ? (text + "Lose") : (text + " and lose"))); text += $" <style=cIsUtility>{ValorBuff.Buff_Armor}</style> armor"; } text += " for <style=cIsUtility>10</style> seconds."; LanguageAPI.Add("KKING117_QUEENGLANDBUFF_SPECIAL_TAUNT_NAME", "Valor"); LanguageAPI.Add("KKING117_QUEENGLANDBUFF_SPECIAL_TAUNT_DESC", text); ValorSkill.activationState = new SerializableEntityStateType(typeof(Valor)); ValorSkill.activationStateMachineName = "Body"; QueenGlandBuff.Modules.States.RegisterState(typeof(Valor)); ValorSkill.baseMaxStock = 1; ValorSkill.rechargeStock = 1; ValorSkill.requiredStock = 1; ValorSkill.stockToConsume = 1; ValorSkill.fullRestockOnAssign = true; ValorSkill.baseRechargeInterval = 30f; ValorSkill.beginSkillCooldownOnSkillEnd = false; ValorSkill.canceledFromSprinting = false; ValorSkill.cancelSprintingOnActivation = true; ValorSkill.forceSprintDuringState = false; ValorSkill.interruptPriority = (InterruptPriority)1; ValorSkill.isCombatSkill = false; ValorSkill.mustKeyPress = false; ValorSkill.icon = null; ValorSkill.skillDescriptionToken = "KKING117_QUEENGLANDBUFF_SPECIAL_TAUNT_DESC"; ValorSkill.skillNameToken = "KKING117_QUEENGLANDBUFF_SPECIAL_TAUNT_NAME"; ValorSkill.skillName = ValorSkill.skillNameToken; Skills.RegisterSkill(ValorSkill); } } private static void UpdateLoadouts() { MainPlugin.ModLogger.LogInfo((object)(LogName + " Changing skill loadout.")); Skills.WipeLoadout(BodyObject); Skills.AddSkillToSlot(BodyObject, SlamSkill, (SkillSlot)0); Skills.AddSkillToSlot(BodyObject, SunderSkill, (SkillSlot)1); if (Enable_Valor_Skill) { Skills.AddSkillToSlot(BodyObject, ValorSkill, (SkillSlot)3); } } private static void UpdateAI() { //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_0395: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) //IL_0441: Unknown result type (might be due to invalid IL or missing references) //IL_047a: Unknown result type (might be due to invalid IL or missing references) //IL_0481: Unknown result type (might be due to invalid IL or missing references) //IL_04e7: Unknown result type (might be due to invalid IL or missing references) //IL_04ee: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_056c: Unknown result type (might be due to invalid IL or missing references) //IL_0574: 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_05ec: Unknown result type (might be due to invalid IL or missing references) //IL_063c: Unknown result type (might be due to invalid IL or missing references) //IL_0674: Unknown result type (might be due to invalid IL or missing references) //IL_067c: Unknown result type (might be due to invalid IL or missing references) //IL_06ec: Unknown result type (might be due to invalid IL or missing references) //IL_06f4: Unknown result type (might be due to invalid IL or missing references) //IL_0744: Unknown result type (might be due to invalid IL or missing references) //IL_077c: Unknown result type (might be due to invalid IL or missing references) //IL_0784: Unknown result type (might be due to invalid IL or missing references) //IL_07f4: Unknown result type (might be due to invalid IL or missing references) //IL_07fc: Unknown result type (might be due to invalid IL or missing references) //IL_084c: Unknown result type (might be due to invalid IL or missing references) //IL_0884: Unknown result type (might be due to invalid IL or missing references) //IL_088c: Unknown result type (might be due to invalid IL or missing references) //IL_08fc: Unknown result type (might be due to invalid IL or missing references) //IL_0904: Unknown result type (might be due to invalid IL or missing references) //IL_0954: 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_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) MainPlugin.ModLogger.LogInfo((object)(LogName + " Changing BaseAI and SkillDrivers.")); BaseAI = MasterObject.GetComponent<BaseAI>(); BaseAI.neverRetaliateFriendlies = true; BaseAI.fullVision = true; AISkillDriver[] componentsInChildren = MasterObject.GetComponentsInChildren<AISkillDriver>(); foreach (AISkillDriver val in componentsInChildren) { Object.DestroyImmediate((Object)(object)val); } if (Enable_Valor_Skill) { AISkillDriver val2 = MasterObject.AddComponent<AISkillDriver>(); val2.customName = "BuffAlly"; val2.activationRequiresAimConfirmation = true; val2.activationRequiresAimTargetLoS = false; val2.activationRequiresTargetLoS = true; val2.aimType = (AimType)1; val2.buttonPressType = (ButtonPressType)0; val2.driverUpdateTimerOverride = 1f; val2.ignoreNodeGraph = false; val2.maxDistance = 30f; val2.minDistance = 0f; val2.maxTargetHealthFraction = float.PositiveInfinity; val2.maxUserHealthFraction = float.PositiveInfinity; val2.minTargetHealthFraction = float.NegativeInfinity; val2.minUserHealthFraction = float.NegativeInfinity; val2.moveInputScale = 1f; val2.movementType = (MovementType)2; val2.moveTargetType = (TargetType)0; val2.noRepeat = false; val2.requireEquipmentReady = false; val2.requireSkillReady = true; val2.resetCurrentEnemyOnNextDriverSelection = true; val2.selectionRequiresAimTarget = false; val2.selectionRequiresOnGround = false; val2.selectionRequiresTargetLoS = true; val2.shouldFireEquipment = false; val2.shouldSprint = false; val2.skillSlot = (SkillSlot)3; } AISkillDriver val3 = MasterObject.AddComponent<AISkillDriver>(); val3.customName = "FireSunder"; val3.activationRequiresAimConfirmation = true; val3.activationRequiresAimTargetLoS = false; val3.activationRequiresTargetLoS = true; val3.aimType = (AimType)1; val3.buttonPressType = (ButtonPressType)0; val3.driverUpdateTimerOverride = 1f; val3.ignoreNodeGraph = false; val3.maxDistance = 40f; val3.minDistance = 0f; val3.maxTargetHealthFraction = float.PositiveInfinity; val3.maxUserHealthFraction = float.PositiveInfinity; val3.minTargetHealthFraction = float.NegativeInfinity; val3.minUserHealthFraction = float.NegativeInfinity; val3.moveInputScale = 1f; val3.movementType = (MovementType)2; val3.moveTargetType = (TargetType)0; val3.noRepeat = false; val3.requireEquipmentReady = false; val3.requireSkillReady = true; val3.resetCurrentEnemyOnNextDriverSelection = true; val3.selectionRequiresAimTarget = true; val3.selectionRequiresOnGround = false; val3.selectionRequiresTargetLoS = true; val3.shouldFireEquipment = false; val3.shouldSprint = false; val3.skillSlot = (SkillSlot)1; AISkillDriver val4 = MasterObject.AddComponent<AISkillDriver>(); val4.customName = "Slam"; val4.activationRequiresAimConfirmation = false; val4.activationRequiresAimTargetLoS = false; val4.activationRequiresTargetLoS = false; val4.aimType = (AimType)1; val4.buttonPressType = (ButtonPressType)0; val4.driverUpdateTimerOverride = -1f; val4.ignoreNodeGraph = true; val4.maxDistance = 10f; val4.minDistance = 0f; val4.maxTargetHealthFraction = float.PositiveInfinity; val4.maxUserHealthFraction = float.PositiveInfinity; val4.minTargetHealthFraction = float.NegativeInfinity; val4.minUserHealthFraction = float.NegativeInfinity; val4.moveInputScale = 1f; val4.movementType = (MovementType)1; val4.moveTargetType = (TargetType)0; val4.noRepeat = false; val4.requireEquipmentReady = false; val4.requireSkillReady = true; val4.resetCurrentEnemyOnNextDriverSelection = true; val4.selectionRequiresAimTarget = false; val4.selectionRequiresOnGround = false; val4.selectionRequiresTargetLoS = false; val4.shouldFireEquipment = false; val4.shouldSprint = false; val4.skillSlot = (SkillSlot)0; AISkillDriver val5 = MasterObject.AddComponent<AISkillDriver>(); val5.customName = "ReturnToOwnerLeash"; val5.activationRequiresAimConfirmation = false; val5.activationRequiresAimTargetLoS = false; val5.activationRequiresTargetLoS = false; val5.aimType = (AimType)3; val5.buttonPressType = (ButtonPressType)0; val5.driverUpdateTimerOverride = 3f; val5.ignoreNodeGraph = false; val5.maxDistance = float.PositiveInfinity; val5.minDistance = 110f; val5.maxTargetHealthFraction = float.PositiveInfinity; val5.maxUserHealthFraction = float.PositiveInfinity; val5.minTargetHealthFraction = float.NegativeInfinity; val5.minUserHealthFraction = float.NegativeInfinity; val5.moveInputScale = 1f; val5.movementType = (MovementType)1; val5.moveTargetType = (TargetType)2; val5.noRepeat = false; val5.requireEquipmentReady = false; val5.selectionRequiresAimTarget = false; val5.selectionRequiresOnGround = false; val5.selectionRequiresTargetLoS = false; val5.shouldFireEquipment = false; val5.shouldSprint = true; val5.requireSkillReady = false; val5.skillSlot = (SkillSlot)(-1); val5.resetCurrentEnemyOnNextDriverSelection = false; AISkillDriver val6 = MasterObject.AddComponent<AISkillDriver>(); val6.customName = "StrafeBecauseCooldowns"; val6.activationRequiresAimConfirmation = false; val6.activationRequiresAimTargetLoS = false; val6.activationRequiresTargetLoS = false; val6.aimType = (AimType)1; val6.buttonPressType = (ButtonPressType)0; val6.driverUpdateTimerOverride = -1f; val6.ignoreNodeGraph = true; val6.maxDistance = 10f; val6.minDistance = 0f; val6.maxTargetHealthFraction = float.PositiveInfinity; val6.maxUserHealthFraction = float.PositiveInfinity; val6.minTargetHealthFraction = float.NegativeInfinity; val6.minUserHealthFraction = float.NegativeInfinity; val6.moveInputScale = -0.8f; val6.movementType = (MovementType)2; val6.moveTargetType = (TargetType)0; val6.noRepeat = false; val6.requireEquipmentReady = false; val6.requireSkillReady = false; val6.resetCurrentEnemyOnNextDriverSelection = false; val6.selectionRequiresAimTarget = false; val6.selectionRequiresOnGround = false; val6.selectionRequiresTargetLoS = true; val6.shouldFireEquipment = false; val6.shouldSprint = false; val6.skillSlot = (SkillSlot)(-1); AISkillDriver val7 = MasterObject.AddComponent<AISkillDriver>(); val7.customName = "ChaseOffNodegraph"; val7.activationRequiresAimConfirmation = false; val7.activationRequiresAimTargetLoS = false; val7.activationRequiresTargetLoS = false; val7.aimType = (AimType)1; val7.buttonPressType = (ButtonPressType)0; val7.driverUpdateTimerOverride = -1f; val7.ignoreNodeGraph = true; val7.maxDistance = 25f; val7.minDistance = 10f; val7.maxTargetHealthFraction = float.PositiveInfinity; val7.maxUserHealthFraction = float.PositiveInfinity; val7.minTargetHealthFraction = float.NegativeInfinity; val7.minUserHealthFraction = float.NegativeInfinity; val7.moveInputScale = 1f; val7.movementType = (MovementType)1; val7.moveTargetType = (TargetType)0; val7.noRepeat = false; val7.requireEquipmentReady = false; val7.requireSkillReady = false; val7.resetCurrentEnemyOnNextDriverSelection = true; val7.selectionRequiresAimTarget = false; val7.selectionRequiresOnGround = false; val7.selectionRequiresTargetLoS = true; val7.shouldFireEquipment = true; val7.shouldSprint = false; val7.skillSlot = (SkillSlot)(-1); AISkillDriver val8 = MasterObject.AddComponent<AISkillDriver>(); val8.customName = "Chase"; val8.activationRequiresAimConfirmation = false; val8.activationRequiresAimTargetLoS = false; val8.activationRequiresTargetLoS = false; val8.aimType = (AimType)4; val8.buttonPressType = (ButtonPressType)0; val8.driverUpdateTimerOverride = -1f; val8.ignoreNodeGraph = false; val8.maxDistance = float.PositiveInfinity; val8.minDistance = 0f; val8.maxTargetHealthFraction = float.PositiveInfinity; val8.maxUserHealthFraction = float.PositiveInfinity; val8.minTargetHealthFraction = float.NegativeInfinity; val8.minUserHealthFraction = float.NegativeInfinity; val8.moveInputScale = 1f; val8.movementType = (MovementType)1; val8.moveTargetType = (TargetType)0; val8.noRepeat = false; val8.requireEquipmentReady = false; val8.requireSkillReady = false; val8.resetCurrentEnemyOnNextDriverSelection = true; val8.selectionRequiresAimTarget = false; val8.selectionRequiresOnGround = false; val8.selectionRequiresTargetLoS = true; val8.shouldFireEquipment = true; val8.shouldSprint = false; val8.skillSlot = (SkillSlot)(-1); AISkillDriver val9 = MasterObject.AddComponent<AISkillDriver>(); val9.customName = "ReturnToLeaderDefault"; val9.activationRequiresAimConfirmation = false; val9.activationRequiresAimTargetLoS = false; val9.activationRequiresTargetLoS = false; val9.aimType = (AimType)4; val9.buttonPressType = (ButtonPressType)0; val9.driverUpdateTimerOverride = -1f; val9.ignoreNodeGraph = false; val9.maxDistance = float.PositiveInfinity; val9.minDistance = 18f; val9.maxTargetHealthFraction = float.PositiveInfinity; val9.maxUserHealthFraction = float.PositiveInfinity; val9.minTargetHealthFraction = float.NegativeInfinity; val9.minUserHealthFraction = float.NegativeInfinity; val9.moveInputScale = 1f; val9.movementType = (MovementType)1; val9.moveTargetType = (TargetType)2; val9.noRepeat = false; val9.requireEquipmentReady = false; val9.requireSkillReady = false; val9.resetCurrentEnemyOnNextDriverSelection = true; val9.selectionRequiresAimTarget = false; val9.selectionRequiresOnGround = false; val9.selectionRequiresTargetLoS = false; val9.shouldFireEquipment = false; val9.shouldSprint = true; val9.skillSlot = (SkillSlot)(-1); AISkillDriver val10 = MasterObject.AddComponent<AISkillDriver>(); val10.customName = "WaitNearLeaderDefault"; val10.activationRequiresAimConfirmation = false; val10.activationRequiresAimTargetLoS = false; val10.activationRequiresTargetLoS = false; val10.aimType = (AimType)4; val10.buttonPressType = (ButtonPressType)0; val10.driverUpdateTimerOverride = -1f; val10.ignoreNodeGraph = false; val10.maxDistance = float.PositiveInfinity; val10.minDistance = 0f; val10.maxTargetHealthFraction = float.PositiveInfinity; val10.maxUserHealthFraction = float.PositiveInfinity; val10.minTargetHealthFraction = float.NegativeInfinity; val10.minUserHealthFraction = float.NegativeInfinity; val10.moveInputScale = 1f; val10.movementType = (MovementType)0; val10.moveTargetType = (TargetType)2; val10.noRepeat = false; val10.requireEquipmentReady = false; val10.requireSkillReady = false; val10.resetCurrentEnemyOnNextDriverSelection = true; val10.selectionRequiresAimTarget = false; val10.selectionRequiresOnGround = false; val10.selectionRequiresTargetLoS = false; val10.shouldFireEquipment = false; val10.shouldSprint = false; val10.skillSlot = (SkillSlot)(-1); } } public class QueensGland { [CompilerGenerated] private sealed class <>c__DisplayClass23_0 { public BeetleGlandBodyBehavior self; } [CompilerGenerated] private sealed class <>c__DisplayClass23_1 { public CharacterMaster owner; public <>c__DisplayClass23_0 CS$<>8__locals1; } [CompilerGenerated] private sealed class <>c__DisplayClass23_2 { public int extraglands; public <>c__DisplayClass23_1 CS$<>8__locals2; internal void <BeetleGland_Override>b__1(SpawnResult spawnResult) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (SetupSummonedBeetleGuard(spawnResult, CS$<>8__locals2.owner, extraglands)) { CS$<>8__locals2.CS$<>8__locals1.self.guardResummonCooldown = RespawnTime; } } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_FixedUpdate <>9__23_0; internal void <BeetleGland_Override>b__23_0(orig_FixedUpdate orig, BeetleGlandBodyBehavior self) { //IL_0175: 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_017f: 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_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0191: 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_01c2: Expected O, but got Unknown //IL_01c2: Expected O, but got Unknown //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown <>c__DisplayClass23_0 <>c__DisplayClass23_ = new <>c__DisplayClass23_0 { self = self }; if ((Object)(object)Stage.instance.sceneDef == (Object)(object)MainPlugin.BazaarSceneDef || !Object.op_Implicit((Object)(object)((BaseItemBodyBehavior)<>c__DisplayClass23_.self).body) || !Object.op_Implicit((Object)(object)((BaseItemBodyBehavior)<>c__DisplayClass23_.self).body.inventory)) { return; } <>c__DisplayClass23_1 <>c__DisplayClass23_2 = new <>c__DisplayClass23_1(); <>c__DisplayClass23_2.CS$<>8__locals1 = <>c__DisplayClass23_; <>c__DisplayClass23_2.owner = ((BaseItemBodyBehavior)<>c__DisplayClass23_2.CS$<>8__locals1.self).body.master; if (!Object.op_Implicit((Object)(object)<>c__DisplayClass23_2.owner)) { return; } BeetleGlandBodyBehavior self2 = <>c__DisplayClass23_2.CS$<>8__locals1.self; self2.guardResummonCooldown -= Time.fixedDeltaTime; if (!(<>c__DisplayClass23_2.CS$<>8__locals1.self.guardResummonCooldown <= 0f)) { return; } <>c__DisplayClass23_2 CS$<>8__locals0 = new <>c__DisplayClass23_2(); CS$<>8__locals0.CS$<>8__locals2 = <>c__DisplayClass23_2; CS$<>8__locals0.extraglands = Math.Max(0, CS$<>8__locals0.CS$<>8__locals2.owner.inventory.GetItemCountEffective(Items.BeetleGland) - MaxSummons); int deployableCount = CS$<>8__locals0.CS$<>8__locals2.owner.GetDeployableCount((DeployableSlot)2); int deployableSameSlotLimit = CS$<>8__locals0.CS$<>8__locals2.owner.GetDeployableSameSlotLimit((DeployableSlot)2); CS$<>8__locals0.CS$<>8__locals2.CS$<>8__locals1.self.guardResummonCooldown = 1f; if (deployableCount >= deployableSameSlotLimit) { return; } DirectorSpawnRequest val = new DirectorSpawnRequest((SpawnCard)Resources.Load("SpawnCards/CharacterSpawnCards/cscBeetleGuardAlly"), new DirectorPlacementRule { placementMode = (PlacementMode)1, minDistance = 3f, maxDistance = 40f, spawnOnTarget = ((Component)CS$<>8__locals0.CS$<>8__locals2.CS$<>8__locals1.self).transform }, RoR2Application.rng); val.summonerBodyObject = ((Component)CS$<>8__locals0.CS$<>8__locals2.CS$<>8__locals1.self).gameObject; val.teamIndexOverride = (TeamIndex)1; val.ignoreTeamMemberLimit = true; val.onSpawnedServer = (Action<SpawnResult>)Delegate.Combine(val.onSpawnedServer, (Action<SpawnResult>)delegate(SpawnResult spawnResult) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (SetupSummonedBeetleGuard(spawnResult, CS$<>8__locals0.CS$<>8__locals2.owner, CS$<>8__locals0.extraglands)) { CS$<>8__locals0.CS$<>8__locals2.CS$<>8__locals1.self.guardResummonCooldown = RespawnTime; } }); DirectorCore.instance.TrySpawnObject(val); } } private static string LogName = "(QueensGland)"; public static bool Enable = true; public static List<EquipmentDef> StageEliteEquipmentDefs = new List<EquipmentDef>(); public static EquipmentIndex DefaultAffixIndex = (EquipmentIndex)(-1); internal static int BaseDamage = 20; internal static int StackDamage = 20; internal static int BaseHealth = 10; internal static int StackHealth = 10; internal static int MaxSummons = 1; internal static float RespawnTime = 30f; internal static int AffixMode = 1; internal static string DefaultAffixName = "EliteFireEquipment"; internal static string AffixBlackList_Raw = ""; internal static List<EquipmentIndex> AffixBlackList; internal static void Begin() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown ClampConfig(); UpdateItemDescription(); if (AffixMode != 0) { Stage.onServerStageBegin += ServerStageBegin; } CharacterMaster.GetDeployableSameSlotLimit += new hook_GetDeployableSameSlotLimit(CharacterMaster_GetDeployableSameSlotLimit); CharacterBody.onBodyInventoryChangedGlobal += CharacterBody_OnInventoryChanged; BeetleGland_Override(); } internal static void PostLoad() { //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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Invalid comparison between Unknown and I4 //IL_004e: Unknown result type (might be due to invalid IL or missing references) if (AffixBlackList_Raw.Length <= 0) { return; } AffixBlackList = new List<EquipmentIndex>(); string[] array = AffixBlackList_Raw.Split(','); for (int i = 0; i < array.Length; i++) { EquipmentIndex val = EquipmentCatalog.FindEquipmentIndex(array[i].Trim()); if ((int)val > -1) { AffixBlackList.Add(val); } } } private static void ClampConfig() { BaseDamage = Math.Max(0, BaseDamage); StackDamage = Math.Max(0, StackDamage); BaseHealth = Math.Max(0, BaseHealth); StackHealth = Math.Max(0, StackHealth); MaxSummons = Math.Max(1, MaxSummons); RespawnTime = Math.Max(0f, RespawnTime); AffixMode = Math.Max(0, AffixMode); AffixMode = Math.Min(2, AffixMode); } private static void UpdateItemDescription() { MainPlugin.ModLogger.LogInfo((object)(LogName + " Changing item description.")); string text = "Recruit "; string text2 = "<style=cIsUtility>Summon "; if (AffixMode == 1) { text += "an Elite Beetle Guard."; text2 += "an Elite Beetle Guard</style>"; } else { text += "a Beetle Guard."; text2 += "a Beetle Guard</style>"; } if (MaxSummons > 1) { text2 += $" with bonus <style=cIsDamage>{(10 + BaseDamage) * 10}% damage</style>"; text2 += $" and <style=cIsHealing>{(10 + BaseHealth) * 10}% health</style>."; text2 += $" Can have <style=cIsUtility>1</style> <style=cStack>(+1 per stack)</style> total Guards, up to <style=cIsUtility>{MaxSummons}</style>."; if (StackHealth != 0 || StackDamage != 0) { text2 += " Further stacks give"; if (StackDamage != 0) { text2 += $" <style=cStack>+{StackDamage * 10}%</style> <style=cIsDamage>damage</style>"; text2 = ((StackHealth == 0) ? (text2 + ".") : (text2 + " and")); } if (StackHealth != 0) { text2 += $" <style=cStack>+{StackHealth * 10}%</style> <style=cIsHealing>health</style>"; } } } else { text2 += $" with bonus <style=cIsDamage>{(10 + BaseDamage) * 10}% <style=cStack>(+{StackDamage * 10}% per stack)</style> damage</style>"; text2 += $" and <style=cIsHealing>{(10 + BaseHealth) * 10}% <style=cStack>(+{StackHealth * 10}% per stack)</style> health</style>."; } LanguageAPI.Add("ITEM_BEETLEGLAND_PICKUP", text); LanguageAPI.Add("ITEM_BEETLEGLAND_DESC", text2); } private static void ServerStageBegin(Stage self) { UpdateEliteList(); } private static void UpdateEliteList() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_0028: Invalid comparison between Unknown and I4 //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { return; } DefaultAffixIndex = EquipmentCatalog.FindEquipmentIndex(DefaultAffixName); if ((int)DefaultAffixIndex != -1 && Run.instance.IsEquipmentExpansionLocked(DefaultAffixIndex)) { DefaultAffixIndex = (EquipmentIndex)(-1); } StageEliteEquipmentDefs.Clear(); EliteTierDef[] combatDirectorEliteTiers = EliteAPI.GetCombatDirectorEliteTiers(); if (combatDirectorEliteTiers.Length == 0) { return; } bool flag = Stage.instance.sceneDef.cachedName.Contains("moon"); bool flag2 = RunArtifactManager.instance.IsArtifactEnabled(Artifacts.EliteOnly); bool flag3 = Run.instance.loopClearCount > 0; EliteRules arg = (EliteRules)0; if (flag2) { arg = (EliteRules)1; } if (flag) { arg = (EliteRules)2; } for (int i = 0; i < combatDirectorEliteTiers.Length; i++) { if (!combatDirectorEliteTiers[i].isAvailable(arg)) { continue; } for (int j = 0; j < combatDirectorEliteTiers[i].eliteTypes.GetLength(0); j++) { if (Object.op_Implicit((Object)(object)combatDirectorEliteTiers[i].eliteTypes[j])) { EquipmentDef eliteEquipmentDef = combatDirectorEliteTiers[i].eliteTypes[j].eliteEquipmentDef; if (!StageEliteEquipmentDefs.Contains(eliteEquipmentDef) && (AffixBlackList == null || !AffixBlackList.Contains(eliteEquipmentDef.equipmentIndex))) { StageEliteEquipmentDefs.Add(eliteEquipmentDef); } } } } } private static int CharacterMaster_GetDeployableSameSlotLimit(orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 int result = orig.Invoke(self, slot); if ((int)slot != 2) { return result; } int num = 1; if (RunArtifactManager.instance.IsArtifactEnabled(Artifacts.swarmsArtifactDef)) { num = 2; } return Math.Min(MaxSummons, self.inventory.GetItemCountEffective(Items.BeetleGland)) * num; } private static void CharacterBody_OnInventoryChanged(CharacterBody self) { UpdateBeetleGuardStacks(self.master); } private static void UpdateBeetleGuardStacks(CharacterMaster owner) { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Invalid comparison between Unknown and I4 //IL_00af: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active || !Object.op_Implicit((Object)(object)owner) || owner.deployablesList == null) { return; } int deployableSameSlotLimit = owner.GetDeployableSameSlotLimit((DeployableSlot)2); int itemCountEffective = owner.inventory.GetItemCountEffective(Items.BeetleGland); int num = Math.Max(0, itemCountEffective - MaxSummons); int num2 = BaseDamage + StackDamage * num; int num3 = BaseHealth + StackHealth * num; int num4 = 0; for (int i = 0; i < owner.deployablesList.Count; i++) { if ((int)owner.deployablesList[i].slot != 2) { continue; } Deployable deployable = owner.deployablesList[i].deployable; if (!Object.op_Implicit((Object)(object)deployable)) { continue; } CharacterMaster component = ((Component)deployable).GetComponent<CharacterMaster>(); if (!Object.op_Implicit((Object)(object)component)) { continue; } num4++; if (num4 > deployableSameSlotLimit) { component.TrueKill(); continue; } Inventory inventory = component.inventory; if (Object.op_Implicit((Object)(object)inventory)) { inventory.ResetItemPermanent(Items.BoostDamage); inventory.ResetItemPermanent(Items.BoostHp); inventory.ResetItemPermanent(Items.MinionLeash); inventory.GiveItemPermanent(Items.BoostDamage, num2); inventory.GiveItemPermanent(Items.BoostHp, num3); inventory.GiveItemPermanent(Items.MinionLeash, 1); } } } private static void BeetleGland_Override() { //IL_0015: 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_0020: Expected O, but got Unknown object obj = <>c.<>9__23_0; if (obj == null) { hook_FixedUpdate val = delegate(orig_FixedUpdate orig, BeetleGlandBodyBehavior self) { //IL_0175: 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_017f: 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_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0191: 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_01c2: Expected O, but got Unknown //IL_01c2: Expected O, but got Unknown //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown if (!((Object)(object)Stage.instance.sceneDef == (Object)(object)MainPlugin.BazaarSceneDef) && Object.op_Implicit((Object)(object)((BaseItemBodyBehavior)self).body) && Object.op_Implicit((Object)(object)((BaseItemBodyBehavior)self).body.inventory)) { CharacterMaster owner = ((BaseItemBodyBehavior)self).body.master; if (Object.op_Implicit((Object)(object)owner)) { BeetleGlandBodyBehavior obj2 = self; obj2.guardResummonCooldown -= Time.fixedDeltaTime; if (self.guardResummonCooldown <= 0f) { int extraglands = Math.Max(0, owner.inventory.GetItemCountEffective(Items.BeetleGland) - MaxSummons); int deployableCount = owner.GetDeployableCount((DeployableSlot)2); int deployableSameSlotLimit = owner.GetDeployableSameSlotLimit((DeployableSlot)2); self.guardResummonCooldown = 1f; if (deployableCount < deployableSameSlotLimit) { DirectorSpawnRequest val2 = new DirectorSpawnRequest((SpawnCard)Resources.Load("SpawnCards/CharacterSpawnCards/cscBeetleGuardAlly"), new DirectorPlacementRule { placementMode = (PlacementMode)1, minDistance = 3f, maxDistance = 40f, spawnOnTarget = ((Component)self).transform }, RoR2Application.rng); val2.summonerBodyObject = ((Component)self).gameObject; val2.teamIndexOverride = (TeamIndex)1; val2.ignoreTeamMemberLimit = true; val2.onSpawnedServer = (Action<SpawnResult>)Delegate.Combine(val2.onSpawnedServer, (Action<SpawnResult>)delegate(SpawnResult spawnResult) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (SetupSummonedBeetleGuard(spawnResult, owner, extraglands)) { self.guardResummonCooldown = RespawnTime; } }); DirectorCore.instance.TrySpawnObject(val2); } } } } }; <>c.<>9__23_0 = val; obj = (object)val; } BeetleGlandBodyBehavior.FixedUpdate += (hook_FixedUpdate)obj; } private static bool SetupSummonedBeetleGuard(SpawnResult spawnResult, CharacterMaster owner, int itemcount) { //IL_0001: 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_00be: Expected O, but got Unknown //IL_0080: 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) GameObject spawnedInstance = spawnResult.spawnedInstance; if (!Object.op_Implicit((Object)(object)spawnedInstance)) { return false; } CharacterMaster component = spawnedInstance.GetComponent<CharacterMaster>(); if (Object.op_Implicit((Object)(object)component)) { Deployable val = ((Component)component).GetComponent<Deployable>(); if (!Object.op_Implicit((Object)(object)val)) { val = ((Component)component).gameObject.AddComponent<Deployable>(); } if (Object.op_Implicit((Object)(object)owner)) { CharacterBody body = component.GetBody(); if (Object.op_Implicit((Object)(object)body)) { component.teamIndex = owner.teamIndex; body.teamComponent.teamIndex = owner.teamIndex; } Helpers.GiveRandomEliteAffix(component); val.onUndeploy.AddListener(new UnityAction(component.TrueKill)); owner.AddDeployable(val, (DeployableSlot)2); UpdateBeetleGuardStacks(owner); return true; } } return false; } } public class ValorBuff { public static BuffDef ThisBuffDef; private static Color BuffColor = new Color(0.827f, 0.196f, 0.098f, 1f); internal static float Aggro_Range = 60f; internal static float Buff_Armor = 100f; internal static void Begin() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown MainPlugin.ModLogger.LogInfo((object)"Creating Valor buff."); CreateBuff(); if (Aggro_Range > 0f) { CharacterBody.OnBuffFirstStackGained += new hook_OnBuffFirstStackGained(CharacterBody_OnBuffFirstStackGained); } RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(CalculateStatsHook); } private static void CreateBuff() { //IL_000b: 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_001d: Unknown result type (might be due to invalid IL or missing references) ThisBuffDef = Buffs.AddNewBuff("Valor", Addressables.LoadAssetAsync<BuffDef>((object)"60b10a34c45065e4f8ee877e3c306f56").WaitForCompletion().iconSprite, BuffColor, canStack: false, isDebuff: false, isCooldown: false); } private static void CalculateStatsHook(CharacterBody sender, StatHookEventArgs args) { if (Object.op_Implicit((Object)(object)sender) && sender.HasBuff(ThisBuffDef)) { args.armorAdd += Buff_Armor; } } private static void CharacterBody_OnBuffFirstStackGained(orig_OnBuffFirstStackGained orig, CharacterBody self, BuffDef buff) { orig.Invoke(self, buff); if ((Object)(object)buff == (Object)(object)ThisBuffDef) { StealAggro(self); } } private static void StealAggro(CharacterBody self) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_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) //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) if (!NetworkServer.active) { return; } BullseyeSearch val = new BullseyeSearch(); val.viewer = self; val.teamMaskFilter = TeamMask.allButNeutral; ((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(self.master.teamIndex); val.sortMode = (SortMode)1; val.maxDistanceFilter = Aggro_Range; val.searchOrigin = self.inputBank.aimOrigin; val.searchDirection = self.inputBank.aimDirection; val.maxAngleFilter = 180f; val.filterByLoS = true; val.RefreshCandidates(); foreach (HurtBox result in val.GetResults()) { if (!Object.op_Implicit((Object)(object)result) || !Object.op_Implicit((Object)(object)result.healthComponent)) { continue; } CharacterBody body = result.healthComponent.body; if (Object.op_Implicit((Object)(object)body) && !body.isBoss && Object.op_Implicit((Object)(object)body.master)) { CharacterMaster master = result.healthComponent.body.master; BaseAI component = ((Component)master).GetComponent<BaseAI>(); if (Object.op_Implicit((Object)(object)component) && !component.isHealer) { component.currentEnemy.gameObject = ((Component)self.healthComponent).gameObject; component.currentEnemy.bestHurtBox = self.mainHurtBox; component.enemyAttention = Math.Min(9f, component.enemyAttentionDuration); component.targetRefreshTimer = component.enemyAttention; } } } } } }