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 SmallSurvivorTweaks v1.1.0
Survivor.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using EntityStates; using EntityStates.Commando; using EntityStates.Croco; using EntityStates.Loader; using EntityStates.Treebot; using HG.Reflection; using On.EntityStates.Commando; using On.EntityStates.Croco; using On.EntityStates.Loader; using On.EntityStates.Treebot; using On.RoR2.Skills; using R2API; using R2API.Utils; using RoR2; using RoR2.Skills; using UnityEngine; 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: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("Survivor")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Survivor")] [assembly: AssemblyTitle("Survivor")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace BenSurvivorSpace; [R2APISubmoduleDependency(new string[] { "LanguageAPI", "RecalculateStatsAPI" })] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Ben.SmallSurvivorTweaks", "Small Survivor Tweaks", "1.1.0")] public class SmallSurivivorTweaks : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__48_0; internal void <CommandoChange>b__48_0(orig_OnEnter orig, DodgeState self) { orig.Invoke(self); if (NetworkServer.active) { ((EntityState)self).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, CommandoInvic.Value); } } } private bool RexBuffs = true; private bool Multbuffs = true; private bool AcridBuff = false; private bool CaptHealingBuff = true; public static ConfigEntry<float> CommandoInvic { get; set; } public ConfigEntry<bool> HuntressAgile { get; private set; } public ConfigEntry<float> MultRecharge { get; private set; } public ConfigEntry<bool> MultResetCoolDown { get; private set; } public ConfigEntry<float> LoaderPylon { get; private set; } public ConfigEntry<float> AcridFrenzy { get; private set; } public ConfigEntry<float> RexDrill { get; private set; } public ConfigEntry<int> RexDisperse { get; private set; } public ConfigEntry<float> RexHarvest { get; private set; } public ConfigEntry<int> CaptainHealing { get; private set; } public void Awake() { //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogMessage((object)"Execute Order 69"); CommandoInvic = ((BaseUnityPlugin)this).Config.Bind<float>("SmallSurvivorTweaks", "CommandoInvic", 0.5f, "How long does commando get invicibility for on his combat roll. Vanilla is 0 seconds."); HuntressAgile = ((BaseUnityPlugin)this).Config.Bind<bool>("SmallSurvivorTweaks", "HuntressAgile", true, "Gives Huntresses glaive attack the agile attribute, allowing her to continue sprinting while using it. In vanilla this is false."); MultRecharge = ((BaseUnityPlugin)this).Config.Bind<float>("SmallSurvivorTweaks", "MultRecharge", 2.5f, "Base time for Scrap Launcher to reload. In vanilla this is 1.5s."); MultResetCoolDown = ((BaseUnityPlugin)this).Config.Bind<bool>("SmallSurvivorTweaks", "MultResetCoolDown", false, "Allows scrap launcher to start recharging after the first stock is used and will refresh all when finished. In vanilla this is true, which means that firing would reset cooldown."); LoaderPylon = ((BaseUnityPlugin)this).Config.Bind<float>("SmallSurvivorTweaks", "LoaderPylon", 2f, "Scaling of Loader's Pylon Damage. In vanilla this is 1, or 100% for each burst of electricity."); AcridFrenzy = ((BaseUnityPlugin)this).Config.Bind<float>("SmallSurvivorTweaks", "AcridFrenzy", 0.5f, "Duration of the invicibility acrid gets when landing frenzy leap. In vanilla this is 0."); RexDrill = ((BaseUnityPlugin)this).Config.Bind<float>("SmallSurvivorTweaks", "RexDrill", 4.5f, "Base recharge duration of Rex's Driective Drill Ability. In vanilla this is 6s."); RexDisperse = ((BaseUnityPlugin)this).Config.Bind<int>("SmallSurvivorTweaks", "RexDisperse", 2, "Base stock of Rex's Directive Disperse ablity. In vanilla this is 1."); RexHarvest = ((BaseUnityPlugin)this).Config.Bind<float>("SmallSurvivorTweaks", "RexHarvest", 4.2f, "Damage scale of Rex's Harvest / Fruiting ability. In vanilla this is 3.3."); CaptainHealing = ((BaseUnityPlugin)this).Config.Bind<int>("SmallSurvivorTweaks", "RexDispers", 2, "Base Stock of Captain's Healing Beacon. In Vanilla this is 1."); SkillCatalog.Init += new hook_Init(HuntressChange); TextChange(); RexChange(); CommandoChange(); NewCrocoChange(); LoaderChange(); } private void TextChange() { float num = LoaderPylon.Value * 100f; float num2 = RexHarvest.Value * 100f; if (HuntressAgile.Value) { LanguageAPI.Add("HUNTRESS_SECONDARY_DESCRIPTION", $"<style=cIsUtility>Agile</style>. Throw a seeking glaive that bounces up to <style=cIsDamage>6</style> times for <style=cIsDamage>250% damage</style>. Damage increases by <style=cIsDamage>10%</style> per bounce."); LanguageAPI.Add("HUNTRESS_DESCRIPTION", $"The Huntress is an extremely mobile but fragile survivor with a high damage output. <style=cSub>\r\n\r\n< ! > Remember that Strafe can be uniquely used while sprinting, allowing you to move at high speeds while still taking out potential threats.\r\n\r\n< ! > Blink and Arrow Rain can be used to reposition closer or used as a dodge in a tight spot.\r\n\r\n< ! > Laser Glaive will take out pairs of tough targets quickly as it bounces between the two. \r\n\r\n< ! > Arrow Rain has extremely high damage output and also slows enemies inside, making it great for tough, fast enemies.</style>\r\n"); } LanguageAPI.Add("COMMANDO_UTILITY_DESCRIPTION", $"<style=cIsUtility>Roll</style> a short distance while being <style=cIsHealing>invincible</style> for {CommandoInvic.Value} seconds"); LanguageAPI.Add("LOADER_SPECIAL_DESCRIPTION", $"Throw a floating pylon that <style=cIsDamage>zaps</style> up to <style=cIsDamage>6</style> nearby enemies for <style=cIsDamage>{num}% damage</style>. Can be <style=cIsUtility>grappled</style>."); if (AcridFrenzy.Value > 0f) { LanguageAPI.Add("CROCO_UTILITY_ALT1_DESCRIPTION", $"<style=cIsDamage>Stunning</style> and <style=cIsHealing>Invincible</style> when landing. Leap in the air, dealing <style=cIsDamage>550% damage</style>. <style=cIsUtility>Reduce</style> the cooldown by <style=cIsUtility>2s</style> for every enemy hit."); } LanguageAPI.Add("TREEBOT_SPECIAL_ALT1_DESCRIPTION", $"Fire a bolt that deals <style=cIsDamage>{num2}% damage</style> and <style=cIsDamage>injects</style> an enemy. On death, drop multiple <style=cIsHealing>healing fruits</style> that heal for <style=cIsHealing>25% HP</style>."); if (CaptainHealing.Value > 1) { LanguageAPI.Add("CAPTAIN_SUPPLY_HEAL_DESCRIPTION", $"<style=cIsHealing>Heal</style> all nearby allies for <style=cIsHealing>10%</style></style> of their <style=cIsHealing>maximum health</style> every second. Base stock of <style=cIsUtility>{CaptainHealing.Value}</style>."); } } public void LoaderChange() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ThrowPylon.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, ThrowPylon self) { float fieldValue = Reflection.GetFieldValue<float>((object)self, "damageCoefficient"); bool flag = self != null; if (fieldValue != 0f && flag) { ThrowPylon.damageCoefficient = LoaderPylon.Value; } orig.Invoke(self); }; } public void RexChange() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown TreebotFireFruitSeed.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, TreebotFireFruitSeed self) { float fieldValue = Reflection.GetFieldValue<float>((object)self, "damageCoefficient"); bool flag = self != null; if (fieldValue != 0f && flag) { self.damageCoefficient = RexHarvest.Value; } orig.Invoke(self); }; } public void CommandoChange() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__48_0; if (obj == null) { hook_OnEnter val = delegate(orig_OnEnter orig, DodgeState self) { orig.Invoke(self); if (NetworkServer.active) { ((EntityState)self).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, CommandoInvic.Value); } }; <>c.<>9__48_0 = val; obj = (object)val; } DodgeState.OnEnter += (hook_OnEnter)obj; } public void NewCrocoChange() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ChainableLeap.DoImpactAuthority += (hook_DoImpactAuthority)delegate(orig_DoImpactAuthority orig, ChainableLeap self) { orig.Invoke(self); if (NetworkServer.active) { ((EntityState)self).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, AcridFrenzy.Value); } }; } public void HuntressChange(orig_Init orig) { orig.Invoke(); if (HuntressAgile.Value) { SkillDef val = Resources.Load<SkillDef>("skilldefs/huntressbody/huntressbodyglaive"); if (Object.op_Implicit((Object)(object)val)) { val.canceledFromSprinting = false; val.cancelSprintingOnActivation = false; } } if (RexBuffs) { SkillDef val2 = Resources.Load<SkillDef>("skilldefs/treebotbody/treebotbodyaimmortarrain"); if (Object.op_Implicit((Object)(object)val2)) { val2.baseRechargeInterval = RexDrill.Value; } SkillDef val3 = Resources.Load<SkillDef>("skilldefs/treebotbody/treebotbodysonicboom"); if (Object.op_Implicit((Object)(object)val3)) { val3.baseMaxStock = RexDisperse.Value; } } if (Multbuffs) { SkillDef val4 = Resources.Load<SkillDef>("skilldefs/toolbotbody/toolbotbodyfiregrenadelauncher"); if (Object.op_Implicit((Object)(object)val4)) { val4.baseRechargeInterval = MultRecharge.Value; val4.resetCooldownTimerOnUse = MultResetCoolDown.Value; } } if (AcridBuff) { SkillDef val5 = Resources.Load<SkillDef>("skilldefs/crocobody/crocochainableleap"); if (Object.op_Implicit((Object)(object)val5)) { val5.baseMaxStock = 3; } } if (CaptHealingBuff) { SkillDef val6 = Resources.Load<SkillDef>("skilldefs/captainbody/callsupplydrophealing"); if (Object.op_Implicit((Object)(object)val6)) { val6.baseMaxStock = CaptainHealing.Value; } } } }