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 ForgottenSkillsTweak v0.4.3
ForgottenSkillsTweaks/ForgottenSkillsTweaks.dll
Decompiled a month agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EntityStates; using EntityStates.Bandit2.Weapon; using EntityStates.FalseSon; using EntityStates.Huntress; using EntityStates.Mage.Weapon; using EntityStates.Railgunner.Weapon; using KinematicCharacterController; using Microsoft.CodeAnalysis; using On.EntityStates.Bandit2.Weapon; using On.EntityStates.FalseSon; using On.EntityStates.Huntress; using On.EntityStates.Mage.Weapon; using On.EntityStates.Railgunner.Weapon; using On.RoR2; using R2API; using RiskOfOptions; using RiskOfOptions.Options; using RoR2; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ForgottenSkillsTweaks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+8cc1e86a45b1b773ef4bb9da913e65e93e6a2044")] [assembly: AssemblyProduct("ForgottenSkillsTweaks")] [assembly: AssemblyTitle("ForgottenSkillsTweaks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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 ForgottenSkillsTweaks { public static class ArrowRainTweak { private static SkillDef Rain; private static SkillDef Blink; private static string OriginalRainDesc; public static void init() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown float newRadius = 13f; Rain = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Huntress/HuntressBodyArrowRain.asset").WaitForCompletion(); Blink = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Huntress/HuntressBodyBlink.asset").WaitForCompletion(); OriginalRainDesc = Rain.skillDescriptionToken; LanguageAPI.Add("HuntressArrowRainDescription", "<style=cIsUtility>Teleport</style> into the sky. Target an area to rain arrows, <style=cIsUtility>slowing</style> all enemies and dealing <style=cIsDamage>660% damage</style> per second."); config.OnConfigChanged += UpdateSkills; UpdateSkills(); ArrowRain.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, ArrowRain self) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (config.ArrowRain.Value) { self.areaIndicatorInstance.transform.localScale = new Vector3(newRadius, 150f, newRadius); ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().lifetime = 7f; float num = (((EntityState)self).characterBody.attackSpeed - ((EntityState)self).characterBody.baseAttackSpeed) * 0.5f; ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().resetFrequency = 4f * (1f + num); ((Component)ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>()).transform.localScale = new Vector3(newRadius, 150f, newRadius) * 2f; ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().overlapProcCoefficient = 0.7f; ArrowRain.projectilePrefab.GetComponent<ProjectileDotZone>().damageCoefficient = 0.75f; } }; } private static void UpdateSkills() { if (config.ArrowRain.Value) { Rain.baseRechargeInterval = 11f; Rain.skillDescriptionToken = "HuntressArrowRainDescription"; } else { Rain.baseRechargeInterval = 12f; Rain.skillDescriptionToken = OriginalRainDesc; } if (config.Blink.Value) { Blink.baseRechargeInterval = 4.5f; } else { Blink.baseRechargeInterval = 7f; } } } public static class Bandit { [CompilerGenerated] private static class <>O { public static Action <0>__UpdateSkills; public static hook_TakeDamage <1>__HealthComponent_TakeDamage; public static Action<DamageReport> <2>__ServerDamageDealt; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__7_0; public static hook_ModifyBullet <>9__7_1; internal void <init>b__7_0(orig_OnEnter orig, BaseFireSidearmRevolverState self) { if (self is FireSidearmResetRevolver) { IsRevolver = true; } else { IsRevolver = false; } orig.Invoke(self); } internal void <init>b__7_1(orig_ModifyBullet orig, Bandit2FireRifle self, BulletAttack bulletAttack) { if (config.Blast.Value) { ((GenericBulletBaseState)self).minSpread = 0f; ((GenericBulletBaseState)self).maxSpread = 0.3f; ((GenericBulletBaseState)self).spreadBloomValue = 0.3f; ((GenericBulletBaseState)self).damageCoefficient = 3.8f; } orig.Invoke(self, bulletAttack); } } private static SkillDef revolver; private static SkillDef Blade; private static SkillDef Blast; private static string originalRevolverDesc; private static string[] originalRevolverDesc2; private static string OriginalBlastDesc; private static bool IsRevolver; public static void init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_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) //IL_00e5: Expected O, but got Unknown //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Expected O, but got Unknown //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) //IL_0150: Expected O, but got Unknown revolver = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/ResetRevolver.asset").WaitForCompletion(); Blade = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/SlashBlade.asset").WaitForCompletion(); Blast = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/Bandit2Blast.asset").WaitForCompletion(); OriginalBlastDesc = Blast.skillDescriptionToken; originalRevolverDesc = revolver.skillDescriptionToken; originalRevolverDesc2 = revolver.keywordTokens; LanguageAPI.Add("NewRevolverDesc", "<style=cIsdamage>Slayer</style>. <style=cIsHealth>Death Marked</style>. Fire a revolver shot for <style=cIsdamage>600% damage</style>. Kills <style=cIsUtility>reset all your cooldowns</style>. Critical strikes <style=cIsUtility>reset the other skills cooldowns</style>"); LanguageAPI.Add("KEYWORD_DEATH", "<style=cKeywordName>Death Marked</style><style=cSub>Enemies <style=cIsHealth>hemorrhaging</style> take <style=cIsDamage>2.5X</style> more damage, hitting a <style=cIsHealth>hemorrhaging</style> enemy guarantees <style=cIsDamage>critical strikes</style> for 2 seconds.</style>"); LanguageAPI.Add("NewRifleDesc", "Fire a rifle blast for <style=cIsDamage>380% damage</style>. Can hold up to 4 bullets."); config.OnConfigChanged += UpdateSkills; UpdateSkills(); object obj = <>O.<1>__HealthComponent_TakeDamage; if (obj == null) { hook_TakeDamage val = HealthComponent_TakeDamage; <>O.<1>__HealthComponent_TakeDamage = val; obj = (object)val; } HealthComponent.TakeDamage += (hook_TakeDamage)obj; GlobalEventManager.onServerDamageDealt += ServerDamageDealt; object obj2 = <>c.<>9__7_0; if (obj2 == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, BaseFireSidearmRevolverState self) { if (self is FireSidearmResetRevolver) { IsRevolver = true; } else { IsRevolver = false; } orig.Invoke(self); }; <>c.<>9__7_0 = val2; obj2 = (object)val2; } BaseFireSidearmRevolverState.OnEnter += (hook_OnEnter)obj2; object obj3 = <>c.<>9__7_1; if (obj3 == null) { hook_ModifyBullet val3 = delegate(orig_ModifyBullet orig, Bandit2FireRifle self, BulletAttack bulletAttack) { if (config.Blast.Value) { ((GenericBulletBaseState)self).minSpread = 0f; ((GenericBulletBaseState)self).maxSpread = 0.3f; ((GenericBulletBaseState)self).spreadBloomValue = 0.3f; ((GenericBulletBaseState)self).damageCoefficient = 3.8f; } orig.Invoke(self, bulletAttack); }; <>c.<>9__7_1 = val3; obj3 = (object)val3; } Bandit2FireRifle.ModifyBullet += (hook_ModifyBullet)obj3; } private static void UpdateSkills() { if (config.LightsOut.Value) { revolver.skillDescriptionToken = "NewRevolverDesc"; revolver.keywordTokens = new string[2] { "KEYWORD_SLAYER", "KEYWORD_DEATH" }; } else { revolver.skillDescriptionToken = originalRevolverDesc; revolver.keywordTokens = originalRevolverDesc2; } if (config.Blast.Value) { Blast.skillDescriptionToken = "NewRifleDesc"; } else { Blast.skillDescriptionToken = OriginalBlastDesc; } if (config.Dagger.Value) { Blade.baseMaxStock = 2; } else { Blade.baseMaxStock = 1; } } private static void ServerDamageDealt(DamageReport damageReport) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Invalid comparison between Unknown and I4 if (!config.LightsOut.Value) { return; } DamageInfo damageInfo = damageReport.damageInfo; bool flag = (damageInfo.damageType.damageType & 4) > 0; if (damageInfo.crit && IsRevolver && flag) { CharacterBody attackerBody = damageReport.attackerBody; if (Object.op_Implicit((Object)(object)attackerBody) && Object.op_Implicit((Object)(object)attackerBody.skillLocator)) { SkillLocator skillLocator = attackerBody.skillLocator; skillLocator.GetSkill((SkillSlot)0).Reset(); skillLocator.GetSkill((SkillSlot)1).Reset(); skillLocator.GetSkill((SkillSlot)2).Reset(); } } } private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0043: 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) //IL_004b: Invalid comparison between Unknown and I4 if (!config.LightsOut.Value) { orig.Invoke(self, damageInfo); return; } CharacterBody val = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); bool flag = (damageInfo.damageType.damageType & 4) > 0; if (Object.op_Implicit((Object)(object)self.body) && self.body.HasBuff(Buffs.SuperBleed) && flag) { damageInfo.damage *= 2.5f; if (Object.op_Implicit((Object)(object)val)) { val.AddTimedBuff(Buffs.FullCrit, 2f); } } orig.Invoke(self, damageInfo); } } public static class BlightTweak { [CompilerGenerated] private static class <>O { public static Action <0>__UpdateSkills; public static hook_InflictDot_refInflictDotInfo <1>__DotController_InflictDot_refInflictDotInfo; public static hook_TakeDamage <2>__HealthComponent_TakeDamage; } private static SkillDef Blightdef; private static string OriginalBlightDesc; public static float BlightProcCoefficient = 0.5f; [SystemInitializer(new Type[] { typeof(DotController) })] public static void init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_008f: 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: Expected O, but got Unknown Blightdef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoPassiveBlight.asset").WaitForCompletion(); OriginalBlightDesc = Blightdef.skillDescriptionToken; LanguageAPI.Add("NewBlightDesc", "Attacks that apply Poison apply stacking <style=cIsdamage>Blight</style> instead, dealing <style=cIsdamage>100% damage</style> per second. New stacks extends all stacks durations. Can activate items"); config.OnConfigChanged += UpdateSkills; UpdateSkills(); object obj = <>O.<1>__DotController_InflictDot_refInflictDotInfo; if (obj == null) { hook_InflictDot_refInflictDotInfo val = DotController_InflictDot_refInflictDotInfo; <>O.<1>__DotController_InflictDot_refInflictDotInfo = val; obj = (object)val; } DotController.InflictDot_refInflictDotInfo += (hook_InflictDot_refInflictDotInfo)obj; object obj2 = <>O.<2>__HealthComponent_TakeDamage; if (obj2 == null) { hook_TakeDamage val2 = HealthComponent_TakeDamage; <>O.<2>__HealthComponent_TakeDamage = val2; obj2 = (object)val2; } HealthComponent.TakeDamage += (hook_TakeDamage)obj2; } private static void UpdateSkills() { if (config.Blight.Value) { Blightdef.skillDescriptionToken = "NewBlightDesc"; } else { Blightdef.skillDescriptionToken = OriginalBlightDesc; } } private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_0046: Unknown result type (might be due to invalid IL or missing references) if (config.Blight.Value && (int)damageInfo.dotIndex == 5 && (Object)(object)damageInfo.inflictor.GetComponent<DotController>() != (Object)null) { damageInfo.procCoefficient = 0.65f; damageInfo.procChainMask = default(ProcChainMask); CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { damageInfo.crit = component.RollCrit(); } orig.Invoke(self, damageInfo); GlobalEventManager.instance.OnHitEnemy(damageInfo, ((Component)self).gameObject); GlobalEventManager.instance.OnHitAll(damageInfo, ((Component)self).gameObject); } else { orig.Invoke(self, damageInfo); } } private static void DotController_InflictDot_refInflictDotInfo(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo inflictDotInfo) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Invalid comparison between Unknown and I4 if (config.Blight.Value && (int)inflictDotInfo.dotIndex == 5) { inflictDotInfo.damageMultiplier += 0.67f; inflictDotInfo.duration = 6f; if (Object.op_Implicit((Object)(object)inflictDotInfo.victimObject)) { DotController val = DotController.FindDotController(inflictDotInfo.victimObject); if (Object.op_Implicit((Object)(object)val) && val.dotStackList != null) { foreach (DotStack dotStack in val.dotStackList) { if ((int)dotStack.dotIndex == 5) { dotStack.timer += 2f; } } } } } orig.Invoke(ref inflictDotInfo); } } public static class config { public static ConfigEntry<bool> LightsOut; public static ConfigEntry<bool> Blast; public static ConfigEntry<bool> Dagger; public static ConfigEntry<bool> FlameThrower; public static ConfigEntry<bool> ArrowRain; public static ConfigEntry<bool> Blink; public static ConfigEntry<bool> LaserFather; public static ConfigEntry<bool> HH44; public static ConfigEntry<bool> PolarMines; public static ConfigEntry<bool> Blight; public static event Action OnConfigChanged; public static void init(ConfigFile config) { LightsOut = config.Bind<bool>("Bandit", "Lights Out", true, "Enables the Lights Out changes."); Blast = config.Bind<bool>("Bandit", "Blast", true, "Enables the Blast changes."); Dagger = config.Bind<bool>("Bandit", "Serrated Dagger", true, "Enables the Serrated Dagger changes."); FlameThrower = config.Bind<bool>("Artificer", "Flame Thrower", true, "Enables the Flame Thrower changes."); ArrowRain = config.Bind<bool>("Huntress", "Arrow Rain", true, "Enables the Arrow Rain changes"); Blink = config.Bind<bool>("Huntress", "Blink", true, "Enables the Blink changes."); LaserFather = config.Bind<bool>("False Son", "Laser of The Father", true, "Enables the Laser of The Father changes"); HH44 = config.Bind<bool>("RailGunner", "HH44", true, "Enables the HH44 changes"); PolarMines = config.Bind<bool>("RailGunner", "Polar Mines", true, "Enables the Polar Mines changes"); Blight = config.Bind<bool>("Acrid", "Blight", true, "Enables the Blight changes"); BindSettingChanged(LightsOut); BindSettingChanged(Blast); BindSettingChanged(Dagger); BindSettingChanged(FlameThrower); BindSettingChanged(ArrowRain); BindSettingChanged(Blink); BindSettingChanged(LaserFather); BindSettingChanged(HH44); BindSettingChanged(PolarMines); BindSettingChanged(Blight); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { AddConfig(); } } private static void BindSettingChanged(ConfigEntry<bool> entry) { entry.SettingChanged += delegate { config.OnConfigChanged?.Invoke(); }; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void AddConfig() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(LightsOut)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Blast)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Dagger)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(FlameThrower)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ArrowRain)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Blink)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(LaserFather)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(HH44)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(PolarMines)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Blight)); } } public static class FlameThrowerTweak { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__8_0; public static hook_FixedUpdate <>9__8_1; internal void <init>b__8_0(orig_OnEnter orig, Flamethrower self) { orig.Invoke(self); if (config.FlameThrower.Value) { self.entryDuration = 0.3f; self.tickDamageCoefficient *= 2.5f; Flamethrower.ignitePercentChance = 100f; self.maxDistance = newRange; float scaleRatio = newRange / 16f; if ((Object)(object)((EntityState)self).characterMotor != (Object)null) { ((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(jumpDuration); ((EntityState)self).characterMotor.velocity.y = 0f; } ScaleFlamethrowerVisual(self.leftFlamethrowerEffectInstance, scaleRatio); ScaleFlamethrowerVisual(self.rightFlamethrowerEffectInstance, scaleRatio); } } internal void <init>b__8_1(orig_FixedUpdate orig, Flamethrower self) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (config.FlameThrower.Value) { if (((EntityState)self).fixedAge <= jumpDuration && (Object)(object)((EntityState)self).characterMotor != (Object)null && (Object)(object)((EntityState)self).characterBody != (Object)null) { float num = ((EntityState)self).fixedAge / jumpDuration; float num2 = speedCurve.Evaluate(num); float num3 = ((EntityState)self).characterBody.moveSpeed * baseSpeedMultiplier * num2; CharacterMotor characterMotor = ((EntityState)self).characterMotor; characterMotor.rootMotion += Vector3.up * (num3 * Time.fixedDeltaTime); ((EntityState)self).characterMotor.velocity.y = 0f; } else if (((EntityState)self).fixedAge <= gravityDelay + jumpDuration) { ((EntityState)self).characterMotor.velocity.y = Mathf.Max(((EntityState)self).characterMotor.velocity.y, 0f); } } } } private static SkillDef FlameThrowerr; private static string OriginalFlameDesc; private static string[] OriginalFlameDesc2; private static float newRange = 45f; private static float jumpDuration = 0.5f; private static float baseSpeedMultiplier = 3.5f; private static float gravityDelay = 0.5f; private static readonly AnimationCurve speedCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 1f), new Keyframe(0.7f, 0.5f), new Keyframe(1f, 0f) }); public static void init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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) //IL_008c: Expected O, but got Unknown //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown FlameThrowerr = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyFlamethrower.asset").WaitForCompletion(); OriginalFlameDesc = FlameThrowerr.skillDescriptionToken; OriginalFlameDesc2 = FlameThrowerr.keywordTokens; config.OnConfigChanged += UpdateSkills; UpdateSkills(); LanguageAPI.Add("MageFlamethrowerNewDesc", "<style=cIsdamage>Ignite</style>. Burn all enemies in front of you for <style=cIsdamage>5000% damage</style>."); object obj = <>c.<>9__8_0; if (obj == null) { hook_OnEnter val = delegate(orig_OnEnter orig, Flamethrower self) { orig.Invoke(self); if (config.FlameThrower.Value) { self.entryDuration = 0.3f; self.tickDamageCoefficient *= 2.5f; Flamethrower.ignitePercentChance = 100f; self.maxDistance = newRange; float scaleRatio = newRange / 16f; if ((Object)(object)((EntityState)self).characterMotor != (Object)null) { ((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(jumpDuration); ((EntityState)self).characterMotor.velocity.y = 0f; } ScaleFlamethrowerVisual(self.leftFlamethrowerEffectInstance, scaleRatio); ScaleFlamethrowerVisual(self.rightFlamethrowerEffectInstance, scaleRatio); } }; <>c.<>9__8_0 = val; obj = (object)val; } Flamethrower.OnEnter += (hook_OnEnter)obj; object obj2 = <>c.<>9__8_1; if (obj2 == null) { hook_FixedUpdate val2 = delegate(orig_FixedUpdate orig, Flamethrower self) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (config.FlameThrower.Value) { if (((EntityState)self).fixedAge <= jumpDuration && (Object)(object)((EntityState)self).characterMotor != (Object)null && (Object)(object)((EntityState)self).characterBody != (Object)null) { float num = ((EntityState)self).fixedAge / jumpDuration; float num2 = speedCurve.Evaluate(num); float num3 = ((EntityState)self).characterBody.moveSpeed * baseSpeedMultiplier * num2; CharacterMotor characterMotor = ((EntityState)self).characterMotor; characterMotor.rootMotion += Vector3.up * (num3 * Time.fixedDeltaTime); ((EntityState)self).characterMotor.velocity.y = 0f; } else if (((EntityState)self).fixedAge <= gravityDelay + jumpDuration) { ((EntityState)self).characterMotor.velocity.y = Mathf.Max(((EntityState)self).characterMotor.velocity.y, 0f); } } }; <>c.<>9__8_1 = val2; obj2 = (object)val2; } Flamethrower.FixedUpdate += (hook_FixedUpdate)obj2; } private static void UpdateSkills() { if (config.FlameThrower.Value) { FlameThrowerr.skillDescriptionToken = "MageFlamethrowerNewDesc"; FlameThrowerr.keywordTokens = new string[1] { "KEYWORD_IGNITE" }; } else { FlameThrowerr.skillDescriptionToken = OriginalFlameDesc; FlameThrowerr.keywordTokens = OriginalFlameDesc2; } } private static void ScaleFlamethrowerVisual(GameObject effectInstance, float scaleRatio) { //IL_004d: 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) if ((Object)(object)effectInstance == (Object)null) { return; } ParticleSystem[] componentsInChildren = effectInstance.GetComponentsInChildren<ParticleSystem>(); ParticleSystem[] array = componentsInChildren; foreach (ParticleSystem val in array) { string name = ((Object)((Component)val).gameObject).name; if (!(name == "IcoCharge")) { MainModule main = val.main; ((MainModule)(ref main)).startSpeedMultiplier = ((MainModule)(ref main)).startSpeedMultiplier * scaleRatio; if (name == "FireForward" || name == "Billboard") { ((MainModule)(ref main)).startSizeMultiplier = ((MainModule)(ref main)).startSizeMultiplier * 1.5f; } } } } } [BepInPlugin("com.MiIsaarks.ForgottenSkillsTweaks", "ForgottenSkillsTweaks", "0.4.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class MainPlugin : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_FireBullet <>9__7_0; public static hook_OnEnter <>9__7_2; public static hook_GetGrowthLaserBonusDuration <>9__7_3; public static hook_Fire <>9__7_4; public static hook_OnEnter <>9__7_5; internal void <Awake>b__7_0(orig_FireBullet orig, LaserFatherCharged self, Transform a, Ray b, string c, float d) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) light = true; orig.Invoke(self, a, b, c, d); light = false; } internal void <Awake>b__7_2(orig_OnEnter orig, LaserFather self) { if (config.LaserFather.Value) { self.baseChargeDuration = 0.5f; } orig.Invoke(self); } internal float <Awake>b__7_3(orig_GetGrowthLaserBonusDuration orig, FalseSonController self) { if (config.LaserFather.Value) { return 0f; } return orig.Invoke(self); } internal void <Awake>b__7_4(orig_Fire orig, BulletAttack self) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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) if ((Object)(object)self.owner != (Object)null && config.LaserFather.Value) { CharacterBody component = self.owner.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null && component.bodyIndex == BodyCatalog.FindBodyIndex("FalseSonBody")) { EntityStateMachine val = EntityStateMachine.FindByCustomName(self.owner, "Weapon"); if ((Object)(object)val != (Object)null && val.state is LaserFatherCharged) { self.falloffModel = (FalloffModel)0; } } } orig.Invoke(self); } internal void <Awake>b__7_5(orig_OnEnter orig, LaserFatherCharged self) { orig.Invoke(self); if (config.LaserFather.Value) { LaserFatherCharged.procCoefficientPerTick = 0.7f; self.spikeRefillAmountPerSecond = 0f; } else { LaserFatherCharged.procCoefficientPerTick = 0.45f; } float num = (((EntityState)self).characterBody.attackSpeed - ((EntityState)self).characterBody.baseAttackSpeed) * 0.3f; self.fireFrequency = LaserFatherCharged.baseFireFrequency * (1f + num); hitcount = 1; SkillLocator skillLocator = ((EntityState)self).characterBody.skillLocator; if ((Object)(object)skillLocator != (Object)null && config.LaserFather.Value) { float num2 = skillLocator.GetSkill((SkillSlot)1).maxStock; float num3 = skillLocator.GetSkill((SkillSlot)1).stock; int num4 = (int)(num2 * 0.5f); ((EntityState)self).skillLocator.GetSkill((SkillSlot)1).stock = (int)Mathf.Clamp(num3 + (float)num4, num3, num2); } if (!originalDamage.HasValue) { originalDamage = LaserFatherCharged.damageCoefficient * 1.35f; } FalseSonController component = ((Component)((EntityState)self).characterBody).GetComponent<FalseSonController>(); if ((Object)(object)component != (Object)null && config.LaserFather.Value) { int growthLevel = component.growthLevel; float num5 = 1f + (float)growthLevel * 0.05f; LaserFatherCharged.damageCoefficient = originalDamage.Value * num5; } else { LaserFatherCharged.damageCoefficient = originalDamage.Value / 1.35f; } } } private static int hitsToLightning = 10; private static int hitcount = 0; private static float? originalDamage = null; private static SkillDef FalseSonLaserF; private static string OriginalFalseSonLaserDesc; private static string[] OriginalFalseSonLaserDesc2; private static bool light = false; public void Awake() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //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_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Expected O, but got Unknown //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Expected O, but got Unknown //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Expected O, but got Unknown config.init(((BaseUnityPlugin)this).Config); FlameThrowerTweak.init(); ArrowRainTweak.init(); BlightTweak.init(); RailGunner.init(); Bandit.init(); GameObject Lightning = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/FalseSon/LunarStakeLightningStrikeImpactEffect.prefab").WaitForCompletion(); object obj = <>c.<>9__7_0; if (obj == null) { hook_FireBullet val = delegate(orig_FireBullet orig, LaserFatherCharged self, Transform a, Ray b, string c, float d) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) light = true; orig.Invoke(self, a, b, c, d); light = false; }; <>c.<>9__7_0 = val; obj = (object)val; } LaserFatherCharged.FireBullet += (hook_FireBullet)obj; BulletAttack.DefaultHitCallbackImplementation += (hook_DefaultHitCallbackImplementation)delegate(orig_DefaultHitCallbackImplementation orig, BulletAttack self, ref BulletHit bullethit) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00b4: 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_00d2: 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_00d9: 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) //IL_00e4: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: 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_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010d: 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_0119: Expected O, but got Unknown //IL_011b: Unknown result type (might be due to invalid IL or missing references) bool result = orig.Invoke(self, ref bullethit); if (!light) { return result; } if ((Object)(object)bullethit.entityObject.GetComponent<HealthComponent>() != (Object)null && config.LaserFather.Value) { hitcount++; if (hitcount % hitsToLightning == 0) { GameObject inflictor = Object.Instantiate<GameObject>(Lightning, bullethit.entityObject.transform.position, Quaternion.identity); BlastAttack val6 = new BlastAttack { attacker = self.owner, position = bullethit.point, inflictor = inflictor, baseDamage = self.damage * 3.5f, crit = self.isCrit, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageTypeExtended)8192), radius = 6f, procCoefficient = 1f, falloffModel = (FalloffModel)0, teamIndex = TeamComponent.GetObjectTeam(self.owner) }; val6.Fire(); } } return result; }; object obj2 = <>c.<>9__7_2; if (obj2 == null) { hook_OnEnter val2 = delegate(orig_OnEnter orig, LaserFather self) { if (config.LaserFather.Value) { self.baseChargeDuration = 0.5f; } orig.Invoke(self); }; <>c.<>9__7_2 = val2; obj2 = (object)val2; } LaserFather.OnEnter += (hook_OnEnter)obj2; FalseSonLaserF = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC2/FalseSon/FalseSonBodyLaser.asset").WaitForCompletion(); OriginalFalseSonLaserDesc = FalseSonLaserF.skillDescriptionToken; OriginalFalseSonLaserDesc2 = FalseSonLaserF.keywordTokens; LanguageAPI.Add("FalseSonLaserDescriptionNew", "Charge a rapidly hitting laser dealing <style=cIsDamage>320%-1890% damage</style> for <style=cIsUtility>4s</style> and refill <style=cIsUtility>Lunar Spikes</style>. Increases in damage through <style=cIsHealing>Growth</style>. Summons <style=cIsDamage>Lightning</style> on repeated hits."); LanguageAPI.Add("KEYWORD_LASER_LIGHTNING", "<style=cKeywordName>Brother's Lightning</style><style=cSub>Every <style=cIsUtility>10 hits</style> with the laser, call down a lightning strike dealing <style=cIsDamage>350% </style>of the laser's damage.</style>"); config.OnConfigChanged += UpdateSkills; UpdateSkills(); object obj3 = <>c.<>9__7_3; if (obj3 == null) { hook_GetGrowthLaserBonusDuration val3 = (orig_GetGrowthLaserBonusDuration orig, FalseSonController self) => config.LaserFather.Value ? 0f : orig.Invoke(self); <>c.<>9__7_3 = val3; obj3 = (object)val3; } FalseSonController.GetGrowthLaserBonusDuration += (hook_GetGrowthLaserBonusDuration)obj3; object obj4 = <>c.<>9__7_4; if (obj4 == null) { hook_Fire val4 = delegate(orig_Fire orig, BulletAttack self) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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) if ((Object)(object)self.owner != (Object)null && config.LaserFather.Value) { CharacterBody component = self.owner.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null && component.bodyIndex == BodyCatalog.FindBodyIndex("FalseSonBody")) { EntityStateMachine val6 = EntityStateMachine.FindByCustomName(self.owner, "Weapon"); if ((Object)(object)val6 != (Object)null && val6.state is LaserFatherCharged) { self.falloffModel = (FalloffModel)0; } } } orig.Invoke(self); }; <>c.<>9__7_4 = val4; obj4 = (object)val4; } BulletAttack.Fire += (hook_Fire)obj4; object obj5 = <>c.<>9__7_5; if (obj5 == null) { hook_OnEnter val5 = delegate(orig_OnEnter orig, LaserFatherCharged self) { orig.Invoke(self); if (config.LaserFather.Value) { LaserFatherCharged.procCoefficientPerTick = 0.7f; self.spikeRefillAmountPerSecond = 0f; } else { LaserFatherCharged.procCoefficientPerTick = 0.45f; } float num = (((EntityState)self).characterBody.attackSpeed - ((EntityState)self).characterBody.baseAttackSpeed) * 0.3f; self.fireFrequency = LaserFatherCharged.baseFireFrequency * (1f + num); hitcount = 1; SkillLocator skillLocator = ((EntityState)self).characterBody.skillLocator; if ((Object)(object)skillLocator != (Object)null && config.LaserFather.Value) { float num2 = skillLocator.GetSkill((SkillSlot)1).maxStock; float num3 = skillLocator.GetSkill((SkillSlot)1).stock; int num4 = (int)(num2 * 0.5f); ((EntityState)self).skillLocator.GetSkill((SkillSlot)1).stock = (int)Mathf.Clamp(num3 + (float)num4, num3, num2); } if (!originalDamage.HasValue) { originalDamage = LaserFatherCharged.damageCoefficient * 1.35f; } FalseSonController component = ((Component)((EntityState)self).characterBody).GetComponent<FalseSonController>(); if ((Object)(object)component != (Object)null && config.LaserFather.Value) { int growthLevel = component.growthLevel; float num5 = 1f + (float)growthLevel * 0.05f; LaserFatherCharged.damageCoefficient = originalDamage.Value * num5; } else { LaserFatherCharged.damageCoefficient = originalDamage.Value / 1.35f; } }; <>c.<>9__7_5 = val5; obj5 = (object)val5; } LaserFatherCharged.OnEnter += (hook_OnEnter)obj5; } private static void UpdateSkills() { if (config.LaserFather.Value) { FalseSonLaserF.baseRechargeInterval = 10f; FalseSonLaserF.skillDescriptionToken = "FalseSonLaserDescriptionNew"; FalseSonLaserF.keywordTokens = new string[2] { "KEYWORD_GROWTH", "KEYWORD_LASER_LIGHTNING" }; } else { FalseSonLaserF.baseRechargeInterval = 15f; FalseSonLaserF.skillDescriptionToken = OriginalFalseSonLaserDesc; FalseSonLaserF.keywordTokens = OriginalFalseSonLaserDesc2; } } } public static class RailGunner { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__5_0; public static Action<DamageInfo> <>9__5_1; public static Action <>9__5_2; internal void <init>b__5_0(orig_OnEnter orig, BaseFireSnipe self) { if (config.HH44.Value) { if (self is FireSnipeLight) { ((GenericBulletBaseState)self).damageCoefficient = 5f + consecutiveWeakSpotHit; } if (self is FireSnipeCryo) { ((GenericBulletBaseState)self).damageCoefficient = ((GenericBulletBaseState)self).damageCoefficient + consecutiveWeakSpotHit; } if (self is FireSnipeSuper) { ((GenericBulletBaseState)self).damageCoefficient = ((GenericBulletBaseState)self).damageCoefficient + consecutiveWeakSpotHit; } } orig.Invoke(self); } internal void <init>b__5_1(DamageInfo damageInfo) { if (consecutiveWeakSpotHit < 10f) { consecutiveWeakSpotHit += 1f; } } internal void <init>b__5_2() { consecutiveWeakSpotHit = 0f; } } private static float consecutiveWeakSpotHit; private static SkillDef SlowMine; private static SkillDef HH44; private static string originalHH44Desc; private static string[] originalHH44Desc2; public static void init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown SlowMine = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/Railgunner/RailgunnerBodyFireMineBlinding.asset").WaitForCompletion(); HH44 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/Railgunner/RailgunnerBodyScopeLight.asset").WaitForCompletion(); originalHH44Desc = HH44.skillDescriptionToken; originalHH44Desc2 = HH44.keywordTokens; LanguageAPI.Add("HH44NewDescription", "Activate your <style=cIsUtility>short-range scope</style>, highlighting <style=cIsdamage>Weak Points</style> and transforming your weapon into a quick <style=cIsdamage>500% damage</style> railgun. Consecutive <style=cIsdamage>Weak Point</style> hits increases damage"); LanguageAPI.Add("KEYWORD_CONSECUTIVE", "<style=cKeywordName>Sniper's Flow</style><style=cSub>Consecutive <style=cIsDamage>Weak Point</style> hits boost the damage of your next shot by <style=cIsdamage>100%</style> per consecutive hit up to 10 times.</style>"); config.OnConfigChanged += UpdateSkills; object obj = <>c.<>9__5_0; if (obj == null) { hook_OnEnter val = delegate(orig_OnEnter orig, BaseFireSnipe self) { if (config.HH44.Value) { if (self is FireSnipeLight) { ((GenericBulletBaseState)self).damageCoefficient = 5f + consecutiveWeakSpotHit; } if (self is FireSnipeCryo) { ((GenericBulletBaseState)self).damageCoefficient = ((GenericBulletBaseState)self).damageCoefficient + consecutiveWeakSpotHit; } if (self is FireSnipeSuper) { ((GenericBulletBaseState)self).damageCoefficient = ((GenericBulletBaseState)self).damageCoefficient + consecutiveWeakSpotHit; } } orig.Invoke(self); }; <>c.<>9__5_0 = val; obj = (object)val; } BaseFireSnipe.OnEnter += (hook_OnEnter)obj; BaseFireSnipe.onWeakPointHit += delegate { if (consecutiveWeakSpotHit < 10f) { consecutiveWeakSpotHit += 1f; } }; BaseFireSnipe.onWeakPointMissed += delegate { consecutiveWeakSpotHit = 0f; }; } private static void UpdateSkills() { if (config.HH44.Value) { HH44.skillDescriptionToken = "HH44NewDescription"; HH44.keywordTokens = new string[2] { "KEYWORD_WEAKPOINT", "KEYWORD_CONSECUTIVE" }; } else { HH44.skillDescriptionToken = originalHH44Desc; HH44.keywordTokens = originalHH44Desc2; } if (config.PolarMines.Value) { SlowMine.baseRechargeInterval = 8f; SlowMine.baseMaxStock = 2; } else { SlowMine.baseRechargeInterval = 12f; SlowMine.baseMaxStock = 1; } } } }