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 EggsUtils v1.2.13
plugins/EggsUtils.dll
Decompiled 10 months agousing System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EggsUtils.Buffs; using EggsUtils.Buffs.BuffComponents; using EggsUtils.Helpers; using EggsUtils.Properties; using EntityStates; using On.RoR2; using R2API; using RoR2; 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("EggsUtils")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+0ca473d0d5545db853b0d0da59d560294854925e")] [assembly: AssemblyProduct("EggsUtils")] [assembly: AssemblyTitle("EggsUtils")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace EggsUtils { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Egg.EggsUtils", "EggsUtils", "1.2.13")] public class EggsUtils : BaseUnityPlugin { public const string COMPAT_NAME = "com.Egg.EggsUtils"; public const string COMPAT_TITLE = "EggsUtils"; public const string COMPAT_VERS = "1.2.13"; public const string API_NAME = "com.bepis.r2api"; private void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); BuffsLoading.SetupBuffs(); EggAssets.RegisterAssets(); BuffHooks(); } private void BuffHooks() { //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 CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self)) { return; } if (self.HasBuff(BuffsLoading.buffDefTemporalChains)) { TemporalChainHandler temporalChainHandler = default(TemporalChainHandler); if (!((Component)self).gameObject.TryGetComponent<TemporalChainHandler>(ref temporalChainHandler)) { temporalChainHandler = ((Component)self).gameObject.AddComponent<TemporalChainHandler>(); } float num = temporalChainHandler.GetSlowcount(); self.moveSpeed -= self.moveSpeed / 2f * (num / 8f); self.attackSpeed -= self.attackSpeed / 3f * (num / 8f); } if (self.HasBuff(BuffsLoading.buffDefTracking)) { self.moveSpeed /= 2f; } if (self.HasBuff(BuffsLoading.buffDefCunning)) { self.moveSpeed *= 1.25f; } } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Invalid comparison between Unknown and I4 //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)self) && self.alive && Object.op_Implicit((Object)(object)self.body)) { float num = 1f - self.body.armor / (100f + Mathf.Abs(self.body.armor)); if (self.body.HasBuff(BuffsLoading.buffDefTracking)) { DamageInfo obj = damageInfo; obj.damage *= 1.5f; } float num2 = damageInfo.damage * num; if (self.body.HasBuff(BuffsLoading.buffDefAdaptive)) { float num3 = self.fullCombinedHealth / 5f; if (num2 > num3) { damageInfo.damage = num3 / num; } damageInfo.force = Vector3.zero; } if (self.body.HasBuff(BuffsLoading.buffDefUndying)) { float health = self.health; if (damageInfo.damage >= health) { damageInfo.damage = (health - 1f) / num; } } if (Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.inflictor)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && component.HasBuff(BuffsLoading.buffDefCunning)) { DamageInfo obj2 = damageInfo; obj2.damage *= 1.75f; } if (Object.op_Implicit((Object)(object)component) && component.HasBuff(BuffsLoading.buffDefStackingDamage)) { float num4 = 1f + 0.1f * (float)component.GetBuffCount(BuffsLoading.buffDefStackingDamage); DamageInfo obj3 = damageInfo; obj3.damage *= num4; } float num5 = BuffsLoading.ProcToDamageTypeDecoder(damageInfo.procCoefficient); damageInfo.procCoefficient = BuffsLoading.ReturnProcToNormal(damageInfo.procCoefficient); int num6 = Convert.ToInt32(System.Math.Floor(num5 * 10000f)); if ((damageInfo.damageType.damageType & 1) == 1) { foreach (BuffsLoading.CustomDamageType damageTypes in BuffsLoading.damageTypesList) { if (damageTypes.onHitIndex != num6) { continue; } if (Object.op_Implicit((Object)(object)damageTypes.buffDef)) { if (damageTypes.buffDuration > 0f) { self.body.AddTimedBuff(damageTypes.buffDef, damageTypes.buffDuration); } else { self.body.AddBuff(damageTypes.buffDef); } DamageInfo obj4 = damageInfo; obj4.damageType ^= DamageTypeCombo.op_Implicit((DamageType)1); } if (damageTypes.callOnHit != null) { damageInfo = damageTypes.callOnHit(self, damageInfo); ref DamageType damageType = ref damageInfo.damageType.damageType; damageType = (DamageType)((uint)damageType ^ 1u); } } } } } orig.Invoke(self, damageInfo); } } internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void LogDebug(object data) { _logSource.LogDebug(data); } internal static void LogError(object data) { _logSource.LogError(data); } internal static void LogFatal(object data) { _logSource.LogFatal(data); } internal static void LogInfo(object data) { _logSource.LogInfo(data); } internal static void LogMessage(object data) { _logSource.LogMessage(data); } internal static void LogWarning(object data) { _logSource.LogWarning(data); } } } namespace EggsUtils.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("EggsUtils.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal Resources() { } } public static class EggAssets { internal static string trackingDefPath = "RoR2/Base/CritOnUse/bdFullCrit.asset"; internal static string armorDefPath = "RoR2/Base/Common/bdArmorBoost.asset"; internal static Sprite doesNotExist; internal const string LangFolder = "egmods_languages"; internal static string RootLangFolderPath => Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "egmods_languages"); internal static void RegisterAssets() { if (Directory.Exists(RootLangFolderPath)) { Language.collectLanguageRootFolders += RegisterTokensFolder; } else { Log.LogError("Could not find eggmods language folder"); } Log.LogMessage("Tokens registered"); RegisterSprites(); Log.LogMessage("Buff Icons registered"); } private static void RegisterSprites() { //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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) BuffDef val = Addressables.LoadAssetAsync<BuffDef>((object)trackingDefPath).WaitForCompletion(); BuffDef val2 = Addressables.LoadAssetAsync<BuffDef>((object)armorDefPath).WaitForCompletion(); BuffsLoading.buffDefAdaptive.iconSprite = val2.iconSprite; BuffsLoading.buffDefCunning.iconSprite = val.iconSprite; BuffsLoading.buffDefTracking.iconSprite = val.iconSprite; } private static void RegisterTokensFolder(List<string> list) { list.Add(RootLangFolderPath); } public static Sprite TexToSprite(Texture2D tex) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) return Sprite.Create(tex, new Rect(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height), new Vector2(0.5f, 0.5f)); } public static AssetBundle LoadAssetBundle(byte[] resourceBytes) { if (resourceBytes == null) { throw new ArgumentNullException("Resource"); } return AssetBundle.LoadFromMemory(resourceBytes); } } } namespace EggsUtils.Helpers { public class Conversions { public const string CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static string ToBase62(int num) { string text = string.Empty; int num2 = num; while (num2 > 0) { int index = num2 % 62; num2 /= 62; text = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[index] + text; } while (text.Length < 2) { text = "0" + text; } return text; } public static int FromBase62(string str) { int num = 0; for (int i = 0; i < str.Length; i++) { char value = str[i]; int num3; if (str.Contains(value)) { int num2 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf(value); num3 = Convert.ToInt32((double)num2 * System.Math.Pow(62.0, str.Length - 1 - i)); } else { num3 = 0; } num += num3; } return num; } } public class Math { public static float ConvertToRange(float oldMin, float oldMax, float newMin, float newMax, float valueToConvert) { float num = oldMax - oldMin; float num2 = newMax - newMin; return (valueToConvert - oldMin) * num2 / num + newMin; } public static Vector3 GetDirection(Vector3 startPos, Vector3 endPos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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) Vector3 val = endPos - startPos; return ((Vector3)(ref val)).normalized; } } } namespace EggsUtils.Config { public static class Config { public static string PrepareConfigCode(ConfigFile file) { string text = string.Empty; int num = 0; foreach (KeyValuePair<ConfigDefinition, ConfigEntryBase> item in file) { ConfigEntryBase value = item.Value; string text2 = string.Empty; string text3; if (value.BoxedValue.Equals(value.DefaultValue)) { num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else { if (num > 0) { text += num; num = 0; } text3 = value.BoxedValue.GetType().Name[0].ToString().ToLower(); switch (text3) { case "b": text2 = (((bool)value.BoxedValue) ? "1" : "0"); break; case "s": { float num4 = (float)value.BoxedValue; if (num4 > 3843f) { Log.LogWarning("Value of config field : " + value.Definition.Key + " too high, resetting to default)"); value.BoxedValue = value.DefaultValue; num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else if (num4 < 0f) { Log.LogWarning("Value of config field : " + value.Definition.Key + " below zero, resetting to default)"); value.BoxedValue = value.DefaultValue; num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else { int num5 = Convert.ToInt32(System.Math.Floor(num4)); text2 = Conversions.ToBase62(num5); int num6 = Convert.ToInt32((num4 - (float)num5) * 100f); value.BoxedValue = (float)num5 + Convert.ToSingle(System.Math.Round((float)num6 / 100f, 2)); text2 += Conversions.ToBase62(num6); } break; } case "i": { int num3 = (int)value.BoxedValue; if (num3 > 3843) { Log.LogWarning("Value of config field : " + value.Definition.Key + " too high, resetting to default)"); value.BoxedValue = value.DefaultValue; num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else if (num3 < 0) { Log.LogWarning("Value of config field : " + value.Definition.Key + " below zero, resetting to default)"); value.BoxedValue = value.DefaultValue; num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else { text2 = Conversions.ToBase62(num3); } break; } case "u": { uint num2 = (uint)value.BoxedValue; if (num2 > 3843) { Log.LogWarning("Value of config field : " + value.Definition.Key + " too high, resetting to default)"); value.BoxedValue = value.DefaultValue; num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else if (num2 < 0) { Log.LogWarning("Value of config field : " + value.Definition.Key + " below zero, resetting to default)"); value.BoxedValue = value.DefaultValue; num++; text3 = ((!((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)file).Last().Equals(item)) ? string.Empty : num.ToString()); } else { text2 = Conversions.ToBase62(Convert.ToInt32(num2)); } break; } } } text = text + text3 + text2; } file.Reload(); return text; } public static void LoadConfigCode(string code, ref ConfigFile file) { int length = code.Length; int num = 0; int num2 = 0; int num3 = 0; foreach (KeyValuePair<ConfigDefinition, ConfigEntryBase> item in file) { ConfigEntryBase value = item.Value; char c = code[num]; bool flag = false; if (num3 == 0) { int result; while (int.TryParse(code.Substring(num, num2 + 1), out result)) { num2++; num3 = result; if (num + num2 >= code.Length) { flag = true; break; } } if (num2 > 0) { num += num2 - (flag ? 1 : 0); num2 = 0; } } if (num3 > 0) { num3--; value.BoxedValue = value.DefaultValue; continue; } num++; if (c == Convert.ToChar("b")) { num2 = 1; value.BoxedValue = code.Substring(num, num2) == "1"; } else if (c == Convert.ToChar("s")) { num2 = 2; int num4 = Conversions.FromBase62(code.Substring(num, num2)); int num5 = Conversions.FromBase62(code.Substring(num + num2, num2)); float num6 = (float)num4 + (float)num5 / 100f; value.BoxedValue = num6; num2 += 2; } else if (c == Convert.ToChar("i")) { num2 = 2; value.BoxedValue = Conversions.FromBase62(code.Substring(num, num2)); } else { if (c != Convert.ToChar("u")) { Log.LogError("Invalid code section, process aborted"); return; } num2 = 2; uint num7 = (uint)Conversions.FromBase62(code.Substring(num, num2)); value.BoxedValue = num7; } num += num2; num2 = 0; } Log.LogMessage("Config code loaded, restart game for it to take effect"); file.Save(); file.Reload(); } } } namespace EggsUtils.Buffs { public class BuffsLoading { public struct CustomDamageType { public BuffDef buffDef { get; private set; } public float buffDuration { get; private set; } public float procIndex { get; private set; } public int onHitIndex { get; private set; } public Func<HealthComponent, DamageInfo, DamageInfo> callOnHit { get; private set; } internal CustomDamageType(BuffDef buff, float duration, int index) { buffDef = buff; onHitIndex = index; procIndex = Convert.ToSingle(System.Math.Round((float)index / 10000f, 4)); callOnHit = null; buffDuration = duration; } internal CustomDamageType(Func<HealthComponent, DamageInfo, DamageInfo> call, int index) { buffDef = null; onHitIndex = index; procIndex = Convert.ToSingle(System.Math.Round((float)index / 10000f, 4)); callOnHit = call; buffDuration = 0f; } internal CustomDamageType(BuffDef buff, float duration, Func<HealthComponent, DamageInfo, DamageInfo> call, int index) { buffDef = buff; onHitIndex = index; procIndex = Convert.ToSingle(System.Math.Round((float)index / 10000f, 4)); callOnHit = call; buffDuration = duration; } } public static BuffDef buffDefTemporalChains; public static BuffDef buffDefTracking; public static BuffDef buffDefAdaptive; public static BuffDef buffDefUndying; public static BuffDef buffDefCunning; public static BuffDef buffDefStackingDamage; public static CustomDamageType temporalChainsOnHit; public static CustomDamageType trackingOnHit; private static List<BuffDef> defList = new List<BuffDef>(); public static List<CustomDamageType> damageTypesList = new List<CustomDamageType>(); internal static void SetupBuffs() { //IL_0001: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) buffDefTemporalChains = BuffBuilder(Color.blue, canStack: true, EggAssets.doesNotExist, isDebuff: true, "Temporal Chains"); temporalChainsOnHit = AssignNewDamageType(buffDefTemporalChains, 0f, TemporalChainHandler); defList.Add(buffDefTemporalChains); buffDefTracking = BuffBuilder(Color.magenta, canStack: false, EggAssets.doesNotExist, isDebuff: true, "Tracked"); trackingOnHit = AssignNewDamageType(buffDefTracking, 5f); defList.Add(buffDefTracking); buffDefAdaptive = BuffBuilder(Color.blue, canStack: false, EggAssets.doesNotExist, isDebuff: false, "Adaptive Armor"); defList.Add(buffDefAdaptive); buffDefUndying = BuffBuilder(Color.red, canStack: false, EggAssets.doesNotExist, isDebuff: false, "Undying"); defList.Add(buffDefUndying); buffDefCunning = BuffBuilder(Color.blue, canStack: false, EggAssets.doesNotExist, isDebuff: false, "Cunning"); defList.Add(buffDefCunning); buffDefStackingDamage = BuffBuilder(Color.red, canStack: false, EggAssets.doesNotExist, isDebuff: false, "StackingDamage"); defList.Add(buffDefStackingDamage); foreach (BuffDef def in defList) { ContentAddition.AddBuffDef(def); } } internal static CustomDamageType AssignNewDamageType(BuffDef buffToApply, float duration) { int index = damageTypesList.Count + 1; CustomDamageType customDamageType = new CustomDamageType(buffToApply, duration, index); damageTypesList.Add(customDamageType); return customDamageType; } private static CustomDamageType AssignNewDamageType(Func<HealthComponent, DamageInfo, DamageInfo> method) { int index = damageTypesList.Count + 1; CustomDamageType customDamageType = new CustomDamageType(method, index); damageTypesList.Add(customDamageType); return customDamageType; } private static CustomDamageType AssignNewDamageType(BuffDef buffToApply, float duration, Func<HealthComponent, DamageInfo, DamageInfo> method) { int index = damageTypesList.Count + 1; CustomDamageType customDamageType = new CustomDamageType(buffToApply, duration, method, index); damageTypesList.Add(customDamageType); return customDamageType; } private static BuffDef BuffBuilder(Color color, bool canStack, Sprite icon, bool isDebuff, string buffName) { //IL_0011: 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) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = color; val.canStack = canStack; val.eliteDef = null; val.iconSprite = icon; val.isDebuff = isDebuff; return val; } private static DamageInfo TemporalChainHandler(HealthComponent component, DamageInfo info) { TemporalChainHandler temporalChainHandler = default(TemporalChainHandler); if (!((Component)component.body).gameObject.TryGetComponent<TemporalChainHandler>(ref temporalChainHandler)) { temporalChainHandler = ((Component)component.body).gameObject.AddComponent<TemporalChainHandler>(); } component.body.AddBuff(buffDefTemporalChains); temporalChainHandler.inflictor = info.attacker; temporalChainHandler.ResetTimer(); return info; } internal static float ReturnProcToNormal(float procCoeff) { float num = procCoeff * 10f; double value = System.Math.Floor(num) / 10.0; return Convert.ToSingle(value); } internal static float ProcToDamageTypeDecoder(float procCoeff) { float num = procCoeff * 10f; double num2 = System.Math.Floor(num); double value = (double)num - num2; return Convert.ToSingle(value); } public static float ProcToDamageTypeEncoder(float damageIndex, float procCoeffToEncode) { float num = procCoeffToEncode * 10f; double num2 = System.Math.Floor(num); double value = (num2 + (double)damageIndex) / 10.0; return Convert.ToSingle(value); } } } namespace EggsUtils.Buffs.BuffStates { internal class StasisState : BaseState { } } namespace EggsUtils.Buffs.BuffComponents { [RequireComponent(typeof(CharacterBody))] internal class TemporalChainHandler : MonoBehaviour { private CharacterBody characterBody; private float coolDownTimer; private float removeStacksTimer; public GameObject inflictor; private int slowCount; private SetStateOnHurt targetStateOnHurt; private void Awake() { removeStacksTimer = 8f; coolDownTimer = 0f; characterBody = ((Component)this).GetComponent<CharacterBody>(); } private void FixedUpdate() { if (characterBody.GetBuffCount(BuffsLoading.buffDefTemporalChains) > 8) { for (int i = 0; i < characterBody.GetBuffCount(BuffsLoading.buffDefTemporalChains) - 8; i++) { characterBody.RemoveBuff(BuffsLoading.buffDefTemporalChains); } } slowCount = characterBody.GetBuffCount(BuffsLoading.buffDefTemporalChains); if (slowCount == 8 && CanStun()) { Detonate(); for (int j = 0; j < slowCount; j++) { characterBody.RemoveBuff(BuffsLoading.buffDefTemporalChains); } SetCooldown(3f); } if (removeStacksTimer > 0f) { removeStacksTimer -= Time.fixedDeltaTime; } else { characterBody.RemoveBuff(BuffsLoading.buffDefTemporalChains); removeStacksTimer = 1f; } if (coolDownTimer > 0f) { coolDownTimer -= Time.fixedDeltaTime; } } public void ResetTimer() { removeStacksTimer = 8f; } public bool CanStun() { return coolDownTimer == 0f; } public void SetCooldown(float cooldownLength) { coolDownTimer = cooldownLength; } public int GetSlowcount() { return slowCount; } public GameObject GetInflictor() { if (Object.op_Implicit((Object)(object)inflictor)) { return inflictor; } return null; } public void Detonate() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_0071: 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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown DamageInfo val = new DamageInfo { attacker = GetInflictor(), damage = 0.1f * characterBody.healthComponent.fullCombinedHealth, damageType = DamageTypeCombo.op_Implicit((DamageType)0), damageColorIndex = (DamageColorIndex)0, position = characterBody.corePosition, crit = false, procCoefficient = 0f, procChainMask = default(ProcChainMask), force = Vector3.zero, inflictor = GetInflictor() }; characterBody.healthComponent.TakeDamage(val); targetStateOnHurt = ((Component)characterBody).gameObject.GetComponent<SetStateOnHurt>(); if (Object.op_Implicit((Object)(object)targetStateOnHurt)) { targetStateOnHurt.SetStun(2f); } } } }