Decompiled source of BetterDrones v1.7.4
BetterDrones.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using BetterDrones.DroneStates; using BetterDrones.DroneTweaks; using BetterDrones.Utils; using BetterDrones.Utils.Paths; using EntityStates; using EntityStates.AffixEarthHealer; using EntityStates.Drone.DroneWeapon; using EntityStates.Engi.EngiBubbleShield; using EntityStates.Mage.Weapon; using EntityStates.Merc; using KinematicCharacterController; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.Drone.DroneWeapon; using On.EntityStates.Mage.Weapon; using On.RoR2; using On.RoR2.CharacterAI; using On.RoR2.Projectile; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.Projectile; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BetterDrones")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BetterDrones")] [assembly: AssemblyTitle("BetterDrones")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BetterDrones { [BepInPlugin("pseudopulse.BetterDrones", "BetterDrones", "1.7.4")] public class Main : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static hook_ManagedFixedUpdate <0>__OverrideInputsPerfectAim; public static hook_Fire <1>__AlliesDontEatShots; } public const string PluginGUID = "pseudopulse.BetterDrones"; public const string PluginAuthor = "pseudopulse"; public const string PluginName = "BetterDrones"; public const string PluginVersion = "1.7.4"; public static ManualLogSource ModLogger; public static ConfigFile config; public static bool MechanicalAllyOrbitEnabled; public static float MechanicalAllyOrbitDistance; public static float MechanicalAllyOrbitSpeed; public static float MechanicalAllyOrbitOffset; public static List<string> MechanicalAllyOrbitBlacklist; public static bool PingControlEnabled; public static bool PerfectAimEnabled; public static float Alpha; public static bool MechanicalAllyDisableSounds; public void Awake() { //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Expected O, but got Unknown //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Expected O, but got Unknown ModLogger = ((BaseUnityPlugin)this).Logger; config = ((BaseUnityPlugin)this).Config; MechanicalAllyOrbitEnabled = config.Bind<bool>("Global", "RoR1 Drone Movement", true, "Should aerial mechanical allies orbit you like in Risk of Rain 1? This disables AI movement changes.").Value; MechanicalAllyOrbitDistance = config.Bind<float>("Global", "Drone Orbit Distance", 3f, "The distance aerial mechanical allies should orbit you from.").Value; MechanicalAllyOrbitOffset = config.Bind<float>("Global", "Drone Orbit Height", 1.3f, "The height aerial mechanical allies should orbit you from.").Value; MechanicalAllyOrbitSpeed = config.Bind<float>("Global", "Drone Orbit Speed", 7f, "The speed in seconds in which it should take for an aerial mechanical ally to make a full rotation around you.").Value; MechanicalAllyOrbitBlacklist = config.Bind<string>("Global", "Orbit Blacklist", "RoboBallBossBody SuperRoboBallBossBody SquallBody BackupDroneBody FlameDroneBody MegaDroneBody", "List of body names to blacklist from orbit, seperated by whitespace.").Value.Split(' ').ToList(); MechanicalAllyOrbitBlacklist.Add("HellDroneBody"); MechanicalAllyOrbitBlacklist.Add("BoosterDroneBody"); MechanicalAllyOrbitBlacklist.Add("ShredderDrone"); MechanicalAllyDisableSounds = config.Bind<bool>("Global", "Disable Drone Idle Sounds", true, "Disables the sounds that drones play when idle. Recommended when using orbitals.").Value; PingControlEnabled = config.Bind<bool>("Global", "Ping Control", true, "Should mechanical allies target your most recent ping?").Value; PerfectAimEnabled = config.Bind<bool>("Global", "Perfect Aim", true, "Should mechanical allies have perfect aim?").Value; Alpha = config.Bind<float>("Global", "Ally Transparency", 0.5f, "The transparency of mechanical allies between 1 (fully visible) and 0 (fully transparent)").Value; if (MechanicalAllyOrbitEnabled) { OrbitalMovement.EnableOrbitalMovement(); } if (PingControlEnabled) { PingControl.EnablePingControls(); } if (PerfectAimEnabled) { object obj = <>O.<0>__OverrideInputsPerfectAim; if (obj == null) { hook_ManagedFixedUpdate val = OverrideInputsPerfectAim; <>O.<0>__OverrideInputsPerfectAim = val; obj = (object)val; } BaseAI.ManagedFixedUpdate += (hook_ManagedFixedUpdate)obj; } GunnerDrone.EnableChanges(); MissileDrone.EnableChanges(); HealingDrone.EnableChanges(); IncineratorDrone.EnableChanges(); EmergencyDrone.EnableChanges(); MegaDrone.EnableChanges(); GunnerTurret.EnableChanges(); IgnoreCollision.Enable(); DroneTransparency.EnableChanges(); DroneCloakPropagation.Setup(); object obj2 = <>O.<1>__AlliesDontEatShots; if (obj2 == null) { hook_Fire val2 = AlliesDontEatShots; <>O.<1>__AlliesDontEatShots = val2; obj2 = (object)val2; } BulletAttack.Fire += (hook_Fire)obj2; } private static void HopooWhat(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 4), (Instruction x) => ILPatternMatchingExt.MatchLdfld<HurtBox>(x, "healthComponent"), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<EntityState>(x, "get_healthComponent") })) { val.RemoveRange(4); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, 4); val.Index += 2; val.EmitDelegate<Func<EvisDash, HurtBox, bool>>((Func<EvisDash, HurtBox, bool>)((EvisDash evis, HurtBox hb) => hb.teamIndex != ((BaseState)evis).GetTeam())); } else { ModLogger.LogError((object)"Failed to apply merc dash IL hook"); } } private static void OverrideInputsPerfectAim(orig_ManagedFixedUpdate orig, BaseAI self, float deltaTime) { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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) orig.Invoke(self, deltaTime); Vector3 val = default(Vector3); if (NetworkServer.active && !((Object)((Component)self).gameObject).name.Contains("Drone2") && !((Object)((Component)self).gameObject).name.Contains("EmergencyDrone") && Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)((Component)self.body).gameObject) && ((Enum)self.body.bodyFlags).HasFlag((Enum)(object)(BodyFlags)2) && (int)self.body.teamComponent.teamIndex == 1 && self.currentEnemy.GetBullseyePosition(ref val)) { InputBankTest bodyInputBank = self.bodyInputBank; Vector3 val2 = val - self.bodyInputBank.aimOrigin; bodyInputBank.aimDirection = ((Vector3)(ref val2)).normalized; } } private static void AlliesDontEatShots(orig_Fire orig, BulletAttack self) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown if ((Delegate?)(object)self.filterCallback == (Delegate?)(object)BulletAttack.defaultFilterCallback) { self.filterCallback = (FilterCallback)delegate(BulletAttack attack, ref BulletHit hit) { //IL_0028: 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) return (!Object.op_Implicit((Object)(object)self.owner) || !Object.op_Implicit((Object)(object)hit.hitHurtBox) || hit.hitHurtBox.teamIndex != self.owner.GetComponent<TeamComponent>().teamIndex) && BulletAttack.DefaultFilterCallbackImplementation(attack, ref hit); }; } orig.Invoke(self); } } } namespace BetterDrones.DroneTweaks { public class DroneCloakPropagation { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_RecalculateStats <>9__0_0; internal void <Setup>b__0_0(orig_RecalculateStats orig, CharacterBody self) { <>c__DisplayClass0_0 CS$<>8__locals0 = new <>c__DisplayClass0_0 { self = self }; orig.Invoke(CS$<>8__locals0.self); if (!NetworkServer.active || !Main.MechanicalAllyOrbitEnabled || !CS$<>8__locals0.self.isPlayerControlled) { return; } IEnumerable<CharacterMaster> enumerable = CharacterMaster.readOnlyInstancesList.Where((CharacterMaster x) => Object.op_Implicit((Object)(object)x.minionOwnership) && (Object)(object)x.minionOwnership.ownerMaster == (Object)(object)CS$<>8__locals0.self.master && Object.op_Implicit((Object)(object)x.GetBody()) && ((Enum)x.GetBody().bodyFlags).HasFlag((Enum)(object)(BodyFlags)2)); if (CS$<>8__locals0.self.HasBuff(Buffs.Cloak)) { foreach (CharacterMaster item in enumerable) { if (!item.GetBody().HasBuff(Buffs.Cloak)) { item.GetBody().AddBuff(Buffs.Cloak); } } return; } foreach (CharacterMaster item2 in enumerable) { if (item2.GetBody().HasBuff(Buffs.Cloak)) { item2.GetBody().RemoveBuff(Buffs.Cloak); } } } } [CompilerGenerated] private sealed class <>c__DisplayClass0_0 { public CharacterBody self; internal bool <Setup>b__1(CharacterMaster x) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) return Object.op_Implicit((Object)(object)x.minionOwnership) && (Object)(object)x.minionOwnership.ownerMaster == (Object)(object)self.master && Object.op_Implicit((Object)(object)x.GetBody()) && ((Enum)x.GetBody().bodyFlags).HasFlag((Enum)(object)(BodyFlags)2); } } public static void Setup() { //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__0_0; if (obj == null) { hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!NetworkServer.active || !Main.MechanicalAllyOrbitEnabled || !self.isPlayerControlled) { return; } IEnumerable<CharacterMaster> enumerable = CharacterMaster.readOnlyInstancesList.Where((CharacterMaster x) => Object.op_Implicit((Object)(object)x.minionOwnership) && (Object)(object)x.minionOwnership.ownerMaster == (Object)(object)self.master && Object.op_Implicit((Object)(object)x.GetBody()) && ((Enum)x.GetBody().bodyFlags).HasFlag((Enum)(object)(BodyFlags)2)); if (self.HasBuff(Buffs.Cloak)) { foreach (CharacterMaster item in enumerable) { if (!item.GetBody().HasBuff(Buffs.Cloak)) { item.GetBody().AddBuff(Buffs.Cloak); } } return; } foreach (CharacterMaster item2 in enumerable) { if (item2.GetBody().HasBuff(Buffs.Cloak)) { item2.GetBody().RemoveBuff(Buffs.Cloak); } } }; <>c.<>9__0_0 = val; obj = (object)val; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj; } } public class DroneTransparency { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Start <>9__0_0; internal void <EnableChanges>b__0_0(orig_Start orig, CharacterBody self) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Invalid comparison between Unknown and I4 orig.Invoke(self); if (Object.op_Implicit((Object)(object)((Component)self).gameObject.GetComponent<VectorPID>()) && ((Enum)self.bodyFlags).HasFlag((Enum)(object)(BodyFlags)2) && (int)self.teamComponent.teamIndex == 1) { ((Component)self).gameObject.AddComponent<DroneAlphaController>(); } } } internal static void EnableChanges() { //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__0_0; if (obj == null) { hook_Start val = delegate(orig_Start orig, CharacterBody self) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Invalid comparison between Unknown and I4 orig.Invoke(self); if (Object.op_Implicit((Object)(object)((Component)self).gameObject.GetComponent<VectorPID>()) && ((Enum)self.bodyFlags).HasFlag((Enum)(object)(BodyFlags)2) && (int)self.teamComponent.teamIndex == 1) { ((Component)self).gameObject.AddComponent<DroneAlphaController>(); } }; <>c.<>9__0_0 = val; obj = (object)val; } CharacterBody.Start += (hook_Start)obj; } } public class DroneAlphaController : MonoBehaviour { private List<Renderer> renderers = new List<Renderer>(); private MaterialPropertyBlock propertyBlock = new MaterialPropertyBlock(); private float Alpha => Main.Alpha; private void Start() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_00b9: Expected O, but got Unknown CharacterBody component = ((Component)this).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } ModelLocator modelLocator = component.modelLocator; if (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform) && Object.op_Implicit((Object)(object)((Component)modelLocator.modelTransform).GetComponent<CharacterModel>())) { CharacterModel component2 = ((Component)modelLocator.modelTransform).GetComponent<CharacterModel>(); RendererInfo[] baseRendererInfos = component2.baseRendererInfos; foreach (RendererInfo val in baseRendererInfos) { renderers.Add(val.renderer); } SceneCamera.onSceneCameraPreRender += new SceneCameraDelegate(UpdateTransparency); } } private void UpdateTransparency(SceneCamera sceneCamera) { for (int i = 0; i < renderers.Count; i++) { Renderer val = renderers[i]; val.GetPropertyBlock(propertyBlock); propertyBlock.SetFloat("_Fade", Alpha); val.SetPropertyBlock(propertyBlock); } } private void OnDestroy() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown SceneCamera.onSceneCameraPreRender -= new SceneCameraDelegate(UpdateTransparency); } } public class EmergencyDrone { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__19_0; internal void <TweakBody>b__19_0(orig_OnEnter orig, StartHealBeam self) { if (((EntityState)self).characterBody.baseNameToken == "EMERGENCYDRONE_BODY_NAME") { self.healRateCoefficient = EmergencyDroneHealCoeff; self.baseDuration = EmergencyDroneDuration; self.targetSelectionRange = EmergencyDroneRange; } orig.Invoke(self); } } private static string EmergencyDroneMasterPath = "RoR2/Base/Drones/EmergencyDroneMaster.prefab"; private static string EmergencyDroneBodyPath = "RoR2/Base/Drones/EmergencyDroneBody.prefab"; private static bool EmergencyDroneEnabled = Main.config.Bind<bool>("Emergency Drone", "Enable Changes", true, "Should changes to the Emergency Drone be enabled?").Value; private static float EmergencyDroneMinDistanceFromOwner = Main.config.Bind<float>("Emergency Drone - AI", "Minimum Distance", 40f, "The minimum distance a Emergency Drone can be from you when it has no targets, vanilla is 35.").Value; private static bool EmergencyDroneUseTargeting = Main.config.Bind<bool>("Emergency Drone - AI", "Use Standard Targeting", false, "Use the weird special targeting that Emergency Drones have? vanilla is true.").Value; private static float EmergencyDroneBaseHealth = Main.config.Bind<float>("Emergency Drone - Stats", "Base Health", 460f, "The base health of a Emergency Drone, vanilla is 300.").Value; private static float EmergencyDroneBaseRegen = Main.config.Bind<float>("Emergency Drone - Stats", "Base Regen", 7.5f, "The base regen of a Emergency Drone, vanilla is 2.").Value; private static float EmergencyDroneBaseSpeed = Main.config.Bind<float>("Emergency Drone - Stats", "Base Speed", 24f, "The base speed of a Emergency Drone, vanilla is 17.").Value; private static float EmergencyDroneBaseAcceleration = Main.config.Bind<float>("Emergency Drone - Stats", "Base Acceleration", 24f, "The base acceleration of a Emergency Drone, vanilla is 17.").Value; private static float EmergencyDroneBaseDamage = Main.config.Bind<float>("Emergency Drone - Stats", "Base Damage", 5f, "The base damage of a Emergency Drone, vanilla is 10.").Value; private static int EmergencyDroneDuration = Main.config.Bind<int>("Emergency Drone - Primary", "Duration", 7, "The duration of a Emergency Drone's heal, vanilla is 5.").Value; private static int EmergencyDroneRange = Main.config.Bind<int>("Emergency Drone - Primary", "Range", 90, "The maximum targeting range of a Emergency Drone's heal, vanilla is 50.").Value; private static float EmergencyDroneHealCoeff = Main.config.Bind<int>("Emergency Drone - Primary", "Heal Coefficient", 1, "The heal coefficient of a Emergency Drone's healing beam, vanilla is 0.5.").Value; public static bool EmergencyDroneHealAuraEnabled = Main.config.Bind<bool>("Emergency Drone - Heal Aura", "Use Healing Aura", true, "Should Emergency Drones have a passive healing aura?").Value; public static float EmergencyDroneHealAuraFraction = Main.config.Bind<float>("Emergency Drone - Heal Aura", "Heal Fraction", 0.1f, "The healing fraction of an Emergency Drone's aura.").Value; public static float EmergencyDroneHealAuraRange = Main.config.Bind<float>("Emergency Drone - Heal Aura", "Range", 25f, "The range of an Emergency Drone's aura.").Value; public static float EmergencyDroneHealAuraInterval = Main.config.Bind<float>("Emergency Drone - Heal Aura", "Inteval", 5f, "The frequency in seconds of an Emergency Drone's aura.").Value; private static bool EmergencyDroneMoreStages = Main.config.Bind<bool>("Emergency Drone - More Stages", "Enabled", true, "Should the Emergency Drone spawn on more stages?").Value; private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)EmergencyDroneMasterPath).WaitForCompletion(); if (Main.MechanicalAllyOrbitEnabled) { AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { string customName = val2.customName; string text = customName; if (!(text == "HealLeader")) { if (text == "HealNearAlly") { val2.movementType = (MovementType)0; val2.maxTargetHealthFraction = 1f; val2.minDistance = EmergencyDroneRange; val2.activationRequiresAimConfirmation = false; } else { Object.Destroy((Object)(object)val2); } } else { val2.movementType = (MovementType)0; val2.maxTargetHealthFraction = 1f; val2.maxDistance = EmergencyDroneRange; val2.activationRequiresAimConfirmation = false; } } return; } AISkillDriver[] components2 = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val3 in components2) { switch (val3.customName) { case "HardLeashToLeader": val3.minDistance = EmergencyDroneMinDistanceFromOwner; break; case "HealLeader": val3.maxTargetHealthFraction = 1f; val3.maxDistance = EmergencyDroneRange; break; case "HealNearAlly": val3.maxTargetHealthFraction = 0.85f; val3.minDistance = EmergencyDroneRange; break; } } if (!EmergencyDroneUseTargeting) { Object.Destroy((Object)(object)val.GetComponent<EmergencyDroneCustomTarget>()); } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)EmergencyDroneBodyPath).WaitForCompletion(); CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = EmergencyDroneBaseHealth; component.baseMoveSpeed = EmergencyDroneBaseSpeed; component.baseAcceleration = EmergencyDroneBaseAcceleration; component.baseRegen = EmergencyDroneBaseRegen; component.baseDamage = EmergencyDroneBaseDamage; component.PerformAutoCalculateLevelStats(); if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } object obj = <>c.<>9__19_0; if (obj == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, StartHealBeam self) { if (((EntityState)self).characterBody.baseNameToken == "EMERGENCYDRONE_BODY_NAME") { self.healRateCoefficient = EmergencyDroneHealCoeff; self.baseDuration = EmergencyDroneDuration; self.targetSelectionRange = EmergencyDroneRange; } orig.Invoke(self); }; <>c.<>9__19_0 = val2; obj = (object)val2; } StartHealBeam.OnEnter += (hook_OnEnter)obj; if (EmergencyDroneHealAuraEnabled) { EntityStateMachine val3 = val.AddComponent<EntityStateMachine>(); SerializableEntityStateType val4 = default(SerializableEntityStateType); ((SerializableEntityStateType)(ref val4))..ctor(typeof(HealAura)); val3.initialStateType = val4; val3.mainStateType = val4; val3.customName = "HealAura"; NetworkStateMachine component2 = val.GetComponent<NetworkStateMachine>(); component2.stateMachines = val.GetComponents<EntityStateMachine>(); } } public static void EnableChanges() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0089: 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_0092: Expected O, but got Unknown //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_00a9: Unknown result type (might be due to invalid IL or missing references) if (!EmergencyDroneEnabled) { return; } TweakAI(); TweakBody(); if (!EmergencyDroneMoreStages) { return; } DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/Drones/iscBrokenEmergencyDrone.asset").WaitForCompletion(), selectionWeight = 1 }; List<Stage> list = new List<Stage> { (Stage)16, (Stage)32768, (Stage)64, (Stage)134217728 }; DirectorCardHolder val = new DirectorCardHolder { Card = card, InteractableCategory = (InteractableCategory)5 }; foreach (Stage item in list) { Helpers.AddNewInteractableToStage(val, item, ""); } } } public class GunnerDrone { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__17_0; internal void <TweakBody>b__17_0(orig_OnEnter orig, FireTurret self) { FireTurret.bulletCount = GunnerDroneBulletCount; FireTurret.force = GunnerDroneForce; FireTurret.maxSpread = GunnerDroneMaxSpread; FireTurret.damageCoefficient = GunnerDroneDamageCoeff; orig.Invoke(self); } } private static string GunnerDroneMasterPath = "RoR2/Base/Drones/Drone1Master.prefab"; private static string GunnerDroneBodyPath = "RoR2/Base/Drones/Drone1Body.prefab"; private static bool GunnerDroneEnabled = Main.config.Bind<bool>("Gunner Drone", "Enable Changes", true, "Should changes to the Gunner Drone be enabled?").Value; private static float GunnerDroneMinDistanceFromOwner = Main.config.Bind<float>("Gunner Drone - AI", "Minimum Distance", 50f, "The minimum distance a Gunner Drone can be from you when it has no targets, vanilla is 60.").Value; private static float GunnerDroneStrafeDistance = Main.config.Bind<float>("Gunner Drone - AI", "Strafe Distance", 30f, "The maximum distance in which a Gunner Drone will attempt to strafe enemies, vanilla is 15.").Value; private static float GunnerDroneChaseDistance = Main.config.Bind<float>("Gunner Drone - AI", "Chase Distance", 175f, "The maximum distance in which a Gunner Drone will attempt to chase a target, vanilla is 45.").Value; private static float GunnerDroneBaseHealth = Main.config.Bind<float>("Gunner Drone - Stats", "Base Health", 210f, "The base health of a Gunner Drone, vanilla is 150.").Value; private static float GunnerDroneBaseRegen = Main.config.Bind<float>("Gunner Drone - Stats", "Base Regen", 7.5f, "The base regen of a Gunner Drone, vanilla is 5.").Value; private static float GunnerDroneBaseSpeed = Main.config.Bind<float>("Gunner Drone - Stats", "Base Speed", 24f, "The base speed of a Gunner Drone, vanilla is 17.").Value; private static float GunnerDroneBaseAcceleration = Main.config.Bind<float>("Gunner Drone - Stats", "Base Acceleration", 24f, "The base acceleration of a Gunner Drone, vanilla is 17.").Value; private static float GunnerDroneBaseCrit = Main.config.Bind<float>("Gunner Drone - Stats", "Base Critical Chance", 10f, "The base critical chance of a Gunner Drone, vanilla is 0.").Value; private static float GunnerDroneBaseDamage = Main.config.Bind<float>("Gunner Drone - Stats", "Base Damage", 5f, "The base damage of a Gunner Drone, vanilla is 10.").Value; private static int GunnerDroneBulletCount = Main.config.Bind<int>("Gunner Drone - Primary", "Bullet Count", 5, "The total bullets fired by a Gunner Drone's primary, vanilla is 4.").Value; private static int GunnerDroneMaxSpread = Main.config.Bind<int>("Gunner Drone - Primary", "Maximum Spread", 0, "The maximum spread of a Gunner Drone's primary, vanilla is 1.").Value; private static int GunnerDroneForce = Main.config.Bind<int>("Gunner Drone - Primary", "Knockback", 250, "The knockback of a Gunner Drone's primary, vanilla is 200.").Value; private static float GunnerDroneDamageCoeff = Main.config.Bind<float>("Gunner Drone - Primary", "Damage Coefficient", 0.5f, "The damage coefficient of a Gunner Drone's primary, vanilla is 0.5.").Value; private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)GunnerDroneMasterPath).WaitForCompletion(); if (Main.MechanicalAllyOrbitEnabled) { AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { string customName = val2.customName; string text = customName; if (!(text == "StrafeNearbyEnemies")) { if (text == "ChaseFarEnemies") { val2.maxDistance = GunnerDroneChaseDistance; val2.movementType = (MovementType)0; } else { Object.Destroy((Object)(object)val2); } } else { val2.movementType = (MovementType)0; } } return; } AISkillDriver[] components2 = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val3 in components2) { switch (val3.customName) { case "HardLeashToLeader": val3.minDistance = GunnerDroneMinDistanceFromOwner; break; case "SoftLeashAttack": val3.minDistance = GunnerDroneMinDistanceFromOwner; break; case "SoftLeashToLeader": val3.minDistance = GunnerDroneMinDistanceFromOwner * 0.4f; break; case "StrafeNearbyEnemies": val3.maxDistance = GunnerDroneStrafeDistance; break; case "ChaseFarEnemies": val3.maxDistance = GunnerDroneChaseDistance; break; } } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown GameObject val = Addressables.LoadAssetAsync<GameObject>((object)GunnerDroneBodyPath).WaitForCompletion(); CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = GunnerDroneBaseHealth; component.baseCrit = GunnerDroneBaseCrit; component.baseMoveSpeed = GunnerDroneBaseSpeed; component.baseAcceleration = GunnerDroneBaseAcceleration; component.baseRegen = GunnerDroneBaseRegen; component.baseDamage = GunnerDroneBaseDamage; component.PerformAutoCalculateLevelStats(); if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } object obj = <>c.<>9__17_0; if (obj == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, FireTurret self) { FireTurret.bulletCount = GunnerDroneBulletCount; FireTurret.force = GunnerDroneForce; FireTurret.maxSpread = GunnerDroneMaxSpread; FireTurret.damageCoefficient = GunnerDroneDamageCoeff; orig.Invoke(self); }; <>c.<>9__17_0 = val2; obj = (object)val2; } FireTurret.OnEnter += (hook_OnEnter)obj; } public static void EnableChanges() { if (GunnerDroneEnabled) { TweakAI(); TweakBody(); } } } public class GunnerTurret { private static string GunnerTurretMasterPath = "RoR2/Base/Drones/Turret1Master.prefab"; private static string GunnerTurretBodyPath = "RoR2/Base/Drones/Turret1Body.prefab"; private static bool GunnerTurretEnabled = Main.config.Bind<bool>("Gunner Turret", "Enable Changes", true, "Should changes to the Gunner Turret be enabled?").Value; private static float GunnerTurretChaseDistance = Main.config.Bind<float>("Gunner Turret - AI", "Maximum Distance", 175f, "The maximum distance in which a Gunner Turret will attempt to target, vanilla is 60.").Value; private static float GunnerTurretBaseHealth = Main.config.Bind<float>("Gunner Turret - Stats", "Base Health", 310f, "The base health of a Gunner Turret, vanilla is 200.").Value; private static float GunnerTurretBaseRegen = Main.config.Bind<float>("Gunner Turret - Stats", "Base Regen", 12f, "The base regen of a Gunner Turret, vanilla is 7.5.").Value; private static float GunnerTurretBaseCrit = Main.config.Bind<float>("Gunner Turret - Stats", "Base Critical Chance", 10f, "The base critical chance of a Gunner Turret, vanilla is 0.").Value; private static float GunnerTurretBaseDamage = Main.config.Bind<float>("Gunner Turret - Stats", "Base Damage", 18f, "The base damage of a Gunner Turret, vanilla is 18.").Value; public static bool GunnerTurretShieldEnabled = Main.config.Bind<bool>("Gunner Turret - Energy Shield", "Enabled", true, "Should the Gunner Turret has a periodic energy shield after dealing enough damage?").Value; public static float GunnerTurretShieldDamage = Main.config.Bind<float>("Gunner Turret - Energy Shield", "Damage Required", 2500f, "The damage required to active a Gunner Turret's Energy Shield, in percentage of base damage.").Value; public static float GunnerTurretShieldDuration = Main.config.Bind<float>("Gunner Turret - Energy Shield", "Duration", 4f, "The duration of a Gunner Turret's Energy Shield.").Value; private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)GunnerTurretMasterPath).WaitForCompletion(); AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { if (val2.maxDistance == 60f) { val2.maxDistance = GunnerTurretChaseDistance; } } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)GunnerTurretBodyPath).WaitForCompletion(); CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = GunnerTurretBaseHealth; component.baseCrit = GunnerTurretBaseCrit; component.baseRegen = GunnerTurretBaseRegen; component.baseDamage = GunnerTurretBaseDamage; component.PerformAutoCalculateLevelStats(); if (GunnerTurretShieldEnabled) { EntityStateMachine val2 = val.AddComponent<EntityStateMachine>(); SerializableEntityStateType val3 = default(SerializableEntityStateType); ((SerializableEntityStateType)(ref val3))..ctor(typeof(TurretShield)); val2.initialStateType = val3; val2.mainStateType = val3; val2.customName = "Shield"; NetworkStateMachine component2 = val.GetComponent<NetworkStateMachine>(); component2.stateMachines = val.GetComponents<EntityStateMachine>(); } if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } } public static void EnableChanges() { if (GunnerTurretEnabled) { TweakAI(); TweakBody(); } } } public class HealingDrone { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__14_0; internal void <TweakBody>b__14_0(orig_OnEnter orig, StartHealBeam self) { if (((EntityState)self).characterBody.baseNameToken == "DRONE_HEALING_BODY_NAME") { self.healRateCoefficient = HealingDroneHealCoeff; self.baseDuration = HealingDroneDuration; self.targetSelectionRange = HealingDroneRange; } orig.Invoke(self); } } private static string HealingDroneMasterPath = "RoR2/Base/Drones/Drone2Master.prefab"; private static string HealingDroneBodyPath = "RoR2/Base/Drones/Drone2Body.prefab"; private static bool HealingDroneEnabled = Main.config.Bind<bool>("Healing Drone", "Enable Changes", true, "Should changes to the Healing Drone be enabled?").Value; private static float HealingDroneMinDistanceFromOwner = Main.config.Bind<float>("Healing Drone - AI", "Minimum Distance", 40f, "The minimum distance a Healing Drone can be from you when it has no targets, vanilla is 35.").Value; private static float HealingDroneBaseHealth = Main.config.Bind<float>("Healing Drone - Stats", "Base Health", 210f, "The base health of a Healing Drone, vanilla is 150.").Value; private static float HealingDroneBaseRegen = Main.config.Bind<float>("Healing Drone - Stats", "Base Regen", 7.5f, "The base regen of a Healing Drone, vanilla is 5.").Value; private static float HealingDroneBaseSpeed = Main.config.Bind<float>("Healing Drone - Stats", "Base Speed", 24f, "The base speed of a Healing Drone, vanilla is 17.").Value; private static float HealingDroneBaseAcceleration = Main.config.Bind<float>("Healing Drone - Stats", "Base Acceleration", 24f, "The base acceleration of a Healing Drone, vanilla is 17.").Value; private static float HealingDroneBaseCrit = Main.config.Bind<float>("Healing Drone - Stats", "Base Critical Chance", 15f, "The base critical chance of a Healing Drone, vanilla is 0.").Value; private static float HealingDroneBaseDamage = Main.config.Bind<float>("Healing Drone - Stats", "Base Damage", 5f, "The base damage of a Healing Drone, vanilla is 10.").Value; private static int HealingDroneDuration = Main.config.Bind<int>("Healing Drone - Primary", "Duration", 7, "The duration of a Healing Drone's heal, vanilla is 5.").Value; private static int HealingDroneRange = Main.config.Bind<int>("Healing Drone - Primary", "Range", 90, "The maximum targeting range of a Healing Drone's heal, vanilla is 50.").Value; private static float HealingDroneHealCoeff = Main.config.Bind<float>("Healing Drone - Primary", "Heal Coefficient", 1f, "The heal coefficient of a Healing Drone's healing beam, vanilla is 0.5.").Value; private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)HealingDroneMasterPath).WaitForCompletion(); if (Main.MechanicalAllyOrbitEnabled) { AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { string customName = val2.customName; string text = customName; if (!(text == "HealLeader")) { if (text == "HealNearAlly") { val2.movementType = (MovementType)0; val2.maxTargetHealthFraction = 0.85f; val2.activationRequiresAimConfirmation = false; val2.minDistance = 60f; } else { Object.Destroy((Object)(object)val2); } } else { val2.movementType = (MovementType)0; val2.maxTargetHealthFraction = 1f; val2.activationRequiresAimConfirmation = false; } } return; } AISkillDriver[] components2 = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val3 in components2) { switch (val3.customName) { case "HardLeashToLeader": val3.minDistance = HealingDroneMinDistanceFromOwner; break; case "HealLeader": val3.maxTargetHealthFraction = 1f; break; case "HealNearAlly": val3.maxTargetHealthFraction = 0.85f; val3.minDistance = 60f; break; } } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown GameObject val = Addressables.LoadAssetAsync<GameObject>((object)HealingDroneBodyPath).WaitForCompletion(); if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = HealingDroneBaseHealth; component.baseCrit = HealingDroneBaseCrit; component.baseMoveSpeed = HealingDroneBaseSpeed; component.baseAcceleration = HealingDroneBaseAcceleration; component.baseRegen = HealingDroneBaseRegen; component.baseDamage = HealingDroneBaseDamage; component.PerformAutoCalculateLevelStats(); object obj = <>c.<>9__14_0; if (obj == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, StartHealBeam self) { if (((EntityState)self).characterBody.baseNameToken == "DRONE_HEALING_BODY_NAME") { self.healRateCoefficient = HealingDroneHealCoeff; self.baseDuration = HealingDroneDuration; self.targetSelectionRange = HealingDroneRange; } orig.Invoke(self); }; <>c.<>9__14_0 = val2; obj = (object)val2; } StartHealBeam.OnEnter += (hook_OnEnter)obj; } public static void EnableChanges() { if (HealingDroneEnabled) { TweakAI(); TweakBody(); } } } public class IncineratorDrone { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__18_0; internal void <TweakBody>b__18_0(orig_OnEnter orig, Flamethrower self) { if (((EntityState)self).characterBody.baseNameToken == "FLAMEDRONE_BODY_NAME") { self.maxDistance = IncineratorDroneRange; Flamethrower.baseFlamethrowerDuration = IncineratorDroneDuration; Flamethrower.ignitePercentChance = IncineratorDroneBurnChance; Flamethrower.totalDamageCoefficient = IncineratorDroneDamageCoeff; } orig.Invoke(self); } } private static string IncineratorDroneMasterPath = "RoR2/Base/Drones/FlameDroneMaster.prefab"; private static string IncineratorDroneBodyPath = "RoR2/Base/Drones/FlameDroneBody.prefab"; private static bool IncineratorDroneEnabled = Main.config.Bind<bool>("Incinerator Drone", "Enable Changes", true, "Should changes to the Incinerator Drone be enabled?").Value; private static float IncineratorDroneMinDistanceFromOwner = Main.config.Bind<float>("Incinerator Drone - AI", "Minimum Distance", 120f, "The minimum distance a Incinerator Drone can be from you when it has no targets, vanilla is 120.").Value; private static float IncineratorDroneStrafeDistance = Main.config.Bind<float>("Incinerator Drone - AI", "Strafe Distance", 10f, "The maximum distance in which a Incinerator Drone will attempt to strafe enemies, vanilla is 12.").Value; private static float IncineratorDroneChaseDistance = Main.config.Bind<float>("Incinerator Drone - AI", "Chase Distance", 100f, "The maximum distance in which a Incinerator Drone will attempt to chase a target, vanilla is 100.").Value; private static float IncineratorDroneBaseHealth = Main.config.Bind<float>("Incinerator Drone - Stats", "Base Health", 450f, "The base health of a Incinerator Drone, vanilla is 300.").Value; private static float IncineratorDroneBaseRegen = Main.config.Bind<float>("Incinerator Drone - Stats", "Base Regen", 7.5f, "The base regen of a Incinerator Drone, vanilla is 5.").Value; private static float IncineratorDroneBaseSpeed = Main.config.Bind<float>("Incinerator Drone - Stats", "Base Speed", 24f, "The base speed of a Incinerator Drone, vanilla is 17.").Value; private static float IncineratorDroneBaseAcceleration = Main.config.Bind<float>("Incinerator Drone - Stats", "Base Acceleration", 24f, "The base acceleration of a Incinerator Drone, vanilla is 17.").Value; private static float IncineratorDroneBaseCrit = Main.config.Bind<float>("Incinerator Drone - Stats", "Base Critical Chance", 15f, "The base critical chance of a Incinerator Drone, vanilla is 0.").Value; private static float IncineratorDroneBaseDamage = Main.config.Bind<float>("Incinerator Drone - Stats", "Base Damage", 5f, "The base damage of a Incinerator Drone, vanilla is 10.").Value; private static int IncineratorDroneBaseArmor = Main.config.Bind<int>("Incinerator Drone - Stats", "Base Armor", 50, "The base armor of a Incinerator Drone, vanilla is 20.").Value; private static int IncineratorDroneRange = Main.config.Bind<int>("Incinerator Drone - Primary", "Range", 15, "The range of an Incinerator Drone's primary, vanilla is 12.").Value; private static int IncineratorDroneDuration = Main.config.Bind<int>("Incinerator Drone - Primary", "Duration", 5, "The duration of a Incinerator Drone's primary, vanilla is 3.").Value; private static int IncineratorDroneBurnChance = Main.config.Bind<int>("Incinerator Drone - Primary", "Ignite Chance", 100, "The ignite chance of a Incinerator Drone's primary, vanilla is 50.").Value; private static float IncineratorDroneDamageCoeff = Main.config.Bind<float>("Incinerator Drone - Primary", "Total Damage Coefficient", 25f, "The total damage coefficient of a Incinerator Drone's primary, vanilla is 20.").Value; private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)IncineratorDroneMasterPath).WaitForCompletion(); AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { switch (val2.customName) { case "HardLeashToLeader": val2.minDistance = IncineratorDroneMinDistanceFromOwner; break; case "StrafeNearbyEnemies": val2.maxDistance = IncineratorDroneStrafeDistance; break; case "ChaseFarEnemies": val2.maxDistance = IncineratorDroneChaseDistance; break; } } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown GameObject val = Addressables.LoadAssetAsync<GameObject>((object)IncineratorDroneBodyPath).WaitForCompletion(); CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = IncineratorDroneBaseHealth; component.baseCrit = IncineratorDroneBaseCrit; component.baseMoveSpeed = IncineratorDroneBaseSpeed; component.baseAcceleration = IncineratorDroneBaseAcceleration; component.baseRegen = IncineratorDroneBaseRegen; component.baseDamage = IncineratorDroneBaseDamage; component.baseArmor = IncineratorDroneBaseArmor; component.PerformAutoCalculateLevelStats(); if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } object obj = <>c.<>9__18_0; if (obj == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, Flamethrower self) { if (((EntityState)self).characterBody.baseNameToken == "FLAMEDRONE_BODY_NAME") { self.maxDistance = IncineratorDroneRange; Flamethrower.baseFlamethrowerDuration = IncineratorDroneDuration; Flamethrower.ignitePercentChance = IncineratorDroneBurnChance; Flamethrower.totalDamageCoefficient = IncineratorDroneDamageCoeff; } orig.Invoke(self); }; <>c.<>9__18_0 = val2; obj = (object)val2; } Flamethrower.OnEnter += (hook_OnEnter)obj; } public static void EnableChanges() { if (IncineratorDroneEnabled) { TweakAI(); TweakBody(); } } } public class MegaDrone { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__24_0; public static hook_OnEnter <>9__24_1; public static hook_PopulateScene <>9__25_0; internal void <TweakBody>b__24_0(orig_OnEnter orig, FireMegaTurret self) { self.bulletCount = MegaDroneBulletCount; FireMegaTurret.force = MegaDroneForce; FireMegaTurret.maxSpread = MegaDroneMaxSpread; FireMegaTurret.damageCoefficient = MegaDroneDamageCoeff; orig.Invoke(self); } internal void <TweakBody>b__24_1(orig_OnEnter orig, FireTwinRocket self) { FireTwinRocket.damageCoefficient = MegaDroneRocketDamage; FireTwinRocket.force = MegaDroneRocketForce; orig.Invoke(self); } internal void <SpawnTweak>b__25_0(orig_PopulateScene orig, SceneDirector self) { //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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (NetworkServer.active) { Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name == "frozenwall") { InteractableSpawnCard val = InteractableSpawnCard.iscBrokenMegaDrone.Load<InteractableSpawnCard>(); GameObject val2 = Object.Instantiate<GameObject>(((SpawnCard)val).prefab, SpawnLocation, Quaternion.identity); PurchaseInteraction component = val2.GetComponent<PurchaseInteraction>(); component.Networkcost = Run.instance.GetDifficultyScaledCost(component.cost); NetworkServer.Spawn(val2); } } } } private static string MegaDroneMasterPath = "RoR2/Base/Drones/MegaDroneMaster.prefab"; private static string MegaDroneBodyPath = "RoR2/Base/Drones/MegaDroneBody.prefab"; private static bool MegaDroneEnabled = Main.config.Bind<bool>("TC-280", "Enable Changes", true, "Should changes to the TC-280 be enabled?").Value; private static float MegaDroneMinDistanceFromOwner = Main.config.Bind<float>("TC-280 - AI", "Minimum Distance", 120f, "The minimum distance a TC-280 can be from you when it has no targets, vanilla is 180.").Value; private static float MegaDroneStrafeDistance = Main.config.Bind<float>("TC-280 - AI", "Strafe Distance", 90f, "The maximum distance in which a TC-280 will attempt to strafe enemies, vanilla is 60.").Value; private static float MegaDroneChaseDistance = Main.config.Bind<float>("TC-280 - AI", "Chase Distance", 175f, "The maximum distance in which a TC-280 will attempt to chase a target, vanilla is 90.").Value; private static float MegaDroneTooCloseDistance = Main.config.Bind<float>("TC-280 - AI", "Too Close Distance", 10f, "The distance in which the TC-280 deems 'too close', vanilla is 20.").Value; private static float MegaDroneBaseHealth = Main.config.Bind<float>("TC-280 - Stats", "Base Health", 1600f, "The base health of a TC-280, vanilla is 900.").Value; private static float MegaDroneBaseRegen = Main.config.Bind<float>("TC-280 - Stats", "Base Regen", 10f, "The base regen of a TC-280, vanilla is 5.").Value; private static float MegaDroneBaseSpeed = Main.config.Bind<float>("TC-280 - Stats", "Base Speed", 24f, "The base speed of a TC-280, vanilla is 20.").Value; private static float MegaDroneBaseAcceleration = Main.config.Bind<float>("TC-280 - Stats", "Base Acceleration", 24f, "The base acceleration of a TC-280, vanilla is 20.").Value; private static float MegaDroneBaseCrit = Main.config.Bind<float>("TC-280 - Stats", "Base Critical Chance", 10f, "The base critical chance of a TC-280, vanilla is 0.").Value; private static float MegaDroneBaseDamage = Main.config.Bind<float>("TC-280 - Stats", "Base Damage", 7.5f, "The base damage of a TC-280, vanilla is 14.").Value; private static int MegaDroneBulletCount = Main.config.Bind<int>("TC-280 - Primary", "Bullet Count", 20, "The total bullets fired by a TC-280's primary, vanilla is 15.").Value; private static int MegaDroneMaxSpread = Main.config.Bind<int>("TC-280 - Primary", "Maximum Spread", 0, "The maximum spread of a TC-280's primary, vanilla is 1.").Value; private static int MegaDroneForce = Main.config.Bind<int>("TC-280 - Primary", "Knockback", 400, "The knockback of a TC-280's primary, vanilla is 400.").Value; private static float MegaDroneDamageCoeff = Main.config.Bind<float>("TC-280 - Primary", "Damage Coefficient", 3f, "The damage coefficient of a TC-280's primary, vanilla is 2.5.").Value; private static float MegaDroneRocketDamage = Main.config.Bind<float>("TC-280 - Secondary", "Damage Coefficient", 5f, "The damage coefficient of a TC-280's rockets, vanilla is 4").Value; private static float MegaDroneRocketForce = Main.config.Bind<float>("TC-280 - Secondary", "Knockback", 1000f, "The knockback of a TC-280's rockets, vanilla is 1000").Value; public static bool MegaDroneLaserEnabled = Main.config.Bind<bool>("TC-280 - Laser", "Use Debuff Laser", false, "Should the TC-280 have a passive laser that debuffs targets?").Value; public static float MegaDroneLaserInterval = Main.config.Bind<float>("TC-280 - Laser", "Interval", 5f, "How often the laser should switch on.").Value; public static bool MegaDroneGuaranteed = Main.config.Bind<bool>("TC-280 - Map Secret", "Enabled", true, "Makes the TC-280 a guaranteed map secret on rallypoint and makes it no longer spawn naturally").Value; private static Vector3 SpawnLocation = new Vector3(54.6f, 112.2f, 71.3f); private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_00a0: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)MegaDroneMasterPath).WaitForCompletion(); if (Main.MechanicalAllyOrbitEnabled) { AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { switch (val2.customName) { case "StrafeCloseEnemy": val2.movementType = (MovementType)0; break; case "ChaseFarEnemiesRocket": val2.maxDistance = MegaDroneChaseDistance; val2.movementType = (MovementType)0; break; case "ChaseFarEnemiesGun": val2.maxDistance = MegaDroneChaseDistance; val2.movementType = (MovementType)0; break; default: Object.Destroy((Object)(object)val2); break; } } return; } AISkillDriver[] components2 = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val3 in components2) { switch (val3.customName) { case "LeashLeaderHard": val3.minDistance = MegaDroneMinDistanceFromOwner; break; case "StopTooCloseTarget": val3.maxDistance = MegaDroneTooCloseDistance; break; case "StrafeCloseEnemy": val3.maxDistance = MegaDroneStrafeDistance; break; case "ChaseFarEnemiesRocket": val3.maxDistance = MegaDroneChaseDistance; break; case "ChaseFarEnemiesGun": val3.maxDistance = MegaDroneChaseDistance; break; } } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)MegaDroneBodyPath).WaitForCompletion(); if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = MegaDroneBaseHealth; component.baseCrit = MegaDroneBaseCrit; component.baseMoveSpeed = MegaDroneBaseSpeed; component.baseAcceleration = MegaDroneBaseAcceleration; component.baseRegen = MegaDroneBaseRegen; component.baseDamage = MegaDroneBaseDamage; component.PerformAutoCalculateLevelStats(); object obj = <>c.<>9__24_0; if (obj == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, FireMegaTurret self) { self.bulletCount = MegaDroneBulletCount; FireMegaTurret.force = MegaDroneForce; FireMegaTurret.maxSpread = MegaDroneMaxSpread; FireMegaTurret.damageCoefficient = MegaDroneDamageCoeff; orig.Invoke(self); }; <>c.<>9__24_0 = val2; obj = (object)val2; } FireMegaTurret.OnEnter += (hook_OnEnter)obj; object obj2 = <>c.<>9__24_1; if (obj2 == null) { hook_OnEnter val3 = delegate(orig_OnEnter orig, FireTwinRocket self) { FireTwinRocket.damageCoefficient = MegaDroneRocketDamage; FireTwinRocket.force = MegaDroneRocketForce; orig.Invoke(self); }; <>c.<>9__24_1 = val3; obj2 = (object)val3; } FireTwinRocket.OnEnter += (hook_OnEnter)obj2; if (MegaDroneLaserEnabled) { EntityStateMachine val4 = val.AddComponent<EntityStateMachine>(); SerializableEntityStateType val5 = default(SerializableEntityStateType); ((SerializableEntityStateType)(ref val5))..ctor(typeof(MegaLaser)); val4.initialStateType = val5; val4.mainStateType = val5; val4.customName = "Laser"; NetworkStateMachine component2 = val.GetComponent<NetworkStateMachine>(); component2.stateMachines = val.GetComponents<EntityStateMachine>(); } } private static void SpawnTweak() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown if (!MegaDroneGuaranteed) { return; } InteractableSpawnCard.iscBrokenMegaDrone.Load<InteractableSpawnCard>().maxSpawnsPerStage = 0; object obj = <>c.<>9__25_0; if (obj == null) { hook_PopulateScene val = delegate(orig_PopulateScene orig, SceneDirector self) { //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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (NetworkServer.active) { Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name == "frozenwall") { InteractableSpawnCard val2 = InteractableSpawnCard.iscBrokenMegaDrone.Load<InteractableSpawnCard>(); GameObject val3 = Object.Instantiate<GameObject>(((SpawnCard)val2).prefab, SpawnLocation, Quaternion.identity); PurchaseInteraction component = val3.GetComponent<PurchaseInteraction>(); component.Networkcost = Run.instance.GetDifficultyScaledCost(component.cost); NetworkServer.Spawn(val3); } } }; <>c.<>9__25_0 = val; obj = (object)val; } SceneDirector.PopulateScene += (hook_PopulateScene)obj; } public static void EnableChanges() { if (MegaDroneEnabled) { TweakAI(); TweakBody(); SpawnTweak(); } } } public class MissileDrone { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__15_0; internal void <TweakBody>b__15_0(orig_OnEnter orig, FireMissileBarrage self) { FireMissileBarrage.damageCoefficient = MissileDroneDamageCoeff; FireMissileBarrage.maxMissileCount = MissileDroneMissileCount; orig.Invoke(self); } } private static string MissileDroneMasterPath = "RoR2/Base/Drones/DroneMissileMaster.prefab"; private static string MissileDroneBodyPath = "RoR2/Base/Drones/MissileDroneBody.prefab"; private static bool MissileDroneEnabled = Main.config.Bind<bool>("Missile Drone", "Enable Changes", true, "Should changes to the Missile Drone be enabled?").Value; private static float MissileDroneMinDistanceFromOwner = Main.config.Bind<float>("Missile Drone - AI", "Minimum Distance", 60f, "The minimum distance a Missile Drone can be from you when it has no targets, vanilla is 60.").Value; private static float MissileDroneStrafeDistance = Main.config.Bind<float>("Missile Drone - AI", "Strafe Distance", 15f, "The maximum distance in which a Missile Drone will attempt to strafe enemies, vanilla is 15.").Value; private static float MissileDroneChaseDistance = Main.config.Bind<float>("Missile Drone - AI", "Chase Distance", 175f, "The maximum distance in which a Missile Drone will attempt to chase a target, vanilla is 45.").Value; private static float MissileDroneBaseHealth = Main.config.Bind<float>("Missile Drone - Stats", "Base Health", 300f, "The base health of a Missile Drone, vanilla is 225.").Value; private static float MissileDroneBaseRegen = Main.config.Bind<float>("Missile Drone - Stats", "Base Regen", 7.5f, "The base regen of a Missile Drone, vanilla is 5.").Value; private static float MissileDroneBaseSpeed = Main.config.Bind<float>("Missile Drone - Stats", "Base Speed", 24f, "The base speed of a Missile Drone, vanilla is 17.").Value; private static float MissileDroneBaseAcceleration = Main.config.Bind<float>("Missile Drone - Stats", "Base Acceleration", 24f, "The base acceleration of a Missile Drone, vanilla is 17.").Value; private static float MissileDroneBaseCrit = Main.config.Bind<float>("Missile Drone - Stats", "Base Critical Chance", 15f, "The base critical chance of a Missile Drone, vanilla is 0.").Value; private static float MissileDroneBaseDamage = Main.config.Bind<float>("Missile Drone - Stats", "Base Damage", 7f, "The base damage of a Missile Drone, vanilla is 14.").Value; private static int MissileDroneMissileCount = Main.config.Bind<int>("Missile Drone - Primary", "Missile Count", 5, "The total missiles fired by a Missile Drone's primary, vanilla is 4.").Value; private static float MissileDroneDamageCoeff = Main.config.Bind<float>("Missile Drone - Primary", "Damage Coefficient", 2f, "The damage coefficient of a Missile Drone's primary, vanilla is 1.").Value; private static void TweakAI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)MissileDroneMasterPath).WaitForCompletion(); if (Main.MechanicalAllyOrbitEnabled) { AISkillDriver[] components = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val2 in components) { string customName = val2.customName; string text = customName; if (!(text == "StrafeNearbyEnemies")) { if (text == "ChaseFarEnemies") { val2.maxDistance = MissileDroneChaseDistance; val2.movementType = (MovementType)0; val2.moveTargetType = (TargetType)0; } else { Object.Destroy((Object)(object)val2); } } else { val2.movementType = (MovementType)0; val2.moveTargetType = (TargetType)0; } } return; } AISkillDriver[] components2 = val.GetComponents<AISkillDriver>(); foreach (AISkillDriver val3 in components2) { switch (val3.customName) { case "HardLeashToLeader": val3.minDistance = MissileDroneMinDistanceFromOwner; break; case "SoftLeashAttack": val3.minDistance = MissileDroneMinDistanceFromOwner; break; case "SoftLeashToLeader": val3.minDistance = MissileDroneMinDistanceFromOwner * 0.4f; break; case "StrafeNearbyEnemies": val3.maxDistance = MissileDroneStrafeDistance; break; case "ChaseFarEnemies": val3.maxDistance = MissileDroneChaseDistance; break; } } } private static void TweakBody() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown GameObject val = Addressables.LoadAssetAsync<GameObject>((object)MissileDroneBodyPath).WaitForCompletion(); CharacterBody component = val.GetComponent<CharacterBody>(); component.baseMaxHealth = MissileDroneBaseHealth; component.baseCrit = MissileDroneBaseCrit; component.baseMoveSpeed = MissileDroneBaseSpeed; component.baseAcceleration = MissileDroneBaseAcceleration; component.baseRegen = MissileDroneBaseRegen; component.baseDamage = MissileDroneBaseDamage; component.PerformAutoCalculateLevelStats(); if (Main.MechanicalAllyDisableSounds) { val.RemoveComponents<AkEvent>(); } object obj = <>c.<>9__15_0; if (obj == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, FireMissileBarrage self) { FireMissileBarrage.damageCoefficient = MissileDroneDamageCoeff; FireMissileBarrage.maxMissileCount = MissileDroneMissileCount; orig.Invoke(self); }; <>c.<>9__15_0 = val2; obj = (object)val2; } FireMissileBarrage.OnEnter += (hook_OnEnter)obj; } public static void EnableChanges() { if (MissileDroneEnabled) { TweakAI(); TweakBody(); } } } public static class IgnoreCollision { [CompilerGenerated] private static class <>O { public static hook_IgnoreCollisionsWithOwner <0>__Ignore; public static hook_Start <1>__Ignore2; } public static void Enable() { //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_001c: Expected O, but got Unknown //IL_0032: 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_003d: Expected O, but got Unknown object obj = <>O.<0>__Ignore; if (obj == null) { hook_IgnoreCollisionsWithOwner val = Ignore; <>O.<0>__Ignore = val; obj = (object)val; } ProjectileController.IgnoreCollisionsWithOwner += (hook_IgnoreCollisionsWithOwner)obj; object obj2 = <>O.<1>__Ignore2; if (obj2 == null) { hook_Start val2 = Ignore2; <>O.<1>__Ignore2 = val2; obj2 = (object)val2; } CharacterBody.Start += (hook_Start)obj2; } private static void Ignore2(orig_Start orig, CharacterBody self) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (((Enum)self.bodyFlags).HasFlag((Enum)(object)(BodyFlags)2) && Object.op_Implicit((Object)(object)self.master) && Object.op_Implicit((Object)(object)self.master.minionOwnership.ownerMaster) && Object.op_Implicit((Object)(object)((Component)self).GetComponent<Collider>())) { CharacterBody body = self.master.minionOwnership.ownerMaster.GetBody(); if (Object.op_Implicit((Object)(object)body)) { Physics.IgnoreCollision(((Component)self).GetComponent<Collider>(), ((Component)body).GetComponent<Collider>(), true); } } } private static void Ignore(orig_IgnoreCollisionsWithOwner orig, ProjectileController self, bool ignore) { orig.Invoke(self, ignore); if (!Object.op_Implicit((Object)(object)self.owner) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<CharacterBody>()) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<CharacterBody>().master)) { return; } List<CharacterMaster> list = CharacterMaster.readOnlyInstancesList.Where((CharacterMaster x) => Object.op_Implicit((Object)(object)x.minionOwnership) && Object.op_Implicit((Object)(object)x.minionOwnership.ownerMaster) && (Object)(object)x.minionOwnership.ownerMaster == (Object)(object)self.owner.GetComponent<CharacterBody>().master).ToList(); foreach (CharacterMaster item in list) { if (!Object.op_Implicit((Object)(object)item.GetBody()) || !Object.op_Implicit((Object)(object)item.GetBody().hurtBoxGroup)) { continue; } CharacterBody body = item.GetBody(); HurtBoxGroup hurtBoxGroup = body.hurtBoxGroup; HurtBox[] hurtBoxes = hurtBoxGroup.hurtBoxes; foreach (HurtBox val in hurtBoxes) { Collider[] myColliders = self.myColliders; foreach (Collider val2 in myColliders) { Physics.IgnoreCollision(val2, val.collider, true); } } } } } public class OrbitalMovement { private class OrbitController : MonoBehaviour { private float allyCount = 1f; private float fullAngle = 360f; private List<CharacterBody> orbiters = new List<CharacterBody>(); private float stopwatch = 0f; private float updateDelay = 0.4f; private CharacterBody body; private CharacterMaster master; private float initialTime; private float distance => Main.MechanicalAllyOrbitDistance + 0.1f * (allyCount - 1f); private Vector3 offset => new Vector3(0f, Main.MechanicalAllyOrbitOffset, 0f); private float speed => Main.MechanicalAllyOrbitSpeed; private void Start() { body = ((Component)this).GetComponent<CharacterBody>(); master = body.master; initialTime = Run.instance.GetRunStopwatch(); KillThisElf<CharacterMotor>(); KillThisElf<KinematicCharacterMotor>(); KillThisElf<RigidbodyMotor>(); KillThisElf<RigidbodyDirection>(); KillThisElf<VectorPID>(); KillThisElf<QuaternionPID>(); if (Object.op_Implicit((Object)(object)((Component)this).GetComponent<Rigidbody>())) { ((Component)this).GetComponent<Rigidbody>().isKinematic = true; } } private void KillThisElf<T>() where T : MonoBehaviour { T component = ((Component)this).GetComponent<T>(); if (Object.op_Implicit((Object)(object)component)) { ((Behaviour)(object)component).enabled = true; } } private void FixedUpdate() { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: 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_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) stopwatch += Time.fixedDeltaTime; if (stopwatch >= updateDelay) { stopwatch = 0f; FetchAllies(); } for (int i = 0; i < orbiters.Count; i++) { CharacterBody val = orbiters[i]; if (Object.op_Implicit((Object)(object)val)) { Rigidbody component = ((Component)val).GetComponent<Rigidbody>(); float num = Run.instance.GetRunStopwatch() - initialTime; Vector3 up = Vector3.up; Vector3 forward = body.transform.forward; Vector3 val2 = body.footPosition + GetOffset(val) + Quaternion.AngleAxis(fullAngle / allyCount * (float)i + num / speed * fullAngle, up) * forward * GetDistance(val); Vector3 val3 = (Object.op_Implicit((Object)(object)component) ? component.position : body.transform.position); float num2 = (body.isSprinting ? (body.moveSpeed * body.sprintingSpeedMultiplier * 1.35f) : (body.moveSpeed * 1.35f)); Vector3 val4 = Vector3.Lerp(val3, val2, num2 * Time.fixedDeltaTime); if (Object.op_Implicit((Object)(object)component)) { component.MovePosition(val4); } else { val.transform.position = val4; } } } } internal Vector3 GetOffset(CharacterBody orbiter) { //IL_0002: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: 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_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) return (Vector3)(BodyCatalog.GetBodyName(orbiter.bodyIndex) switch { "MegaDroneBody" => offset * 7f, "EmergencyDroneBody" => offset * 3f, "BackupDroneBody" => offset * 2f, "RoboBallRedBuddyBody" => offset * 5f, "RoboBallGreenBuddyBody" => offset * 5f, _ => offset, }); } internal float GetDistance(CharacterBody orbiter) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.GetBodyName(orbiter.bodyIndex) switch { "MegaDroneBody" => distance * 7f, "EmergencyDroneBody" => distance * 3f, "BackupDroneBody" => distance * 2f, "RoboBallRedBuddyBody" => distance * 5f, "RoboBallGreenBuddyBody" => distance * 5f, _ => distance, }; } internal void FetchAllies() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) IEnumerable<CharacterMaster> enumerable = CharacterMaster.readOnlyInstancesList.Where((CharacterMaster x) => Object.op_Implicit((Object)(object)x.minionOwnership) && (Object)(object)x.minionOwnership.ownerMaster == (Object)(object)master); foreach (CharacterMaster item in enumerable) { CharacterBody val = item.GetBody(); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)((Component)val).GetComponent<VectorPID>()) && ((Enum)val.bodyFlags).HasFlag((Enum)(object)(BodyFlags)2) && !Main.MechanicalAllyOrbitBlacklist.Contains(BodyCatalog.GetBodyName(val.bodyIndex)) && !orbiters.Contains(val)) { orbiters.Add(val); HurtBox[] hurtBoxes = val.hurtBoxGroup.hurtBoxes; foreach (HurtBox val2 in hurtBoxes) { val2.isBullseye = false; HurtBox.bullseyesList.Remove(val2); } } } for (int j = 0; j < orbiters.Count; j++) { CharacterBody val3 = orbiters[j]; if (!Object.op_Implicit((Object)(object)val3)) { orbiters.Remove(val3); } ((Component)val3).gameObject.layer = LayerIndex.noCollision.intVal; } allyCount = orbiters.Count; } } [CompilerGenerated] private static class <>O { public static hook_ManagedFixedUpdate <0>__OverrideInputs; public static hook_Start <1>__EnableOrbit; public static hook_OpenSummonReturnMaster <2>__ForceRecheck; } public static void EnableOrbitalMovement() { //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_001c: Expected O, but got Unknown //IL_0032: 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_003d: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown object obj = <>O.<0>__OverrideInputs; if (obj == null) { hook_ManagedFixedUpdate val = OverrideInputs; <>O.<0>__OverrideInputs = val; obj = (object)val; } BaseAI.ManagedFixedUpdate += (hook_ManagedFixedUpdate)obj; object obj2 = <>O.<1>__EnableOrbit; if (obj2 == null) { hook_Start val2 = EnableOrbit; <>O.<1>__EnableOrbit = val2; obj2 = (object)val2; } CharacterBody.Start += (hook_Start)obj2; object obj3 = <>O.<2>__ForceRecheck; if (obj3 == null) { hook_OpenSummonReturnMaster val3 = ForceRecheck; <>O.<2>__ForceRecheck = val3; obj3 = (object)val3; } SummonMasterBehavior.OpenSummonReturnMaster += (hook_OpenSummonReturnMaster)obj3; } private static CharacterMaster ForceRecheck(orig_OpenSummonReturnMaster orig, SummonMasterBehavior self, Interactor interactor) { CharacterMaster result = orig.Invoke(self, interactor); OrbitController component = ((Component)interactor).GetComponent<OrbitController>(); if (Object.op_Implicit((Object)(object)component)) { ((MonoBehaviour)component).Invoke("FetchAllies", 0.2f); } return result; } private static void OverrideInputs(orig_ManagedFixedUpdate orig, BaseAI self, float deltaTime) { //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) orig.Invoke(self, deltaTime); if (NetworkServer.active && Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)((Component)self.body).gameObject) && Object.op_Implicit((Object)(object)((Component)self.body).gameObject.GetComponent<OrbitController>())) { self.bodyInputBank.moveVector = Vector3.zero; } } private static void EnableOrbit(orig_Start orig, CharacterBody self) { orig.Invoke(self); if (NetworkServer.active && self.isPlayerControlled) { ((Component)self).gameObject.AddComponent<OrbitController>(); } } } public class PingControl { [CompilerGenerated] private static class <>O { public static hook_UpdateTargets <0>__OverrideTarget; } public static void EnablePingControls() { //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_001c: Expected O, but got Unknown object obj = <>O.<0>__OverrideTarget; if (obj == null) { hook_UpdateTargets val = OverrideTarget; <>O.<0>__OverrideTarget = val; obj = (object)val; } BaseAI.UpdateTargets += (hook_UpdateTargets)obj; } private static void OverrideTarget(orig_UpdateTargets orig, BaseAI self) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Invalid comparison between Unknown and I4 orig.Invoke(self); if (!NetworkServer.active || !Object.op_Implicit((Object)(object)self.master) || !Object.op_Implicit((Object)(object)self.master.minionOwnership) || !((Enum)self.body.bodyFlags).HasFlag((Enum)(object)(BodyFlags)2) || !Object.op_Implicit((Object)(object)self.master.minionOwnership.ownerMaster)) { return; } CharacterMaster ownerMaster = self.master.minionOwnership.ownerMaster; if (Object.op_Implicit((Object)(object)ownerMaster.playerCharacterMasterController) && Object.op_Implicit((Object)(object)ownerMaster.playerCharacterMasterController.pingerController)) { PingerController pingerController = ownerMaster.playerCharacterMasterController.pingerController; if (pingerController.currentPing.active && Object.op_Implicit((Object)(object)((PingInfo)(ref pingerController.currentPing)).targetGameObject) && Object.op_Implicit((Object)(object)((PingInfo)(ref pingerController.currentPing)).targetGameObject.GetComponent<CharacterBody>()) && (int)((PingInfo)(ref pingerController.currentPing)).targetGameObject.GetComponent<CharacterBody>().teamComponent.teamIndex != 1) { self.currentEnemy.gameObject = ((PingInfo)(ref pingerController.currentPing)).targetGameObject; } } } } } namespace BetterDrones.DroneStates { public class HealAura : BaseState { private float stopwatch = 0f; private float interval => EmergencyDrone.EmergencyDroneHealAuraInterval; private float range => EmergencyDrone.EmergencyDroneHealAuraRange; private float fraction => EmergencyDrone.EmergencyDroneHealAuraFraction; public override void FixedUpdate() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0137: 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) //IL_014f: Expected O, but got Unknown //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) if (!((EntityState)this).isAuthority) { return; } stopwatch += Time.fixedDeltaTime; if (!(stopwatch >= interval)) { return; } stopwatch = 0f; SphereSearch val = new SphereSearch(); val.radius = range; val.origin = ((EntityState)this).characterBody.corePosition; val.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; val.queryTriggerInteraction = (QueryTriggerInteraction)1; val.RefreshCandidates(); TeamMask val2 = default(TeamMask); ((TeamMask)(ref val2)).AddTeam(((BaseState)this).GetTeam()); val.FilterCandidatesByHurtBoxTeam(val2); val.OrderCandidatesByDistance(); val.FilterCandidatesByDistinctHurtBoxEntities(); HurtBox[] hurtBoxes = val.GetHurtBoxes(); HurtBox[] array = hurtBoxes; foreach (HurtBox val3 in array) { if (Object.op_Implicit((Object)(object)val3.healthComponent)) { val3.healthComponent.Heal(val3.healthComponent.fullCombinedHealth * fraction, default(ProcChainMask), true); } } val.ClearCandidates(); EffectManager.SpawnEffect(Heal.effectPrefab, new EffectData { scale = range, origin = ((EntityState)this).characterBody.corePosition }, true); } 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)7; } } public class MegaLaser : BaseState { private float stopwatch = 0f; private bool isActive = false; private GameObject currentTarget; private GameObject laserInstance; private Transform laserInstanceEnd; private GameObject laserInstance2; private Transform laserInstanceEnd2; private float interval => MegaDrone.MegaDroneLaserInterval; public override void OnEnter() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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) ((BaseState)this).OnEnter(); GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/LaserEngiTurret.prefab").WaitForCompletion(); Transform val2 = ((EntityState)this).GetModelChildLocator().FindChild("GatRight"); if (Object.op_Implicit((Object)(object)val2)) { laserInstance = Object.Instantiate<GameObject>(val, val2.position, val2.rotation); laserInstance.transform.parent = val2.parent; laserInstanceEnd = laserInstance.GetComponent<ChildLocator>().FindChild("LaserEnd"); } Transform val3 = ((EntityState)this).GetModelChildLocator().FindChild("GatLeft"); if (Object.op_Implicit((Object)(object)val3)) { laserInstance2 = Object.Instantiate<GameObject>(val, val3.position, val3.rotation); laserInstance2.transform.parent = val2.parent; laserInstanceEnd2 = laserInstance.GetComponent<ChildLocator>().FindChild("LaserEnd"); } } public override void FixedUpdate() { //IL_0088: 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) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { stopwatch += Time.fixedDeltaTime; if (stopwatch >= interval) { isActive = !isActive; stopwatch = 0f; } if (ShouldFireLaser() && Object.op_Implicit((Object)(object)currentTarget)) { laserInstanceEnd.position = currentTarget.transform.position; laserInstanceEnd2.position = currentTarget.transform.position; CharacterBody component = currentTarget.GetComponent<CharacterBody>(); List<BuffDef> list = new List<BuffDef> { Buffs.Cripple, Buffs.HealingDisabled, Buffs.Slow80, Buffs.Weak }; foreach (BuffDef item in list) { component.AddTimedBuff(item, Time.fixedDeltaTime * 5f, 1); } } } if (isActive && Object.op_Implicit((Object)(object)currentTarget)) { if (Object.op_Implicit((Object)(object)laserInstance)) { laserInstance.SetActive(true); } if (Object.op_Implicit((Object)(object)laserInstance2)) { laserInstance2.SetActive(true); } } else { if (Object.op_Implicit((Object)(object)laserInstance)) { laserInstance.SetActive(false); } if (Object.op_Implicit((Object)(object)laserInstance2)) { laserInstance2.SetActive(false); } } } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)laserInstance)) { EntityState.Destroy((Object)(object)laserInstance); } } protected bool ShouldFireLaser() { if (!isActive) { return false; } CharacterBody characterBody = ((EntityState)this).characterBody; object obj; if (characterBody == null) { obj = null; } else { CharacterMaster master = characterBody.master; obj = ((master != null) ? ((Component)master).GetComponent<BaseAI>() : null); } if (Object.op_Implicit((Object)obj)) { BaseAI component = ((Component)((EntityState)this).characterBody.master).GetComponent<BaseAI>(); if (Object.op_Implicit((Object)(object)component.currentEnemy.gameObject)) { currentTarget = component.currentEnemy.gameObject; return true; } } return false; } } public class TurretShield : BaseState { private bool isShieldUp = false; private float stopwatch = 0f; private float damageDealt = 0f; private GameObject shieldInstance; private GameObject shieldPrefab => GameObject.EngiBubbleShield.Load<GameObject>(); private float shieldDuration => GunnerTurret.GunnerTurretShieldDuration; private float damageRequired => GunnerTurret.GunnerTurretShieldDamage * 0.01f * base.damageStat; public override void OnEnter() { ((BaseState)this).OnEnter(); GlobalEventManager.onServerDamageDealt += DamageDealt; } public override void OnExit() { ((EntityState)this).OnExit(); GlobalEventManager.onServerDamageDealt -= DamageDealt; } private void DamageDealt(DamageReport report) { if (Object.op_Implicit((Object)(object)report.attackerBody) && (Object)(object)report.attackerBody == (Object)(object)((EntityState)this).characterBody && !isShieldUp) { damageDealt += report.damageDealt; if (damageDealt >= damageRequired) { damageDealt = 0f; TriggerShield(); } } } private void TriggerShield() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown shieldInstance = Object.Instantiate<GameObject>(shieldPrefab, ((EntityState)this).characterBody.corePosition, Quaternion.identity); Transform transform = shieldInstance.transform; transform.localScale *= 0.5f; shieldInstance.layer = LayerIndex.noCollision.intVal; ((Behaviour)shieldInstance.GetComponent<ProjectileStickOnImpact>()).enabled = false; shieldInstance.GetComponent<EntityStateMachine>().SetNextState((EntityState)new Deployed()); isShieldUp = true; AkSoundEngine.PostEvent(Events.Play_item_use_BFG_explode, ((EntityState)this).gameObject); } private void DisableShield() { if (Object.op_Implicit((Object)(object)shieldInstance)) { EntityState.Destroy((Object)(object)shieldInstance); isShieldUp = false; } AkSoundEngine.PostEvent(Events.Play_mage_shift_wall_explode, ((EntityState)this).gameObject); } public override void FixedUpdate() { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (isShieldUp) { stopwatch += Time.fixedDeltaTime; if (stopwatch >= shieldDuration) { DisableShield(); stopwatch = 0f; } } if (Object.op_Implicit((Object)(object)shieldInstance)) { ProjectileController component = shieldInstance.GetComponent<ProjectileController>(); if (Object.op_Implicit((Object)(object)component.ghost)) { ((Component)component.ghost).gameObject.SetActive(false); } shieldInstance.GetComponent<Rigidbody>().useGravity = false; shieldInstance.transform.position = ((EntityState)this).characterBody.corePosition; } } } } namespace BetterDrones.Utils { public static class AddressableUtils { public static T Load<T>(this string path) { //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) return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion(); } public static T LoadComponent<T>(this string path) where T : Component { return path.Load<GameObject>().GetComponent<T>(); } } public static class Events { public static uint Play_wBisonDeath = 1113517888u; public static uint Play_wBisonHit = 1197473233u; public static uint Play_wBisonShoot1 = 3268390400u; public static uint Play_wBisonSpawn = 1249767875u; public static uint Play_wBlastdoor = 3043230225u; public static uint Play_wBoarDeath = 3944593657u; public static uint Play_wBoarExplosion = 3091761946u; public static uint Play_wBoarHit = 1332006904u; public static uint Play_wBoarMDeath = 2887033908u; public static uint Play_wBoarShoot1 = 2651342963u; public static uint Play_wBoss1Shoot1 = 3380168965u; public static uint Play_wBoss1Shoot2 = 3380168966u; public static uint Play_wBossSkill2 = 857592033u; public static uint Play_wBubbleShield = 3999340508u; public static uint Play_wBullet1 = 3448409474u; public static uint Play_wBullet2 = 3448409473u; public static uint Play_wBullet3 = 3448409472u; public static uint Play_wCasing = 1800381192u; public static uint Play_wChainLightning = 1913174254u; public static uint Play_wChat = 1231583519u; public static uint Play_wChefShoot2_1 = 4002996080u; public static uint Play_wChest0 = 273185112u; public static uint Play_wChest1 = 273185113u; public static uint Play_wChest2 = 273185114u; public static uint Play_wChest5 = 273185117u; public static uint Play_wChildDeath = 3731152613u; public static uint Play_wChildGShoot1 = 2978407106u; public static uint Play_wChildHit = 4072685316u; public static uint Play_wChildShoot1 = 4260787991u; public static uint Play_wClayDeath = 1853199952u; public static uint Play_wClayHit = 2864197409u; public static uint Play_wClayShoot1 = 1969574576u; public static uint Play_wClaySpawn = 1481867283u; public static uint Play_wClick = 1105771879u; public static uint Play_wCoin = 1232716514u; public static uint Play_wCoins = 2360199605u; public static uint Play_wCrabDeath = 2914438815u; public static uint Play_wCrabSpawn = 400103432u; public static uint Play_wCrit_01 = 3774687669u; public static uint Play_wCrowbar = 2755541643u; public static uint Play_wCutsceneAlarm = 2172459452u; public static uint Play_wCutsceneJet = 197474154u; public static uint Play_wCutscenePass = 1461112566u; public static uint Play_wDifficulty = 3657652262u; public static uint Play_wDoll = 1118795882u; public static uint Play_wDrill = 1252691444u; public static uint Play_wDrone1Spawn = 3109566651u; public static uint Play_wEfMushroom = 3355655210u; public static uint Play_wEmbryo = 3519041107u; public static uint Play_wError = 2120356473u; public static uint Play_wExplosiveShot = 1244890662u; public static uint Play_wFeralShoot1 = 732734997u; public static uint Play_wFeralShoot2 = 732734998u; public static uint Play_wFrozen = 1850209911u; public static uint Play_wGeyser = 2014257388u; public static uint Play_wGiantJellyExplosion = 923348941u; public static uint Play_wGiantJellyHit = 3830172407u; public static uint Play_wGolemAttack1 = 1019251312u; public static uint Play_wGolemDeath = 469957963u; public static uint Play_wGolemHit = 1924739498u; public static uint Play_wGolemSpawn = 2658053020u; public static uint Play_wGuardDeath = 2195517878u; public static uint Play_wGuardHit = 3726358359u; public static uint Play_wGuardSpawn = 1193575573u; public static uint Play_wHeavyShoot1 = 2266555164u; public static uint Play_wHitlist = 1828045284u; public static uint Play_wHuntressShoot1 = 2714607293u; public static uint Play_wHuntressShoot3 = 2714607295u; public static uint Play_wImpDeath = 1405469125u; public static uint Play_wImpGShoot1 = 702433570u; public static uint Play_wImpHit = 2697432036u; public static uint Play_wImpShoot1 = 2776445175u; public static uint Play_wImpShoot2 = 2776445172u; public static uint Play_wJanitorShoot1_1 = 2483794322u; public static uint Play_wJ