Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of BadAssEngi v1.3.10
BadAssEngi/BadAssEngi.dll
Decompiled a year ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BadAssEngi.Animations; using BadAssEngi.Assets; using BadAssEngi.Assets.SeekerMissileScripts; using BadAssEngi.Assets.Sound; using BadAssEngi.AssetsScripts; using BadAssEngi.Networking; using BadAssEngi.Skills; using BadAssEngi.Skills.Primary.SeekerMissile; using BadAssEngi.Skills.Primary.States; using BadAssEngi.Skills.Secondary.ClusterMine; using BadAssEngi.Skills.Secondary.ClusterMine.EngiStates; using BadAssEngi.Skills.Secondary.ClusterMine.MineStates.ArmingStateMachine; using BadAssEngi.Skills.Secondary.ClusterMine.MineStates.MainStateMachine; using BadAssEngi.Skills.Secondary.OrbitalStrike; using BadAssEngi.Skills.Secondary.OrbitalStrike.EngiStates; using BadAssEngi.Skills.Secondary.OrbitalStrike.MineState.ArmingStateMachine; using BadAssEngi.Skills.Secondary.OrbitalStrike.MineState.MainStateMachine; using BadAssEngi.Skills.Secondary.SatchelMine.EngiStates; using BadAssEngi.Skills.Secondary.SatchelMine.MineStates.ArmingStateMachine; using BadAssEngi.Skills.Secondary.SatchelMine.MineStates.MainStateMachine; using BadAssEngi.Skills.Special; using BadAssEngi.Skills.Special.ShotgunTurret; using BadAssEngi.Util; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Engi.EngiWeapon; using EntityStates.Engi.Mine; using EntityStates.EngiTurret.EngiTurretWeapon; using EntityStates.Toolbot; using IL.EntityStates.EngiTurret.EngiTurretWeapon; using IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using On.EntityStates.Engi.EngiWeapon; using On.EntityStates.EngiTurret.EngiTurretWeapon; using On.RoR2; using On.RoR2.Orbs; using On.RoR2.Projectile; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using Rewired; using RoR2; using RoR2.CameraModes; using RoR2.CharacterAI; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BadAssEngi")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+b6a68e3e99c8b539df69f851ffae7f4e102eea2c")] [assembly: AssemblyProduct("BadAssEngi")] [assembly: AssemblyTitle("BadAssEngi")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } } namespace BadAssEngi { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("iDeathHD.BadAssEngi", "BadAssEngi", "1.3.10")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class BadAssEngi : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static Manipulator <0>__ChangeEngiColorAndAddMissileTrackerOnRespawn; public static Manipulator <1>__BlastAttackMultiplySelfMineDamage; public static Action <2>__RetrieveFirstGamePad; public static Manipulator <3>__ExpendMaxMinesCount; public static Func<BlastAttack, BlastAttackDamageInfo, HurtBox, BlastAttackDamageInfo> <4>__ScaleMineDamageDelegate; } [CompilerGenerated] private sealed class <DelayedEngiColorChangeAndUpdateGrenadeType>d__22 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float seconds; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedEngiColorChangeAndUpdateGrenadeType>d__22(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(seconds); <>1__state = 1; return true; case 1: <>1__state = -1; foreach (NetworkUser readOnlyLocalPlayers in NetworkUser.readOnlyLocalPlayersList) { CharacterMaster master = readOnlyLocalPlayers.master; if (Object.op_Implicit((Object)(object)master)) { CharacterBody body = master.GetBody(); if (Object.op_Implicit((Object)(object)body)) { BodyIndex bodyIndex = body.bodyIndex; if (bodyIndex != EngiBodyIndex) { continue; } uint skillVariant = readOnlyLocalPlayers.master.loadout.bodyLoadoutManager.GetSkillVariant(bodyIndex, 0); if (skillVariant == SkillLoader.SeekerSwarmSkillVariant) { if (!Object.op_Implicit((Object)(object)((Component)body).GetComponent<MissileTracker>())) { ((Component)body).gameObject.AddComponent<MissileTracker>(); } } else if (skillVariant == 0 || skillVariant == SkillLoader.SwappableGrenadeSkillVariant) { MissileTracker component = ((Component)body).GetComponent<MissileTracker>(); if (Object.op_Implicit((Object)(object)component)) { Object.Destroy((Object)(object)component); } } EngiColorMsg engiColorMsg = default(EngiColorMsg); engiColorMsg.NetId = ((Component)body).GetComponent<NetworkIdentity>().netId; EngiColorMsg engiColorMsg2 = engiColorMsg; if (Configuration.CustomEngiColor.Value) { string[] array = Configuration.EngiColor.Value.Split(','); engiColorMsg2.Color = new Color(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2])); } else { engiColorMsg2.Color = new Color(-1f, -1f, -1f); } NetMessageExtensions.Send((INetMessage)(object)engiColorMsg2, (NetworkDestination)1); } else { ((MonoBehaviour)Instance).StartCoroutine(DelayedEngiColorChangeAndUpdateGrenadeType(1f)); } } else { ((MonoBehaviour)Instance).StartCoroutine(DelayedEngiColorChangeAndUpdateGrenadeType(1f)); } } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public const string ModGuid = "iDeathHD.BadAssEngi"; private const string ModName = "BadAssEngi"; private const string ModVer = "1.3.10"; internal static BodyIndex EngiBodyIndex; private const string EngiBodyPrefabName = "EngiBody"; internal static Texture2D OrigEngiTexture; internal static Texture2D OrigAltEngiTexture; internal static Texture2D OrigTurretTexture; internal static BadAssEngi Instance { get; private set; } public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); Configuration.Init(((BaseUnityPlugin)this).Config); BaeAssets.Init(); SoundHelper.AddSoundBank(); InitBadAssEngi(); InitNetworking(); InitHooks(); Instance = this; } public void Update() { if (Object.op_Implicit((Object)(object)Run.instance) && !Application.isBatchMode) { KeybindController.Update(); } } private static void InitNetworking() { NetworkingAPI.RegisterMessageType<AnimMsg>(); NetworkingAPI.RegisterMessageType<DetonateMsg>(); NetworkingAPI.RegisterMessageType<EngiColorMsg>(); NetworkingAPI.RegisterMessageType<PlaySoundMsg>(); NetworkingAPI.RegisterMessageType<PlaySoundAndDestroyMsg>(); NetworkingAPI.RegisterMessageType<TurretHooks.SendRecalcStat>(); NetworkingAPI.RegisterMessageType<StopAnimMsg>(); NetworkingAPI.RegisterMessageType<StopSoundMsg>(); NetworkingAPI.RegisterMessageType<TurretColorDelayedMsgToServer>(); NetworkingAPI.RegisterMessageType<TurretColorMsg>(); NetworkingAPI.RegisterMessageType<TurretTypeMsgToServer>(); } private static void InitHooks() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown CommandHelper.AddToConsoleWhenReady(); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) EngiBodyIndex = BodyCatalog.FindBodyIndex("EngiBody"); }); object obj = <>O.<0>__ChangeEngiColorAndAddMissileTrackerOnRespawn; if (obj == null) { Manipulator val = ChangeEngiColorAndAddMissileTrackerOnRespawn; <>O.<0>__ChangeEngiColorAndAddMissileTrackerOnRespawn = val; obj = (object)val; } Stage.RespawnLocalPlayers += (Manipulator)obj; object obj2 = <>O.<1>__BlastAttackMultiplySelfMineDamage; if (obj2 == null) { Manipulator val2 = BlastAttackMultiplySelfMineDamage; <>O.<1>__BlastAttackMultiplySelfMineDamage = val2; obj2 = (object)val2; } BlastAttack.HandleHits += (Manipulator)obj2; ModCompatibilities(); EmotesHooks.Init(); OrbitalHooks.Init(); TurretHooks.Init(); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(KeybindController.RetrieveFirstGamePad)); } private static void ModCompatibilities() { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown bool flag = false; foreach (KeyValuePair<string, PluginInfo> pluginInfo in Chainloader.PluginInfos) { if (pluginInfo.Value.Metadata.GUID.Equals("at.aster.charactercustomizer")) { flag = true; break; } } if (!flag) { object obj = <>O.<3>__ExpendMaxMinesCount; if (obj == null) { Manipulator val = ExpendMaxMinesCount; <>O.<3>__ExpendMaxMinesCount = val; obj = (object)val; } CharacterMaster.GetDeployableSameSlotLimit += (Manipulator)obj; } } private static void InitBadAssEngi() { SkillLoader.Init(); BadAssTurret.Buffs = (from buff in Configuration.SharedBuffsWithTurret.Value.Split(',') select (BuffIndex)int.Parse(buff)).ToArray(); } private static void ChangeEngiColorAndAddMissileTrackerOnRespawn(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown ILCursor val = new ILCursor(il); int num = default(int); val.GotoNext(new Func<Instruction, bool>[3] { (Instruction i) => ILPatternMatchingExt.MatchLdloc(i, ref num), (Instruction i) => ILPatternMatchingExt.MatchLdstr(i, ""), (Instruction i) => ILPatternMatchingExt.MatchCallvirt<CharacterMaster>(i, "CallCmdRespawn") }); int index = val.Index; val.Index = index + 1; val.EmitDelegate<Action>((Action)delegate { ((MonoBehaviour)Instance).StartCoroutine(DelayedEngiColorChangeAndUpdateGrenadeType(1f)); }); } private static void BlastAttackMultiplySelfMineDamage(ILContext il) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int damageInfoLoc = 0; int targetLoc = 0; val.GotoNext(new Func<Instruction, bool>[3] { (Instruction i) => ILPatternMatchingExt.MatchLdfld<HitPoint>(i, "hurtBox"), (Instruction i) => ILPatternMatchingExt.MatchLdfld<HurtBox>(i, "healthComponent"), (Instruction i) => ILPatternMatchingExt.MatchStloc(i, ref targetLoc) }); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction i) => ILPatternMatchingExt.MatchInitobj(i, "RoR2.BlastAttack/BlastAttackDamageInfo") }); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction i) => ILPatternMatchingExt.MatchStloc(i, ref damageInfoLoc) }); int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, damageInfoLoc); val.Emit(OpCodes.Ldloc, targetLoc); val.EmitDelegate<Func<BlastAttack, BlastAttackDamageInfo, HurtBox, BlastAttackDamageInfo>>((Func<BlastAttack, BlastAttackDamageInfo, HurtBox, BlastAttackDamageInfo>)ScaleMineDamageDelegate); val.Emit(OpCodes.Stloc, damageInfoLoc); } private static BlastAttackDamageInfo ScaleMineDamageDelegate(BlastAttack blastAttack, BlastAttackDamageInfo blastAttackDamageInfo, HurtBox target) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) if ((int)blastAttack.attackerFiltering == 1 && (Object)(object)((Component)target).gameObject == (Object)(object)blastAttackDamageInfo.attacker && ((Object)blastAttack.inflictor).name.Contains("Mine")) { if (Object.op_Implicit((Object)(object)blastAttack.inflictor.GetComponent<RecursiveMine>())) { blastAttackDamageInfo.damage *= 2f; } else { blastAttackDamageInfo.damage *= 0.05f; } } return blastAttackDamageInfo; } private static void ExpendMaxMinesCount(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[2] { (Instruction i) => ILPatternMatchingExt.MatchLdcI4(i, 4), (Instruction i) => ILPatternMatchingExt.MatchStloc(i, 0) }); val.Next.OpCode = OpCodes.Ldc_I4; val.Next.Operand = 10000; val.GotoNext(new Func<Instruction, bool>[3] { (Instruction i) => ILPatternMatchingExt.MatchLdarg(i, 0), (Instruction i) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(i, "get_bodyInstanceObject"), (Instruction i) => ILPatternMatchingExt.MatchCallOrCallvirt<GameObject>(i, "GetComponent") }); val.RemoveRange(5); val.Emit(OpCodes.Ldc_I4, 10000); } [IteratorStateMachine(typeof(<DelayedEngiColorChangeAndUpdateGrenadeType>d__22))] private static IEnumerator DelayedEngiColorChangeAndUpdateGrenadeType(float seconds) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedEngiColorChangeAndUpdateGrenadeType>d__22(0) { seconds = seconds }; } } internal static class Configuration { private static ConfigFile _file; internal static IControllerTemplateDPad DPad; private const string BaeEmoteVolumeUsage = "Change the music volume of the emotes. Exemple Usage : bae_emote_volume 100 (range is 0-100)"; internal static ConfigEntry<string> TurretTypeKeyBind { get; private set; } internal static ConfigEntry<string> GrenadeTypeKeyBind { get; private set; } internal static ConfigEntry<string> MineTypeKeyBind { get; private set; } internal static ConfigEntry<string> SatchelManualDetonateKeyBind { get; private set; } internal static ConfigEntry<string> EngiColor { get; private set; } internal static ConfigEntry<string> TurretColor { get; private set; } internal static ConfigEntry<string> TrackerIndicatorColor { get; private set; } internal static ConfigEntry<string> ClusterMineColor { get; private set; } internal static ConfigEntry<bool> CustomEngiColor { get; private set; } internal static ConfigEntry<bool> CustomTurretColor { get; private set; } internal static ConfigEntry<bool> CustomTrackerIndicatorColor { get; private set; } internal static ConfigEntry<bool> CustomClusterMineColor { get; private set; } internal static ConfigEntry<string> SharedBuffsWithTurret { get; private set; } internal static ConfigEntry<float> DefaultTurretDamageCoefficient { get; private set; } internal static ConfigEntry<float> DefaultTurretAttackSpeed { get; private set; } internal static ConfigEntry<float> DefaultTurretDamagePerLevel { get; private set; } internal static ConfigEntry<float> DefaultTurretMaxDistanceTargeting { get; private set; } internal static ConfigEntry<float> MinigunTurretDamageCoefficient { get; private set; } internal static ConfigEntry<float> MinigunTurretAttackSpeed { get; private set; } internal static ConfigEntry<float> MinigunTurretDamagePerLevel { get; private set; } internal static ConfigEntry<float> MinigunTurretMaxDistanceTargeting { get; private set; } internal static ConfigEntry<float> MinigunTurretProcCoefficient { get; private set; } internal static ConfigEntry<float> RailgunTurretDamageCoefficient { get; private set; } internal static ConfigEntry<float> RailgunTurretAttackSpeed { get; private set; } internal static ConfigEntry<float> RailgunTurretDamagePerLevel { get; private set; } internal static ConfigEntry<float> RailgunTurretMaxDistanceTargeting { get; private set; } internal static ConfigEntry<float> ShotgunTurretDamageCoefficient { get; private set; } internal static ConfigEntry<float> ShotgunTurretAttackSpeed { get; private set; } internal static ConfigEntry<float> ShotgunTurretDamagePerLevel { get; private set; } internal static ConfigEntry<float> ShotgunTurretMaxDistanceTargeting { get; private set; } internal static ConfigEntry<int> ShotgunTurretBaseProjectileNumber { get; private set; } internal static ConfigEntry<float> ShotgunTurretSpreadCoefficient { get; private set; } internal static ConfigEntry<float> SeekerMissileDamageCoefficient { get; private set; } internal static ConfigEntry<int> SeekerMissileMaxProjectileNumber { get; private set; } internal static ConfigEntry<float> ClusterMineDamageCoefficient { get; private set; } internal static ConfigEntry<int> ClusterMineBaseMaxStock { get; private set; } internal static ConfigEntry<float> ClusterMineCooldown { get; private set; } internal static ConfigEntry<bool> ClusterMineVisualBouncing { get; private set; } internal static ConfigEntry<float> SatchelMineDamageCoefficient { get; private set; } internal static ConfigEntry<float> SatchelMineForce { get; private set; } internal static ConfigEntry<float> OrbitalStrikeBaseDamage { get; private set; } internal static ConfigEntry<float> OrbitalStrikeCooldown { get; private set; } internal static ConfigEntry<int> OrbitalStrikeRequiredStock { get; private set; } internal static ConfigEntry<Vector3> EmoteWindowPosition { get; private set; } internal static ConfigEntry<Vector3> EmoteWindowSize { get; private set; } internal static ConfigEntry<int> EmoteButtonUIPosX { get; private set; } internal static ConfigEntry<int> EmoteButtonUIPosY { get; private set; } internal static ConfigEntry<float> EmoteVolume { get; private set; } internal static void Init(ConfigFile file) { //IL_0638: Unknown result type (might be due to invalid IL or missing references) //IL_063d: Unknown result type (might be due to invalid IL or missing references) //IL_064e: Unknown result type (might be due to invalid IL or missing references) //IL_065f: Unknown result type (might be due to invalid IL or missing references) //IL_0664: Unknown result type (might be due to invalid IL or missing references) //IL_0675: Unknown result type (might be due to invalid IL or missing references) _file = file; TurretTypeKeyBind = _file.Bind<string>("Keybinds", "TurretType", "f1", "What keybind should be used for changing the type of turret. List of possible keybind at the end of this page : https://docs.unity3d.com/Manual/ConventionalGameInput.html"); GrenadeTypeKeyBind = _file.Bind<string>("Keybinds", "GrenadeType", "f3", "What keybind should be used for changing the type of grenades."); MineTypeKeyBind = _file.Bind<string>("Keybinds", "MineType", "f4", "What keybind should be used for changing the type of mines."); SatchelManualDetonateKeyBind = _file.Bind<string>("Keybinds", "Satchel Manual Detonate", "c", "What keybind should be used for manually detonating satchel mines."); CustomEngiColor = _file.Bind<bool>("Colors", "Enable Custom Engi Color", false, "Should the Engi have his custom colors activated ?"); CustomTurretColor = _file.Bind<bool>("Colors", "Enable Custom Turret Color", false, "Should the Engi's Turrets have its custom colors activated ?"); CustomTrackerIndicatorColor = _file.Bind<bool>("Colors", "Enable Custom Missile Tracker Indicator Color", false, "Should the Missile Tracker Indicator have a custom color ?"); CustomClusterMineColor = _file.Bind<bool>("Colors", "Enable Custom Cluster Mine Color", false, "Should the Cluster Mine have a custom color ?"); string text = string.Join(",", new float[3] { 1f, 5f, 1f }); EngiColor = _file.Bind<string>("Colors", "Engineer", text, "What color should the Engineer be. Example : 7.5 8 18.6"); string text2 = string.Join(",", new float[3] { 0f, 80f, 0f }); TurretColor = _file.Bind<string>("Colors", "Turret", text2, "What color should the Turrets be."); string text3 = string.Join(",", new float[3] { 0f, 80f, 0f }); TrackerIndicatorColor = _file.Bind<string>("Colors", "Missile Tracker Indicator", text3, "What color should the missile tracker indicator be."); string text4 = string.Join(",", new float[3] { 2.1f, 0f, 0f }); ClusterMineColor = _file.Bind<string>("Colors", "Cluster Mine", text4, "What color should the cluster mine effect be."); string text5 = string.Join(",", new int[9] { 10, 11, 17, 27, 28, 29, 30, 31, 33 }); SharedBuffsWithTurret = _file.Bind<string>("Shared", "Buffs", text5, "What buffs should be shared between the Engineer and its turrets. https://pastebin.com/EsYMneGY"); DefaultTurretDamageCoefficient = _file.Bind<float>("Default Turret", "Damage Coefficient", 0.7f, "What should be the damage coefficient for the Default Turret."); DefaultTurretAttackSpeed = _file.Bind<float>("Default Turret", "Attack Speed", 1f, "How much attack speed should the Default Turret have."); DefaultTurretDamagePerLevel = _file.Bind<float>("Default Turret", "Base Damage per Level", 3.8f, "How much base damage should the Default Turret get per level."); DefaultTurretMaxDistanceTargeting = _file.Bind<float>("Default Turret", "Max Distance Targeting", 60f, "How far should the Default Turret target monsters."); MinigunTurretDamageCoefficient = _file.Bind<float>("Minigun Turret", "Damage Coefficient", 0.134375f, "What should be the damage coefficient for the Minigun Turret."); MinigunTurretAttackSpeed = _file.Bind<float>("Minigun Turret", "Attack Speed", 6.9166f, "How much attack speed should the Minigun Turret have."); MinigunTurretDamagePerLevel = _file.Bind<float>("Minigun Turret", "Base Damage per Level", 3.8f, "How much base damage should the Minigun Turret get per level."); MinigunTurretMaxDistanceTargeting = _file.Bind<float>("Minigun Turret", "Max Distance Targeting", 50f, "How far should the Minigun Turret target monsters."); MinigunTurretProcCoefficient = _file.Bind<float>("Minigun Turret", "Proc Coefficient", 0.5f, "Defines how strong or frequent procs happen on an on-hit basis (0 to 1)."); RailgunTurretDamageCoefficient = _file.Bind<float>("Railgun Turret", "Damage Coefficient", 7.25f, "What should be the damage coefficient for the Railgun Turret."); RailgunTurretAttackSpeed = _file.Bind<float>("Railgun Turret", "Attack Speed", 0.1f, "How much attack speed should the Railgun Turret have."); RailgunTurretDamagePerLevel = _file.Bind<float>("Railgun Turret", "Base Damage per Level", 3.8f, "How much base damage should the Railgun Turret get per level."); RailgunTurretMaxDistanceTargeting = _file.Bind<float>("Railgun Turret", "Max Distance Targeting", 99999f, "How far should the Railgun Turret target monsters."); ShotgunTurretDamageCoefficient = _file.Bind<float>("Shotgun Turret", "Damage Coefficient", 0.4f, "What should be the damage coefficient for the Shotgun Turret."); ShotgunTurretAttackSpeed = _file.Bind<float>("Shotgun Turret", "Attack Speed", 0.33f, "How much attack speed should the Shotgun Turret have."); ShotgunTurretDamagePerLevel = _file.Bind<float>("Shotgun Turret", "Base Damage per Level", 3.8f, "How much base damage should the Shotgun Turret get per level."); ShotgunTurretMaxDistanceTargeting = _file.Bind<float>("Shotgun Turret", "Max Distance Targeting", 40f, "How far should the Shotgun Turret target monsters."); ShotgunTurretBaseProjectileNumber = _file.Bind<int>("Shotgun Turret", "Base Projectile Number", 12, "How many projectiles should the shotgun have by default."); ShotgunTurretSpreadCoefficient = _file.Bind<float>("Shotgun Turret", "Spread Coefficient", 1.75f, "How strong the spread coefficient for the shotgun should be."); SeekerMissileDamageCoefficient = _file.Bind<float>("Seeker Missile", "Damage Coefficient", 0.225f, "By how much the damage should be multiplied by."); SeekerMissileMaxProjectileNumber = _file.Bind<int>("Seeker Missile", "Projectile Number", 24, "How many missiles can you fire at max charge."); ClusterMineDamageCoefficient = _file.Bind<float>("Cluster Mine", "Damage Coefficient", 0.0355f, "By how much the damage should be multiplied by."); ClusterMineBaseMaxStock = _file.Bind<int>("Cluster Mine", "Base Stock", 3, "How many stock charge should the Engineer get by default."); ClusterMineCooldown = _file.Bind<float>("Cluster Mine", "Cooldown", 20f, "How long the cooldown between each recharges should be."); ClusterMineVisualBouncing = _file.Bind<bool>("Cluster Mine", "Bounce", false, "Should the cluster mines projectiles B O U N C E ?"); SatchelMineDamageCoefficient = _file.Bind<float>("Satchel Mine", "Damage Coefficient", 3f, "By how much the damage should be multiplied by."); SatchelMineForce = _file.Bind<float>("Satchel Mine", "Force", 3000f, "How strong the force vector should be."); OrbitalStrikeBaseDamage = _file.Bind<float>("Orbital Strike Mine", "Base Damage", 50f, "How much base damage should the Orbital Strike Mine deal."); OrbitalStrikeCooldown = _file.Bind<float>("Orbital Strike Mine", "Recharge Cooldown", 3f, "How long the recharge cooldown for getting 1 stock should be."); OrbitalStrikeRequiredStock = _file.Bind<int>("Orbital Strike Mine", "Required number of stock", 100, "How many stock are required for using the mine."); Vector3 one = Vector3.one; EmoteWindowPosition = _file.Bind<Vector3>("Emotes", "Emote Window Position", one, "The position of the Emote Window"); Vector3 one2 = Vector3.one; EmoteWindowSize = _file.Bind<Vector3>("Emotes", "Emote Window Size", one2, "The size of the Emote Window"); EmoteButtonUIPosX = _file.Bind<int>("Emotes", "Emote Button X Position", -170, "The X position of the Credit Button relative to the position of the primary skill square box. Higher X value is more left"); EmoteButtonUIPosY = _file.Bind<int>("Emotes", "Emote Button Y Position", -155, "The Y position of the Credit Button relative to the position of the primary skill square box. Higher Y value is more down"); EmoteVolume = _file.Bind<float>("Emotes", "Music Volume", 100f, "The volume value of the emotes music."); } private static void Reload() { _file.Reload(); } internal static void Save() { _file.Save(); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCReloadConfig(ConCommandArgs _) { Reload(); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCChangeEngiColor(ConCommandArgs args) { //IL_0132: 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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) if (((ConCommandArgs)(ref args)).Count == 1) { if (((ConCommandArgs)(ref args))[0].ToLower().Equals("disable")) { CustomEngiColor.Value = false; } else if (((ConCommandArgs)(ref args))[0].ToLower().Equals("enable")) { CustomEngiColor.Value = true; } } if (Object.op_Implicit((Object)(object)Run.instance)) { GameObject gameObject = ((Component)CameraRigController.readOnlyInstancesList.First().viewer.master.GetBody()).gameObject; if (((ConCommandArgs)(ref args)).Count == 3) { EngiColor.Value = string.Join(",", ((ConCommandArgs)(ref args))[0].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[1].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[2].ToString(CultureInfo.InvariantCulture)); CustomEngiColor.Value = true; _file.Save(); string[] array = EngiColor.Value.Split(','); EngiColorMsg engiColorMsg = default(EngiColorMsg); engiColorMsg.Color = new Color(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2])); engiColorMsg.NetId = gameObject.GetComponent<NetworkIdentity>().netId; NetMessageExtensions.Send((INetMessage)(object)engiColorMsg, (NetworkDestination)1); } else if (((ConCommandArgs)(ref args)).Count == 0 || ((ConCommandArgs)(ref args)).Count == 1) { EngiColorMsg engiColorMsg = default(EngiColorMsg); engiColorMsg.NetId = gameObject.GetComponent<NetworkIdentity>().netId; EngiColorMsg engiColorMsg2 = engiColorMsg; if (!CustomEngiColor.Value) { engiColorMsg2.Color = new Color(-1f, -1f, -1f); } else { string[] array2 = EngiColor.Value.Split(','); engiColorMsg2.Color = new Color(float.Parse(array2[0]), float.Parse(array2[1]), float.Parse(array2[2])); } NetMessageExtensions.Send((INetMessage)(object)engiColorMsg2, (NetworkDestination)1); } else { Debug.Log((object)"Usage : bae_engi_color R G B / bae_engi_color enable/disable. Exemple Usage : bae_engi_color 7 76 3.75. Or just \"bae_engi_color\" to force a color update."); } } else { Debug.Log((object)"Please launch a game run to use this command."); } } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCChangeTurretColor(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 3) { TurretColor.Value = string.Join(",", ((ConCommandArgs)(ref args))[0].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[1].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[2].ToString(CultureInfo.InvariantCulture)); CustomTurretColor.Value = true; } else if (((ConCommandArgs)(ref args)).Count == 1) { if (((ConCommandArgs)(ref args))[0].ToLower().Equals("disable")) { CustomTurretColor.Value = false; } else if (((ConCommandArgs)(ref args))[0].ToLower().Equals("enable")) { CustomTurretColor.Value = true; } } _file.Save(); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCChangeIndicatorColor(ConCommandArgs args) { //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) if (((ConCommandArgs)(ref args)).Count == 3) { TrackerIndicatorColor.Value = string.Join(",", ((ConCommandArgs)(ref args))[0].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[1].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[2].ToString(CultureInfo.InvariantCulture)); CustomTrackerIndicatorColor.Value = true; } else if (((ConCommandArgs)(ref args)).Count == 1) { if (((ConCommandArgs)(ref args))[0].ToLower().Equals("disable")) { CustomTrackerIndicatorColor.Value = false; } else if (((ConCommandArgs)(ref args))[0].ToLower().Equals("enable")) { CustomTrackerIndicatorColor.Value = true; } } else if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)("Current Color for Missile Tracker Indicator : " + (CustomTrackerIndicatorColor.Value ? TrackerIndicatorColor.Value : "Default"))); } _file.Save(); if (!Object.op_Implicit((Object)(object)Run.instance) || Application.isBatchMode || LocalUserManager.readOnlyLocalUsersList.Count <= 0) { return; } NetworkUser currentNetworkUser = LocalUserManager.GetFirstLocalUser().currentNetworkUser; if (!Object.op_Implicit((Object)(object)currentNetworkUser)) { return; } CharacterBody currentBody = currentNetworkUser.GetCurrentBody(); if (Object.op_Implicit((Object)(object)currentBody) && currentBody.bodyIndex == BadAssEngi.EngiBodyIndex) { MissileTracker component = ((Component)currentBody).GetComponent<MissileTracker>(); if (Object.op_Implicit((Object)(object)component)) { Object.Destroy((Object)(object)component); ((Component)currentBody).gameObject.AddComponent<MissileTracker>(); } } } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCChangeClusterColor(ConCommandArgs args) { //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) if (((ConCommandArgs)(ref args)).Count == 3) { ClusterMineColor.Value = string.Join(",", ((ConCommandArgs)(ref args))[0].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[1].ToString(CultureInfo.InvariantCulture), ((ConCommandArgs)(ref args))[2].ToString(CultureInfo.InvariantCulture)); CustomClusterMineColor.Value = true; } else if (((ConCommandArgs)(ref args)).Count == 1) { if (((ConCommandArgs)(ref args))[0].ToLower().Equals("disable")) { CustomClusterMineColor.Value = false; } else if (((ConCommandArgs)(ref args))[0].ToLower().Equals("enable")) { CustomClusterMineColor.Value = true; } } else if (((ConCommandArgs)(ref args)).Count == 0) { Debug.Log((object)("Current Color for Cluster Mine : " + (CustomClusterMineColor.Value ? ClusterMineColor.Value : "Default"))); } _file.Save(); GameObject obj = (ClusterMineVisualBouncing.Value ? BaeAssets.PrefabEngiClusterMineVisualBounce : BaeAssets.PrefabEngiClusterMineVisual); string[] array = ClusterMineColor.Value.Split(','); Color val = default(Color); ((Color)(ref val))..ctor(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2])); Renderer[] componentsInChildren = obj.GetComponentsInChildren<Renderer>(); foreach (Renderer obj2 in componentsInChildren) { List<Material> list = new List<Material>(); obj2.GetMaterials(list); int num = 0; foreach (Material item in list) { item.color = (CustomClusterMineColor.Value ? val : BaeAssets.OriginalClusterMineVisual[num]); num++; } } } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCBaeEmoteVolume(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count == 1) { if (float.TryParse(((ConCommandArgs)(ref args))[0], out var result)) { EmoteVolume.Value = result; _file.Save(); } else { Debug.Log((object)"Couldn't parse correctly the volume value. Change the music volume of the emotes. Exemple Usage : bae_emote_volume 100 (range is 0-100)"); } } else { Debug.Log((object)("Current emote volume value is " + EmoteVolume.Value)); Debug.Log((object)"Change the music volume of the emotes. Exemple Usage : bae_emote_volume 100 (range is 0-100)"); } if (AkSoundEngine.IsInitialized()) { SetEmoteVolumeRTPC(); } } internal static void SetEmoteVolumeRTPC() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) AkSoundEngine.SetRTPCValue("Volume_Emote", EmoteVolume.Value); } } internal static class KeybindController { internal static void RetrieveFirstGamePad() { foreach (Controller controller in ReInput.controllers.Controllers) { IGamepadTemplate template = controller.GetTemplate<IGamepadTemplate>(); if (template != null) { Configuration.DPad = template.dPad; break; } } } internal static void Update() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_0415: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0364: Unknown result type (might be due to invalid IL or missing references) foreach (NetworkUser readOnlyLocalPlayers in NetworkUser.readOnlyLocalPlayersList) { CharacterBody currentBody = readOnlyLocalPlayers.GetCurrentBody(); if (!Object.op_Implicit((Object)(object)currentBody) || currentBody.bodyIndex != BadAssEngi.EngiBodyIndex) { continue; } BodyLoadoutManager val = currentBody.master?.loadout.bodyLoadoutManager; if (val == null) { break; } uint skillVariant = val.GetSkillVariant(currentBody.bodyIndex, 0); uint skillVariant2 = val.GetSkillVariant(currentBody.bodyIndex, 1); uint skillVariant3 = val.GetSkillVariant(currentBody.bodyIndex, 3); if (GetKeyBindInput(Configuration.TurretTypeKeyBind) && skillVariant3 == SkillLoader.SwappableTurretSkillVariant) { switch (TurretTypeController.CurrentTurretType) { case TurretType.Default: TurretTypeController.CurrentTurretType = TurretType.Minigun; Chat.AddMessage("<style=cIsUtility>Turret Type is now: </style><style=cDeath>[Minigun]</style>"); break; case TurretType.Minigun: TurretTypeController.CurrentTurretType = TurretType.Railgun; Chat.AddMessage("<style=cIsUtility>Turret Type is now: </style><style=cDeath>[Railgun]</style>"); break; case TurretType.Railgun: TurretTypeController.CurrentTurretType = TurretType.Shotgun; Chat.AddMessage("<style=cIsUtility>Turret Type is now: </style><style=cDeath>[Hydra Launcher]</style>"); break; case TurretType.Shotgun: TurretTypeController.CurrentTurretType = TurretType.Default; Chat.AddMessage("<style=cIsUtility>Turret Type is now: </style><style=cDeath>[WeakBoy]</style>"); break; } } if (GetKeyBindInput(Configuration.GrenadeTypeKeyBind) && skillVariant == SkillLoader.SwappableGrenadeSkillVariant) { GenericSkill val2 = (Object.op_Implicit((Object)(object)currentBody.skillLocator) ? currentBody.skillLocator.primary : null); if (Object.op_Implicit((Object)(object)val2)) { MissileTracker component = ((Component)currentBody).GetComponent<MissileTracker>(); if (Object.op_Implicit((Object)(object)component)) { val2.UnsetSkillOverride((object)currentBody, SkillLoader.ChargeSeekerMissileSkillDef, (SkillOverridePriority)3); if (Object.op_Implicit((Object)(object)currentBody) && currentBody.bodyIndex == BadAssEngi.EngiBodyIndex && Object.op_Implicit((Object)(object)component)) { Object.Destroy((Object)(object)component); } Chat.AddMessage("<style=cIsUtility>Grenade Type is now: </style><style=cDeath>[Default]</style>"); } else { val2.SetSkillOverride((object)currentBody, SkillLoader.ChargeSeekerMissileSkillDef, (SkillOverridePriority)3); if (Object.op_Implicit((Object)(object)currentBody) && currentBody.bodyIndex == BadAssEngi.EngiBodyIndex) { ((Component)currentBody).gameObject.AddComponent<MissileTracker>(); } Chat.AddMessage("<style=cIsUtility>Grenade Type is now: </style><style=cDeath>[Seeker]</style>"); } } } if (GetKeyBindInput(Configuration.MineTypeKeyBind) && skillVariant2 == SkillLoader.SwappableMineSkillVariant) { GenericSkill val3 = (Object.op_Implicit((Object)(object)currentBody.skillLocator) ? currentBody.skillLocator.secondary : null); if (Object.op_Implicit((Object)(object)val3)) { if ((Object)(object)val3.skillDef == (Object)(object)SkillLoader.SatchelMineSkillDef) { float rechargeStopwatch = val3.rechargeStopwatch; int stock = val3.stock; val3.UnsetSkillOverride((object)currentBody, SkillLoader.SatchelMineSkillDef, (SkillOverridePriority)3); val3.rechargeStopwatch = rechargeStopwatch; val3.stock = stock; Chat.AddMessage("<style=cIsUtility>Mine Type is now: </style><style=cDeath>[Cluster]</style>"); } else { float rechargeStopwatch2 = val3.rechargeStopwatch; int stock2 = val3.stock; val3.SetSkillOverride((object)currentBody, SkillLoader.SatchelMineSkillDef, (SkillOverridePriority)3); val3.rechargeStopwatch = rechargeStopwatch2; val3.stock = stock2; Chat.AddMessage("<style=cIsUtility>Mine Type is now: </style><style=cDeath>[Satchel]</style>"); } } } if (GetKeyBindInput(Configuration.SatchelManualDetonateKeyBind)) { if (NetworkServer.active) { List<DeployableInfo> deployablesList = readOnlyLocalPlayers.master.deployablesList; if (deployablesList != null && deployablesList.Count >= 1) { foreach (DeployableInfo item in deployablesList) { if ((int)item.slot == 0 && Object.op_Implicit((Object)(object)currentBody.skillLocator) && (Object)(object)currentBody.skillLocator.secondary.skillDef == (Object)(object)SkillLoader.SatchelMineSkillDef && !Object.op_Implicit((Object)(object)((Component)item.deployable).GetComponent<RecursiveMine>())) { EntityStateMachine.FindByCustomName(((Component)item.deployable).gameObject, "Arming").SetNextState((EntityState)(object)new MineArmingFullSatchel()); EntityStateMachine.FindByCustomName(((Component)item.deployable).gameObject, "Main").SetNextState((EntityState)(object)new DetonateSatchel()); } } } } else { DetonateMsg detonateMsg = default(DetonateMsg); detonateMsg.SenderUserNetId = ((NetworkBehaviour)readOnlyLocalPlayers).netId; NetMessageExtensions.Send((INetMessage)(object)detonateMsg, (NetworkDestination)2); } } if ((currentBody.characterMotor.velocity != Vector3.zero || currentBody.inputBank.CheckAnyButtonDown()) && EngiEmoteController.IsEmoting && ((Component)currentBody).gameObject.GetComponent<EntityStateMachine>().CanInterruptState((InterruptPriority)1)) { StopAnimMsg stopAnimMsg = default(StopAnimMsg); stopAnimMsg.EngiNetId = ((Component)currentBody).GetComponent<NetworkIdentity>().netId; NetMessageExtensions.Send((INetMessage)(object)stopAnimMsg, (NetworkDestination)1); EngiEmoteController.IsEmoting = false; } } } private static bool GetKeyBindInput(ConfigEntry<string> entry) { if (entry.Value.Equals("dpadup")) { return Configuration.DPad.up.justPressed; } if (entry.Value.Equals("dpaddown")) { return Configuration.DPad.down.justPressed; } if (entry.Value.Equals("dpadleft")) { return Configuration.DPad.left.justPressed; } if (entry.Value.Equals("dpadright")) { return Configuration.DPad.right.justPressed; } return Input.GetKeyDown(entry.Value); } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } internal class ConstructTurretMessage : MessageBase { public GameObject builder; public Vector3 position; public Quaternion rotation; public override void Serialize(NetworkWriter writer) { //IL_000e: 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) writer.Write(builder); writer.Write(position); writer.Write(rotation); } public override void Deserialize(NetworkReader reader) { //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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) builder = reader.ReadGameObject(); position = reader.ReadVector3(); rotation = reader.ReadQuaternion(); } } } namespace BadAssEngi.Util { internal static class CoroutineUtil { [CompilerGenerated] private sealed class <DelayedDestroy>d__2 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float seconds; public GameObject gameObject; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedDestroy>d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(seconds); <>1__state = 1; return true; case 1: <>1__state = -1; Object.Destroy((Object)(object)gameObject); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DelayedMethod>d__0 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float seconds; public Action method; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedMethod>d__0(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(seconds); <>1__state = 1; return true; case 1: <>1__state = -1; method(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DelayedSound>d__1 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float seconds; public GameObject soundEmitter; public string soundName; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedSound>d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(seconds); <>1__state = 1; return true; case 1: { <>1__state = -1; float attackSpeed = soundEmitter.GetComponent<CharacterMaster>().GetBodyObject().GetComponent<CharacterBody>() .attackSpeed; soundEmitter.GetComponent<BadAssTurret>().SoundGunId = Util.PlaySound(soundName, soundEmitter, "Turret_Attack_Speed", attackSpeed); Log.Debug("Railgun Turret Attack Speed : " + attackSpeed); return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [IteratorStateMachine(typeof(<DelayedMethod>d__0))] internal static IEnumerator DelayedMethod(float seconds, Action method) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedMethod>d__0(0) { seconds = seconds, method = method }; } [IteratorStateMachine(typeof(<DelayedSound>d__1))] internal static IEnumerator DelayedSound(string soundName, GameObject soundEmitter, float seconds) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedSound>d__1(0) { soundName = soundName, soundEmitter = soundEmitter, seconds = seconds }; } [IteratorStateMachine(typeof(<DelayedDestroy>d__2))] internal static IEnumerator DelayedDestroy(GameObject gameObject, float seconds) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedDestroy>d__2(0) { gameObject = gameObject, seconds = seconds }; } } internal static class SkillExtensions { internal static SkillFamily AddSkillFamily(string skillFamilyName, params SkillDef[] skills) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val).name = skillFamilyName; val.variants = (Variant[])(object)new Variant[skills.Length]; for (int i = 0; i < skills.Length; i++) { Variant[] variants = val.variants; int num = i; Variant val2 = new Variant { skillDef = skills[i] }; ((Variant)(ref val2)).viewableNode = new Node(skills[i].skillName, false, (Node)null); variants[num] = val2; ContentAddition.AddSkillDef(skills[i]); LoadoutAPI.AddSkill(((SerializableEntityStateType)(ref skills[i].activationState)).stateType); } ContentAddition.AddSkillFamily(val); return val; } internal static void SetSkillFamily(this GenericSkill genericSkill, string skillFamilyName, params SkillDef[] skills) { SkillFamily skillFamily = AddSkillFamily(skillFamilyName, skills); genericSkill._skillFamily = skillFamily; } } internal static class TextureUtil { internal static Texture2D ReplaceWithRamp(Texture2D origTex, Vector3 vec, float startGrad) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_009a: 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) Texture2D val = new Texture2D(((Texture)origTex).width, ((Texture)origTex).height, (TextureFormat)4, false); int num = Mathf.CeilToInt(startGrad * 255f); int num2 = ((Texture)val).width - num; Color32 val2 = default(Color32); ((Color32)(ref val2))..ctor((byte)0, (byte)0, (byte)0, (byte)0); Color32 val3 = default(Color32); ((Color32)(ref val3))..ctor((byte)0, (byte)0, (byte)0, (byte)0); for (int i = 0; i < ((Texture)val).width; i++) { if (i >= num) { float num3 = ((float)i - (float)num) / (float)num2; val3.r = (byte)Mathf.RoundToInt(255f * num3 * vec.x); val3.g = (byte)Mathf.RoundToInt(255f * num3 * vec.y); val3.b = (byte)Mathf.RoundToInt(255f * num3 * vec.z); val3.a = (byte)Mathf.RoundToInt(128f * num3); } else { val3 = val2; } for (int j = 0; j < ((Texture)val).height; j++) { val.SetPixel(i, j, Color32.op_Implicit(val3)); } } ((Texture)val).wrapMode = (TextureWrapMode)1; val.Apply(); return val; } } } namespace BadAssEngi.Skills { internal static class SkillLoader { private static SkillLocator _engiSkillLocator; internal static int SwappableGrenadeSkillVariant; internal static int SeekerSwarmSkillVariant; internal static int SatchelMineSkillVariant; internal static int SwappableMineSkillVariant; internal static int OrbitalStrikeSkillVariant; internal static int SwappableTurretSkillVariant; internal static SkillDef ChargeSwappableGrenadesSkillDef { get; private set; } internal static SkillDef ChargeSeekerMissileSkillDef { get; private set; } internal static SkillDef SwappableMineSkillDef { get; private set; } internal static SkillDef SatchelMineSkillDef { get; private set; } internal static SkillDef OrbitalStrikeSkillDef { get; private set; } internal static SkillDef SwappableTurretSkillDef { get; private set; } internal static void Init() { _engiSkillLocator = BaeAssets.EngiBodyPrefab.GetComponent<SkillLocator>(); InitEngiPrimarySkills(); InitEngiSecondarySkills(); InitEngiSpecialSkills(); RegisterStatesTypes(); } private static void InitEngiPrimarySkills() { SeekerMissile(); SwappableGrenade(); List<SkillDef> list = _engiSkillLocator.primary._skillFamily.variants.Select((Variant variant) => variant.skillDef).ToList(); SeekerSwarmSkillVariant = list.Count; list.Add(ChargeSeekerMissileSkillDef); SwappableGrenadeSkillVariant = list.Count; list.Add(ChargeSwappableGrenadesSkillDef); _engiSkillLocator.primary.SetSkillFamily(_engiSkillLocator.primary._skillFamily.name, list.ToArray()); } private static void InitEngiSecondarySkills() { SwappableMine(); SatchelMine(); OrbitalStrikeMine(); List<SkillDef> list = _engiSkillLocator.secondary._skillFamily.variants.Select((Variant variant) => variant.skillDef).ToList(); SatchelMineSkillVariant = 0; list[SatchelMineSkillVariant] = SatchelMineSkillDef; SwappableMineSkillVariant = list.Count; list.Add(SwappableMineSkillDef); OrbitalStrikeSkillVariant = list.Count; list.Add(OrbitalStrikeSkillDef); _engiSkillLocator.secondary.SetSkillFamily(_engiSkillLocator.secondary._skillFamily.name, list.ToArray()); } private static void InitEngiSpecialSkills() { SwappableTurret(); List<SkillDef> list = _engiSkillLocator.special._skillFamily.variants.Select((Variant variant) => variant.skillDef).ToList(); SwappableTurretSkillVariant = list.Count; list.Add(SwappableTurretSkillDef); _engiSkillLocator.special.SetSkillFamily(_engiSkillLocator.special._skillFamily.name, list.ToArray()); } private static void SeekerMissile() { //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) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) ChargeSeekerMissileSkillDef = ScriptableObject.CreateInstance<SkillDef>(); ((Object)ChargeSeekerMissileSkillDef).name = "BAESeekerSwarm"; ChargeSeekerMissileSkillDef.skillName = "BAESeekerSwarm"; ChargeSeekerMissileSkillDef.skillNameToken = "Seeker Swarm"; ChargeSeekerMissileSkillDef.skillDescriptionToken = "Seeker : Auto-targeting. Charge up to <style=cIsDamage>" + Configuration.SeekerMissileMaxProjectileNumber.Value + "</style> missiles that deal <style=cIsDamage>" + Configuration.SeekerMissileDamageCoefficient.Value * 100f + "% damage</style> each."; ChargeSeekerMissileSkillDef.activationStateMachineName = "Weapon"; ChargeSeekerMissileSkillDef.activationState = new SerializableEntityStateType(typeof(ChargeSeekerMissile)); ChargeSeekerMissileSkillDef.interruptPriority = (InterruptPriority)0; ChargeSeekerMissileSkillDef.baseRechargeInterval = 0f; ChargeSeekerMissileSkillDef.baseMaxStock = 1; ChargeSeekerMissileSkillDef.rechargeStock = 1; ChargeSeekerMissileSkillDef.beginSkillCooldownOnSkillEnd = false; ChargeSeekerMissileSkillDef.requiredStock = 1; ChargeSeekerMissileSkillDef.stockToConsume = 1; ChargeSeekerMissileSkillDef.isCombatSkill = true; ChargeSeekerMissileSkillDef.cancelSprintingOnActivation = true; ChargeSeekerMissileSkillDef.canceledFromSprinting = false; ChargeSeekerMissileSkillDef.mustKeyPress = false; ChargeSeekerMissileSkillDef.icon = BaeAssets.IconMissileM1; } private static void SwappableGrenade() { //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_00fa: Unknown result type (might be due to invalid IL or missing references) ChargeSwappableGrenadesSkillDef = ScriptableObject.CreateInstance<SkillDef>(); ((Object)ChargeSwappableGrenadesSkillDef).name = "BAESwappableGrenade"; ChargeSwappableGrenadesSkillDef.skillName = "BAESwappableGrenade"; ChargeSwappableGrenadesSkillDef.skillNameToken = "Bouncing Grenades and Seeker Swarm"; ChargeSwappableGrenadesSkillDef.skillDescriptionToken = "Current Key Bind for switching : <style=cIsUtility>" + Configuration.GrenadeTypeKeyBind.Value + "</style>" + Environment.NewLine + "Bouncing : Charge up to <style=cIsDamage>8</style> grenades that deal <style=cIsDamage>100% damage</style> each." + Environment.NewLine + "Seeker : Auto-targeting. Charge up to <style=cIsDamage>" + Configuration.SeekerMissileMaxProjectileNumber.Value + "</style> missiles that deal <style=cIsDamage>" + Configuration.SeekerMissileDamageCoefficient.Value * 100f + "% damage</style> each."; ChargeSwappableGrenadesSkillDef.activationStateMachineName = "Weapon"; ChargeSwappableGrenadesSkillDef.activationState = new SerializableEntityStateType(typeof(ChargeGrenades)); ChargeSwappableGrenadesSkillDef.interruptPriority = (InterruptPriority)0; ChargeSwappableGrenadesSkillDef.baseRechargeInterval = 0f; ChargeSwappableGrenadesSkillDef.baseMaxStock = 1; ChargeSwappableGrenadesSkillDef.rechargeStock = 1; ChargeSwappableGrenadesSkillDef.beginSkillCooldownOnSkillEnd = false; ChargeSwappableGrenadesSkillDef.requiredStock = 1; ChargeSwappableGrenadesSkillDef.stockToConsume = 1; ChargeSwappableGrenadesSkillDef.isCombatSkill = true; ChargeSwappableGrenadesSkillDef.cancelSprintingOnActivation = true; ChargeSwappableGrenadesSkillDef.canceledFromSprinting = false; ChargeSwappableGrenadesSkillDef.mustKeyPress = false; ChargeSwappableGrenadesSkillDef.icon = BaeAssets.IconSwappableGrenades; } private static void SwappableMine() { //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) SwappableMineSkillDef = ScriptableObject.CreateInstance<SkillDef>(); ((Object)SwappableMineSkillDef).name = "BAESwappableMine"; SwappableMineSkillDef.rechargeStock = 1; SwappableMineSkillDef.requiredStock = 1; SwappableMineSkillDef.stockToConsume = 1; SwappableMineSkillDef.fullRestockOnAssign = false; SwappableMineSkillDef.skillName = "BAESwappableMine"; SwappableMineSkillDef.skillNameToken = "Cluster and Satchel Pressured Mines"; SwappableMineSkillDef.skillDescriptionToken = Environment.NewLine + Environment.NewLine + "Current Key Bind for switching : <style=cIsUtility>" + Configuration.MineTypeKeyBind.Value + "</style>. Current Key Bind for detonating Satchels : <style=cIsUtility>" + Configuration.SatchelManualDetonateKeyBind.Value + "</style>" + Environment.NewLine + "<style=cIsUtility>Cluster</style> : Place a mine that explode into <style=cIsDamage>rebars</style> for <style=cIsDamage>30x" + Configuration.ClusterMineDamageCoefficient.Value * 100f + "% damage</style> when an enemy walks nearby. " + Environment.NewLine + "The first mine and the second set of mines explodes into <style=cIsDamage>3</style> mines." + Environment.NewLine + "<style=cIsUtility>Satchel</style> : Place a mine that will explode for <style=cIsDamage>" + Configuration.SatchelMineDamageCoefficient.Value * 100f + "% damage</style> when an enemy walks nearby. \n<style=cIsDamage>Can be manually detonated</style>. <style=cIsUtility>Knockback nearby units</style>." + Environment.NewLine + "Base stock : " + Configuration.ClusterMineBaseMaxStock.Value + "." + Environment.NewLine + Environment.NewLine; SwappableMineSkillDef.baseMaxStock = Configuration.ClusterMineBaseMaxStock.Value; SwappableMineSkillDef.baseRechargeInterval = Configuration.ClusterMineCooldown.Value; SwappableMineSkillDef.activationStateMachineName = "Weapon"; SwappableMineSkillDef.activationState = new SerializableEntityStateType(typeof(FireClusterMines)); SwappableMineSkillDef.beginSkillCooldownOnSkillEnd = true; SwappableMineSkillDef.interruptPriority = (InterruptPriority)0; SwappableMineSkillDef.isCombatSkill = true; SwappableMineSkillDef.cancelSprintingOnActivation = true; SwappableMineSkillDef.canceledFromSprinting = false; SwappableMineSkillDef.mustKeyPress = false; SwappableMineSkillDef.icon = BaeAssets.IconSwappableMines; } private static void SatchelMine() { //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) SatchelMineSkillDef = ScriptableObject.CreateInstance<SkillDef>(); SatchelMineSkillDef.rechargeStock = 1; SatchelMineSkillDef.requiredStock = 1; SatchelMineSkillDef.stockToConsume = 1; SatchelMineSkillDef.fullRestockOnAssign = false; ((Object)SatchelMineSkillDef).name = "BAESatchelPressuredMine"; SatchelMineSkillDef.skillName = "BAESatchelPressuredMine"; SatchelMineSkillDef.skillNameToken = "Satchel Pressured Mines"; SatchelMineSkillDef.skillDescriptionToken = Environment.NewLine + "Current Key Bind for detonating Satchels : <style=cIsUtility>" + Configuration.SatchelManualDetonateKeyBind.Value + "</style>" + Environment.NewLine + "<style=cIsUtility>Satchel</style> : Place a mine that will explode for <style=cIsDamage>" + Configuration.SatchelMineDamageCoefficient.Value * 100f + "% damage</style> when an enemy walks nearby. \n<style=cIsDamage>Can be manually detonated</style>. <style=cIsUtility>Knockback nearby units</style>."; SatchelMineSkillDef.baseMaxStock = Configuration.ClusterMineBaseMaxStock.Value; SatchelMineSkillDef.baseRechargeInterval = Configuration.ClusterMineCooldown.Value; SatchelMineSkillDef.activationStateMachineName = "Weapon"; SatchelMineSkillDef.activationState = new SerializableEntityStateType(typeof(FireSatchelMines)); SatchelMineSkillDef.beginSkillCooldownOnSkillEnd = true; SatchelMineSkillDef.interruptPriority = (InterruptPriority)0; SatchelMineSkillDef.isCombatSkill = true; SatchelMineSkillDef.cancelSprintingOnActivation = true; SatchelMineSkillDef.canceledFromSprinting = false; SatchelMineSkillDef.mustKeyPress = false; SatchelMineSkillDef.icon = _engiSkillLocator.secondary._skillFamily.variants[0].skillDef.icon; } private static void OrbitalStrikeMine() { //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: 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) OrbitalStrikeSkillDef = ScriptableObject.CreateInstance<SkillDef>(); OrbitalStrikeSkillDef.baseRechargeInterval = Configuration.OrbitalStrikeCooldown.Value; OrbitalStrikeSkillDef.baseMaxStock = Configuration.OrbitalStrikeRequiredStock.Value; OrbitalStrikeSkillDef.rechargeStock = 1; OrbitalStrikeSkillDef.requiredStock = Configuration.OrbitalStrikeRequiredStock.Value; OrbitalStrikeSkillDef.stockToConsume = Configuration.OrbitalStrikeRequiredStock.Value; OrbitalStrikeSkillDef.fullRestockOnAssign = false; ((Object)OrbitalStrikeSkillDef).name = "BAEOrbitalMine"; OrbitalStrikeSkillDef.skillName = "BAEOrbitalMine"; OrbitalStrikeSkillDef.skillNameToken = "Orbital Strike"; OrbitalStrikeSkillDef.skillDescriptionToken = Environment.NewLine + "Fire an Orbital Strike at the mine position." + Environment.NewLine + "Require <style=cIsUtility>100 stocks</style> to be used." + Environment.NewLine + "<style=cIsUtility>3 Second cooldown for each charges</style>." + Environment.NewLine + "The <style=cIsDamage>cooldown is shared across stages</style>."; OrbitalStrikeSkillDef.activationStateMachineName = "Weapon"; OrbitalStrikeSkillDef.activationState = new SerializableEntityStateType(typeof(FireOrbitalMines)); OrbitalStrikeSkillDef.beginSkillCooldownOnSkillEnd = true; OrbitalStrikeSkillDef.interruptPriority = (InterruptPriority)0; OrbitalStrikeSkillDef.isCombatSkill = true; OrbitalStrikeSkillDef.cancelSprintingOnActivation = false; OrbitalStrikeSkillDef.canceledFromSprinting = false; OrbitalStrikeSkillDef.mustKeyPress = true; OrbitalStrikeSkillDef.icon = BaeAssets.IconOrbitalStrike; } private static void SwappableTurret() { //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) SwappableTurretSkillDef = ScriptableObject.CreateInstance<SkillDef>(); ((Object)SwappableTurretSkillDef).name = "BAESwappableTurret"; SwappableTurretSkillDef.skillName = "BAESwappableTurret"; SwappableTurretSkillDef.skillNameToken = "TR69 MultiFunctional Auto-Turret"; SwappableTurretSkillDef.skillDescriptionToken = Environment.NewLine + Environment.NewLine + Environment.NewLine + "Current Key Bind for switching : <style=cIsUtility>" + Configuration.TurretTypeKeyBind.Value + "</style>" + Environment.NewLine + "Place a turret that <style=cIsUtility>inherits all your items.</style> You can <color=green>ping</color> your turrets to swap between the modes." + Environment.NewLine + "<style=cIsUtility>Default Mode</style> : Fire a cannon for <style=cIsDamage>" + Configuration.DefaultTurretDamageCoefficient.Value * 100f + " damage</style> with <style=cIsUtility>" + Configuration.DefaultTurretAttackSpeed.Value + " base attack speed</style>." + Environment.NewLine + "<style=cIsUtility>Minigun Mode</style> : Fire a minigun for <style=cIsDamage>" + Configuration.MinigunTurretDamageCoefficient.Value * 100f + " damage</style> with <style=cIsUtility>" + Configuration.MinigunTurretAttackSpeed.Value + " base attack speed</style>." + Environment.NewLine + "<style=cIsUtility>Railgun Mode</style> : Fire a railgun for <style=cIsDamage>" + Configuration.RailgunTurretDamageCoefficient.Value * 100f + " damage</style> with <style=cIsUtility>" + Configuration.RailgunTurretAttackSpeed.Value + " base attack speed</style>." + Environment.NewLine + "<style=cIsUtility>Shotgun Mode</style> : Fire rockets for <style=cIsDamage>" + Configuration.ShotgunTurretDamageCoefficient.Value * 100f + " damage</style> with <style=cIsUtility>" + Configuration.ShotgunTurretAttackSpeed.Value + " base attack speed</style>." + Environment.NewLine + "Can place up to 2."; SwappableTurretSkillDef.activationStateMachineName = "Weapon"; SwappableTurretSkillDef.activationState = new SerializableEntityStateType(typeof(PlaceTurret)); SwappableTurretSkillDef.interruptPriority = (InterruptPriority)1; SwappableTurretSkillDef.baseRechargeInterval = 30f; SwappableTurretSkillDef.baseMaxStock = 2; SwappableTurretSkillDef.rechargeStock = 1; SwappableTurretSkillDef.beginSkillCooldownOnSkillEnd = false; SwappableTurretSkillDef.requiredStock = 1; SwappableTurretSkillDef.stockToConsume = 0; SwappableTurretSkillDef.isCombatSkill = false; SwappableTurretSkillDef.cancelSprintingOnActivation = true; SwappableTurretSkillDef.canceledFromSprinting = false; SwappableTurretSkillDef.mustKeyPress = false; SwappableTurretSkillDef.fullRestockOnAssign = false; SwappableTurretSkillDef.icon = BaeAssets.IconSwappableTurrets; } private static void RegisterStatesTypes() { RegisterClusterMinesStates(); RegisterSatchelMinesStates(); RegisterOrbitalMinesStates(); } private static void RegisterClusterMinesStates() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<MineArmingFullCluster>(ref flag); ContentAddition.AddEntityState<MineArmingUnarmedCluster>(ref flag); ContentAddition.AddEntityState<MineArmingWeakCluster>(ref flag); ContentAddition.AddEntityState<ArmCluster>(ref flag); ContentAddition.AddEntityState<DetonateCluster>(ref flag); ContentAddition.AddEntityState<PreDetonateCluster>(ref flag); ContentAddition.AddEntityState<WaitForStickCluster>(ref flag); ContentAddition.AddEntityState<WaitForTargetCluster>(ref flag); } private static void RegisterSatchelMinesStates() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<MineArmingFullSatchel>(ref flag); ContentAddition.AddEntityState<MineArmingUnarmedSatchel>(ref flag); ContentAddition.AddEntityState<MineArmingWeakSatchel>(ref flag); ContentAddition.AddEntityState<ArmSatchel>(ref flag); ContentAddition.AddEntityState<DetonateSatchel>(ref flag); ContentAddition.AddEntityState<PreDetonateSatchel>(ref flag); ContentAddition.AddEntityState<WaitForStickSatchel>(ref flag); ContentAddition.AddEntityState<WaitForTargetSatchel>(ref flag); } private static void RegisterOrbitalMinesStates() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<MineArmingFullOrbital>(ref flag); ContentAddition.AddEntityState<MineArmingUnarmedOrbital>(ref flag); ContentAddition.AddEntityState<MineArmingWeakOrbital>(ref flag); ContentAddition.AddEntityState<ArmOrbital>(ref flag); ContentAddition.AddEntityState<DetonateOrbital>(ref flag); ContentAddition.AddEntityState<PreDetonateOrbital>(ref flag); ContentAddition.AddEntityState<WaitForStickOrbital>(ref flag); ContentAddition.AddEntityState<WaitForTargetOrbital>(ref flag); } } } namespace BadAssEngi.Skills.Special { internal enum TurretType { Default, Minigun, Railgun, Shotgun } internal class BadAssTurret : MonoBehaviour { internal TurretType Index; internal uint SoundGunId; internal CharacterMaster OwnerCharacterMaster; internal static BuffIndex[] Buffs; internal void Init() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown OwnerCharacterMaster.inventory.onInventoryChanged += UpdateInventory; CharacterBody.UpdateBuffs += new hook_UpdateBuffs(CharacterBodyOnUpdateBuffs); AkSoundEngine.PostEvent("Turret_Alive_Play_69", ((Component)this).gameObject); if (Index == TurretType.Railgun) { SoundGunId = AkSoundEngine.PostEvent("Railgun_Turret_Targeting_Play_69", ((Component)this).gameObject); } else if (Index == TurretType.Shotgun) { SoundGunId = AkSoundEngine.PostEvent("Rocket_Turret_Single_Reload_Play_69", ((Component)this).gameObject); } } private void UpdateInventory() { //IL_007b: 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_00ae: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00de: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((Component)this).gameObject == (Object)null) { Object.Destroy((Object)(object)this); return; } CharacterMaster component = ((Component)this).gameObject.GetComponent<CharacterMaster>(); if (!((Object)(object)component == (Object)null) && Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; if ((Object)(object)OwnerCharacterMaster.inventory == (Object)null || !Object.op_Implicit((Object)(object)OwnerCharacterMaster.inventory)) { OwnerCharacterMaster = ((Component)this).gameObject.GetComponent<Deployable>().ownerMaster; } int itemCount = inventory.GetItemCount(Items.ExtraLife.itemIndex); int itemCount2 = inventory.GetItemCount(Items.ExtraLifeConsumed.itemIndex); inventory.CopyItemsFrom(OwnerCharacterMaster.inventory); inventory.ResetItem(Items.WardOnLevel.itemIndex); inventory.ResetItem(Items.BeetleGland.itemIndex); inventory.ResetItem(Items.CrippleWardOnLevel.itemIndex); inventory.ResetItem(Items.ExtraLife.itemIndex); inventory.ResetItem(Items.ExtraLifeConsumed.itemIndex); inventory.GiveItem(Items.ExtraLife.itemIndex, itemCount); inventory.GiveItem(Items.ExtraLifeConsumed.itemIndex, itemCount2); if (inventory.infusionBonus > OwnerCharacterMaster.inventory.infusionBonus) { OwnerCharacterMaster.inventory.infusionBonus = inventory.infusionBonus; OwnerCharacterMaster.GetBody().RecalculateStats(); } else { inventory.infusionBonus = OwnerCharacterMaster.inventory.infusionBonus; component.GetBody().RecalculateStats(); } } } private void CharacterBodyOnUpdateBuffs(orig_UpdateBuffs orig, CharacterBody self, float deltaTime) { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: 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) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, deltaTime); if ((Object)(object)((Component)this).gameObject == (Object)null) { Object.Destroy((Object)(object)this); return; } CharacterMaster component = ((Component)this).gameObject.GetComponent<CharacterMaster>(); if ((Object)(object)component == (Object)null || !Object.op_Implicit((Object)(object)component) || (Object)(object)component.GetBody() == (Object)null || !Object.op_Implicit((Object)(object)component.GetBody()) || (Object)(object)OwnerCharacterMaster == (Object)null || !Object.op_Implicit((Object)(object)OwnerCharacterMaster) || (Object)(object)OwnerCharacterMaster.GetBody() == (Object)null || !Object.op_Implicit((Object)(object)OwnerCharacterMaster.GetBody())) { return; } BuffIndex[] buffs = Buffs; foreach (BuffIndex val in buffs) { CharacterMaster component2 = ((Component)this).gameObject.GetComponent<CharacterMaster>(); if (OwnerCharacterMaster.GetBody().HasBuff(val)) { if (val == Buffs.AffixBlue.buffIndex || val == Buffs.AffixWhite.buffIndex || val == Buffs.AffixRed.buffIndex || val == Buffs.AffixPoison.buffIndex || val == Buffs.NoCooldowns.buffIndex) { if (component2.GetBody().HasBuff(val)) { continue; } foreach (TimedBuff timedBuff in OwnerCharacterMaster.GetBody().timedBuffs) { if (timedBuff.buffIndex == val) { float timer = timedBuff.timer; if (!(timer <= 1f)) { component2.GetBody().AddTimedBuff(val, timer); } break; } } } else if (val != Buffs.NoCooldowns.buffIndex) { component2.GetBody().AddBuff(val); } } else { if (!component2.GetBody().HasBuff(val)) { continue; } if (val == Buffs.AffixBlue.buffIndex || val == Buffs.AffixWhite.buffIndex || val == Buffs.AffixRed.buffIndex || val == Buffs.AffixPoison.buffIndex || val == Buffs.NoCooldowns.buffIndex) { if (OwnerCharacterMaster.GetBody().HasBuff(val)) { continue; } foreach (TimedBuff timedBuff2 in component2.GetBody().timedBuffs) { if (timedBuff2.buffIndex == val) { float timer2 = timedBuff2.timer; if (!(timer2 <= 1f)) { OwnerCharacterMaster.GetBody().AddTimedBuff(val, timer2); } break; } } } else { component2.GetBody().RemoveBuff(val); } } } } private void OnDisable() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown OwnerCharacterMaster.inventory.onInventoryChanged -= UpdateInventory; CharacterBody.UpdateBuffs -= new hook_UpdateBuffs(CharacterBodyOnUpdateBuffs); AkSoundEngine.StopPlayingID(SoundGunId); Object.Destroy((Object)(object)this); } } internal static class TurretHooks { internal struct SendRecalcStat : INetMessage, ISerializableObject { internal NetworkInstanceId NetId; public void Serialize(NetworkWriter writer) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) writer.Write(NetId); } public void Deserialize(NetworkReader reader) { //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) NetId = reader.ReadNetworkId(); } public void OnReceived() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) GameObject val = NetworkServer.FindLocalObject(NetId); if (Object.op_Implicit((Object)(object)val)) { val.GetComponent<CharacterBody>().RecalculateStats(); } } } [CompilerGenerated] private static class <>O { public static Manipulator <0>__BaseStateOnEnterCallerModifier; public static Manipulator <1>__TurretFiringHook; public static hook_OnEnter <2>__TurretFiringRocket; public static hook_FixedUpdate <3>__OnPlaceTurretSendTurretType; public static Manipulator <4>__SendTurretColorHook; public static Manipulator <5>__TurretAddOwnerAndCustomColorHookAndTurretTypeHandler; public static hook_OnArrival <6>__InfusionStackSharedTurret; public static hook_AddDeployable <7>__AddBATComponentOnAddDeployableHook; public static hook_SetCurrentPing <8>__ChangeTurretTypeOnPing; } private static void BaseStateOnEnterCaller(FireGauss self) { } private static void BaseStateOnEnterCallerModifier(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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) ILCursor val = new ILCursor(il); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Call, (MethodBase)typeof(BaseState).GetMethod("OnEnter", (BindingFlags)(-1))); } internal static void Init() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0066: 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_0071: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Expected O, but got Unknown //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Expected O, but got Unknown //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //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_0131: Expected O, but got Unknown MethodInfo? method = typeof(TurretHooks).GetMethod("BaseStateOnEnterCaller", (BindingFlags)(-1)); object obj = <>O.<0>__BaseStateOnEnterCallerModifier; if (obj == null) { Manipulator val = BaseStateOnEnterCallerModifier; <>O.<0>__BaseStateOnEnterCallerModifier = val; obj = (object)val; } new ILHook((MethodBase)method, (Manipulator)obj); object obj2 = <>O.<1>__TurretFiringHook; if (obj2 == null) { Manipulator val2 = TurretFiringHook; <>O.<1>__TurretFiringHook = val2; obj2 = (object)val2; } FireGauss.OnEnter += (Manipulator)obj2; object obj3 = <>O.<2>__TurretFiringRocket; if (obj3 == null) { hook_OnEnter val3 = TurretFiringRocket; <>O.<2>__TurretFiringRocket = val3; obj3 = (object)val3; } FireGauss.OnEnter += (hook_OnEnter)obj3; object obj4 = <>O.<3>__OnPlaceTurretSendTurretType; if (obj4 == null) { hook_FixedUpdate val4 = OnPlaceTurretSendTurretType; <>O.<3>__OnPlaceTurretSendTurretType = val4; obj4 = (object)val4; } PlaceTurret.FixedUpdate += (hook_FixedUpdate)obj4; object obj5 = <>O.<4>__SendTurretColorHook; if (obj5 == null) { Manipulator val5 = SendTurretColorHook; <>O.<4>__SendTurretColorHook = val5; obj5 = (object)val5; } CharacterBody.SendConstructTurret += (Manipulator)obj5; object obj6 = <>O.<5>__TurretAddOwnerAndCustomColorHookAndTurretTypeHandler; if (obj6 == null) { Manipulator val6 = TurretAddOwnerAndCustomColorHookAndTurretTypeHandler; <>O.<5>__TurretAddOwnerAndCustomColorHookAndTurretTypeHandler = val6; obj6 = (object)val6; } CharacterBody.HandleConstructTurret += (Manipulator)obj6; object obj7 = <>O.<6>__InfusionStackSharedTurret; if (obj7 == null) { hook_OnArrival val7 = InfusionStackSharedTurret; <>O.<6>__InfusionStackSharedTurret = val7; obj7 = (object)val7; } InfusionOrb.OnArrival += (hook_OnArrival)obj7; object obj8 = <>O.<7>__AddBATComponentOnAddDeployableHook; if (obj8 == null) { hook_AddDeployable val8 = AddBATComponentOnAddDeployableHook; <>O.<7>__AddBATComponentOnAddDeployableHook = val8; obj8 = (object)val8; } CharacterMaster.AddDeployable += (hook_AddDeployable)obj8; object obj9 = <>O.<8>__ChangeTurretTypeOnPing; if (obj9 == null) { hook_SetCurrentPing val9 = ChangeTurretTypeOnPing; <>O.<8>__ChangeTurretTypeOnPing = val9; obj9 = (object)val9; } PingerController.SetCurrentPing += (hook_SetCurrentPing)obj9; } private static void TurretFiringHook(ILContext il) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_0028: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03e8: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); TurretType index = TurretType.Default; BadAssTurret currentTurret = null; PlaySoundMsg soundMsg = default(PlaySoundMsg); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Call, (MethodBase)Reflection.GetMethodCached(typeof(EntityState), "get_characterBody")); val.Emit(OpCodes.Callvirt, (MethodBase)Reflection.GetMethodCached(typeof(CharacterBody), "get_master")); val.EmitDelegate<Action<CharacterMaster>>((Action<CharacterMaster>)delegate(CharacterMaster characterMaster) { currentTurret = ((Component)characterMaster).GetComponent<BadAssTurret>(); if ((Object)(object)currentTurret != (Object)null) { StopSoundMsg stopSoundMsg = default(StopSoundMsg); stopSoundMsg.soundPlayId = currentTurret.SoundGunId; NetMessageExtensions.Send((INetMessage)(object)stopSoundMsg, (NetworkDestination)1); index = currentTurret.Index; } }); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction i) => ILPatternMatchingExt.MatchLdsfld<FireGauss>(i, "attackSoundString") }); val.Remove(); val.EmitDelegate<Func<string>>((Func<string>)delegate { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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) if (index == TurretType.Minigun) { soundMsg.NetId = ((Component)currentTurret).gameObject.GetComponent<NetworkIdentity>().netId; soundMsg.SoundName = "Minigun_Turret_Shot_Play_69"; NetMessageExtensions.Send((INetMessage)(object)soundMsg, (NetworkDestination)1); return ""; } if (index == TurretType.Railgun) { soundMsg.NetId = ((Component)currentTurret).gameObject.GetComponent<NetworkIdentity>().netId; soundMsg.SoundName = "Railgun_Turret_Shot_Play_69"; NetMessageExtensions.Send((INetMessage)(object)soundMsg, (NetworkDestination)1); return ""; } return FireGauss.attackSoundString; }); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction i) => ILPatternMatchingExt.MatchCall<EntityState>(i, "get_gameObject") }); int index2 = val.Index; val.Index = index2 + 1; val.Emit(OpCodes.Ldstr, "Turret_Attack_Speed"); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldfld, Reflection.GetFieldCached(typeof(BaseState), "attackSpeedStat")); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction i) => ILPatternMatchingExt.MatchCall(i, (MethodBase)Reflection.GetMethodCached(typeof(Util