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 HIFUArtificerTweaks v1.1.9
HIFUArtificerTweaks.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using ArtificerExtended.Passive; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Mage; using EntityStates.Mage.Weapon; using HIFUArtificerTweaks.Projectiles; using HIFUArtificerTweaks.Skilldefs; using HIFUArtificerTweaks.Skills; using HarmonyLib; using IL.EntityStates.Mage; using KinematicCharacterController; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.Mage; using On.EntityStates.Mage.Weapon; using R2API; 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("HIFUArtificerTweaks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HIFUArtificerTweaks")] [assembly: AssemblyTitle("HIFUArtificerTweaks")] [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 HIFUArtificerTweaks { public static class AddUtility { public static void Create() { //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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_0081: 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) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageBody.prefab").WaitForCompletion(); SkillLocator component = val.GetComponent<SkillLocator>(); SkillFamily skillFamily = component.utility.skillFamily; Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); Variant[] variants = skillFamily.variants; int num = skillFamily.variants.Length - 1; Variant val2 = new Variant { skillDef = FlamewallSD.sd, unlockableName = "" }; ((Variant)(ref val2)).viewableNode = new Node(FlamewallSD.nameToken, false, (Node)null); variants[num] = val2; } } public class ConfigManager { internal static bool ConfigChanged; internal static bool VersionChanged; public static T HandleConfig<T>(ConfigEntryBase entry, ConfigFile config, string name) { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected O, but got Unknown MethodInfo methodInfo = (from x in typeof(ConfigFile).GetMethods() where x.Name == "Bind" select x).First(); methodInfo = methodInfo.MakeGenericMethod(typeof(T)); object[] parameters = new object[3] { (object)new ConfigDefinition(Regex.Replace(config.ConfigFilePath, "\\W", "") + " : " + entry.Definition.Section, name), entry.DefaultValue, (object)new ConfigDescription(entry.Description.Description, (AcceptableValueBase)null, Array.Empty<object>()) }; ConfigEntryBase val = (ConfigEntryBase)methodInfo.Invoke(config, parameters); if (Main._preVersioning) { entry.BoxedValue = entry.DefaultValue; } if (!ConfigEqual(val.DefaultValue, val.BoxedValue) && VersionChanged) { entry.BoxedValue = entry.DefaultValue; val.BoxedValue = val.DefaultValue; } return default(T); } private static bool ConfigEqual(object a, object b) { if (a.Equals(b)) { return true; } if (float.TryParse(a.ToString(), out var result) && float.TryParse(b.ToString(), out var result2) && (double)Mathf.Abs(result - result2) < 0.0001) { return true; } return false; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("HIFU.HIFUArtificerTweaks", "HIFUArtificerTweaks", "1.1.9")] public class Main : BaseUnityPlugin { public const string PluginGUID = "HIFU.HIFUArtificerTweaks"; public const string PluginAuthor = "HIFU"; public const string PluginName = "HIFUArtificerTweaks"; public const string PluginVersion = "1.1.9"; public static ConfigFile HATConfig; public static ConfigFile HATBackupConfig; public static bool aeLoaded; public static ManualLogSource HATLogger; public static ConfigEntry<float> flamewallDamage; public static ConfigEntry<float> flamewallSpeed; public static ConfigEntry<float> flamewallProcCoeff; public static AssetBundle hifuartificertweaks; public static bool _preVersioning; public static ConfigEntry<bool> enableAutoConfig { get; set; } public static ConfigEntry<string> latestVersion { get; set; } public void Awake() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown HATLogger = ((BaseUnityPlugin)this).Logger; HATConfig = ((BaseUnityPlugin)this).Config; aeLoaded = Chainloader.PluginInfos.ContainsKey("com.Borbo.ArtificerExtended"); hifuartificertweaks = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("HIFUArtificerTweaks.dll", "hifuartificertweaks")); HATBackupConfig = new ConfigFile(Paths.ConfigPath + "\\HIFU.HIFUArtificerTweaks.Backup.cfg", true); HATBackupConfig.Bind<string>(": DO NOT MODIFY THIS FILES CONTENTS :", ": DO NOT MODIFY THIS FILES CONTENTS :", ": DO NOT MODIFY THIS FILES CONTENTS :", ": DO NOT MODIFY THIS FILES CONTENTS :"); enableAutoConfig = HATConfig.Bind<bool>("Config", "Enable Auto Config Sync", true, "Disabling this would stop HIFUArtificerTweaks from syncing config whenever a new version is found."); _preVersioning = !((Dictionary<ConfigDefinition, string>)AccessTools.DeclaredPropertyGetter(typeof(ConfigFile), "OrphanedEntries").Invoke(HATConfig, null)).Keys.Any((ConfigDefinition x) => x.Key == "Latest Version"); latestVersion = HATConfig.Bind<string>("Config", "Latest Version", "1.1.9", "DO NOT CHANGE THIS"); if (enableAutoConfig.Value && (_preVersioning || latestVersion.Value != "1.1.9")) { latestVersion.Value = "1.1.9"; ConfigManager.VersionChanged = true; HATLogger.LogInfo((object)"Config Autosync Enabled."); } flamewallDamage = ((BaseUnityPlugin)this).Config.Bind<float>(": Utility :: Flamewall", "Damage", 0.55f, "Decimal. Default is 0.65"); flamewallSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(": Utility :: Flamewall", "Speed Multiplier", 1.3f, "Default is 1.3"); flamewallProcCoeff = ((BaseUnityPlugin)this).Config.Bind<float>(": Utility :: Flamewall", "Proc Coefficient", 0.15f, "Default is 0.15"); WallOfInfernoProjectile.Create(); FlamewallSD.Create(); AddUtility.Create(); IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(TweakBase)) select type; HATLogger.LogInfo((object)"==+----------------==TWEAKS==----------------+=="); foreach (Type item in enumerable) { TweakBase tweakBase = (TweakBase)Activator.CreateInstance(item); if (ValidateTweak(tweakBase)) { tweakBase.Init(); } } IEnumerable<Type> enumerable2 = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(MiscBase)) select type; HATLogger.LogInfo((object)"==+----------------==MISC==----------------+=="); foreach (Type item2 in enumerable2) { MiscBase miscBase = (MiscBase)Activator.CreateInstance(item2); if (ValidateMisc(miscBase)) { miscBase.Init(); } } } public bool ValidateTweak(TweakBase tb) { if (tb.isEnabled && ((BaseUnityPlugin)this).Config.Bind<bool>(tb.Name, "Enable?", true, "Vanilla is false").Value) { return true; } return false; } public bool ValidateMisc(MiscBase mb) { if (mb.isEnabled && ((BaseUnityPlugin)this).Config.Bind<bool>(mb.Name, "Enable?", true, "Vanilla is false").Value) { return true; } return false; } private void WITHINDESTRUCTIONMYFUCKINGBELOVED() { } } public abstract class MiscBase { public abstract string Name { get; } public virtual bool isEnabled { get; } = true; public T ConfigOption<T>(T value, string name, string description) { ConfigEntry<T> val = Main.HATConfig.Bind<T>(Name, name, value, description); ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)val, Main.HATBackupConfig, name); return val.Value; } public abstract void Hooks(); public string d(float f) { return f * 100f + "%"; } public virtual void Init() { Hooks(); Main.HATLogger.LogInfo((object)("Added " + Name)); } } public abstract class MiscBase<T> : MiscBase where T : MiscBase<T> { public static T instance { get; set; } public MiscBase() { if (instance != null) { throw new InvalidOperationException("Singleton class " + typeof(T).Name + " was instantiated twice"); } instance = this as T; } } public abstract class TweakBase { public bool done = false; public abstract string Name { get; } public abstract string SkillToken { get; } public abstract string DescText { get; } public virtual bool isEnabled { get; } = true; public T ConfigOption<T>(T value, string name, string description) { ConfigEntry<T> val = Main.HATConfig.Bind<T>(Name, name, value, description); ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)val, Main.HATBackupConfig, name); if (!done) { ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)Main.flamewallDamage, Main.HATBackupConfig, ((ConfigEntryBase)Main.flamewallDamage).Definition.Key); ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)Main.flamewallSpeed, Main.HATBackupConfig, ((ConfigEntryBase)Main.flamewallSpeed).Definition.Key); ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)Main.flamewallProcCoeff, Main.HATBackupConfig, ((ConfigEntryBase)Main.flamewallProcCoeff).Definition.Key); done = true; } return val.Value; } public abstract void Hooks(); public string d(float f) { return f * 100f + "%"; } public virtual void Init() { Hooks(); string text = "MAGE_" + SkillToken.ToUpper() + "_DESCRIPTION"; LanguageAPI.Add(text, DescText); Main.HATLogger.LogInfo((object)("Added " + Name)); } } public abstract class TweakBase<T> : TweakBase where T : TweakBase<T> { public static T instance { get; set; } public TweakBase() { if (instance != null) { throw new InvalidOperationException("Singleton class " + typeof(T).Name + " was instantiated twice"); } instance = this as T; } } } namespace HIFUArtificerTweaks.Skills { public class CastNanoSpear : TweakBase { public static float minDamage; public static float maxDamage; public static float castTime; public override string Name => ": Secondary :: Cast Nano-Spear"; public override string SkillToken => "secondary_ice"; public override string DescText => "<style=cIsUtility>Freezing</style>. Charge up a <style=cIsDamage>piercing</style> nano-spear that deals <style=cIsDamage>" + d(minDamage) + "-" + d(maxDamage) + "</style> damage."; public override void Init() { minDamage = ConfigOption(4f, "Minimum Damage", "Decimal. Vanilla is 4"); maxDamage = ConfigOption(16f, "Maximum Damage", "Decimal. Vanilla is 12"); castTime = ConfigOption(1.3f, "Max Charge Time", "Vanilla is 2"); base.Init(); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown BaseChargeBombState.OnEnter += new hook_OnEnter(BaseChargeBombState_OnEnter); BaseThrowBombState.OnEnter += new hook_OnEnter(BaseThrowBombState_OnEnter); } private void BaseChargeBombState_OnEnter(orig_OnEnter orig, BaseChargeBombState self) { if (self is ChargeIcebomb) { self.baseDuration = castTime; } orig.Invoke(self); } private void BaseThrowBombState_OnEnter(orig_OnEnter orig, BaseThrowBombState self) { if (self is ThrowIcebomb) { self.minDamageCoefficient = minDamage; self.maxDamageCoefficient = maxDamage; } orig.Invoke(self); } } public class ChargedNanoBomb : TweakBase { public static float minDamage; public static float maxDamage; public static float castTime; public override string Name => ": Secondary :: Charged Nano-Bomb"; public override string SkillToken => "secondary_lightning"; public override string DescText => "<style=cIsDamage>Stunning</style>. Charge up a <style=cIsDamage>exploding</style> nano-bomb that deals <style=cIsDamage>" + d(minDamage) + "-" + d(maxDamage) + "</style> damage."; public override void Init() { minDamage = ConfigOption(4f, "Minimum Damage", "Decimal. Vanilla is 4"); maxDamage = ConfigOption(20f, "Maximum Damage", "Decimal. Vanilla is 20"); castTime = ConfigOption(2f, "Max Charge Time", "Vanilla is 2"); base.Init(); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown BaseChargeBombState.OnEnter += new hook_OnEnter(BaseChargeBombState_OnEnter); BaseThrowBombState.OnEnter += new hook_OnEnter(BaseThrowBombState_OnEnter); } private void BaseChargeBombState_OnEnter(orig_OnEnter orig, BaseChargeBombState self) { if (self is ChargeNovabomb) { self.baseDuration = castTime; } orig.Invoke(self); } private void BaseThrowBombState_OnEnter(orig_OnEnter orig, BaseThrowBombState self) { if (self is ThrowNovabomb) { self.minDamageCoefficient = minDamage; self.maxDamageCoefficient = maxDamage; } orig.Invoke(self); } } public class Flamethrower : TweakBase { public static float Damage; public static float BurnChance; public static float Range; public override string Name => ": Special : Flamethrower"; public override string SkillToken => "special_fire"; public override string DescText => "<style=cIsDamage>Ignite</style>. Burn all enemies in front of you for <style=cIsDamage>" + d(Damage + Damage / (1f / (BurnChance / 100f))) + " damage</style>."; public override void Init() { Damage = ConfigOption(20f, "Damage", "Decimal. Vanilla is 20"); BurnChance = ConfigOption(100f, "Ignite Chance", "Decimal. Vanilla is 50"); Range = ConfigOption(20f, "Range", "Vanilla is 20"); base.Init(); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown Flamethrower.OnEnter += new hook_OnEnter(Flamethrower_OnEnter); } private void Flamethrower_OnEnter(orig_OnEnter orig, Flamethrower self) { Flamethrower.ignitePercentChance = BurnChance; Flamethrower.totalDamageCoefficient = Damage; self.maxDistance = Range; orig.Invoke(self); } } public class FlamewallState : BaseSkillState { public float duration = 2f; public float timer; public float interval = 0.25f; public float speedMultiplier = Main.flamewallSpeed.Value; private Vector3 idealDirection; public GameObject wallPrefab = WallOfInfernoProjectile.prefab; public SkillLocator sl; public override void OnEnter() { //IL_003e: 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_00f3: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); sl = ((Component)((EntityState)this).characterBody).GetComponent<SkillLocator>(); if (((EntityState)this).isAuthority) { if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank)) { idealDirection = ((EntityState)this).inputBank.aimDirection; idealDirection.y = 0f; } if (Object.op_Implicit((Object)(object)sl) && sl.special.skillNameToken == "MAGE_SPECIAL_FIRE_NAME") { sl.special.skillDef.canceledFromSprinting = false; sl.special.skillDef.cancelSprintingOnActivation = false; } UpdateDirection(); } if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator)) { ((EntityState)this).modelLocator.normalizeToFloor = true; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterDirection.forward = idealDirection; } if (Main.aeLoaded) { SkillCast(); } ((EntityState)this).characterBody.SetAimTimer(duration + 1f); ((EntityState)this).PlayAnimation("Gesture, Additive", "PrepWall", "PrepWall.playbackRate", duration, 0f); Util.PlaySound("Play_item_use_fireballDash_start", ((EntityState)this).gameObject); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public void SkillCast() { GameObject gameObject = ((Component)((EntityState)this).outer).gameObject; if (AltArtiPassive.instanceLookup.TryGetValue(gameObject, out var value)) { value.SkillCast((BatchHandle)null); } } private void UpdateDirection() { //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_0021: 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_0023: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank)) { Vector2 val = Util.Vector3XZToVector2XY(((EntityState)this).inputBank.moveVector); if (val != Vector2.zero) { ((Vector2)(ref val)).Normalize(); Vector3 val2 = new Vector3(val.x, 0f, val.y); idealDirection = ((Vector3)(ref val2)).normalized; } } } private Vector3 GetIdealVelocity() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) return ((EntityState)this).characterDirection.forward * ((EntityState)this).characterBody.moveSpeed * speedMultiplier; } public override void FixedUpdate() { //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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: 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_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018e: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //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) ((EntityState)this).FixedUpdate(); timer += Time.fixedDeltaTime; if (!((EntityState)this).isAuthority) { return; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.isSprinting = true; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterDirection.moveVector = idealDirection; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.disableAirControlUntilCollision) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += GetIdealVelocity() * Time.fixedDeltaTime; } } UpdateDirection(); if (((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } else if (timer >= interval) { Vector3 up = Vector3.up; FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = wallPrefab; val.position = ((EntityState)this).characterBody.corePosition; val.rotation = Util.QuaternionSafeLookRotation(up); val.owner = ((EntityState)this).gameObject; val.damage = ((BaseState)this).damageStat; val.force = 0f; val.damageColorIndex = (DamageColorIndex)0; val.crit = Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master); FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); Util.PlaySound(Flamethrower.endAttackSoundString, ((EntityState)this).gameObject); timer = 0f; } } public override void OnExit() { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); if (!((EntityState)this).outer.destroying && Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).PlayAnimation("Gesture, Additive", "FireWall"); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.disableAirControlUntilCollision) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity += GetIdealVelocity(); } if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator)) { ((EntityState)this).modelLocator.normalizeToFloor = false; } if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)sl) && sl.special.skillNameToken == "MAGE_SPECIAL_FIRE_NAME") { sl.special.skillDef.canceledFromSprinting = true; sl.special.skillDef.cancelSprintingOnActivation = true; } Util.PlaySound("Play_item_use_fireballDash_explode", ((EntityState)this).gameObject); } 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 class IonSurge : TweakBase { public static float AoE; public static float Cooldown; public static float Damage; public static float dashSpeed; public static float Duration; public static bool ScaleWithSpeed; public override string Name => ": Special :: Ion Surge"; public override string SkillToken => "special_lightning"; public override string DescText => "<style=cIsDamage>Stunning</style>. Soar and dash, dealing <style=cIsDamage>" + d(Damage) + " damage</style> in a large area."; public override void Init() { AoE = ConfigOption(14f, "Area of Effect", "Vanilla is 14"); Cooldown = ConfigOption(5f, "Cooldown", "Vanilla is 8"); Damage = ConfigOption(8f, "Damage", "Decimal. Vanilla is 8"); dashSpeed = ConfigOption(3.5f, "Dash Speed Multiplier", "Default is 3.5"); Duration = ConfigOption(0.3f, "Duration", "This affects height. Vanilla is 1.66"); ScaleWithSpeed = ConfigOption(value: false, "Make Height scale with Movement Speed?", "Vanilla is true"); base.Init(); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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 FlyUpState.OnEnter += new hook_OnEnter(FlyUpState_OnEnter); if (!ScaleWithSpeed) { FlyUpState.HandleMovements += new Manipulator(FlyUpState_HandleMovements); } Changes(); } private void FlyUpState_HandleMovements(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<BaseState>(x, "moveSpeedStat") })) { int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<float, float>>((Func<float, float>)((float orig) => 10.15f)); } else { Main.HATLogger.LogError((object)"Failed to IL hook Ion Surge Handle Movements"); } } private void FlyUpState_OnEnter(orig_OnEnter orig, FlyUpState self) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_009a: 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) FlyUpState.blastAttackRadius = AoE; FlyUpState.blastAttackDamageCoefficient = Damage; FlyUpState.duration = Duration; orig.Invoke(self); if (((EntityState)self).isAuthority) { Vector3 val = ((((EntityState)self).inputBank.moveVector == Vector3.zero) ? Vector3.zero : ((Vector3)(ref ((EntityState)self).inputBank.moveVector)).normalized); Vector3 velocity = ((Vector3)(ref val)).normalized * dashSpeed * ((BaseState)self).moveSpeedStat; ((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(0.1f); ((EntityState)self).characterMotor.velocity = velocity; } } private void Changes() { //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) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyFlyUp.asset").WaitForCompletion(); val.baseRechargeInterval = Cooldown; } } public class PlasmaBolt : TweakBase { public static float AoE; public static float Damage; public override string Name => ": Primary :: Plasma Bolt"; public override string SkillToken => "primary_lightning"; public override string DescText => "Fire a bolt for <style=cIsDamage>" + d(Damage) + " damage</style> that <style=cIsDamage>explodes</style> in a medium area. Hold up to 4.</style>"; public override void Init() { AoE = ConfigOption(6f, "Area of Effect", "Vanilla is 6"); Damage = ConfigOption(3f, "Damage", "Decimal. Vanilla is 2.8"); base.Init(); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FireFireBolt.OnEnter += new hook_OnEnter(FireFireBolt_OnEnter); Changes(); } private void FireFireBolt_OnEnter(orig_OnEnter orig, FireFireBolt self) { if (self is FireLightningBolt) { self.damageCoefficient = Damage; } orig.Invoke(self); } public static void Changes() { //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) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageLightningboltBasic.prefab").WaitForCompletion(); ((ProjectileExplosion)val.GetComponent<ProjectileImpactExplosion>()).blastRadius = AoE; } } public class Snapfreeze : TweakBase { public static float damage; public static float lifetime; public override string Name => ": Utility : Snapfreeze"; public override string SkillToken => "utility_ice"; public override string DescText => "<style=cIsUtility>Freezing</style>. Create a barrier that hurts enemies for <style=cIsDamage>" + d(damage) + " damage</style>."; public override void Init() { lifetime = ConfigOption(0.35f, "Lifetime", "Vanilla is 0.3. Wall Count = 40 * lifetime"); damage = ConfigOption(1.2f, "Damage", "Decimal. Vanilla is 1"); base.Init(); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown PrepWall.OnEnter += new hook_OnEnter(PrepWall_OnEnter); Changes(); } private void PrepWall_OnEnter(orig_OnEnter orig, PrepWall self) { PrepWall.damageCoefficient = damage; orig.Invoke(self); } private void Changes() { //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) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageIcewallWalkerProjectile.prefab").WaitForCompletion(); ProjectileCharacterController component = val.GetComponent<ProjectileCharacterController>(); component.lifetime = lifetime; } } } namespace HIFUArtificerTweaks.Skilldefs { public static class FlamewallSD { public static SkillDef sd; public static string nameToken = "HAT_UTILITY_FIRE_NAME"; public static void Create() { //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_0031: 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_0046: 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_0069: 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_0088: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mage/MageBody.prefab").WaitForCompletion(); EntityStateMachine val2 = val.AddComponent<EntityStateMachine>(); val2.customName = "Wall"; val2.initialStateType = new SerializableEntityStateType(typeof(Idle)); val2.mainStateType = new SerializableEntityStateType(typeof(Idle)); sd = ScriptableObject.CreateInstance<SkillDef>(); sd.activationState = new SerializableEntityStateType(typeof(FlamewallState)); sd.activationStateMachineName = "Wall"; sd.interruptPriority = (InterruptPriority)1; sd.baseRechargeInterval = 12f; sd.baseMaxStock = 1; sd.rechargeStock = 1; sd.requiredStock = 1; sd.stockToConsume = 1; sd.resetCooldownTimerOnUse = false; sd.fullRestockOnAssign = true; sd.dontAllowPastMaxStocks = false; sd.beginSkillCooldownOnSkillEnd = true; sd.cancelSprintingOnActivation = false; sd.canceledFromSprinting = false; sd.isCombatSkill = true; sd.mustKeyPress = false; sd.icon = Main.hifuartificertweaks.LoadAsset<Sprite>("Assets/Flamewall.png"); sd.skillNameToken = nameToken; sd.skillDescriptionToken = "HAT_UTILITY_FIRE_DESCRIPTION"; sd.keywordTokens = new string[2] { "KEYWORD_IGNITE", "KEYWORD_AGILE" }; LanguageAPI.Add("HAT_UTILITY_FIRE_NAME", "Flamewall"); LanguageAPI.Add("HAT_UTILITY_FIRE_DESCRIPTION", "<style=cIsUtility>Agile</style>. <style=cIsDamage>Ignite</style>. Rush forward, summoning pillars of fire in your wake that deal <style=cIsDamage>" + Main.flamewallDamage.Value * 100f + "% damage per second</style>."); ContentAddition.AddSkillDef(sd); } } } namespace HIFUArtificerTweaks.Projectiles { public static class WallOfInfernoProjectile { public static GameObject prefab; public static float damage = Main.flamewallDamage.Value; public static float procCoeff = Main.flamewallProcCoeff.Value; public static void Create() { //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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Expected O, but got Unknown //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Expected O, but got Unknown //IL_02c7: 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_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Unknown result type (might be due to invalid IL or missing references) //IL_0383: Unknown result type (might be due to invalid IL or missing references) prefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElementalRings/FireTornado.prefab").WaitForCompletion(), "WallOfInfernoPillar"); prefab.transform.eulerAngles = new Vector3(0f, 0f, 90f); Object.Destroy((Object)(object)prefab.GetComponent<SphereCollider>()); CapsuleCollider val = prefab.AddComponent<CapsuleCollider>(); ((Collider)val).isTrigger = false; val.center = new Vector3(0f, 0f, 0f); val.radius = 1f; val.height = 1f; Transform child = prefab.transform.GetChild(0); ((Component)child).transform.localScale = new Vector3(8.5f, 8.5f, 20f); ((Component)child).transform.localPosition = new Vector3(0f, 0f, 8f); Rigidbody component = prefab.GetComponent<Rigidbody>(); component.collisionDetectionMode = (CollisionDetectionMode)1; component.useGravity = true; component.freezeRotation = true; ConstantForce val2 = prefab.AddComponent<ConstantForce>(); val2.force = new Vector3(0f, -2500f, 0f); ProjectileStickOnImpact val3 = prefab.AddComponent<ProjectileStickOnImpact>(); val3.ignoreCharacters = true; val3.ignoreWorld = false; val3.alignNormals = false; ProjectileSimple component2 = prefab.GetComponent<ProjectileSimple>(); component2.lifetime = 7f; ProjectileDamage component3 = prefab.GetComponent<ProjectileDamage>(); component3.damageType = DamageTypeCombo.op_Implicit((DamageType)128); ProjectileOverlapAttack component4 = prefab.GetComponent<ProjectileOverlapAttack>(); component4.damageCoefficient = damage; component4.resetInterval = 1f; component4.overlapProcCoefficient = procCoeff; ProjectileController component5 = prefab.GetComponent<ProjectileController>(); GameObject val4 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Mage/MageFirePillarGhost.prefab").WaitForCompletion(), "WallOfInfernoPillarGhost", false); Transform child2 = val4.transform.GetChild(0); child2.localScale = new Vector3(2.5f, 4f, 2.5f); ParticleSystem component6 = ((Component)child2).GetComponent<ParticleSystem>(); ParticleSystemRenderer component7 = ((Component)child2).GetComponent<ParticleSystemRenderer>(); Material val5 = new Material(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matFirePillarParticle.mat").WaitForCompletion()); val5.SetInt("_FadeCloseOn", 1); val5.SetFloat("_FadeCloseDistance", 0.09f); val5.shaderKeywords = new string[4] { "CLOUDOFFSET", "FADECLOSE", "USE_CLOUDS", "_EMISSION" }; ((Renderer)component7).material = val5; VelocityOverLifetimeModule velocityOverLifetime = component6.velocityOverLifetime; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).speedModifier = MinMaxCurve.op_Implicit(0.5f); Gradient val6 = new Gradient(); val6.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.white, 0f), new GradientColorKey(Color.white, 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[4] { new GradientAlphaKey(0f, 0f), new GradientAlphaKey(1f, 0.7f), new GradientAlphaKey(1f, 0.9f), new GradientAlphaKey(0f, 1f) }); ColorOverLifetimeModule colorOverLifetime = component6.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val6); val4.transform.eulerAngles = new Vector3(0f, 0f, 90f); DestroyOnTimer val7 = val4.AddComponent<DestroyOnTimer>(); val7.duration = 7f; component5.ghostPrefab = val4; ContentAddition.AddProjectile(prefab); } } }