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 HIFUAcridTweaks v1.2.2
HIFUAcridTweaks.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 BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Croco; using HIFUAcridTweaks.Keywords; using HIFUAcridTweaks.Misc; using HIFUAcridTweaks.Skills; using HarmonyLib; using IL.EntityStates.Croco; using IL.RoR2; using IL.RoR2.Achievements; using IL.RoR2.Orbs; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.Croco; using On.RoR2; using R2API; using RoR2; using RoR2.Achievements; using RoR2.Achievements.Croco; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.Stats; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("HIFUAcridTweaks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HIFUAcridTweaks")] [assembly: AssemblyTitle("HIFUAcridTweaks")] [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 HIFUAcridTweaks { 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.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("HIFU.HIFUAcridTweaks", "HIFUAcridTweaks", "1.2.2")] public class Main : BaseUnityPlugin { public const string PluginGUID = "HIFU.HIFUAcridTweaks"; public const string PluginAuthor = "HIFU"; public const string PluginName = "HIFUAcridTweaks"; public const string PluginVersion = "1.2.2"; public static ConfigFile HACTConfig; public static ConfigFile HACTBackupConfig; public static ManualLogSource HACTLogger; public static ModdedDamageType poison = DamageAPI.ReserveDamageType(); public static ModdedDamageType blight = DamageAPI.ReserveDamageType(); public static bool _preVersioning = false; public static AssetBundle iHateThis; public static ConfigEntry<bool> enableAutoConfig { get; set; } public static ConfigEntry<string> latestVersion { get; set; } public void Awake() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) HACTLogger = ((BaseUnityPlugin)this).Logger; HACTConfig = ((BaseUnityPlugin)this).Config; iHateThis = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("HIFUAcridTweaks.dll", "hifuacridtweaks")); HACTBackupConfig = new ConfigFile(Paths.ConfigPath + "\\HIFU.HIFUAcridTweaks.Backup.cfg", true); HACTBackupConfig.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 = HACTConfig.Bind<bool>("Config", "Enable Auto Config Sync", true, "Disabling this would stop HIFUAcridTweaks from syncing config whenever a new version is found."); _preVersioning = !((Dictionary<ConfigDefinition, string>)AccessTools.DeclaredPropertyGetter(typeof(ConfigFile), "OrphanedEntries").Invoke(HACTConfig, null)).Keys.Any((ConfigDefinition x) => x.Key == "Latest Version"); latestVersion = HACTConfig.Bind<string>("Config", "Latest Version", "1.2.2", "DO NOT CHANGE THIS"); if (enableAutoConfig.Value && (_preVersioning || latestVersion.Value != "1.2.2")) { latestVersion.Value = "1.2.2"; ConfigManager.VersionChanged = true; HACTLogger.LogInfo((object)"Config Autosync Enabled."); } GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoBody.prefab").WaitForCompletion(); EntityStateMachine val2 = val.AddComponent<EntityStateMachine>(); val2.customName = "Leap"; val2.initialStateType = new SerializableEntityStateType(typeof(Idle)); val2.mainStateType = new SerializableEntityStateType(typeof(Idle)); SkillDef val3 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoLeap.asset").WaitForCompletion(); val3.activationStateMachineName = "Leap"; SkillDef val4 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoChainableLeap.asset").WaitForCompletion(); val4.activationStateMachineName = "Leap"; EntityStateMachine val5 = val.AddComponent<EntityStateMachine>(); val5.customName = "Neurotoxin"; val5.initialStateType = new SerializableEntityStateType(typeof(Idle)); val5.mainStateType = new SerializableEntityStateType(typeof(Idle)); NetworkStateMachine component = val.GetComponent<NetworkStateMachine>(); Array.Resize(ref component.stateMachines, component.stateMachines.Length + 2); component.stateMachines[component.stateMachines.Length - 2] = val2; component.stateMachines[component.stateMachines.Length - 1] = val5; IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(TweakBase)) select type; HACTLogger.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; HACTLogger.LogInfo((object)"==+----------------==MISC==----------------+=="); foreach (Type item2 in enumerable2) { MiscBase miscBase = (MiscBase)Activator.CreateInstance(item2); if (ValidateMisc(miscBase)) { miscBase.Init(); } } HIFUAcridTweaks.Keywords.Keywords.Init(); } public bool ValidateTweak(TweakBase tb) { if (!tb.DoesNotKillTheMod) { return true; } 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.DoesNotKillTheMod) { return true; } 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 abstract bool DoesNotKillTheMod { get; } public T ConfigOption<T>(T value, string name, string description) { ConfigEntry<T> val = Main.HACTConfig.Bind<T>(Name, name, value, description); ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)val, Main.HACTBackupConfig, name); return val.Value; } public abstract void Hooks(); public string d(float f) { return f * 100f + "%"; } public virtual void Init() { Hooks(); Main.HACTLogger.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 abstract string Name { get; } public abstract string SkillToken { get; } public abstract string DescText { get; } public virtual bool isEnabled { get; } = true; public abstract bool DoesNotKillTheMod { get; } public T ConfigOption<T>(T value, string name, string description) { ConfigEntry<T> val = Main.HACTConfig.Bind<T>(Name, name, value, description); ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)val, Main.HACTBackupConfig, name); return val.Value; } public abstract void Hooks(); public string d(float f) { return f * 100f + "%"; } public virtual void Init() { Hooks(); string text = "CROCO_" + SkillToken.ToUpper() + "_DESCRIPTION"; LanguageAPI.Add(text, DescText); Main.HACTLogger.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 HIFUAcridTweaks.Skills { public class Blight : TweakBase { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static CustomDotBehaviour <>9__13_0; public static Func<Instruction, bool> <>9__16_1; public static Func<int, int> <>9__16_0; internal void <Init>b__13_0(DotController self, DotStack dotStack) { GameObject attackerObject = dotStack.attackerObject; CharacterBody val = ((attackerObject != null) ? attackerObject.GetComponent<CharacterBody>() : null); dotStack.damage = val.damage * damagePerSecond * 0.2f; } internal bool <GlobalEventManager_OnHitEnemy>b__16_1(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 1048576); } internal int <GlobalEventManager_OnHitEnemy>b__16_0(int useless) { return 0; } } public static float duration; public static float damagePerSecond; public static BuffDef blight; public static DotDef blightDef; public static DotIndex blightIndex; public override bool DoesNotKillTheMod => false; public override string Name => "Passive : Blight"; public override string SkillToken => "passive_alt"; public override string DescText => "<style=cArtifact>Blighted</style> attacks apply a stacking damage-over-time."; public override void Init() { //IL_0041: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown blight = ScriptableObject.CreateInstance<BuffDef>(); blight.isDebuff = true; blight.isCooldown = false; blight.canStack = true; blight.isHidden = false; blight.iconSprite = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Croco/bdBlight.asset").WaitForCompletion().iconSprite; blight.buffColor = Color32.op_Implicit(new Color32((byte)177, (byte)56, (byte)127, byte.MaxValue)); ((Object)blight).name = "Blight"; ContentAddition.AddBuffDef(blight); duration = ConfigOption(3f, "Duration", "Vanilla is 5"); damagePerSecond = ConfigOption(1.1f, "Base Damage Per Second", "Decimal. Vanilla is 0.6"); blightDef = new DotDef { associatedBuff = blight, damageCoefficient = 1f, damageColorIndex = (DamageColorIndex)9, interval = 0.2f }; object obj = <>c.<>9__13_0; if (obj == null) { CustomDotBehaviour val = delegate(DotController self, DotStack dotStack) { GameObject attackerObject = dotStack.attackerObject; CharacterBody val3 = ((attackerObject != null) ? attackerObject.GetComponent<CharacterBody>() : null); dotStack.damage = val3.damage * damagePerSecond * 0.2f; }; <>c.<>9__13_0 = val; obj = (object)val; } CustomDotBehaviour val2 = (CustomDotBehaviour)obj; blightIndex = DotAPI.RegisterDotDef(blightDef, val2, (CustomDotVisual)null); base.Init(); } public override void Hooks() { GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; } private void GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_003c: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) DamageInfo damageInfo = report.damageInfo; GameObject attacker = report.attacker; if (Object.op_Implicit((Object)(object)attacker)) { HealthComponent victim = report.victim; if (Object.op_Implicit((Object)(object)victim) && DamageAPI.HasModdedDamageType(damageInfo, Main.blight)) { InflictDotInfo val = default(InflictDotInfo); val.victimObject = ((Component)victim).gameObject; val.attackerObject = attacker; val.totalDamage = null; val.dotIndex = blightIndex; val.duration = duration; val.damageMultiplier = 1f; val.maxStacksFromAttacker = uint.MaxValue; InflictDotInfo val2 = val; DotController.InflictDot(ref val2); } } } private void GlobalEventManager_OnHitEnemy(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.MatchLdcI4(x, 1048576) })) { int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int useless) => 0)); } else { Main.HACTLogger.LogError((object)"Failed to apply Blight Deletion hook"); } } } internal class CausticLeap : TweakBase { public static float damage; public static float poolDamage; public static float cooldown; public override bool DoesNotKillTheMod => true; public override string Name => "Utility : Caustic Leap"; public override string SkillToken => "utility"; public override string DescText => "<style=cArtifact>Blighted</style>. <style=cIsDamage>Stunning</style>. Leap in the air, dealing <style=cIsDamage>" + d(damage) + " damage</style>. Leave acid that deals <style=cIsDamage>" + d(poolDamage) + " damage</style>."; public override void Init() { damage = ConfigOption(2.6f, "Damage", "Decimal. Vanilla is 3.2"); poolDamage = ConfigOption(2f, "Pool Damage", "Decimal. Vanilla is 1"); cooldown = ConfigOption(6f, "Cooldown", "Vanilla is 6"); 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 BaseLeap.OnEnter += new hook_OnEnter(BaseLeap_OnEnter); BaseLeap.DropAcidPoolAuthority += new Manipulator(BaseLeap_DropAcidPoolAuthority); Changes(); } private void BaseLeap_DropAcidPoolAuthority(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<BaseState>(x, "damageStat") })) { val.Emit(OpCodes.Ldc_R4, poolDamage); val.Emit(OpCodes.Mul); } else { Main.HACTLogger.LogError((object)"Failed to apply Caustic Leap Pool Damage hook"); } } private void BaseLeap_OnEnter(orig_OnEnter orig, BaseLeap self) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) if (!(self is ChainableLeap)) { self.blastDamageCoefficient = damage; self.blastForce = 0f; self.blastBonusForce = Vector3.zero; } 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) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoLeap.asset").WaitForCompletion(); val.baseRechargeInterval = cooldown; val.keywordTokens = new string[2] { "HAT_BLIGHT", "KEYWORD_STUNNING" }; } } internal class Epidemic : TweakBase { public static float damage; public static float cooldown; public static int maxTargets; public static float maxDistance; public static float shareDuration; public static ModdedDamageType shared = DamageAPI.ReserveDamageType(); public static BuffDef shareDamage; public static float sharedPercent; public static ProcType sharedMask = (ProcType)12561269; public override bool DoesNotKillTheMod => true; public override string Name => "Special : Epidemic"; public override string SkillToken => "special"; public override string DescText => "<style=cArtifact>Blighted</style>. Release a deadly disease that deals <style=cIsDamage>" + d(damage) + " damage</style> and spreads up to <style=cIsDamage>" + maxTargets + "</style> times. All enemies hit <style=cIsDamage>share " + d(sharedPercent) + " TOTAL damage taken</style> for <style=cIsDamage>" + shareDuration + "s</style>."; public override void Init() { shareDamage = ScriptableObject.CreateInstance<BuffDef>(); shareDamage.isDebuff = true; shareDamage.canStack = false; shareDamage.isCooldown = false; shareDamage.isHidden = true; ((Object)shareDamage).name = "Epidemic Shared Damage"; ContentAddition.AddBuffDef(shareDamage); damage = ConfigOption(2.4f, "Damage", "Decimal. Vanilla is 1"); cooldown = ConfigOption(10f, "Cooldown", "Vanilla is 10"); maxTargets = ConfigOption(4, "Max Targets", "Vanilla is 1048577"); maxDistance = ConfigOption(35f, "Max Range", "Vanilla is 30"); shareDuration = ConfigOption(5f, "Damage Sharing Duration", ""); sharedPercent = ConfigOption(0.25f, "Damage Sharing Percent", "Decimal."); 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 //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown LightningOrb.Begin += new Manipulator(LightningOrb_Begin); FireSpit.OnEnter += new hook_OnEnter(FireSpit_OnEnter); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); Changes(); } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00ef: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Expected O, but got Unknown //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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0207: 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_0211: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Expected O, but got Unknown //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, info); if (!NetworkServer.active || !Object.op_Implicit((Object)(object)info.attacker) || !Object.op_Implicit((Object)(object)info.attacker.GetComponent<TeamComponent>()) || (DamageAPI.HasModdedDamageType(info, Main.poison) && DamageAPI.HasModdedDamageType(info, Main.blight)) || !(info.procCoefficient > 0f)) { return; } if (DamageAPI.HasModdedDamageType(info, shared)) { self.body.AddTimedBuffAuthority(shareDamage.buffIndex, shareDuration); } if (!self.body.HasBuff(shareDamage) || ((ProcChainMask)(ref info.procChainMask)).HasProc(sharedMask)) { return; } SphereSearch val = new SphereSearch { origin = info.position, radius = maxDistance * 3f, mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask, queryTriggerInteraction = (QueryTriggerInteraction)1 }; TeamIndex teamIndex = info.attacker.GetComponent<TeamComponent>().teamIndex; val.RefreshCandidates(); val.FilterCandidatesByDistinctHurtBoxEntities(); HurtBox[] hurtBoxes = val.GetHurtBoxes(); HurtBox[] array = hurtBoxes; foreach (HurtBox val2 in array) { if (val2.teamIndex != teamIndex && Object.op_Implicit((Object)(object)val2.healthComponent) && (Object)(object)val2.healthComponent != (Object)(object)self && val2.healthComponent.body.HasBuff(shareDamage)) { LightningOrb val3 = new LightningOrb { lightningType = (LightningType)2, canBounceOnSameTarget = false, bouncesRemaining = 1, damageColorIndex = (DamageColorIndex)8, damageValue = info.damage * sharedPercent, damageCoefficientPerBounce = 1f, attacker = info.attacker, isCrit = info.crit, target = val2, teamIndex = teamIndex, targetsToFindPerBounce = 1, speed = 20f, origin = info.position, procCoefficient = 0f, bouncedObjects = new List<HealthComponent>(), duration = maxDistance * 3f }; ProcChainMask procChainMask = default(ProcChainMask); ((ProcChainMask)(ref procChainMask)).AddProc(sharedMask); val3.procChainMask = procChainMask; OrbManager.instance.AddOrb((Orb)(object)val3); } } } private void FireSpit_OnEnter(orig_OnEnter orig, FireSpit self) { self.baseDuration = 0.3f; if (self is FireDiseaseProjectile) { self.damageCoefficient = damage; } orig.Invoke(self); } private void LightningOrb_Begin(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); int num = default(int); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.6f), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Orb>(x, "set_duration"), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 2) })) { val.Next.Operand = 0.25f; val.Index += 4; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int useless) => 1)); } else { Main.HACTLogger.LogError((object)"Failed to apply Epidemic Un-J hook"); } } 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) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoDisease.asset").WaitForCompletion(); val.baseRechargeInterval = cooldown; val.keywordTokens = new string[1] { "HAT_BLIGHT" }; GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoDiseaseProjectile.prefab").WaitForCompletion(); ModdedDamageTypeHolderComponent val3 = val2.AddComponent<ModdedDamageTypeHolderComponent>(); val3.Add(Main.blight); val3.Add(shared); ProjectileSimple component = val2.GetComponent<ProjectileSimple>(); component.lifetime = 10f; component.desiredForwardSpeed = 100f; ProjectileProximityBeamController component2 = val2.GetComponent<ProjectileProximityBeamController>(); component2.attackRange = maxDistance; component2.bounces = maxTargets; Rigidbody component3 = val2.GetComponent<Rigidbody>(); component3.useGravity = true; component3.collisionDetectionMode = (CollisionDetectionMode)1; component3.freezeRotation = true; AntiGravityForce val4 = val2.AddComponent<AntiGravityForce>(); val4.rb = val2.GetComponent<Rigidbody>(); val4.antiGravityCoefficient = 0.25f; } } internal class FrenziedLeap : TweakBase { public static float damage; public static float cdr; public static float cooldown; public static float radius; public override bool DoesNotKillTheMod => true; public override string Name => "Utility :: Frenzied Leap"; public override string SkillToken => "utility_alt1"; public override string DescText => "<style=cIsHealing>Regenerative</style>. <style=cIsDamage>Stunning</style>. Leap in the air, dealing <style=cIsDamage>" + d(damage) + " damage</style> in a small area."; public override void Init() { damage = ConfigOption(6.5f, "Damage", "Decimal. Vanilla is 5.5"); cooldown = ConfigOption(6f, "Cooldown", "Vanilla is 10"); radius = ConfigOption(6.5f, "Area of Effect", "Vanilla is 10"); 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 //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown BaseLeap.OnEnter += new hook_OnEnter(BaseLeap_OnEnter); BaseLeap.OnExit += new hook_OnExit(BaseLeap_OnExit); BaseLeap.DetonateAuthority += new hook_DetonateAuthority(BaseLeap_DetonateAuthority); ChainableLeap.DoImpactAuthority += new hook_DoImpactAuthority(ChainableLeap_DoImpactAuthority); Changes(); } private Result BaseLeap_DetonateAuthority(orig_DetonateAuthority orig, BaseLeap self) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00a4: 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) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) Vector3 footPosition = ((EntityState)self).characterBody.footPosition; EffectManager.SpawnEffect(self.blastEffectPrefab, new EffectData { origin = footPosition, scale = radius }, true); BlastAttack val = new BlastAttack { attacker = ((EntityState)self).gameObject, baseDamage = ((BaseState)self).damageStat * self.blastDamageCoefficient, baseForce = 0f, bonusForce = Vector3.zero, crit = self.isCritAuthority, falloffModel = (FalloffModel)0, procCoefficient = BaseLeap.blastProcCoefficient, radius = radius, damageType = (DamageType)32, position = footPosition, attackerFiltering = (AttackerFiltering)2, impactEffect = EffectCatalog.FindEffectIndexFromPrefab(self.blastImpactEffectPrefab), teamIndex = ((EntityState)self).teamComponent.teamIndex }; if (self is ChainableLeap) { PassiveController component = ((EntityState)self).GetComponent<PassiveController>(); if ((Object)(object)component != (Object)null) { string currentPassive = component.currentPassive; string text = currentPassive; if (text == "HAT_FRENZY_NAME") { DamageAPI.AddModdedDamageType(val, Passives.frenzy); } else { DamageAPI.AddModdedDamageType(val, Passives.regen); } } } else { DamageAPI.AddModdedDamageType(val, Main.blight); } return val.Fire(); } private void BaseLeap_OnExit(orig_OnExit orig, BaseLeap self) { orig.Invoke(self); ((EntityState)self).characterBody.isSprinting = true; } private void ChainableLeap_DoImpactAuthority(orig_DoImpactAuthority orig, ChainableLeap self) { ChainableLeap.refundPerHit = 0f; orig.Invoke(self); } private void BaseLeap_OnEnter(orig_OnEnter orig, BaseLeap self) { if (self is ChainableLeap) { self.blastDamageCoefficient = 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) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoChainableLeap.asset").WaitForCompletion(); val.baseRechargeInterval = cooldown; val.keywordTokens = new string[2] { "KEYWORD_RAPID_REGEN", "KEYWORD_STUNNING" }; } } internal class Neurotoxin : TweakBase { public static float damage; public static float cooldown; public static float aoe; public override bool DoesNotKillTheMod => true; public override string Name => "Secondary : Neurotoxin"; public override string SkillToken => "secondary"; public override string DescText => "<style=cIsUtility>Agile</style>. <style=cArtifact>Blighted</style>. Spit toxic bile for <style=cIsDamage>" + d(damage) + " damage</style>."; public override void Init() { damage = ConfigOption(2.6f, "Damage", "Decimal. Vanilla is 2.4"); cooldown = ConfigOption(3f, "Cooldown", "Vanilla is 2"); aoe = ConfigOption(8f, "Area of Effect", "Vanilla is 3"); 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 FireSpit.OnEnter += new hook_OnEnter(FireSpit_OnEnter1); FireSpit.OnEnter += new Manipulator(FireSpit_OnEnter); Changes(); } private void FireSpit_OnEnter1(orig_OnEnter orig, FireSpit self) { self.baseDuration = 0.3f; if (!(self is FireDiseaseProjectile)) { self.damageCoefficient = damage; } orig.Invoke(self); } private void FireSpit_OnEnter(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); int num = default(int); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.Projectile.FireProjectileInfo", "damage"), (Instruction x) => ILPatternMatchingExt.MatchLdloca(x, ref num) })) { val.Index += 3; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int useless) => 0)); } else { Main.HACTLogger.LogError((object)"Failed to apply Spit Damage Type hook"); } } 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) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Expected O, but got Unknown //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: 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_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Expected O, but got Unknown //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0333: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0369: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Expected O, but got Unknown //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03aa: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Expected O, but got Unknown //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Unknown result type (might be due to invalid IL or missing references) //IL_03e2: Unknown result type (might be due to invalid IL or missing references) //IL_03e9: Unknown result type (might be due to invalid IL or missing references) //IL_03f3: Unknown result type (might be due to invalid IL or missing references) //IL_03f8: Unknown result type (might be due to invalid IL or missing references) //IL_040f: Unknown result type (might be due to invalid IL or missing references) //IL_0414: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_044f: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoSpit.asset").WaitForCompletion(); val.baseRechargeInterval = cooldown; val.keywordTokens = new string[1] { "HAT_BLIGHT" }; GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoSpit.prefab").WaitForCompletion(); ModdedDamageTypeHolderComponent val3 = val2.AddComponent<ModdedDamageTypeHolderComponent>(); val3.Add(Main.blight); val2.transform.localScale = new Vector3(0.1f, 0.1f, 1f); GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoSpitGhost.prefab").WaitForCompletion(); val4.transform.localScale = new Vector3(2f, 2f, 2f); ProjectileSimple component = val2.GetComponent<ProjectileSimple>(); component.desiredForwardSpeed = 100f; component.lifetime = 10f; Rigidbody component2 = val2.GetComponent<Rigidbody>(); component2.useGravity = true; component2.collisionDetectionMode = (CollisionDetectionMode)1; component2.freezeRotation = true; AntiGravityForce val5 = val2.AddComponent<AntiGravityForce>(); val5.rb = val2.GetComponent<Rigidbody>(); val5.antiGravityCoefficient = 0.25f; ProjectileImpactExplosion component3 = val2.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component3).blastRadius = aoe; component3.lifetime = 10f; GameObject val6 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoDiseaseImpactEffect.prefab").WaitForCompletion(); val6.transform.localScale = new Vector3(aoe, aoe, aoe); MainModule main = ((Component)val6.transform.GetChild(1)).GetComponent<ParticleSystem>().main; ((MainModule)(ref main)).startLifetime = MinMaxCurve.op_Implicit(0.33f); Gradient val7 = new Gradient(); val7.SetKeys((GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(Color.white, 0f), new GradientColorKey(Color.white, 0.165f), new GradientColorKey(Color.black, 0.33f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[3] { new GradientAlphaKey(0f, 0f), new GradientAlphaKey(1f, 0.165f), new GradientAlphaKey(0f, 0.33f) }); ColorOverLifetimeModule colorOverLifetime = ((Component)val6.transform.GetChild(1)).GetComponent<ParticleSystem>().colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val7); SizeOverLifetimeModule sizeOverLifetime = ((Component)val6.transform.GetChild(1)).GetComponent<ParticleSystem>().sizeOverLifetime; ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size = new MinMaxCurve(1f, new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 0f), new Keyframe(1f, 0.165f), new Keyframe(0f, 0.33f) })); ParticleSystemRenderer component4 = ((Component)val6.transform.GetChild(2)).GetComponent<ParticleSystemRenderer>(); component4.mesh = Addressables.LoadAssetAsync<Mesh>((object)"RoR2/Base/Common/VFX/mdlVFXDonut2.fbx").WaitForCompletion(); MainModule main2 = ((Component)component4).gameObject.GetComponent<ParticleSystem>().main; ((MainModule)(ref main2)).startLifetime = MinMaxCurve.op_Implicit(0.5f); SizeOverLifetimeModule sizeOverLifetime2 = ((Component)component4).gameObject.GetComponent<ParticleSystem>().sizeOverLifetime; ((SizeOverLifetimeModule)(ref sizeOverLifetime2)).size = new MinMaxCurve(1f, new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 0f), new Keyframe(1f, 0.1f), new Keyframe(0f, 0.5f) })); ColorOverLifetimeModule colorOverLifetime2 = ((Component)component4).gameObject.GetComponent<ParticleSystem>().colorOverLifetime; Gradient val8 = new Gradient(); val8.SetKeys((GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(Color.black, 0f), new GradientColorKey(Color.white, 0.1f), new GradientColorKey(Color.black, 0.5f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[3] { new GradientAlphaKey(0f, 0f), new GradientAlphaKey(1f, 0.1f), new GradientAlphaKey(0f, 0.5f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime2)).color = MinMaxGradient.op_Implicit(val8); ProjectileDamage component5 = val2.GetComponent<ProjectileDamage>(); component5.damageType = (DamageType)0; } } internal class PassiveController : MonoBehaviour { public string currentPassive; public static SkillFamily passiveFamily = Addressables.LoadAssetAsync<SkillFamily>((object)"RoR2/Base/Croco/CrocoBodyPassiveFamily.asset").WaitForCompletion(); public void Start() { GenericSkill val = (from x in ((Component)this).gameObject.GetComponents<GenericSkill>() where (Object)(object)x.skillFamily == (Object)(object)passiveFamily select x).First(); currentPassive = val.skillNameToken; } } public class Poison : TweakBase { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static CustomDotBehaviour <>9__15_0; public static Func<Instruction, bool> <>9__18_1; public static Func<int, int> <>9__18_0; internal void <Init>b__15_0(DotController self, DotStack dotStack) { GameObject attackerObject = dotStack.attackerObject; CharacterBody val = ((attackerObject != null) ? attackerObject.GetComponent<CharacterBody>() : null); dotStack.damage = Mathf.Min(Mathf.Max(Object.op_Implicit((Object)(object)self.victimHealthComponent) ? (self.victimHealthComponent.fullCombinedHealth * percentDamagePerSecond * 0.25f) : 0f, val.damage * getReal * 0.25f), val.damage * dpsCap * 0.25f); } internal bool <GlobalEventManager_OnHitEnemy>b__18_1(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 4096); } internal int <GlobalEventManager_OnHitEnemy>b__18_0(int useless) { return 0; } } public static float duration; public static float percentDamagePerSecond; public static float dpsCap; public static float getReal; public static BuffDef poison; public static DotDef poisonDef; public static DotIndex poisonIndex; public override bool DoesNotKillTheMod => false; public override string Name => "Passive : Poison"; public override string SkillToken => "passive"; public override string DescText => "<style=cIsHealing>Poisonous</style> attacks apply a powerful damage-over-time."; public override void Init() { //IL_0041: 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_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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_0132: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected O, but got Unknown poison = ScriptableObject.CreateInstance<BuffDef>(); poison.isDebuff = true; poison.isCooldown = false; poison.canStack = false; poison.isHidden = false; poison.iconSprite = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Croco/bdPoisoned.asset").WaitForCompletion().iconSprite; poison.buffColor = Color32.op_Implicit(new Color32((byte)201, (byte)242, (byte)77, byte.MaxValue)); ((Object)poison).name = "Poison"; ContentAddition.AddBuffDef(poison); duration = ConfigOption(3f, "Duration", "Vanilla is 10"); percentDamagePerSecond = ConfigOption(0.015f, "Percent Max Health Damage Per Second", "Decimal. Vanilla is 0.01"); dpsCap = ConfigOption(50f, "Maximum Base Damage Per Second", "Decimal. Vanilla is 50"); getReal = ConfigOption(1f, "Minimum Base Damage Per Second", "Decimal. Vanilla is 1"); poisonDef = new DotDef { associatedBuff = poison, damageCoefficient = 1f, damageColorIndex = (DamageColorIndex)4, interval = 0.25f }; object obj = <>c.<>9__15_0; if (obj == null) { CustomDotBehaviour val = delegate(DotController self, DotStack dotStack) { GameObject attackerObject = dotStack.attackerObject; CharacterBody val3 = ((attackerObject != null) ? attackerObject.GetComponent<CharacterBody>() : null); dotStack.damage = Mathf.Min(Mathf.Max(Object.op_Implicit((Object)(object)self.victimHealthComponent) ? (self.victimHealthComponent.fullCombinedHealth * percentDamagePerSecond * 0.25f) : 0f, val3.damage * getReal * 0.25f), val3.damage * dpsCap * 0.25f); }; <>c.<>9__15_0 = val; obj = (object)val; } CustomDotBehaviour val2 = (CustomDotBehaviour)obj; poisonIndex = DotAPI.RegisterDotDef(poisonDef, val2, (CustomDotVisual)null); base.Init(); } public override void Hooks() { GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; } private void GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) DamageInfo damageInfo = report.damageInfo; CharacterBody attackerBody = report.attackerBody; if (!Object.op_Implicit((Object)(object)attackerBody)) { return; } HealthComponent victim = report.victim; if (Object.op_Implicit((Object)(object)victim) && DamageAPI.HasModdedDamageType(damageInfo, Main.poison)) { InflictDotInfo val = default(InflictDotInfo); val.victimObject = ((Component)victim).gameObject; val.attackerObject = ((Component)attackerBody).gameObject; val.totalDamage = null; val.dotIndex = poisonIndex; val.duration = duration; val.damageMultiplier = 1f; val.maxStacksFromAttacker = 1u; InflictDotInfo val2 = val; DotController.InflictDot(ref val2); CharacterMaster master = attackerBody.master; if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)master.playerStatsComponent)) { master.playerStatsComponent.currentStats.PushStatValue(StatDef.totalCrocoInfectionsInflicted, 1uL); } } } private void GlobalEventManager_OnHitEnemy(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.MatchLdcI4(x, 4096) })) { int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int useless) => 0)); } else { Main.HACTLogger.LogError((object)"Failed to apply Poison Deletion hook"); } } } internal class RavenousBite : TweakBase { public static float damage; public static float cooldown; public override bool DoesNotKillTheMod => true; public override string Name => "Secondary :: Ravenous Bite"; public override string SkillToken => "secondary_alt"; public override string DescText => "<style=cIsUtility>Agile</style>. <style=cArtifact>Blighted</style>. <style=cIsHealing>Regenerative</style>. Bite an enemy for <style=cIsDamage>" + d(damage) + " damage</style>."; public override void Init() { damage = ConfigOption(4.4f, "Damage", "Decimal. Vanilla is 3.2"); cooldown = ConfigOption(3f, "Cooldown", "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 Bite.OnEnter += new hook_OnEnter(Bite_OnEnter); Bite.AuthorityModifyOverlapAttack += new hook_AuthorityModifyOverlapAttack(Bite_AuthorityModifyOverlapAttack); Changes(); } private void Bite_OnEnter(orig_OnEnter orig, Bite self) { ((BasicMeleeAttack)self).damageCoefficient = damage; orig.Invoke(self); } private void Bite_AuthorityModifyOverlapAttack(orig_AuthorityModifyOverlapAttack orig, Bite self, OverlapAttack overlapAttack) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) PassiveController component = ((EntityState)self).GetComponent<PassiveController>(); if ((Object)(object)component != (Object)null) { string currentPassive = component.currentPassive; string text = currentPassive; if (text == "HAT_FRENZY_NAME") { DamageAPI.AddModdedDamageType(overlapAttack, Passives.frenzy); } else { DamageAPI.AddModdedDamageType(overlapAttack, Passives.regen); } } DamageAPI.AddModdedDamageType(overlapAttack, Main.blight); } 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/Croco/CrocoBite.asset").WaitForCompletion(); val.baseRechargeInterval = cooldown; val.cancelSprintingOnActivation = false; val.keywordTokens = new string[3] { "HAT_BLIGHT", "KEYWORD_AGILE", "KEYWORD_RAPID_REGEN" }; } } internal class ViciousWounds : TweakBase { public static bool disableCancel; public static float duration; public static float damage; public static float lastHitDamage; public override bool DoesNotKillTheMod => true; public override string Name => "Primary : Vicious Wounds"; public override string SkillToken => "primary"; public override string DescText => "Maul an enemy for <style=cIsDamage>" + d(damage) + " damage</style>. Every third hit is <style=cIsHealing>Poisonous</style>, <style=cIsHealing>Regenerative</style> and deals <style=cIsDamage>" + d(lastHitDamage) + " damage</style>."; public override void Init() { disableCancel = ConfigOption(value: true, "Disable M1 Cancel?", "Vanilla is false. For a bit of a backstory, Acrid used to have a choice between dealing more dps and healing with the cancel, now it's straight up better and I can't revert it."); duration = ConfigOption(1.25f, "Total Duration", "Vanilla is 1.5"); damage = ConfigOption(2f, "First And Second Hit Damage", "Decimal. Vanilla is 2"); lastHitDamage = ConfigOption(4f, "Last Hit Damage", "Decimal. Vanilla is 4"); 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 Slash.OnEnter += new hook_OnEnter(Slash_OnEnter); Slash.AuthorityModifyOverlapAttack += new hook_AuthorityModifyOverlapAttack(Slash_AuthorityModifyOverlapAttack); Changes(); } private void Slash_AuthorityModifyOverlapAttack(orig_AuthorityModifyOverlapAttack orig, Slash self, OverlapAttack overlapAttack) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) if (self.isComboFinisher) { PassiveController component = ((EntityState)self).GetComponent<PassiveController>(); if ((Object)(object)component != (Object)null) { string currentPassive = component.currentPassive; string text = currentPassive; if (text == "HAT_FRENZY_NAME") { DamageAPI.AddModdedDamageType(overlapAttack, Passives.frenzy); } else { DamageAPI.AddModdedDamageType(overlapAttack, Passives.regen); } } DamageAPI.AddModdedDamageType(overlapAttack, Main.poison); } orig.Invoke(self, overlapAttack); } private void Slash_OnEnter(orig_OnEnter orig, Slash self) { ((BasicMeleeAttack)self).damageCoefficient = damage; Slash.comboFinisherDamageCoefficient = lastHitDamage; ((BasicMeleeAttack)self).baseDuration = duration; ((BasicMeleeAttack)self).duration = duration / ((BaseState)self).attackSpeedStat; Slash.comboFinisherBaseDurationBeforeInterruptable = duration / 1.5f; Slash.baseDurationBeforeInterruptable = duration / 2.7272727f; 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) SteppedSkillDef val = Addressables.LoadAssetAsync<SteppedSkillDef>((object)"RoR2/Base/Croco/CrocoSlash.asset").WaitForCompletion(); if (disableCancel) { ((SkillDef)val).canceledFromSprinting = false; } ((SkillDef)val).keywordTokens = new string[2] { "HAT_POISON", "KEYWORD_RAPID_REGEN" }; } } } namespace HIFUAcridTweaks.Misc { internal class Achievements : MiscBase { public static ulong poisonCount; public override string Name => "Misc ::::: Achievements"; public override bool DoesNotKillTheMod => true; public override void Init() { poisonCount = ConfigOption(100uL, "Acrid: Pandemic Poison Requirement Amount", "Vanilla is 1000"); 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 BaseStatMilestoneAchievement.ProgressForAchievement += new Manipulator(BaseStatMilestoneAchievement_ProgressForAchievement); BaseStatMilestoneAchievement.Check += new Manipulator(BaseStatMilestoneAchievement_Check); Changes(); } private void BaseStatMilestoneAchievement_Check(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<BaseStatMilestoneAchievement>(x, "get_statRequirement") })) { int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<ulong, BaseStatMilestoneAchievement, ulong>>((Func<ulong, BaseStatMilestoneAchievement, ulong>)((ulong orig, BaseStatMilestoneAchievement self) => (self is CrocoTotalInfectionsMilestoneAchievement) ? poisonCount : orig)); } else { Main.HACTLogger.LogError((object)"Failed to apply Poison Count 2 hook"); } } private void BaseStatMilestoneAchievement_ProgressForAchievement(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<BaseStatMilestoneAchievement>(x, "get_statRequirement") })) { int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<ulong, BaseStatMilestoneAchievement, ulong>>((Func<ulong, BaseStatMilestoneAchievement, ulong>)((ulong orig, BaseStatMilestoneAchievement self) => (self is CrocoTotalInfectionsMilestoneAchievement) ? poisonCount : orig)); } else { Main.HACTLogger.LogError((object)"Failed to apply Poison Count 1 hook"); } } private void Changes() { LanguageAPI.Add("ACHIEVEMENT_CROCOTOTALINFECTIONSMILESTONE_DESCRIPTION", "As Acrid, inflict Poison " + poisonCount + " total times."); } } internal class BaseStats : MiscBase { public static float baseDamage; public static float baseHealth; public override string Name => "Misc :: Base Stats"; public override bool DoesNotKillTheMod => true; public override void Init() { baseDamage = ConfigOption(12f, "Base Damage", "Vanilla is 15"); baseHealth = ConfigOption(120f, "Base Health", "Vanilla is 160"); base.Init(); } public override void Hooks() { Changes(); } 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) CharacterBody component = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoBody.prefab").WaitForCompletion().GetComponent<CharacterBody>(); component.baseDamage = baseDamage; component.levelDamage = baseDamage * 0.2f; component.baseMaxHealth = baseHealth; component.levelMaxHealth = baseHealth * 0.3f; } } internal class HurtBox : MiscBase { public static float sizeMultiplier; public override string Name => "Misc ::: Hurt Box"; public override bool DoesNotKillTheMod => true; public override void Init() { sizeMultiplier = ConfigOption(0.75f, "Size Multiplier", "Vanilla is 1"); base.Init(); } public override void Hooks() { Changes(); } 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) //IL_004b: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoBody.prefab").WaitForCompletion(); SphereCollider component = ((Component)val.transform.GetChild(0).GetChild(2).Find("TempHurtbox")).GetComponent<SphereCollider>(); ((Component)component).transform.localPosition = new Vector3(0f, 7f, 2f); component.radius = 5.26f * sizeMultiplier; } } internal class Passives : MiscBase { public static float regenHeal; public static float regenDur; public static float frenSpeed; public static float frenDur; public static SkillDef regenerativeSD; public static SkillDef frenziedSD; public static BuffDef regenerative; public static BuffDef frenzied; public static ModdedDamageType regen = DamageAPI.ReserveDamageType(); public static ModdedDamageType frenzy = DamageAPI.ReserveDamageType(); public static BodyIndex acridBodyIndex; public static UnlockableDef frenziedUnlock; public override string Name => "Misc :::: Passives"; public override bool DoesNotKillTheMod => false; public override 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_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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0356: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03dc: Unknown result type (might be due to invalid IL or missing references) //IL_03e1: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_03f5: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) //IL_0469: Unknown result type (might be due to invalid IL or missing references) //IL_046e: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Unknown result type (might be due to invalid IL or missing references) //IL_0482: Unknown result type (might be due to invalid IL or missing references) SkillFamily val = Addressables.LoadAssetAsync<SkillFamily>((object)"RoR2/Base/Croco/CrocoBodyPassiveFamily.asset").WaitForCompletion(); regenerativeSD = ScriptableObject.CreateInstance<SkillDef>(); ((Object)regenerativeSD).name = "Regenerative Passive"; regenerativeSD.skillName = "Regenerative HAT"; regenerativeSD.skillNameToken = "HAT_REGEN_NAME"; regenerativeSD.skillDescriptionToken = "HAT_REGEN_DESCRIPTION"; regenerativeSD.keywordTokens = new string[1] { "KEYWORD_RAPID_REGEN" }; regenerativeSD.activationStateMachineName = "Weapon"; regenerativeSD.activationState = new SerializableEntityStateType(typeof(Idle)); regenerativeSD.interruptPriority = (InterruptPriority)1; regenerativeSD.baseRechargeInterval = 1f; regenerativeSD.baseMaxStock = 1; regenerativeSD.rechargeStock = 1; regenerativeSD.requiredStock = 1; regenerativeSD.stockToConsume = 1; regenerativeSD.resetCooldownTimerOnUse = false; regenerativeSD.fullRestockOnAssign = true; regenerativeSD.dontAllowPastMaxStocks = false; regenerativeSD.beginSkillCooldownOnSkillEnd = false; regenerativeSD.cancelSprintingOnActivation = true; regenerativeSD.forceSprintDuringState = false; regenerativeSD.canceledFromSprinting = false; regenerativeSD.isCombatSkill = true; regenerativeSD.mustKeyPress = false; regenerativeSD.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoPassivePoison.asset").WaitForCompletion().icon; ContentAddition.AddSkillDef(regenerativeSD); Sprite icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Croco/CrocoPassiveBlight.asset").WaitForCompletion().icon; frenziedSD = ScriptableObject.CreateInstance<SkillDef>(); ((Object)frenziedSD).name = "Frenzied Passive"; frenziedSD.skillName = "Frenzied HAT"; frenziedSD.skillNameToken = "HAT_FRENZY_NAME"; frenziedSD.skillDescriptionToken = "HAT_FRENZY_DESCRIPTION"; frenziedSD.keywordTokens = new string[1] { "KEYWORD_RAPID_SPEED" }; frenziedSD.activationStateMachineName = "Weapon"; frenziedSD.activationState = new SerializableEntityStateType(typeof(Idle)); frenziedSD.interruptPriority = (InterruptPriority)1; frenziedSD.baseRechargeInterval = 1f; frenziedSD.baseMaxStock = 1; frenziedSD.rechargeStock = 1; frenziedSD.requiredStock = 1; frenziedSD.stockToConsume = 1; frenziedSD.resetCooldownTimerOnUse = false; frenziedSD.fullRestockOnAssign = true; frenziedSD.dontAllowPastMaxStocks = false; frenziedSD.beginSkillCooldownOnSkillEnd = false; frenziedSD.cancelSprintingOnActivation = true; frenziedSD.forceSprintDuringState = false; frenziedSD.canceledFromSprinting = false; frenziedSD.isCombatSkill = true; frenziedSD.mustKeyPress = false; frenziedSD.icon = icon; ContentAddition.AddSkillDef(frenziedSD); frenziedUnlock = ScriptableObject.CreateInstance<UnlockableDef>(); frenziedUnlock.nameToken = "ACHIEVEMENT_ACRIDFRENZIED_NAME"; frenziedUnlock.cachedName = "Acrid.Skills_Frenzied"; frenziedUnlock.achievementIcon = Main.iHateThis.LoadAsset<Sprite>("Assets/HIFUAcridTweaks/bloighjt.png"); LanguageAPI.Add("ACHIEVEMENT_ACRIDFRENZIED_NAME", "Acrid: Frenzy"); LanguageAPI.Add("ACHIEVEMENT_ACRIDFRENZIED_DESCRIPTION", "As Acrid, use 10 skills in under 3 seconds."); ContentAddition.AddUnlockableDef(frenziedUnlock); val.variants[0] = new Variant { skillDef = regenerativeSD }; val.variants[1] = new Variant { skillDef = frenziedSD, unlockableDef = frenziedUnlock }; regenerative = ScriptableObject.CreateInstance<BuffDef>(); regenerative.isDebuff = false; regenerative.isCooldown = false; regenerative.canStack = true; regenerative.isHidden = false; regenerative.buffColor = Color32.op_Implicit(new Color32((byte)201, (byte)242, (byte)77, byte.MaxValue)); regenerative.iconSprite = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Croco/bdCrocoRegen.asset").WaitForCompletion().iconSprite; ((Object)regenerative).name = "HIFUAcridTweaks Regenerative"; frenzied = ScriptableObject.CreateInstance<BuffDef>(); frenzied.isDebuff = false; frenzied.isCooldown = false; frenzied.canStack = true; frenzied.isHidden = false; frenzied.buffColor = Color32.op_Implicit(new Color32((byte)201, (byte)242, (byte)77, byte.MaxValue)); frenzied.iconSprite = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/MoveSpeedOnKill/bdKillMoveSpeed.asset").WaitForCompletion().iconSprite; ((Object)frenzied).name = "HIFUAcridTweaks Frenzied"; ContentAddition.AddBuffDef(regenerative); ContentAddition.AddBuffDef(frenzied); regenHeal = ConfigOption(0.05f, "Regenerative Heal Percent", "Decimal. Vanilla is 0.05"); regenDur = ConfigOption(1f, "Regenerative Buff Duration", "Vanilla is 0.5"); frenSpeed = ConfigOption(0.2f, "Frenzied Movement Speed", "Decimal."); frenDur = ConfigOption(5f, "Frenzied Buff Duration", ""); 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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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 BodyCatalog.Init += new hook_Init(BodyCatalog_Init); CharacterBody.onBodyStartGlobal += CharacterBody_onBodyStartGlobal; Slash.OnMeleeHitAuthority += new Manipulator(Slash_OnMeleeHitAuthority); Bite.OnMeleeHitAuthority += new Manipulator(Bite_OnMeleeHitAuthority); CharacterBody.RecalculateStats += new Manipulator(CharacterBody_RecalculateStats); RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; HealthComponent.ServerFixedUpdate += new hook_ServerFixedUpdate(HealthComponent_ServerFixedUpdate); Changes(); } private void Bite_OnMeleeHitAuthority(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "AddSpreadBloom") })) { int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ret); } else { Main.HACTLogger.LogError((object)"Failed to apply Regenerative Deletion 2 hook"); } } private void Slash_OnMeleeHitAuthority(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "AddSpreadBloom") })) { int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ret); } else { Main.HACTLogger.LogError((object)"Failed to apply Regenerative Deletion 1 hook"); } } private void BodyCatalog_Init(orig_Init orig) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(); acridBodyIndex = BodyCatalog.FindBodyIndex("CrocoBody"); } private void CharacterBody_onBodyStartGlobal(CharacterBody body) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) if (body.bodyIndex == acridBodyIndex && (Object)(object)((Component)body).GetComponent<PassiveController>() == (Object)null) { ((Component)body).gameObject.AddComponent<PassiveController>(); } } private void HealthComponent_ServerFixedUpdate(orig_ServerFixedUpdate orig, HealthComponent self) { if (self.alive && Object.op_Implicit((Object)(object)self.body)) { self.regenAccumulator += self.fullCombinedHealth * regenHeal / (regenDur / Time.fixedDeltaTime) * (float)self.body.GetBuffCount(regenerative); } orig.Invoke(self); } private void GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) CharacterBody attackerBody = report.attackerBody; if (Object.op_Implicit((Object)(object)attackerBody)) { if (DamageAPI.HasModdedDamageType(report.damageInfo, regen)) { attackerBody.AddTimedBuffAuthority(regenerative.buffIndex, regenDur); } if (DamageAPI.HasModdedDamageType(report.damageInfo, frenzy)) { attackerBody.AddTimedBuffAuthority(frenzied.buffIndex, frenDur); } } } private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (Object.op_Implicit((Object)(object)sender)) { args.moveSpeedMultAdd += frenSpeed * (float)sender.GetBuffCount(frenzied); } } private void CharacterBody_RecalculateStats(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>[7] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.RoR2Content/Buffs", "CrocoRegen"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "GetBuffCount"), (Instruction x) => ILPatternMatchingExt.MatchConvR4(x), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_maxHealth"), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.1f) })) { val.Index += 6; val.Next.Operand = 0f; } else { Main.HACTLogger.LogError((object)"Failed to apply Regenerative Healing hook"); } } private void Changes() { LanguageAPI.Add("HAT_REGEN_NAME", "Regenerative"); LanguageAPI.Add("HAT_REGEN_DESCRIPTION", "<style=cIsHealing>Regenerative</style> attacks <style=cIsHealing>heal</style> over a short duration."); LanguageAPI.Add("HAT_FRENZY_NAME", "Frenzied"); LanguageAPI.Add("HAT_FRENZY_DESCRIPTION", "Attacks that apply <style=cIsHealing>Regenerative</style> apply <style=cIsDamage>Frenzied</style> instead, which increases <style=cIsUtility>movement speed</style> for a short duration."); LanguageAPI.Add("KEYWORD_RAPID_REGEN", "<style=cKeywordName>Regenerative</style><style=cSub>Heal for <style=cIsHealing>" + Math.Round(regenHeal * 100f, 2) + "%</style> of your maximum health over <style=cIsHealing>" + Math.Round(regenDur, 2) + "s</style>. <i>Can stack.</i></style>"); LanguageAPI.Add("KEYWORD_RAPID_SPEED", "<style=cKeywordName>Frenzied</style><style=cSub>Gain <style=cIsUtility>" + Math.Round(frenSpeed * 100f, 2) + "%</style> movement speed for <style=cIsUtility>" + Math.Round(frenDur, 2) + "s</style>. <i>Can stack.</i></style>"); } } [RegisterAchievement("AcridFrenzied", "Acrid.Skills_Frenzied", "BeatArena", null)] public class FrenziedAchievement : BaseAchievement { private static readonly int requiredSkillCount = 10; private CharacterBody _trackedBody; private DoXInYSecondsTracker tracker; private static readonly float windowSeconds = 3f; private CharacterBody trackedBody { get { return _trackedBody; } set { if (!((Object)(object)_trackedBody == (Object)(object)value)) { if ((Object)(object)_trackedBody != (Object)null) { _trackedBody.onSkillActivatedAuthority -= OnSkillActivated; } _trackedBody = value; if ((Object)(object)_trackedBody != (Object)null) { _trackedBody.onSkillActivatedAuthority += OnSkillActivated; } } } } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] public override BodyIndex LookUpRequiredBodyIndex() { //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_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("CrocoBody"); } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] public override void OnInstall() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown ((BaseAchievement)this).OnInstall(); tracker = new DoXInYSecondsTracker(requiredSkillCount, windowSeconds); } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] public override void OnUninstall() { tracker = null; ((BaseAchievement)this).OnUninstall(); } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] public override void OnBodyRequirementMet() { ((BaseAchievement)this).OnBodyRequirementMet(); trackedBody = ((BaseAchievement)this).localUser.cachedBody; ((BaseAchievement)this).localUser.onBodyChanged += OnBodyChanged; tracker.Clear(); } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] public override void OnBodyRequirementBroken() { if (((BaseAchievement)this).localUser != null) { ((BaseAchievement)this).localUser.onBodyChanged -= OnBodyChanged; } trackedBody = null; ((BaseAchievement)this).OnBodyRequirementBroken(); if (tracker != null) { tracker.Clear(); } } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] private void OnBodyChanged() { trackedBody = ((BaseAchievement)this).localUser.cachedBody; tracker.Clear(); } [SystemInitializer(new Type[] { typeof(OptInAttribute) })] private void OnSkillActivated(GenericSkill skill) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) if (tracker.Push(FixedTimeStamp.now.t)) { ((BaseAchievement)this).Grant(); } } } internal class Spawn : MiscBase { public override string Name => "Misc : Spawn Animation"; public override bool DoesNotKillTheMod => true; public override void Init() { 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 Spawn.OnEnter += new hook_OnEnter(Spawn_OnEnter); WakeUp.OnEnter += new hook_OnEnter(WakeUp_OnEnter); } private void WakeUp_OnEnter(orig_OnEnter orig, WakeUp self) { WakeUp.duration = 1.2f; orig.Invoke(self); } private void Spawn_OnEnter(orig_OnEnter orig, Spawn self) { Spawn.minimumSleepDuration = 0.7f; orig.Invoke(self); } } } namespace HIFUAcridTweaks.Keywords { public static class Keywords { public static void Init() { LanguageAPI.Add("HAT_POISON", "<style=cKeywordName>Poisonous</style><style=cSub>Deal damage equal to <style=cIsDamage>" + Poison.percentDamagePerSecond * 100f * Poison.duration + "%</style> of the enemy's maximum health over " + Poison.duration + "s. <i>Cannot stack.</i></style>"); LanguageAPI.Add("HAT_BLIGHT", "<style=cKeywordName>Blighted</style><style=cSub>Deal <style=cIsDamage>" + Blight.damagePerSecond * 100f * Blight.duration + "%</style> base damage over " + Blight.duration + "s. <i>Can stack.</i></style>"); } } }