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 Bandit Dynamite Toss v1.1.3
BanditDynamite.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BanditDynamite.Components; using BepInEx; using BepInEx.Configuration; using EntityStates; using EntityStates.Moffein.BanditDynamite; using On.RoR2; using On.RoR2.Projectile; using R2API; using R2API.Utils; using RoR2; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.Networking; [assembly: AssemblyProduct("BanditDynamite")] [assembly: AssemblyInformationalVersion("1.0.0+b89925fa40e4fe60abe99d5585dae29d1b15393f")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCompany("BanditDynamite")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyTitle("BanditDynamite")] [assembly: CompilationRelaxations(8)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace EntityStates.Moffein.BanditDynamite { public class ClusterBomb : BaseState { public static GameObject projectilePrefab; public static float damageCoefficient; public static float force = 2500f; public static float baseDuration; public static float bombletDamageCoefficient; private float duration; public static bool quickdrawEnabled = false; public override void OnEnter() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).PlayAnimation("Gesture, Additive", "SlashBlade", "SlashBlade.playbackRate", duration, 0f); Util.PlaySound("Play_MoffeinBanditDynamite_toss", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded) { ((EntityState)this).characterMotor.velocity = new Vector3(((EntityState)this).characterMotor.velocity.x, Mathf.Max(((EntityState)this).characterMotor.velocity.y, 6f), ((EntityState)this).characterMotor.velocity.z); } ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat * damageCoefficient, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && ((EntityState)this).inputBank.skill2.down) { return (InterruptPriority)2; } return (InterruptPriority)1; } } } namespace BanditDynamite { [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Moffein.BanditDynamite", "Bandit Dynamite", "1.1.3")] [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.*/)] public class BanditDynamite : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_TakeDamage <>9__13_0; internal void <Awake>b__13_0(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_013b: 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_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: 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) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: 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_01fc: Unknown result type (might be due to invalid IL or missing references) bool flag = false; bool flag2 = false; bool flag3 = DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)4)) != 0 || DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)268435456)) != 0; AssignDynamiteTeamFilter component = ((Component)self).gameObject.GetComponent<AssignDynamiteTeamFilter>(); if (Object.op_Implicit((Object)(object)component)) { flag = true; CharacterBody val = null; if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { val = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)val)) { flag2 = val.bodyIndex == BodyCatalog.FindBodyIndex("Bandit2Body"); } } } if (flag) { if (!component.fired && flag2 && DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)131072)) == 0L && damageInfo.procCoefficient > 0f) { component.fired = true; damageInfo.crit = true; damageInfo.procCoefficient = 0f; ProjectileImpactExplosion component2 = ((Component)self).gameObject.GetComponent<ProjectileImpactExplosion>(); if (Object.op_Implicit((Object)(object)component2)) { ((ProjectileExplosion)component2).blastRadius = ((ProjectileExplosion)component2).blastRadius * 2f; ((ProjectileExplosion)component2).falloffModel = (FalloffModel)0; } ProjectileDamage component3 = ((Component)self).gameObject.GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component3)) { if (flag3) { component3.damage *= 2f; if (dynamiteSpecialCombo) { if (DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)4)) != 0) { component3.damageType |= DamageTypeCombo.op_Implicit((DamageType)4); } if (DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)268435456)) != 0) { component3.damageType |= DamageTypeCombo.op_Implicit((DamageType)268435456); } } damageInfo.damageType &= DamageTypeCombo.op_Implicit((DamageType)(-5)); damageInfo.damageType &= DamageTypeCombo.op_Implicit((DamageType)(-268435457)); BanditNetworkCommands component4 = damageInfo.attacker.GetComponent<BanditNetworkCommands>(); if (Object.op_Implicit((Object)(object)component4)) { component4.CallRpcResetSpecialCooldown(); } } else { component3.damage *= 1.5f; } } } else { damageInfo.rejected = true; } } orig.Invoke(self, damageInfo); } } private AssetBundle assets; private readonly Shader hotpoo = LegacyResourcesAPI.Load<Shader>("Shaders/Deferred/hgstandard"); public static GameObject ClusterBombObject; public static GameObject ClusterBombletObject; public static ModdedDamageType ClusterBombDamage; public static bool dynamiteSpecialCombo = true; public static float cbRadius; public static float cbBombletRadius; public static float cbBombletProcCoefficient; public static float cbCooldown; public static int cbBombletCount; public static int cbStock; private bool disableFalloff = false; public void Awake() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown ReadConfig(); LoadResources(); SetupClusterBomb(); SetupClusterBomblet(); RegisterLanguageTokens(); AddSkill(); FireBomblets.AddHook(); object obj = <>c.<>9__13_0; if (obj == null) { hook_TakeDamage val = delegate(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_013b: 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_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: 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) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: 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_01fc: Unknown result type (might be due to invalid IL or missing references) bool flag = false; bool flag2 = false; bool flag3 = DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)4)) != 0 || DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)268435456)) != 0; AssignDynamiteTeamFilter component = ((Component)self).gameObject.GetComponent<AssignDynamiteTeamFilter>(); if (Object.op_Implicit((Object)(object)component)) { flag = true; CharacterBody val2 = null; if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { val2 = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)val2)) { flag2 = val2.bodyIndex == BodyCatalog.FindBodyIndex("Bandit2Body"); } } } if (flag) { if (!component.fired && flag2 && DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)131072)) == 0L && damageInfo.procCoefficient > 0f) { component.fired = true; damageInfo.crit = true; damageInfo.procCoefficient = 0f; ProjectileImpactExplosion component2 = ((Component)self).gameObject.GetComponent<ProjectileImpactExplosion>(); if (Object.op_Implicit((Object)(object)component2)) { ((ProjectileExplosion)component2).blastRadius = ((ProjectileExplosion)component2).blastRadius * 2f; ((ProjectileExplosion)component2).falloffModel = (FalloffModel)0; } ProjectileDamage component3 = ((Component)self).gameObject.GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component3)) { if (flag3) { component3.damage *= 2f; if (dynamiteSpecialCombo) { if (DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)4)) != 0) { component3.damageType |= DamageTypeCombo.op_Implicit((DamageType)4); } if (DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)268435456)) != 0) { component3.damageType |= DamageTypeCombo.op_Implicit((DamageType)268435456); } } damageInfo.damageType &= DamageTypeCombo.op_Implicit((DamageType)(-5)); damageInfo.damageType &= DamageTypeCombo.op_Implicit((DamageType)(-268435457)); BanditNetworkCommands component4 = damageInfo.attacker.GetComponent<BanditNetworkCommands>(); if (Object.op_Implicit((Object)(object)component4)) { component4.CallRpcResetSpecialCooldown(); } } else { component3.damage *= 1.5f; } } } else { damageInfo.rejected = true; } } orig.Invoke(self, damageInfo); }; <>c.<>9__13_0 = val; obj = (object)val; } HealthComponent.TakeDamage += (hook_TakeDamage)obj; } public void RegisterLanguageTokens() { LanguageAPI.Add("MOFFEINBANDITDYNAMITE_SECONDARY_NAME", "Dynamite Toss"); LanguageAPI.Add("MOFFEINBANDITDYNAMITE_SECONDARY_DESC", "Toss a bomb that <style=cIsDamage>ignites</style> for <style=cIsDamage>" + ClusterBomb.damageCoefficient.ToString("P0").Replace(" ", "").Replace(",", "") + " damage</style>. Drops bomblets for <style=cIsDamage>" + cbBombletCount + "x" + ClusterBomb.bombletDamageCoefficient.ToString("P0").Replace(" ", "").Replace(",", "") + " damage</style>. Can be shot midair for <style=cIsDamage>bonus damage</style>." + Environment.NewLine); } private void AddSkill() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Expected O, but got Unknown //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(ClusterBomb)); val.baseRechargeInterval = cbCooldown; val.skillNameToken = "MOFFEINBANDITDYNAMITE_SECONDARY_NAME"; val.skillDescriptionToken = "MOFFEINBANDITDYNAMITE_SECONDARY_DESC"; val.skillName = "Dynamite"; val.icon = assets.LoadAsset<Sprite>("dynamite_red.png"); val.baseMaxStock = cbStock; val.rechargeStock = 1; val.beginSkillCooldownOnSkillEnd = false; val.activationStateMachineName = "Weapon"; val.interruptPriority = (InterruptPriority)1; val.isCombatSkill = true; val.cancelSprintingOnActivation = false; val.canceledFromSprinting = false; val.mustKeyPress = false; val.requiredStock = 1; val.stockToConsume = 1; val.keywordTokens = new string[0]; ContentAddition.AddSkillDef(val); bool flag = default(bool); ContentAddition.AddEntityState<ClusterBomb>(ref flag); ((Object)val).name = val.skillName; GameObject val2 = LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/Bandit2Body"); val2.AddComponent<BanditNetworkCommands>(); SkillFamily skillFamily = val2.GetComponent<SkillLocator>().secondary.skillFamily; Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); Variant[] variants = skillFamily.variants; int num = skillFamily.variants.Length - 1; Variant val3 = new Variant { skillDef = val, unlockableName = "" }; ((Variant)(ref val3)).viewableNode = new Node(val.skillNameToken, false, (Node)null); variants[num] = val3; } private void ReadConfig() { //IL_0011: 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_002c: Expected O, but got Unknown //IL_002c: Expected O, but got Unknown //IL_0046: 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_0065: Expected O, but got Unknown //IL_0065: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Expected O, but got Unknown //IL_009e: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_00d3: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_010c: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Expected O, but got Unknown //IL_0145: Expected O, but got Unknown //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Expected O, but got Unknown //IL_017e: Expected O, but got Unknown //IL_0198: 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_01b7: Expected O, but got Unknown //IL_01b7: Expected O, but got Unknown //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Expected O, but got Unknown //IL_01f0: Expected O, but got Unknown //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Expected O, but got Unknown //IL_0225: Expected O, but got Unknown //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Expected O, but got Unknown //IL_025b: Expected O, but got Unknown dynamiteSpecialCombo = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Dynamite", "Special Combo"), true, new ConfigDescription("Dynamite inherits the damagetype of Bandit's Special skills when shot by them.", (AcceptableValueBase)null, Array.Empty<object>())).Value; ClusterBomb.damageCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Damage*"), 3.9f, new ConfigDescription("How much damage Dynamite Toss deals.", (AcceptableValueBase)null, Array.Empty<object>())).Value; cbRadius = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Radius*"), 8f, new ConfigDescription("How large the explosion is. Radius is doubled when shot out of the air.", (AcceptableValueBase)null, Array.Empty<object>())).Value; cbBombletCount = ((BaseUnityPlugin)this).Config.Bind<int>(new ConfigDefinition("Dynamite", "Bomblet Count*"), 6, new ConfigDescription("How many mini bombs Dynamite Toss releases.", (AcceptableValueBase)null, Array.Empty<object>())).Value; ClusterBomb.bombletDamageCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Bomblet Damage*"), 1.2f, new ConfigDescription("How much damage Dynamite Toss Bomblets deals.", (AcceptableValueBase)null, Array.Empty<object>())).Value; cbBombletRadius = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Bomblet Radius*"), 8f, new ConfigDescription("How large the mini explosions are.", (AcceptableValueBase)null, Array.Empty<object>())).Value; cbBombletProcCoefficient = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Bomblet Proc Coefficient*"), 0.6f, new ConfigDescription("Affects the chance and power of Dynamite Toss Bomblet procs.", (AcceptableValueBase)null, Array.Empty<object>())).Value; ClusterBomb.baseDuration = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Throw Duration"), 0.6f, new ConfigDescription("How long it takes to throw a Dynamite Bundle.", (AcceptableValueBase)null, Array.Empty<object>())).Value; cbCooldown = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Dynamite", "Cooldown"), 6f, new ConfigDescription("How long it takes for Dynamite Toss to recharge.", (AcceptableValueBase)null, Array.Empty<object>())).Value; cbStock = ((BaseUnityPlugin)this).Config.Bind<int>(new ConfigDefinition("Dynamite", "Stock"), 1, new ConfigDescription("How much Dynamite you start with.", (AcceptableValueBase)null, Array.Empty<object>())).Value; disableFalloff = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Dynamite", "Disable Falloff"), false, new ConfigDescription("Disable explosion damage falloff.", (AcceptableValueBase)null, Array.Empty<object>())).Value; } public void LoadResources() { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BanditDynamite.dynamite")) { assets = AssetBundle.LoadFromStream(stream); } using Stream stream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("BanditDynamite.BanditDynamite.bnk"); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, array.Length); SoundBanks.Add(array); } private void SetupClusterBomb() { //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_0091: 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_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) ClusterBombDamage = DamageAPI.ReserveDamageType(); ClusterBombObject = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/BanditClusterBombSeed"), "MoffeinBanditDynamiteClusterBomb", true); ContentAddition.AddProjectile(ClusterBombObject); GameObject val = PrefabAPI.InstantiateClone(assets.LoadAsset<GameObject>("DynamiteBundle.prefab"), "MoffeinBanditDynamiteClusterBombGhost", false); ((Renderer)val.GetComponentInChildren<MeshRenderer>()).material.shader = hotpoo; val.AddComponent<ProjectileGhostController>(); ClusterBombObject.AddComponent<DynamiteRotation>(); ClusterBombObject.GetComponent<ProjectileController>().ghostPrefab = val; ModdedDamageTypeHolderComponent val2 = ClusterBombObject.AddComponent<ModdedDamageTypeHolderComponent>(); val2.Add(ClusterBombDamage); float childrenDamageCoefficient = ClusterBomb.bombletDamageCoefficient / ClusterBomb.damageCoefficient; SphereCollider val3 = ClusterBombObject.AddComponent<SphereCollider>(); val3.radius = 0.6f; ((Collider)val3).contactOffset = 0.01f; TeamComponent val4 = ClusterBombObject.AddComponent<TeamComponent>(); val4.hideAllyCardDisplay = true; ClusterBombObject.AddComponent<SkillLocator>(); CharacterBody val5 = ClusterBombObject.AddComponent<CharacterBody>(); val5.rootMotionInMainState = false; val5.bodyFlags = (BodyFlags)4; val5.baseMaxHealth = 1f; val5.baseCrit = 0f; val5.baseAcceleration = 0f; val5.baseArmor = 0f; val5.baseAttackSpeed = 0f; val5.baseDamage = 0f; val5.baseJumpCount = 0; val5.baseJumpPower = 0f; val5.baseMoveSpeed = 0f; val5.baseMaxShield = 0f; val5.baseRegen = 0f; val5.autoCalculateLevelStats = true; val5.levelArmor = 0f; val5.levelAttackSpeed = 0f; val5.levelCrit = 0f; val5.levelDamage = 0f; val5.levelJumpPower = 0f; val5.levelMaxHealth = 0f; val5.levelMaxShield = 0f; val5.levelMoveSpeed = 0f; val5.levelRegen = 0f; val5.hullClassification = (HullClassification)0; HealthComponent val6 = ClusterBombObject.AddComponent<HealthComponent>(); val6.globalDeathEventChanceCoefficient = 0f; val6.body = val5; ClusterBombObject.AddComponent<AssignDynamiteTeamFilter>(); ProjectileImpactExplosion component = ClusterBombObject.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component).blastRadius = cbRadius; ((ProjectileExplosion)component).falloffModel = (FalloffModel)((!disableFalloff) ? 2 : 0); component.lifetime = 25f; component.lifetimeAfterImpact = 1.5f; component.destroyOnEnemy = true; component.destroyOnWorld = false; ((ProjectileExplosion)component).childrenCount = cbBombletCount; ((ProjectileExplosion)component).childrenDamageCoefficient = childrenDamageCoefficient; ((ProjectileExplosion)component).blastProcCoefficient = 1f; component.impactEffect = SetupDynamiteExplosion(); ((ProjectileExplosion)component).fireChildren = false; ((ProjectileExplosion)component).explosionSoundString = ""; component.lifetimeExpiredSound = null; ((ProjectileExplosion)component).projectileHealthComponent = val6; component.transformSpace = (TransformSpace)0; Object.Destroy((Object)(object)ClusterBombObject.GetComponent<ProjectileStickOnImpact>()); ProjectileSimple component2 = ClusterBombObject.GetComponent<ProjectileSimple>(); component2.velocity = 60f; component2.lifetime = 25f; ClusterBombObject.GetComponent<Rigidbody>().useGravity = true; ProjectileDamage component3 = ClusterBombObject.GetComponent<ProjectileDamage>(); component3.damageType = DamageTypeCombo.op_Implicit((DamageType)128); AddDynamiteHurtbox(ClusterBombObject); ClusterBomb.projectilePrefab = ClusterBombObject; } private void AddDynamiteHurtbox(GameObject go) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(); val.transform.parent = go.transform; val.layer = LayerIndex.entityPrecise.intVal; SphereCollider val2 = val.AddComponent<SphereCollider>(); val2.radius = 0.9f; HurtBoxGroup val3 = val.AddComponent<HurtBoxGroup>(); HurtBox val4 = val.AddComponent<HurtBox>(); val4.isBullseye = false; val4.healthComponent = go.GetComponent<HealthComponent>(); val4.damageModifier = (DamageModifier)0; val4.hurtBoxGroup = val3; val4.indexInGroup = 0; HurtBox[] hurtBoxes = (HurtBox[])(object)new HurtBox[1] { val4 }; val3.bullseyeCount = 0; val3.hurtBoxes = hurtBoxes; val3.mainHurtBox = val4; DisableCollisionsBetweenColliders val5 = go.AddComponent<DisableCollisionsBetweenColliders>(); val5.collidersA = go.GetComponents<Collider>(); val5.collidersB = val.GetComponents<Collider>(); } private GameObject SetupDynamiteExplosion() { //IL_0045: 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_0070: Unknown result type (might be due to invalid IL or missing references) GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/effects/omnieffect/omniexplosionvfx"), "MoffeinBanditDynamiteDynamiteExplosion", false); ShakeEmitter val2 = val.AddComponent<ShakeEmitter>(); val2.shakeOnStart = true; val2.duration = 0.5f; val2.scaleShakeRadiusWithLocalScale = false; val2.radius = 75f; val2.wave = new Wave { amplitude = 1f, cycleOffset = 0f, frequency = 40f }; EffectComponent component = val.GetComponent<EffectComponent>(); component.soundName = "Play_MoffeinBanditDynamite_explode"; ContentAddition.AddEffect(val); return val; } private void SetupClusterBomblet() { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) ClusterBombletObject = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/BanditClusterGrenadeProjectile"), "MoffeinBanditDynamiteClusterBomblet", true); ContentAddition.AddProjectile(ClusterBombletObject); GameObject val = PrefabAPI.InstantiateClone(assets.LoadAsset<GameObject>("DynamiteStick.prefab"), "MoffeinBanditDynamiteClusterBombletGhost", false); ((Renderer)val.GetComponentInChildren<MeshRenderer>()).material.shader = hotpoo; val.AddComponent<ProjectileGhostController>(); ((ProjectileExplosion)ClusterBombObject.GetComponent<ProjectileImpactExplosion>()).childrenProjectilePrefab = ClusterBombletObject; ClusterBombletObject.AddComponent<SphereCollider>(); ClusterBombletObject.GetComponent<ProjectileController>().ghostPrefab = val; ProjectileImpactExplosion component = ClusterBombletObject.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component).blastRadius = cbBombletRadius; ((ProjectileExplosion)component).falloffModel = (FalloffModel)((!disableFalloff) ? 2 : 0); component.destroyOnEnemy = false; component.destroyOnWorld = false; component.lifetime = 1.5f; component.timerAfterImpact = false; ((ProjectileExplosion)component).blastProcCoefficient = cbBombletProcCoefficient; ((ProjectileExplosion)component).explosionSoundString = ""; component.impactEffect = SetupDynamiteBombletExplosion(); ((ProjectileExplosion)component).fireChildren = false; Object.Destroy((Object)(object)ClusterBombletObject.GetComponent<ProjectileStickOnImpact>()); ProjectileSimple component2 = ClusterBombletObject.GetComponent<ProjectileSimple>(); component2.velocity = 12f; ProjectileDamage component3 = ClusterBombletObject.GetComponent<ProjectileDamage>(); component3.damageType = DamageTypeCombo.op_Implicit((DamageType)128); } private GameObject SetupDynamiteBombletExplosion() { GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/effects/impacteffects/explosionvfx"), "MoffeinBanditDynamiteBombletExplosion", false); EffectComponent component = val.GetComponent<EffectComponent>(); component.soundName = "Play_engi_M2_explo"; ContentAddition.AddEffect(val); return val; } } public class FireBomblets { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_DetonateServer <>9__3_0; internal void <AddHook>b__3_0(orig_DetonateServer orig, ProjectileExplosion self) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)((Component)self).gameObject)) { return; } ModdedDamageTypeHolderComponent component = ((Component)self).gameObject.GetComponent<ModdedDamageTypeHolderComponent>(); if (Object.op_Implicit((Object)(object)component) && component.Has(BanditDynamite.ClusterBombDamage) && NetworkServer.active) { int[] bomblets = FireBomblets.bomblets; foreach (int num in bomblets) { FireBomblet(self); } } } } private static int[] bomblets = new int[BanditDynamite.cbBombletCount]; private static Quaternion GetRandomDirectionForChild(ProjectileExplosion self) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) Quaternion val = Quaternion.AngleAxis((float)RoR2Application.rng.nextInt + Random.Range(0f, (float)RoR2Application.rng.nextInt), Vector3.forward); Quaternion val2 = Quaternion.AngleAxis((float)RoR2Application.rng.nextInt + Random.Range(0f, (float)RoR2Application.rng.nextInt), Vector3.left); Quaternion val3 = val * val2; if (Object.op_Implicit((Object)(object)self)) { return ((Component)self).transform.rotation * val3; } return val3; } private static void FireBomblet(ProjectileExplosion self) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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_00df: Unknown result type (might be due to invalid IL or missing references) Quaternion randomDirectionForChild = GetRandomDirectionForChild(self); GameObject val = Object.Instantiate<GameObject>(BanditDynamite.ClusterBombletObject, ((Component)self).transform.position, randomDirectionForChild); ProjectileController component = val.GetComponent<ProjectileController>(); if (Object.op_Implicit((Object)(object)component)) { component.procChainMask = self.projectileController.procChainMask; component.procCoefficient = self.projectileController.procCoefficient; component.Networkowner = self.projectileController.owner; } val.GetComponent<TeamFilter>().teamIndex = ((Component)self).GetComponent<TeamFilter>().teamIndex; ProjectileDamage component2 = val.GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component2)) { component2.damage = self.projectileDamage.damage * ClusterBomb.bombletDamageCoefficient / ClusterBomb.damageCoefficient; component2.crit = self.projectileDamage.crit; component2.force = self.projectileDamage.force; component2.damageColorIndex = self.projectileDamage.damageColorIndex; } NetworkServer.Spawn(val); } public static void AddHook() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__3_0; if (obj == null) { hook_DetonateServer val = delegate(orig_DetonateServer orig, ProjectileExplosion self) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)((Component)self).gameObject)) { ModdedDamageTypeHolderComponent component = ((Component)self).gameObject.GetComponent<ModdedDamageTypeHolderComponent>(); if (Object.op_Implicit((Object)(object)component) && component.Has(BanditDynamite.ClusterBombDamage) && NetworkServer.active) { int[] array = bomblets; foreach (int num in array) { FireBomblet(self); } } } }; <>c.<>9__3_0 = val; obj = (object)val; } ProjectileExplosion.DetonateServer += (hook_DetonateServer)obj; } } } namespace BanditDynamite.Components { public class AssignDynamiteTeamFilter : MonoBehaviour { public bool fired = false; private void Start() { if (NetworkServer.active) { TeamComponent component = ((Component)this).GetComponent<TeamComponent>(); component.teamIndex = (TeamIndex)(-1); } } } public class BanditNetworkCommands : NetworkBehaviour { private SkillLocator skillLocator; private CharacterBody characterBody; private static int kRpcRpcResetSpecialCooldown; [ClientRpc] public void RpcResetSpecialCooldown() { if (((NetworkBehaviour)this).hasAuthority) { skillLocator.special.stock = skillLocator.special.maxStock; skillLocator.special.rechargeStopwatch = 0f; } } private void Awake() { characterBody = ((Component)this).GetComponent<CharacterBody>(); skillLocator = ((Component)this).GetComponent<SkillLocator>(); } private void UNetVersion() { } protected static void InvokeRpcRpcResetSpecialCooldown(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcResetSpecialCooldown called on server."); } else { ((BanditNetworkCommands)(object)obj).RpcResetSpecialCooldown(); } } public void CallRpcResetSpecialCooldown() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"RPC Function RpcResetSpecialCooldown called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcResetSpecialCooldown); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcResetSpecialCooldown"); } static BanditNetworkCommands() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kRpcRpcResetSpecialCooldown = 1641151393; NetworkBehaviour.RegisterRpcDelegate(typeof(BanditNetworkCommands), kRpcRpcResetSpecialCooldown, new CmdDelegate(InvokeRpcRpcResetSpecialCooldown)); NetworkCRC.RegisterBehaviour("BanditNetworkCommands", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } internal class DynamiteRotation : MonoBehaviour { private ProjectileImpactExplosion projectileImpactExplosion; public void Awake() { projectileImpactExplosion = ((Component)this).gameObject.GetComponent<ProjectileImpactExplosion>(); } public void FixedUpdate() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { if (projectileImpactExplosion.hasImpact) { Object.Destroy((Object)(object)this); } ((Component)this).transform.rotation = Quaternion.AngleAxis(-360f * Time.fixedDeltaTime, Vector3.right) * ((Component)this).transform.rotation; } } } }