using 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;
}
}
}
}