Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of QueenGlandBuff v1.5.5
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.5.5")] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.kking117.QueenGlandBuff"; public const string MODNAME = "QueenGlandBuff"; public const string MODVERSION = "1.5.5"; 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_009a: 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); return; } } self.inventory.SetEquipmentIndex(QueensGland.DefaultAffixIndex); } } } 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.GetItemCount(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.GetItemCount(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 itemCount = owner.inventory.GetItemCount(Items.BeetleGland); int num = Math.Max(0, itemCount - 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.ResetItem(Items.BoostDamage); inventory.ResetItem(Items.BoostHp); inventory.ResetItem(Items.MinionLeash); inventory.GiveItem(Items.BoostDamage, num2); inventory.GiveItem(Items.BoostHp, num3); inventory.GiveItem(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.GetItemCount(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; } } } } } }