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 BetterArsonist v1.0.1
BetterArsonist.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using ArsonistMod; using ArsonistMod.Content.Controllers; using ArsonistMod.Modules; using ArsonistMod.Modules.Characters; using ArsonistMod.Modules.Networking; using ArsonistMod.Modules.Survivors; using ArsonistMod.SkillStates; using ArsonistMod.SkillStates.Arsonist.Secondary; using ArsonistMod.SkillStates.ZeroPointBlast; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Logging; using BetterArsonist.Changes; using BetterArsonist.Modules; using EntityStates; using HarmonyLib; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using On.RoR2; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using RoR2; using RoR2.ContentManagement; using RoR2.Projectile; using RoR2BepInExPack.GameAssetPaths.Version_1_39_0; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("ArsonistMod")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BetterArsonist")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BetterArsonist")] [assembly: AssemblyTitle("BetterArsonist")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BetterArsonist { [BepInPlugin("com.Bloonjitsu7.BetterArsonist", "BetterArsonist", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { public const string PluginGUID = "Bloonjitsu7.BetterArsonist"; public const string PluginAuthor = "Bloonjitsu7"; public const string PluginName = "BetterArsonist"; public const string PluginVersion = "1.0.0"; public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); new ContentPacks().Initialize(); SurvivorChanges survivorChanges = new SurvivorChanges(); survivorChanges.Initialize(); } } 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); } } } namespace BetterArsonist.Modules { public static class DamageTypes { public static ModdedDamageType arsonistLifesteal = DamageAPI.ReserveDamageType(); } public static class States { internal static List<Type> entityStates = new List<Type>(); internal static void RegisterStates() { entityStates.Add(typeof(MasochismFire)); } } public static class Projectiles { internal static GameObject masoFireBall; public static GameObject baseFireBall = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_LemurianBruiser.LemurianBigFireball_prefab).WaitForCompletion(); internal static List<GameObject> projectilePrefabs = new List<GameObject>(); internal static bool HasArsonistMod => Chainloader.PluginInfos.ContainsKey("com.PopcornFactory.Arsonist"); internal static void RegisterProjectiles() { if (HasArsonistMod) { CreateMasochismFireBall(); projectilePrefabs.Add(masoFireBall); } else { Log.Warning("Arsonist Not Found!"); } } private static void CreateMasochismFireBall() { //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00db: 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) masoFireBall = PrefabAPI.InstantiateClone(baseFireBall, "masoFireBall", true); Rigidbody val = masoFireBall.GetComponent<Rigidbody>(); if (!Object.op_Implicit((Object)(object)val)) { val = masoFireBall.AddComponent<Rigidbody>(); } Object.DestroyImmediate((Object)(object)masoFireBall.GetComponent<ProjectileImpactExplosion>()); ProjectileImpactExplosion val2 = masoFireBall.AddComponent<ProjectileImpactExplosion>(); InitializeImpactExplosion(val2); ((ProjectileExplosion)val2).blastRadius = 5f; ((ProjectileExplosion)val2).blastProcCoefficient = 0.8f; val2.destroyOnEnemy = true; val2.destroyOnWorld = true; val2.lifetime = 4f; val2.impactEffect = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_LemurianBruiser.OmniExplosionVFXLemurianBruiserFireballImpact_prefab).WaitForCompletion(); ((ProjectileExplosion)val2).falloffModel = (FalloffModel)3; ((ProjectileExplosion)val2).blastDamageCoefficient = 1f; val2.timerAfterImpact = false; val2.lifetimeAfterImpact = 0f; ((Component)val2).GetComponent<ProjectileDamage>().damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)1); ProjectileController component = masoFireBall.GetComponent<ProjectileController>(); component.rigidbody = val; component.rigidbody.useGravity = false; component.rigidbody.mass = 1f; component.procCoefficient = 0.8f; component.ghostPrefab = AssetsArsonist.fireballWeakGhost; component.startSound = ""; } private static void InitializeImpactExplosion(ProjectileImpactExplosion projectileImpactExplosion) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) ((ProjectileExplosion)projectileImpactExplosion).blastDamageCoefficient = 1f; ((ProjectileExplosion)projectileImpactExplosion).blastProcCoefficient = 1f; ((ProjectileExplosion)projectileImpactExplosion).blastRadius = 1f; ((ProjectileExplosion)projectileImpactExplosion).bonusBlastForce = Vector3.zero; ((ProjectileExplosion)projectileImpactExplosion).childrenCount = 0; ((ProjectileExplosion)projectileImpactExplosion).childrenDamageCoefficient = 0f; ((ProjectileExplosion)projectileImpactExplosion).childrenProjectilePrefab = null; projectileImpactExplosion.destroyOnEnemy = true; projectileImpactExplosion.destroyOnWorld = true; projectileImpactExplosion.detonateOnEnemy = true; projectileImpactExplosion.impactOnWorld = true; ((ProjectileExplosion)projectileImpactExplosion).falloffModel = (FalloffModel)0; ((ProjectileExplosion)projectileImpactExplosion).fireChildren = false; projectileImpactExplosion.lifetime = 0f; projectileImpactExplosion.lifetimeAfterImpact = 0f; projectileImpactExplosion.lifetimeRandomOffset = 0f; projectileImpactExplosion.offsetForLifetimeExpiredSound = 0f; projectileImpactExplosion.timerAfterImpact = false; ((Component)projectileImpactExplosion).GetComponent<ProjectileDamage>().damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)0), (DamageTypeExtended)0, (DamageSource)1); } } public static class Buffs { internal static List<BuffDef> buffDefs = new List<BuffDef>(); internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff, bool isCooldown, bool isHidden) { //IL_0010: 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) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = buffColor; val.canStack = canStack; val.isDebuff = isDebuff; val.eliteDef = null; val.iconSprite = buffIcon; val.isCooldown = isCooldown; val.isHidden = isHidden; buffDefs.Add(val); return val; } } internal class ContentPacks : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public string identifier => "com.Bloonjitsu7.BloonModpackBaseMod"; public void Initialize() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown States.RegisterStates(); Projectiles.RegisterProjectiles(); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.buffDefs.Add(Buffs.buffDefs.ToArray()); contentPack.entityStateTypes.Add(States.entityStates.ToArray()); contentPack.projectilePrefabs.Add(Projectiles.projectilePrefabs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } } namespace BetterArsonist.Changes { public class SurvivorChanges : BaseState { private Hook fireSprayHook; private Hook flamethrowerHook; private Hook zeroPointHook; private ILHook zeroPointHookIL; private Hook flareSalvoHook; private Hook flareUpdateHook; private Hook flareUpdateHook2; private Hook flareEnterHook; private Hook masochismConHook; private Hook masochismConHook2; private Hook spiteConHook; private Hook spiteStartHook; private Hook addHeatHook; private Hook energyHook; private Hook arsonistHook; private static GameObject fireExplosionPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Common.TeamAreaIndicator__GroundOnly_prefab).WaitForCompletion(); public static GameObject lemfireBall = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/Fireball.prefab").WaitForCompletion(); public static float zeroPointJump = 0f; public static float zeroPointLongJump = 0f; public void Initialize() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Expected O, but got Unknown //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Expected O, but got Unknown //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Expected O, but got Unknown //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Expected O, but got Unknown //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Expected O, but got Unknown //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Expected O, but got Unknown //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Expected O, but got Unknown //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Expected O, but got Unknown //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Expected O, but got Unknown //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Expected O, but got Unknown //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Expected O, but got Unknown //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Expected O, but got Unknown UpdateText(); SetupArsonist(); MethodInfo methodInfo = AccessTools.Method(typeof(FireSpray), "FireBall", (Type[])null, (Type[])null); fireSprayHook = new Hook((MethodBase)methodInfo, (Delegate)new Action<Action<FireSpray>, FireSpray>(OnFireBall)); MethodInfo methodInfo2 = AccessTools.Method(typeof(Flamethrower), "FixedUpdate", (Type[])null, (Type[])null); flamethrowerHook = new Hook((MethodBase)methodInfo2, (Delegate)new Action<Action<Flamethrower>, Flamethrower>(OnFlamethrowerUpdate)); MethodInfo methodInfo3 = AccessTools.Method(typeof(ZeroPointBlastStart), "OnEnter", (Type[])null, (Type[])null); zeroPointHook = new Hook((MethodBase)methodInfo3, (Delegate)new Action<Action<ZeroPointBlastStart>, ZeroPointBlastStart>(OnZeroPointEnter)); MethodInfo methodInfo4 = AccessTools.Method(typeof(ZeroPointBlastStart), "OnEnter", (Type[])null, (Type[])null); zeroPointHookIL = new ILHook((MethodBase)methodInfo4, new Manipulator(IL_ZeroPointEnter)); MethodInfo methodInfo5 = AccessTools.Method(typeof(Flare), "OnEnter", (Type[])null, (Type[])null); flareEnterHook = new Hook((MethodBase)methodInfo5, (Delegate)new Action<Action<Flare>, Flare>(OnFlareEnter)); MethodInfo methodInfo6 = AccessTools.Method(typeof(FlareEffectControllerStrong), "FireSalvos", (Type[])null, (Type[])null); flareSalvoHook = new Hook((MethodBase)methodInfo6, (Delegate)new Action<Action<FlareEffectControllerStrong>, FlareEffectControllerStrong>(OnFlareSalvo)); MethodInfo methodInfo7 = AccessTools.Method(typeof(FlareEffectControllerStrong), "FixedUpdate", (Type[])null, (Type[])null); flareUpdateHook = new Hook((MethodBase)methodInfo7, (Delegate)new Action<Action<FlareEffectControllerStrong>, FlareEffectControllerStrong>(OnFlareUpdateStrong)); MethodInfo methodInfo8 = AccessTools.Method(typeof(FlareEffectControllerStrongChild), "FixedUpdate", (Type[])null, (Type[])null); flareUpdateHook2 = new Hook((MethodBase)methodInfo8, (Delegate)new Action<Action<FlareEffectControllerStrongChild>, FlareEffectControllerStrongChild>(OnFlareUpdateChild)); MethodInfo methodInfo9 = AccessTools.Method(typeof(MasochismController), "Start", (Type[])null, (Type[])null); masochismConHook = new Hook((MethodBase)methodInfo9, (Delegate)new Action<Action<MasochismController>, MasochismController>(OnMasochismControllerStart)); MethodInfo methodInfo10 = AccessTools.Method(typeof(MasochismController), "DetermineMasoActivateable", (Type[])null, (Type[])null); masochismConHook2 = new Hook((MethodBase)methodInfo10, (Delegate)new Action<Action<MasochismController>, MasochismController>(OnMasoActivatable)); MethodInfo methodInfo11 = AccessTools.Method(typeof(SpiteController), "ActivateMaso", (Type[])null, (Type[])null); spiteConHook = new Hook((MethodBase)methodInfo11, (Delegate)new Action<Action<SpiteController>, SpiteController>(OnSpiteActivated)); MethodInfo methodInfo12 = AccessTools.Method(typeof(SpiteController), "Start", (Type[])null, (Type[])null); spiteStartHook = new Hook((MethodBase)methodInfo12, (Delegate)new Action<Action<SpiteController>, SpiteController>(OnSpiteStart)); MethodInfo methodInfo13 = AccessTools.Method(typeof(EnergySystem), "AddHeat", new Type[2] { typeof(float), typeof(bool) }, (Type[])null); addHeatHook = new Hook((MethodBase)methodInfo13, (Delegate)new Action<Action<EnergySystem, float, bool>, EnergySystem, float, bool>(OnAddHeat)); MethodInfo methodInfo14 = AccessTools.Method(typeof(EnergySystem), "CalculateEnergyStats", (Type[])null, (Type[])null); energyHook = new Hook((MethodBase)methodInfo14, (Delegate)new Action<Action<EnergySystem>, EnergySystem>(OnCalculateEnergy)); HealthComponent.TakeDamage += new hook_TakeDamage(OnTakeDamageMasochism); DotController.InflictDot_refInflictDotInfo += new hook_InflictDot_refInflictDotInfo(OnInflictDot); RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(OnArsonistStats); } public void SetupArsonist() { //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) StaticValues.overheatAttackSpeedDebuff = 1f; StaticValues.flamethrowerWeakDamageCoefficient = 0.75f; StaticValues.flamethrowerStrongDamageCoefficient = 0.75f; StaticValues.altFlamethrowerWeakDamageCoefficient = 0.9f; StaticValues.altFlamethrowerStrongDamageCoefficient = 0.9f; StaticValues.flamethrowerBaseTickRate = 3; StaticValues.flamethrowerEnergyCost = 20f; StaticValues.zeropointpounchDamageCoefficient = 3.5f; StaticValues.flareSalvoRadius = 15f; StaticValues.flareStrongDamageCoefficient = 3f; StaticValues.flareStrongChildDamageCoefficient = 3f; Config.masochismSurgeHealOnHitPercentage.Value = 0f; StaticValues.masochismSurgeMoveSpeedMultiplier = 1f; StaticValues.masochismBasePulseSelfDamageTimer = 9999f; StaticValues.masochismSurgeSelfDamage = 0f; StaticValues.masochismEnergyIncreaseOverTimePercentage = 0.05f; StaticValues.masochismSurgeMultiplierPerStack = 1f; StaticValues.masochismSurgeFinalBlastCoefficient = 3f; StaticValues.cleanseDamageCoefficient = 1.5f; StaticValues.SegmentedValuesOnGaugeAlt = new Vector3(0.625f, 0.275f, 0.1f); StaticValues.levelEnergy = 0f; StaticValues.backupEnergyGain = 0f; StaticValues.lysateEnergyGain = 0f; StaticValues.hardlightEnergyGain = 0f; StaticValues.levelBlueEnergy = 0f; StaticValues.backupBlueGain = 0f; StaticValues.lysateBlueGain = 0f; StaticValues.hardlightBlueGain = 0f; Config.masochismMinimumRequiredToActivate.Value = 1; Arsonist.neoMasochismSkillDef.activationState = new SerializableEntityStateType(typeof(MasochismFire)); } private void UpdateText() { string text = "<style=cKeywordName>Heat Gauge</style> <style=cSub>Your skills can build up or vent <color=#ff5e00>Heat</color>. <color=#ff5e00>Heat</color> automatically cools over time, scaling with <style=cIsDamage>attack speed</style>. If <color=#ff5e00>Heat</color> builds up past <color=#ff5e00>100</color>, you <style=cIsHealth>Overheat</style>."; LanguageAPI.Add("KEYWORD_MODDED_GAUGE", text); string text2 = "<style=cKeywordName>Heat</style> <style=cSub>Builds up <color=#ff5e00>Heat</color> when used. If used in <style=cIsHealth>Overheat</style>, you <style=cIsHealth>take damage</style> instead."; LanguageAPI.Add("KEYWORD_MODDED_HEAT", text2); string text3 = "<style=cKeywordName>Overheat</style> <style=cSub>While in <style=cIsHealth>Overheat</style>, you <style=cIsUtility>move 25% faster</style> and some skills have <style=cIsHealth>longer cooldowns</style>. All skills that build up additional <color=#ff5e00>Heat</color> cause you to <style=cIsHealth>take damage</style> proporational to the <color=#ff5e00>Heat</color>."; LanguageAPI.Add("KEYWORD_MODDED_OVERHEAT", text3); string text4 = "<style=cKeywordName>Anticipation</style> <style=cSub>For every <color=#ff5e00>100 Heat</color> lost and/or gained, recieve 1 stack of <color=#ff5e00>Anticipation</color>, up to maximum of 10. Your special skills require <color=#ff5e00>Anticipation</color> to use."; LanguageAPI.Add("KEYWORD_MODDED_ANTICIPATION", text4); string text5 = "<color=#ff5e00>Heat Gauge.</color> Your skills deal standard damage in all portions of the gauge."; LanguageAPI.Add("MODDED_ARSONIST_BODY_PASSIVE_NORMAL_GAUGE_DESCRIPTION", text5); string text6 = "<color=#ff5e00>Heat Gauge.</color> Your skills deal <style=cIsDamage>0.7x</style> damage while in the <color=#ffffff>white portion</color> of the gauge, and <style=cIsDamage>2.5x</style> damage in the <color=#006eff>blue portion</color>."; LanguageAPI.Add("MODDED_ARSONIST_BODY_PASSIVE_BLUE_GAUGE_DESCRIPTION", text6); ArsonistPassive component = CharacterBase.instance.bodyPrefab.GetComponent<ArsonistPassive>(); component.normalGaugePassive.skillDescriptionToken = "MODDED_ARSONIST_BODY_PASSIVE_NORMAL_GAUGE_DESCRIPTION"; component.normalGaugePassive.keywordTokens = new string[2] { "KEYWORD_MODDED_GAUGE", "KEYWORD_MODDED_OVERHEAT" }; component.blueGaugePassive.skillDescriptionToken = "MODDED_ARSONIST_BODY_PASSIVE_BLUE_GAUGE_DESCRIPTION"; component.blueGaugePassive.keywordTokens = new string[2] { "KEYWORD_MODDED_GAUGE", "KEYWORD_MODDED_OVERHEAT" }; string text7 = "<color=#ff5e00>Heat.</color> <style=cIsDamage>Ignite.</style> Fire a ball of fire that deals <style=cIsDamage>225% damage</style> in an area on impact."; LanguageAPI.Add("MODDED_ARSONIST_BODY_PRIMARY_FIREBALL_DESCRIPTION", text7); Arsonist.primarySkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_PRIMARY_FIREBALL_DESCRIPTION"; Arsonist.primarySkillDef.keywordTokens = new string[2] { "KEYWORD_MODDED_HEAT", "KEYWORD_IGNITE" }; string text8 = "<color=#ff5e00>Heat.</color> <style=cIsDamage>Ignite.</style> Fire a beam of fire that deals <style=cIsDamage>450% damage</style> per second. Has increased <style=cIsDamage>ignite</style> chance the closer you are to the target."; LanguageAPI.Add("MODDED_ARSONIST_BODY_PRIMARY_FLAMETHROWER_DESCRIPTION", text8); Arsonist.flamethrowerSkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_PRIMARY_FLAMETHROWER_DESCRIPTION"; Arsonist.flamethrowerSkillDef.keywordTokens = new string[2] { "KEYWORD_MODDED_HEAT", "KEYWORD_IGNITE" }; string text9 = "Vents <style=cIsUtility>30%</style> of your <color=#ff5e00>Current Heat</color>. Fire a flare that can stick to enemies, dealing <style=cIsDamage>500% damage</style> over <style=cIsUtility>5s</style> before exploding into <style=cIsDamage>5 additional flares</style>. Deals <style=cIsDamage>20% more damage</style> per stack of <style=cIsDamage>ignite</style> on the enemy if not in <style=cIsHealth>Overheat</style>."; LanguageAPI.Add("MODDED_ARSONIST_BODY_SECONDARY_FLARE_DESCRIPTION", text9); Arsonist.flareSkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_SECONDARY_FLARE_DESCRIPTION"; Arsonist.flareSkillDef.keywordTokens = new string[1] { "KEYWORD_MODDED_OVERHEAT" }; string text10 = "<style=cIsUtility>Agile.</style> Vents <style=cIsUtility>50%</style> of your <color=#ff5e00>Current Heat</color> to launch yourself forwards, blasting enemies for <style=cIsDamage>350% damage</style>. Launch distance increases with the amount of <color=#ff5e00>Heat</color> vented, and it deals no damage in <style=cIsHealth>Overheat</style>."; LanguageAPI.Add("MODDED_ARSONIST_BODY_SECONDARY_PUNCH_DESCRIPTION", text10); Arsonist.punchSkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_SECONDARY_PUNCH_DESCRIPTION"; Arsonist.punchSkillDef.keywordTokens = new string[2] { "KEYWORD_AGILE", "KEYWORD_MODDED_OVERHEAT" }; string text11 = "<style=cIsUtility>Agile.</style> Vents <style=cIsUtility>50%</style> <color=#ff5e00>TOTAL Heat</color>. While not in <style=cIsHealth>Overheat</style>, briefly increases your <style=cIsUtility>movement speed</style> and <style=cIsHealing>health regeneration</style>, and ignites nearby foes for <style=cIsDamage>150% damage</style>. Accelerates cooling in <style=cIsHealth>Overheat</style>, at the cost of a much longer recharge time."; LanguageAPI.Add("MODDED_ARSONIST_BODY_UTILITY_CLEANSE_DESCRIPTION", text11); Arsonist.cleanseSkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_UTILITY_CLEANSE_DESCRIPTION"; Arsonist.cleanseSkillDef.keywordTokens = new string[2] { "KEYWORD_AGILE", "KEYWORD_MODDED_OVERHEAT" }; string text12 = "<style=cIsDamage>Ignite.</style> Cannot be used in <style=cIsHealth>Overheat</style>. Consumes all <color=#ff5e00>Anticipation</color> to launch a spread of <style=cIsDamage>5 fireballs</style> with <style=cIsHealing>20% lifesteal</style>, each dealing <style=cIsDamage>60% damage</style> per <color=#ff5e00>Anticipation</color> stack. <style=cIsHealth>Overheat</style> immediately after."; LanguageAPI.Add("MODDED_ARSONIST_BODY_SPECIAL_MASOCHISM_DESCRIPTION", text12); Arsonist.neoMasochismSkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_SPECIAL_MASOCHISM_DESCRIPTION"; Arsonist.neoMasochismSkillDef.keywordTokens = new string[3] { "KEYWORD_MODDED_ANTICIPATION", "KEYWORD_IGNITE", "KEYWORD_MODDED_OVERHEAT" }; string text13 = "Resets your <color=#ff5e00>Heat Gauge</color>. For <style=cIsUtility>1s</style> per <color=#ff5e00>Anticipation</color> stack, gain <style=cIsUtility>Double Tap</style> and convert <style=cIsDamage>100%</style> of incoming damage into fire damage over time. Once this effect ends, <style=cIsHealth>Overheat</style> and <style=cIsDamage>detonate</style> in an area around you for <style=cIsDamage>300% damage</style> per <color=#ff5e00>Anticipation</color> stack used."; LanguageAPI.Add("MODDED_ARSONIST_BODY_SPECIAL_SPITE_DESCRIPTION", text13); Arsonist.masochismSurgeSkillDef.skillDescriptionToken = "MODDED_ARSONIST_BODY_SPECIAL_SPITE_DESCRIPTION"; Arsonist.masochismSurgeSkillDef.keywordTokens = new string[3] { "KEYWORD_MODDED_ANTICIPATION", "POPCORN_ARSONIST_BODY_KEYWORD_MASO_DOUBLE_TAP", "KEYWORD_MODDED_OVERHEAT" }; } public void OnArsonistHook(Action<ArsonistPlugin> orig, ArsonistPlugin self) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown orig(self); DotController.InflictDot_refInflictDotInfo -= new hook_InflictDot_refInflictDotInfo(self.DotController_InflictDot_refInflictDotInfo); } private void OnTakeDamageMasochism(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0085: 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_009a: Invalid comparison between Unknown and I4 //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Invalid comparison between Unknown and I4 //IL_0071: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0136: 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_013d: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.body)) { if ((Object)(object)damageInfo.attacker != (Object)null) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null && DamageAPI.HasModdedDamageType(damageInfo, DamageTypes.arsonistLifesteal)) { component.healthComponent.Heal(damageInfo.damage * 0.2f, default(ProcChainMask), true); } } bool flag = false; _ = damageInfo.dotIndex; if (true) { flag = (int)damageInfo.dotIndex == 1 || (int)damageInfo.dotIndex == 2 || (int)damageInfo.dotIndex == 7; } BuffDef masochismSurgeActiveBuff = Buffs.masochismSurgeActiveBuff; if (self.body.HasBuff(Buffs.masochismSurgeActiveBuff) && !flag) { float damage = damageInfo.damage; InflictDotInfo val = default(InflictDotInfo); val.totalDamage = damage; val.damageMultiplier = 1f; val.attackerObject = ((Component)self.body).gameObject; val.victimObject = ((Component)self.body).gameObject; val.duration = 5f; val.dotIndex = (DotIndex)1; InflictDotInfo val2 = val; DotController.InflictDot(ref val2); damageInfo.damage = 0f; } } orig.Invoke(self, damageInfo); } private void OnInflictDot(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo inflictDotInfo) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Invalid comparison between Unknown and I4 //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Invalid comparison between Unknown and I4 //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Invalid comparison between Unknown and I4 if ((Object)(object)inflictDotInfo.victimObject != (Object)null && (Object)(object)inflictDotInfo.attackerObject != (Object)null && (Object)(object)inflictDotInfo.victimObject == (Object)(object)inflictDotInfo.attackerObject) { CharacterBody component = inflictDotInfo.victimObject.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null && component.baseNameToken == "POPCORN_ARSONIST_BODY_NAME" && ((int)inflictDotInfo.dotIndex == 1 || (int)inflictDotInfo.dotIndex == 2 || (int)inflictDotInfo.dotIndex == 7) && inflictDotInfo.damageMultiplier == 0f) { Log.Message("Success!"); inflictDotInfo.damageMultiplier = 1f; } } orig.Invoke(ref inflictDotInfo); } public void OnCalculateEnergy(Action<EnergySystem> orig, EnergySystem self) { orig(self); self.costmultiplierOverheat = 1f; self.costflatOverheat = 0f; } private void OnArsonistStats(CharacterBody sender, StatHookEventArgs args) { EnergySystem component = ((Component)sender).GetComponent<EnergySystem>(); if ((Object)(object)component != (Object)null && component.currentOverheat >= component.maxOverheat) { args.moveSpeedMultAdd += 0.25f; } BuffDef cleanseSpeedBoost = Buffs.cleanseSpeedBoost; if (sender.HasBuff(cleanseSpeedBoost)) { args.baseRegenAdd += 5f; args.levelRegenAdd += 1f; } } public void OnAddHeat(Action<EnergySystem, float, bool> orig, EnergySystem self, float Energy, bool isNatural) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_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_0083: 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_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown if (Energy > 0f && self.currentOverheat >= self.maxOverheat && (Object)(object)self.characterBody.healthComponent != (Object)null) { DamageInfo val = new DamageInfo { attacker = null, crit = false, damage = self.characterBody.healthComponent.fullCombinedHealth * (Energy / 200f), damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)64), (DamageTypeExtended)262144, (DamageSource)0), damageColorIndex = (DamageColorIndex)3, inflictor = ((Component)self.characterBody).gameObject, position = ((Component)self.characterBody).gameObject.transform.position, procCoefficient = 0f }; self.characterBody.healthComponent.TakeDamage(val); self.currentOverheat += Energy; } else { orig(self, Energy, isNatural); } } public void OnSpiteActivated(Action<SpiteController> orig, SpiteController self) { orig(self); self.masoStacks++; } public void OnSpiteStart(Action<SpiteController> orig, SpiteController self) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) orig(self); self.finalBlastAttack.attackerFiltering = (AttackerFiltering)2; } public void OnMasochismControllerStart(Action<MasochismController> orig, MasochismController self) { Config.masochismMinimumRequiredToActivate.Value = 1; orig(self); } public void OnMasoActivatable(Action<MasochismController> orig, MasochismController self) { if (self.energySystem.currentOverheat < self.energySystem.maxOverheat) { orig(self); } else { self.skillLoc.special.stock = 0; } } public void OnFlareSalvo(Action<FlareEffectControllerStrong> orig, FlareEffectControllerStrong self) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_008f: 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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { int num = 5; Vector3 position = self.charbody.transform.position; float num2 = MathF.PI * 2f / (float)num; float num3 = 0f; Log.Message(self.charbody.radius); for (int i = 0; i < num; i++) { float num4 = StaticValues.flareSalvoRadius * Mathf.Cos(num3); float num5 = StaticValues.flareSalvoRadius * Mathf.Sin(num3); float flareSalvoRadius = StaticValues.flareSalvoRadius; Vector3 val = new Vector3(num4, flareSalvoRadius, num5); Vector3 normalized = ((Vector3)(ref val)).normalized; self.FireProjectileSalvo(normalized, new Vector3(position.x + num4 / 9f * self.charbody.radius, position.y, position.z + num5 / 9f * self.charbody.radius)); num3 += num2; } } } public void OnFlareUpdateStrong(Action<FlareEffectControllerStrong> orig, FlareEffectControllerStrong self) { //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0180: 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_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Expected O, but got Unknown //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Expected O, but got Unknown //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)self.charbody)) { if (NetworkServer.active) { if (self.timer > StaticValues.flareInterval) { if (self.timesFired < StaticValues.flareTickNum) { EnergySystem component = ((Component)self.arsonistBody).GetComponent<EnergySystem>(); float num = self.arsonistBody.damage * StaticValues.flareStrongDamageCoefficient / (float)StaticValues.flareTickNum; if ((self.charbody.HasBuff(Buffs.OnFire) || self.charbody.HasBuff(Buffs.StrongerBurn)) && component.currentOverheat < component.maxOverheat) { num *= 1f + (float)(self.charbody.GetBuffCount(Buffs.OnFire) + self.charbody.GetBuffCount(Buffs.StrongerBurn)) * 0.2f; } self.timesFired++; self.timer = 0f; NetMessageExtensions.Send((INetMessage)new TakeDamageNetworkRequest(self.charbody.masterObjectId, self.arsonistBody.masterObjectId, num, true), (NetworkDestination)1); NetMessageExtensions.Send((INetMessage)new PlaySoundNetworkRequest(((NetworkBehaviour)self.charbody).netId, 3747272580u), (NetworkDestination)1); } else { self.hasFired = true; self.FireExplosion(); EffectManager.SpawnEffect(AssetsArsonist.elderlemurianexplosionEffect, new EffectData { origin = self.charbody.transform.position, scale = StaticValues.flareBlastRadius, rotation = new Quaternion(0f, 0f, 0f, 0f) }, true); Object.Destroy((Object)(object)self); Object.Destroy((Object)(object)self.effectObj); } } else { self.timer += Time.fixedDeltaTime; } } else if (self.timer > StaticValues.flareInterval * (float)StaticValues.flareTickNum) { self.timer += Time.fixedDeltaTime; } else { EffectManager.SpawnEffect(AssetsArsonist.elderlemurianexplosionEffect, new EffectData { origin = self.charbody.transform.position, scale = StaticValues.flareBlastRadius, rotation = new Quaternion(0f, 0f, 0f, 0f) }, true); Object.Destroy((Object)(object)self); Object.Destroy((Object)(object)self.effectObj); } } else { Object.Destroy((Object)(object)self.effectObj); } } public void OnFlareUpdateChild(Action<FlareEffectControllerStrongChild> orig, FlareEffectControllerStrongChild self) { //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Expected O, but got Unknown //IL_010d: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)self.charbody)) { if (((NetworkBehaviour)self.arsonistBody).hasAuthority) { if (self.timer > StaticValues.flareInterval) { if (self.timesFired < StaticValues.flareTickNum) { EnergySystem component = ((Component)self.arsonistBody).GetComponent<EnergySystem>(); float num = self.arsonistBody.damage * StaticValues.flareStrongDamageCoefficient / (float)StaticValues.flareTickNum; if ((self.charbody.HasBuff(Buffs.OnFire) || self.charbody.HasBuff(Buffs.StrongerBurn)) && component.currentOverheat < component.maxOverheat) { num *= 1f + (float)(self.charbody.GetBuffCount(Buffs.OnFire) + self.charbody.GetBuffCount(Buffs.StrongerBurn)) * 0.2f; } self.timesFired++; self.timer = 0f; NetMessageExtensions.Send((INetMessage)new TakeDamageNetworkRequest(self.charbody.masterObjectId, self.arsonistBody.masterObjectId, num, true), (NetworkDestination)1); } else { self.FireExplosion(); EffectManager.SpawnEffect(AssetsArsonist.elderlemurianexplosionEffect, new EffectData { origin = self.charbody.transform.position, scale = StaticValues.flareBlastRadius, rotation = new Quaternion(0f, 0f, 0f, 0f) }, true); Object.Destroy((Object)(object)self); Object.Destroy((Object)(object)self.effectObj); } } else { self.timer += Time.fixedDeltaTime; } } else if (self.timer > StaticValues.flareInterval * (float)StaticValues.flareTickNum) { self.timer += Time.fixedDeltaTime; } else { EffectManager.SpawnEffect(AssetsArsonist.elderlemurianexplosionEffect, new EffectData { origin = self.charbody.transform.position, scale = StaticValues.flareBlastRadius, rotation = new Quaternion(0f, 0f, 0f, 0f) }, true); Object.Destroy((Object)(object)self); Object.Destroy((Object)(object)self.effectObj); } } else { Object.Destroy((Object)(object)self); Object.Destroy((Object)(object)self.effectObj); } } public void OnFlareEnter(Action<Flare> orig, Flare self) { orig(self); self.isStrong = true; } public void OnZeroPointEnter(Action<ZeroPointBlastStart> orig, ZeroPointBlastStart self) { self.energySystem = ((Component)((EntityState)self).characterBody).gameObject.GetComponent<EnergySystem>(); bool flag = self.energySystem.currentOverheat < self.energySystem.maxOverheat && ((EntityState)self).isAuthority; if (flag) { zeroPointJump = 4f * (1f + self.energySystem.currentOverheat * StaticValues.zeropointHeatReductionMultiplier * 0.02f); ZeroPointBlastStart.initialSpeedCoefficient = 7f * (1f + self.energySystem.currentOverheat * StaticValues.zeropointHeatReductionMultiplier * 0.012f); ZeroPointBlastStart.finalSpeedCoefficient = 4f * (1f + self.energySystem.currentOverheat * StaticValues.zeropointHeatReductionMultiplier * 0.012f); } else { zeroPointJump = 8f; ZeroPointBlastStart.initialSpeedCoefficient = 11.2f; ZeroPointBlastStart.finalSpeedCoefficient = 6.4f; } zeroPointLongJump = zeroPointJump * 1.5f; orig(self); if (!flag) { self.blastAttack.baseDamage = 0f; self.damageCoefficient = 0f; } } public void IL_ZeroPointEnter(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); ILCursor val2 = val; MoveType val3 = (MoveType)0; if (val2.TryGotoNext(val3, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 6f) })) { val.Next.Operand = zeroPointLongJump; ILCursor val4 = val; if (val4.TryGotoNext(val3, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 4f) })) { val.Next.Operand = zeroPointJump; } else { Log.Error(((MemberReference)il.Method).Name + " Hook 2 failed!"); } } else { Log.Error(((MemberReference)il.Method).Name + " Hook 1 failed!"); } } public void OnFlamethrowerUpdate(Action<Flamethrower> orig, Flamethrower self) { self.interval = self.duration / 3f; self.energyCost = self.Energy * ((EntityState)self).characterBody.attackSpeed; orig(self); } public void OnFireBall(Action<FireSpray> orig, FireSpray self) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) self.energySystem.AddHeat(self.energyCost); Ray aimRay = ((BaseState)self).GetAimRay(); float num = (self.isBlue ? self.altStrongDamageCoefficient : self.strongdamageCoefficient); Vector3 displacedOrigin = self.GetDisplacedOrigin(aimRay); if (((EntityState)self).isAuthority) { ProjectileManager.instance.FireProjectile(Projectiles.artificerFirebolt, displacedOrigin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)self).gameObject, ((BaseState)self).damageStat * num, self.strongforce, Util.CheckRoll(((BaseState)self).critStat, ((EntityState)self).characterBody.master), (DamageColorIndex)0, (GameObject)null, self.strongspeedOverride, (DamageTypeCombo?)new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)128), (DamageTypeExtended)0, (DamageSource)1)); } } } public class MasochismFire : BaseSkillState { private Animator animator; public MasochismController maso; public ArsonistController arsonistCon; public float stopwatch; public static float baseActivationTime = 0.16f; public static float baseDuration = 0.75f; public float duration; public EnergySystem energySystem; public override void OnEnter() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); energySystem = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<EnergySystem>(); maso = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<MasochismController>(); ((EntityState)this).characterBody.isSprinting = false; Ray aimRay = ((BaseState)this).GetAimRay(); duration = 0.75f / ((EntityState)this).characterBody.attackSpeed; ((EntityState)this).characterBody.SetAimTimer(duration); animator = ((EntityState)this).GetModelAnimator(); animator.SetBool("attacking", true); ((EntityState)this).GetModelAnimator().SetFloat("Attack.playbackRate", ((BaseState)this).attackSpeedStat); ((EntityState)this).PlayCrossfade("Gesture, Override", "FireSpray", "Attack.playbackRate", duration, 0.1f); ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator(); Transform val = modelChildLocator.FindChild("GunMuzzle"); Vector3 displacedOrigin = GetDisplacedOrigin(aimRay); float num = (float)maso.masoStacks * 0.6f; float num2 = 0f; float num3 = 0f; bool crit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master); if (((EntityState)this).isAuthority) { DamageTypeCombo value = default(DamageTypeCombo); for (int num4 = 5; num4 > 0; num4--) { switch (num4) { case 1: num2 = 0f; num3 = -3f; break; case 2: num2 = 3f; num3 = -0.75f; break; case 3: num2 = -3f; num3 = -0.75f; break; case 4: num2 = 1.75f; num3 = 2.5f; break; case 5: num2 = -1.75f; num3 = 2.5f; break; } Vector3 val2 = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 0f, 1f, 1f, num2, num3); FireProjectileInfo val3 = default(FireProjectileInfo); val3.projectilePrefab = Projectiles.masoFireBall; val3.position = displacedOrigin; val3.rotation = Util.QuaternionSafeLookRotation(val2); val3.owner = ((EntityState)this).gameObject; val3.damage = ((BaseState)this).damageStat * num; val3.force = 500f; val3.crit = crit; ((FireProjectileInfo)(ref val3)).speedOverride = 80f; ((DamageTypeCombo)(ref value))..ctor(DamageTypeCombo.op_Implicit((DamageType)128), (DamageTypeExtended)0, (DamageSource)8); DamageAPI.AddModdedDamageType(ref value, DamageTypes.arsonistLifesteal); val3.damageTypeOverride = value; ProjectileManager.instance.FireProjectile(val3); } } Util.PlaySound("Play_lunar_wisp_attack2_launch", ((EntityState)this).gameObject); float num5 = 3200f; if (((BaseState)this).isGrounded) { num5 *= 0.25f; } ((EntityState)this).characterMotor.ApplyForce(((Ray)(ref aimRay)).direction * (0f - num5), false, false); energySystem.AddHeat(energySystem.maxOverheat * 2f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); maso.masoStacks = 0; if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } public Vector3 GetDisplacedOrigin(Ray aimRay) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_0020: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) float num = 2.5f; float num2 = 1.25f; Vector3 direction; Vector3 result; if (!CheckLookingDown(aimRay)) { Vector3 origin = ((Ray)(ref aimRay)).origin; direction = ((Ray)(ref aimRay)).direction; result = origin + num2 * ((Vector3)(ref direction)).normalized; } else { Vector3 origin2 = ((Ray)(ref aimRay)).origin; direction = ((Ray)(ref aimRay)).direction; result = origin2 + num * ((Vector3)(ref direction)).normalized; } return result; } private bool CheckLookingDown(Ray aimRay) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return Vector3.Dot(((Ray)(ref aimRay)).direction, Vector3.down) > 0.6f; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }