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 EnemiesPlusPlus v1.1.0
EnemiesPlus.dll
Decompiled 11 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EnemiesPlus.Content.Beetle; using EnemiesPlus.Content.Donger; using EnemiesPlus.Content.Imp; using EnemiesPlus.Content.Lemur; using EnemiesPlus.Content.Lunar; using EnemiesPlus.Content.Wisp; using EnemiesPlus.Content.Worm; using EntityStates; using EntityStates.BeetleGuardMonster; using EntityStates.Bell.BellWeapon; using EntityStates.ImpMonster; using EntityStates.LemurianMonster; using EntityStates.MagmaWorm; using EntityStates.Wisp1Monster; using HG.GeneralSerializer; using HarmonyLib; using IL.RoR2; using KinematicCharacterController; using Microsoft.CodeAnalysis; using MiscFixes.Modules; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.LemurianMonster; using On.EntityStates.MagmaWorm; using On.EntityStates.Wisp1Monster; using R2API; using RiftTitansMod; using RiftTitansMod.SkillStates.Blue; using RiskOfOptions; using RoR2; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.Projectile; using RoR2.Skills; using RoR2BepInExPack.GameAssetPaths; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EnemiesPlus")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+82bcdfbab9bc3ed9a995f7d509052a4c6a1aac8a")] [assembly: AssemblyProduct("EnemiesPlus")] [assembly: AssemblyTitle("EnemiesPlus")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] 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 EnemiesPlus { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.score.EnemiesPlusPlus", "EnemiesPlusPlus", "1.1.0")] public class EnemiesPlusPlugin : BaseUnityPlugin { public const string PluginGUID = "com.score.EnemiesPlusPlus"; public const string PluginAuthor = "score"; public const string PluginName = "EnemiesPlusPlus"; public const string PluginVersion = "1.1.0"; public static EnemiesPlusPlugin Instance { get; private set; } public static bool RooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); public static bool LeagueOfLiteralGays => Chainloader.PluginInfos.ContainsKey("com.phreel.TitansOfTheRiftSOTV"); public void Awake() { Instance = this; Log.Init(((BaseUnityPlugin)this).Logger); EnemiesPlusConfig.Init(((BaseUnityPlugin)this).Config); HarmonyHooks.Init(); if (EnemiesPlusConfig.enableSkills.Value) { if (EnemiesPlusConfig.bellSkills.Value) { BellChanges.Init(); } if (EnemiesPlusConfig.impSkills.Value) { ImpChanges.Init(); } if (EnemiesPlusConfig.wormLeap.Value || EnemiesPlusConfig.wormTracking.Value) { WormChanges.Init(); } if (EnemiesPlusConfig.lunarGolemSkills.Value) { LunarChanges.Init(); } } if (EnemiesPlusConfig.enableTweaks.Value) { if (EnemiesPlusConfig.lemChanges.Value) { LemurChanges.Init(); } if (EnemiesPlusConfig.wispChanges.Value || EnemiesPlusConfig.greaterWispChanges.Value) { WispChanges.Init(); } if (EnemiesPlusConfig.helfireChanges.Value || EnemiesPlusConfig.lunarWispChanges.Value) { LunarChanges.Init(); } } if (EnemiesPlusConfig.enableBeetleFamilyChanges.Value) { BeetleChanges.Init(); } } } public static class HarmonyHooks { public static Harmony Patcher; [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void Init() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Expected O, but got Unknown Patcher = new Harmony("com.score.EnemiesPlusPlus"); if (EnemiesPlusPlugin.LeagueOfLiteralGays) { League(); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void League() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) Patcher.CreateClassProcessor(typeof(RiftFlinch)).Patch(); RiftTitansPlugin.ReksaiCard.MonsterCategory = (MonsterCategory)4; DirectorCard card = RiftTitansPlugin.ReksaiCard.Card; card.spawnCard.directorCreditCost = 600; card.minimumStageCompletions = 2; CharacterMaster component = card.spawnCard.prefab.GetComponent<CharacterMaster>(); AISkillDriver[] components = ((Component)component).GetComponents<AISkillDriver>(); AISkillDriver[] array = components; foreach (AISkillDriver val in array) { switch (val.customName) { case "ChaseHard": val.shouldSprint = false; break; case "Attack": val.driverUpdateTimerOverride = 0.5f; val.nextHighPriorityOverride = components.Last(); break; } } component.bodyPrefab.GetComponent<CharacterBody>().baseMoveSpeed = 10f; } } [HarmonyPatch(typeof(Slam), "GetMinimumInterruptPriority")] public class RiftFlinch { [HarmonyPostfix] private static void Postfix(ref InterruptPriority __result) { __result = (InterruptPriority)3; } } public static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } public static void Debug(string data) { _logSource.LogDebug((object)data); } public static void Error(string data) { _logSource.LogError((object)data); } public static void Fatal(string data) { _logSource.LogFatal((object)data); } public static void Info(string data) { _logSource.LogInfo((object)data); } public static void Message(string data) { _logSource.LogMessage((object)data); } public static void Warning(string data) { _logSource.LogWarning((object)data); } } public static class EnemiesPlusConfig { public static ConfigEntry<bool> enableSkills; public static ConfigEntry<bool> bellSkills; public static ConfigEntry<bool> impSkills; public static ConfigEntry<bool> wormTracking; public static ConfigEntry<bool> wormLeap; public static ConfigEntry<bool> lunarGolemSkills; public static ConfigEntry<bool> enableTweaks; public static ConfigEntry<bool> lemChanges; public static ConfigEntry<bool> wispChanges; public static ConfigEntry<bool> greaterWispChanges; public static ConfigEntry<bool> helfireChanges; public static ConfigEntry<bool> lunarWispChanges; public static ConfigEntry<bool> enableBeetleFamilyChanges; public static ConfigEntry<bool> beetleBurrow; public static ConfigEntry<bool> beetleSpit; public static ConfigEntry<bool> bgChanges; public static ConfigEntry<bool> queenChanges; private static ConfigFile PluginConfigFile { get; set; } public static void Init(ConfigFile cfg) { PluginConfigFile = cfg; if (EnemiesPlusPlugin.RooInstalled) { InitRoO(); } BindSkills("Skills"); BindTweaks("Tweaks"); BindBeetles("Beetles"); } private static void BindSkills(string section) { enableSkills = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable New Skills", "Allows any of the skills within this section to be toggled on and off.", true, (ConfigFlags)1); bellSkills = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Brass Contraptions Buff Beam Skill", "Adds a new skill that gives an ally increased armor.", true, (ConfigFlags)1); impSkills = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Imps Void Spike Skill", "Adds a new skill for Imps to throw void spikes at range, similarly to the Imp OverLord.", true, (ConfigFlags)1); lunarGolemSkills = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Lunar Golems Lunar Shell Skill", "Adds a new ability that gives them some stuff idk its vanilla but unused", true, (ConfigFlags)1); wormLeap = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Worms Leap Skill", "Adds a new leap skill.", true, (ConfigFlags)1); } private static void BindTweaks(string section) { enableTweaks = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Enemy Tweaks", "Allows any of the skills within this section to be toggled on and off.", true, (ConfigFlags)1); helfireChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Lunar Helfire Debuff", "Enables Lunar enemies to apply the new Helfire debuff.", true, (ConfigFlags)1); lunarWispChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Lunar Wisp Changes", "Increases Lunar Wisp movement speed and acceleration, orb applies helfire", true, (ConfigFlags)1); wispChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Wisp Changes", "Makes the wisp attack a fast projectile and increases Wisp bullet count", true, (ConfigFlags)1); greaterWispChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Greater Wisp Changes", "Decreases Greater Wisp credit cost", true, (ConfigFlags)1); lemChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Lemurian Bite Changes", "Adds slight leap to Lemurian bite", true, (ConfigFlags)1); wormTracking = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Worm Tracking Changes", "Changes Worms to have better targeting.", true, (ConfigFlags)1); } private static void BindBeetles(string section) { enableBeetleFamilyChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Beetle Family Changes", "Enables all beetle related changes. Yes, they needed their own section. Unaffected by other config sections.", true, (ConfigFlags)1); beetleBurrow = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Lil Beetle Burrow Skill", "Adds a new projectile attack to beetles and adds a new mobility skill that allows beetles to burrow into the ground and reappear near the player.", true, (ConfigFlags)1); beetleSpit = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Lil Beetles Spit Skill", "Adds a new projectile attack to beetles and adds a new mobility skill that allows beetles to burrow into the ground and reappear near the player.", true, (ConfigFlags)1); bgChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Beetle Guards Rally Cry Skill", "Adds a new skill that gives them and nearby allies increased attack speed and movement speed", true, (ConfigFlags)1); queenChanges = Extensions.BindOption<bool>(PluginConfigFile, section, "Enable Beetle Queens Debuff", "Adds a new debuff, Beetle Juice, to Beetle Queen and ally beetles attacks and makes spit explode mid air", true, (ConfigFlags)1); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void InitRoO() { //IL_0042: 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_004e: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown try { ModSettingsManager.SetModDescription("Enemies but good.", "com.score.EnemiesPlusPlus", "EnemiesPlusPlus"); byte[] array = File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)EnemiesPlusPlugin.Instance).Info.Location), "icon.png")); Texture2D val = new Texture2D(256, 256); ImageConversion.LoadImage(val, array); ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, 256f, 256f), new Vector2(0.5f, 0.5f))); } catch (Exception ex) { Log.Debug(ex.ToString()); } } } public static class Utils { public static void ReorderSkillDrivers(this GameObject master, int targetIdx) { AISkillDriver[] components = master.GetComponents<AISkillDriver>(); master.ReorderSkillDrivers(components, components.Length - 1, targetIdx); } public static void ReorderSkillDrivers(this GameObject master, AISkillDriver targetSkill, int targetIdx) { AISkillDriver[] components = master.GetComponents<AISkillDriver>(); master.ReorderSkillDrivers(components, Array.IndexOf(components, targetSkill), targetIdx); } public static void ReorderSkillDrivers(this GameObject master, AISkillDriver[] skills, int currentIdx, int targetIdx) { if (currentIdx < 0 || currentIdx >= skills.Length) { Log.Error($"{currentIdx} index not found or out of range. Must be less than {skills.Length}"); return; } string targetName = skills[currentIdx].customName; if (targetIdx < 0 || targetIdx >= skills.Length) { Log.Error($"Unable to reorder skilldriver {targetName} into position {targetIdx}. target must be less than {skills.Length}"); return; } if (targetIdx == currentIdx) { Log.Warning($"Skilldriver {targetName} already has the target index of {targetIdx}"); return; } Dictionary<string, string> dictionary = skills.Where((AISkillDriver s) => (Object)(object)s.nextHighPriorityOverride != (Object)null).ToDictionary((AISkillDriver s) => s.customName, (AISkillDriver s) => s.nextHighPriorityOverride.customName); if (targetIdx > currentIdx) { master.AddComponentCopy<AISkillDriver>(skills[currentIdx]); Object.DestroyImmediate((Object)(object)skills[currentIdx]); } for (int i = targetIdx; i < skills.Length; i++) { if (i != currentIdx) { master.AddComponentCopy<AISkillDriver>(skills[i]); Object.DestroyImmediate((Object)(object)skills[i]); } } skills = master.GetComponents<AISkillDriver>(); AISkillDriver val = ((IEnumerable<AISkillDriver>)skills).FirstOrDefault((Func<AISkillDriver, bool>)((AISkillDriver s) => s.customName == targetName)); if ((Object)(object)val != (Object)null && Array.IndexOf(skills, val) == targetIdx) { Log.Debug($"Successfully set {targetName} to {targetIdx}"); } else { Log.Error($"Done fucked it up on {targetName} with {targetIdx}"); } if (!dictionary.Any()) { return; } foreach (AISkillDriver val2 in skills) { if (Object.op_Implicit((Object)(object)val2) && dictionary.TryGetValue(val2.customName, out var target)) { AISkillDriver val3 = ((IEnumerable<AISkillDriver>)skills).FirstOrDefault((Func<AISkillDriver, bool>)((AISkillDriver s) => s.customName == target)); if ((Object)(object)val3 == (Object)null) { Log.Error("Unable to reset skill override for " + val2.customName + " targeting " + target); continue; } val2.nextHighPriorityOverride = val3; Log.Debug("successfully reset override for " + val2.customName + " targeting " + target); } } } public static void RemoveComponent<T>(this GameObject go) where T : Component { T val = default(T); if (go.TryGetComponent<T>(ref val)) { Object.Destroy((Object)(object)val); } } public static void RemoveComponents<T>(this GameObject go) where T : Component { T[] components = go.GetComponents<T>(); for (int i = 0; i < components.Length; i++) { Object.Destroy((Object)(object)components[i]); } } public static T GetCopyOf<T>(this Component comp, T other) where T : Component { Type type = ((object)comp).GetType(); if (type != ((object)other).GetType()) { return default(T); } BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo[] properties = type.GetProperties(bindingAttr); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.CanWrite) { try { propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null); } catch { } } } FieldInfo[] fields = type.GetFields(bindingAttr); foreach (FieldInfo fieldInfo in fields) { fieldInfo.SetValue(comp, fieldInfo.GetValue(other)); } return (T)(object)((comp is T) ? comp : null); } public static T GetCopyOf<T>(this ScriptableObject comp, T other) where T : ScriptableObject { Type type = ((object)comp).GetType(); if (type != ((object)other).GetType()) { return default(T); } BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo[] properties = type.GetProperties(bindingAttr); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.CanWrite) { try { propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null); } catch { } } } FieldInfo[] fields = type.GetFields(bindingAttr); foreach (FieldInfo fieldInfo in fields) { fieldInfo.SetValue(comp, fieldInfo.GetValue(other)); } return (T)(object)((comp is T) ? comp : null); } public static T AddComponentCopy<T>(this GameObject go, T toAdd) where T : Component { return ((Component)(object)go.AddComponent<T>()).GetCopyOf(toAdd); } public static bool TryModifyFieldValue<T>(this EntityStateConfiguration entityStateConfiguration, string fieldName, T value) { ref SerializedField orCreateField = ref ((SerializedFieldCollection)(ref entityStateConfiguration.serializedFieldsCollection)).GetOrCreateField(fieldName); if (Object.op_Implicit(orCreateField.fieldValue.objectValue) && typeof(Object).IsAssignableFrom(typeof(T))) { ref Object objectValue = ref orCreateField.fieldValue.objectValue; object obj = value; objectValue = (Object)((obj is Object) ? obj : null); return true; } if (orCreateField.fieldValue.stringValue != null && StringSerializer.CanSerializeType(typeof(T))) { orCreateField.fieldValue.stringValue = StringSerializer.Serialize(typeof(T), (object)value); return true; } Debug.LogError((object)("Failed to modify field " + fieldName)); return false; } public static bool TryGetFieldValue<T>(this EntityStateConfiguration entityStateConfiguration, string fieldName, out T value) where T : Object { ref SerializedField orCreateField = ref ((SerializedFieldCollection)(ref entityStateConfiguration.serializedFieldsCollection)).GetOrCreateField(fieldName); if (Object.op_Implicit(orCreateField.fieldValue.objectValue) && typeof(Object).IsAssignableFrom(typeof(T))) { value = (T)(object)orCreateField.fieldValue.objectValue; return true; } if (!string.IsNullOrEmpty(orCreateField.fieldValue.stringValue)) { Debug.LogError((object)("Failed to return " + fieldName + " as an Object, try getting the string value instead.")); } else { Debug.LogError((object)("Field is null " + fieldName)); } value = default(T); return false; } public static bool TryGetFieldValueString<T>(this EntityStateConfiguration entityStateConfiguration, string fieldName, out T value) where T : IEquatable<T> { ref SerializedField orCreateField = ref ((SerializedFieldCollection)(ref entityStateConfiguration.serializedFieldsCollection)).GetOrCreateField(fieldName); if (orCreateField.fieldValue.stringValue != null && StringSerializer.CanSerializeType(typeof(T))) { value = (T)StringSerializer.Deserialize(typeof(T), orCreateField.fieldValue.stringValue); return true; } if (Object.op_Implicit(orCreateField.fieldValue.objectValue)) { Debug.LogError((object)("Failed to return " + fieldName + " as a string, try getting the Object value instead.")); } else { Debug.LogError((object)("Field is null " + fieldName)); } value = default(T); return false; } } } namespace EnemiesPlus.Content.Worm { internal class WormChanges { internal GameObject MagmaWorm => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/MagmaWorm/MagmaWormBody.prefab").WaitForCompletion(); internal GameObject ElectricWorm => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElectricWorm/ElectricWormBody.prefab").WaitForCompletion(); internal GameObject MagmaWormMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/MagmaWorm/MagmaWormMaster.prefab").WaitForCompletion(); internal GameObject ElectricWormMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElectricWorm/ElectricWormMaster.prefab").WaitForCompletion(); public static WormChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new WormChanges(); } } private WormChanges() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0074: 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_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_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) if (EnemiesPlusConfig.wormTracking.Value) { SteerAtTarget.fastTurnRate = 120f; SteerAtTarget.slowTurnRate = 45f; SteerAtTarget.OnEnter += new hook_OnEnter(SteerAtTarget_OnEnter); } if (!EnemiesPlusConfig.wormLeap.Value) { return; } MagmaWormMaster.ReorderSkillDrivers(1); ParticleSystem[] componentsInChildren = ((Component)MagmaWorm.GetComponent<ModelLocator>().modelTransform).gameObject.GetComponentsInChildren<ParticleSystem>(); for (int i = 0; i < componentsInChildren.Length; i++) { MainModule main = componentsInChildren[i].main; ((MainModule)(ref main)).startSizeMultiplier = ((MainModule)(ref main)).startSizeMultiplier * 2f; } SkillDef skillDef = MagmaWorm.GetComponent<SkillLocator>().utility.skillFamily.variants[0].skillDef; skillDef.activationState = new SerializableEntityStateType(typeof(Leap)); skillDef.baseRechargeInterval = 60f; skillDef.activationStateMachineName = "Weapon"; AISkillDriver[] components = MagmaWormMaster.GetComponents<AISkillDriver>(); foreach (AISkillDriver val in components) { if (val.customName == "Blink") { val.shouldSprint = true; val.minDistance = 0f; val.aimType = (AimType)1; } else { val.skillSlot = (SkillSlot)(-1); } } } private void WormBodyPositionsDriver_FixedUpdateServer(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); MethodReference val4 = default(MethodReference); if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<WormBodyPositionsDriver>(x, "referenceTransform"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val4) })) { return; } val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<Vector3, WormBodyPositionsDriver, Vector3>>((Func<Vector3, WormBodyPositionsDriver, Vector3>)delegate(Vector3 pos, WormBodyPositionsDriver driver) { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) CharacterBody val2 = default(CharacterBody); if (((Component)driver).TryGetComponent<CharacterBody>(ref val2) && Object.op_Implicit((Object)(object)val2.master)) { BaseAI[] aiComponents = val2.master.aiComponents; Vector3 result = default(Vector3); foreach (BaseAI val3 in aiComponents) { if (Object.op_Implicit((Object)(object)val3) && val3.currentEnemy != null && val3.currentEnemy.TestLOSNow() && val3.currentEnemy.GetBullseyePosition(ref result)) { return result; } } } return pos; }); } private void SteerAtTarget_OnEnter(orig_OnEnter orig, SteerAtTarget self) { orig.Invoke(self); CharacterMaster val = (Object.op_Implicit((Object)(object)((EntityState)self).characterBody) ? ((EntityState)self).characterBody.master : null); if (!Object.op_Implicit((Object)(object)val)) { return; } BaseAI[] aiComponents = val.aiComponents; foreach (BaseAI val2 in aiComponents) { if (Object.op_Implicit((Object)(object)val2) && val2.currentEnemy != null && val2.currentEnemy.TestLOSNow()) { self.wormBodyPositionsDriver.referenceTransform = ((Component)val2.currentEnemy.bestHurtBox).transform; } } } } } namespace EnemiesPlus.Content.Wisp { public class FireBlast : BaseSkillState { private float duration; public static GameObject projectilePrefab; public override void OnEnter() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = FireEmbers.baseDuration; Ray aimRay = ((BaseState)this).GetAimRay(); Util.PlayAttackSpeedSound(FireEmbers.attackString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).PlayAnimation("Body", "FireAttack1", "FireAttack1.playbackRate", duration, 0f); Fire(); } public void Fire() { //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_0024: 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_005d: 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_0069: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { bool flag = ((BaseState)this).RollCrit(); Ray aimRay = ((BaseState)this).GetAimRay(); for (int i = 0; i < FireEmbers.bulletCount; i++) { ((Ray)(ref aimRay)).direction = Util.ApplySpread(((Ray)(ref aimRay)).direction, FireEmbers.minSpread, FireEmbers.maxSpread, 0f, 0f, 0f, 0f); ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat * FireEmbers.damageCoefficient, FireEmbers.force / 3f, flag, (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)3; } } internal class WispChanges { public static GameObject WispProjectile; public static GameObject WispGhostPrefab; internal SpawnCard GreaterWispCard => Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/GreaterWisp/cscGreaterWisp.asset").WaitForCompletion(); internal GameObject WispMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Wisp/WispMaster.prefab").WaitForCompletion(); internal EntityStateConfiguration WispEmbers => Addressables.LoadAssetAsync<EntityStateConfiguration>((object)"RoR2/Base/Wisp/EntityStates.Wisp1Monster.FireEmbers.asset").WaitForCompletion(); public static WispChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new WispChanges(); } } private WispChanges() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Expected O, but got Unknown if (EnemiesPlusConfig.wispChanges.Value) { CreateProjectile(); WispEmbers.TryModifyFieldValue("damageCoefficient", 1f); WispEmbers.TryModifyFieldValue("bulletCount", 6); BaseAI component = WispMaster.GetComponent<BaseAI>(); component.aimVectorDampTime = 0.1f; component.aimVectorMaxSpeed = 180f; ChargeEmbers.FixedUpdate += new hook_FixedUpdate(ChargeEmbers_FixedUpdate); } if (EnemiesPlusConfig.greaterWispChanges.Value) { GreaterWispCard.directorCreditCost = 120; } } private void CreateProjectile() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) WispProjectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/Fireball.prefab").WaitForCompletion(), "ScoreWispFireball", true); WispGhostPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/FireballGhost.prefab").WaitForCompletion(), "ScoreWispFireballGhost", false); ((Component)WispGhostPrefab.transform.GetChild(0)).transform.localScale = Vector3.one * 0.35f; ((Renderer)((Component)WispGhostPrefab.transform.GetChild(0)).GetComponent<ParticleSystemRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Wisp/matWispEmber.mat").WaitForCompletion(); WispProjectile.GetComponent<ProjectileController>().ghostPrefab = WispGhostPrefab; WispProjectile.GetComponent<ProjectileSimple>().desiredForwardSpeed = 250f; ProjectileSingleTargetImpact val = default(ProjectileSingleTargetImpact); if (WispProjectile.TryGetComponent<ProjectileSingleTargetImpact>(ref val)) { val.impactEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Wisp/ImpactWispEmber.prefab").WaitForCompletion(); } ContentAddition.AddProjectile(WispProjectile); bool flag = default(bool); ContentAddition.AddEntityState<FireBlast>(ref flag); FireBlast.projectilePrefab = WispProjectile; } private void ChargeEmbers_FixedUpdate(orig_FixedUpdate orig, ChargeEmbers self) { if (self.stopwatch + Time.fixedDeltaTime >= self.duration && ((EntityState)self).isAuthority) { ((EntityState)self).outer.SetNextState((EntityState)(object)new FireBlast()); } else { orig.Invoke(self); } } } } namespace EnemiesPlus.Content.Lunar { internal class LunarChanges { [CompilerGenerated] private static class <>O { public static CustomDotBehaviour <0>__AddPercentHelfireDamage; public static CustomDotVisual <1>__AddHelfireDotVisuals; } public static GameObject lunarWispTrackingBomb; public static BuffDef helfireDebuff; public static ModdedDamageType helfireDT; public static DotIndex helfireDotIdx; public static EffectParams lunarHelfireEffect; public static GameObject lunarHelfireIgniteEffectPrefab; internal Sprite FireBuffSprite => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffOnFireIcon.tif").WaitForCompletion(); internal GameObject LunarGolemMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/LunarGolemMaster.prefab").WaitForCompletion(); internal SkillDef LunarGolemShield => Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/LunarGolem/LunarGolemBodyShield.asset").WaitForCompletion(); internal GameObject LunarWisp => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispBody.prefab").WaitForCompletion(); internal GameObject LunarWispMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispMaster.prefab").WaitForCompletion(); internal EntityStateConfiguration LunarSeekingBomb => Addressables.LoadAssetAsync<EntityStateConfiguration>((object)"RoR2/Base/LunarWisp/EntityStates.LunarWisp.SeekingBomb.asset").WaitForCompletion(); internal EntityStateConfiguration LunarShell => Addressables.LoadAssetAsync<EntityStateConfiguration>((object)"RoR2/Base/LunarGolem/EntityStates.LunarGolem.Shell.asset").WaitForCompletion(); internal EntityStateConfiguration LunarWispGat => Addressables.LoadAssetAsync<EntityStateConfiguration>((object)"RoR2/Base/LunarWisp/EntityStates.LunarWisp.FireLunarGuns.asset").WaitForCompletion(); public static LunarChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new LunarChanges(); } } private LunarChanges() { if (EnemiesPlusConfig.enableTweaks.Value) { if (EnemiesPlusConfig.helfireChanges.Value) { CreateHelfireDebuff(); } if (EnemiesPlusConfig.lunarWispChanges.Value) { LunarWispChanges(); } } if (EnemiesPlusConfig.enableSkills.Value && EnemiesPlusConfig.lunarGolemSkills.Value) { LunarGolemChanges(); } } private void CreateHelfireDebuff() { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: 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_00ee: 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_0109: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Expected O, but got Unknown //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; helfireDebuff = ScriptableObject.CreateInstance<BuffDef>(); ((Object)helfireDebuff).name = "LunarHelfireDebuff"; helfireDebuff.canStack = true; helfireDebuff.isDOT = true; helfireDebuff.isCooldown = false; helfireDebuff.isDebuff = true; helfireDebuff.buffColor = Color.cyan; helfireDebuff.iconSprite = FireBuffSprite; ContentAddition.AddBuffDef(helfireDebuff); helfireDT = DamageAPI.ReserveDamageType(); BuffDef obj = helfireDebuff; object obj2 = <>O.<0>__AddPercentHelfireDamage; if (obj2 == null) { CustomDotBehaviour val2 = AddPercentHelfireDamage; <>O.<0>__AddPercentHelfireDamage = val2; obj2 = (object)val2; } object obj3 = <>O.<1>__AddHelfireDotVisuals; if (obj3 == null) { CustomDotVisual val3 = AddHelfireDotVisuals; <>O.<1>__AddHelfireDotVisuals = val3; obj3 = (object)val3; } helfireDotIdx = DotAPI.RegisterDotDef(0.2f, 0f, (DamageColorIndex)7, obj, (CustomDotBehaviour)obj2, (CustomDotVisual)obj3); lunarHelfireIgniteEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/HelfireIgniteEffect"); lunarHelfireEffect = new EffectParams { startSound = "Play_item_proc_igniteOnKill_Loop", stopSound = "Stop_item_proc_igniteOnKill_Loop" }; LegacyResourcesAPI.LoadAsyncCallback<Material>("Materials/matOnHelfire", (Action<Material>)delegate(Material val) { lunarHelfireEffect.overlayMaterial = val; }); LegacyResourcesAPI.LoadAsyncCallback<GameObject>("Prefabs/HelfireEffect", (Action<GameObject>)delegate(GameObject val) { lunarHelfireEffect.fireEffectPrefab = val; }); lunarWispTrackingBomb = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispTrackingBomb.prefab").WaitForCompletion(), "LunarWispOrbScore"); DamageAPI.AddModdedDamageType(ref lunarWispTrackingBomb.GetComponent<ProjectileDamage>().damageType, helfireDT); ContentAddition.AddProjectile(lunarWispTrackingBomb); LunarSeekingBomb.TryModifyFieldValue<GameObject>("projectilePrefab", lunarWispTrackingBomb); if (LunarWispGat.TryGetFieldValueString<float>("baseDamagePerSecondCoefficient", out var value)) { LunarWispGat.TryModifyFieldValue("baseDamagePerSecondCoefficient", value * 0.5f); } } private static void AddHelfireDotVisuals(DotController self) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)self.victimBody) && self.HasDotActive(helfireDotIdx)) { Transform val = (Object.op_Implicit((Object)(object)self.victimBody.modelLocator) ? self.victimBody.modelLocator.modelTransform : null); if (Object.op_Implicit((Object)(object)val) && !Object.op_Implicit((Object)(object)((Component)self).GetComponent<LunarHelfireController>())) { LunarHelfireController lunarHelfireController = ((Component)self).gameObject.AddComponent<LunarHelfireController>(); ((BurnEffectController)lunarHelfireController).target = ((Component)val).gameObject; ((BurnEffectController)lunarHelfireController).effectType = lunarHelfireEffect; lunarHelfireController.dotController = self; } } } private static void AddPercentHelfireDamage(DotController self, DotStack dotStack) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown if (dotStack?.dotIndex == (DotIndex?)helfireDotIdx && Object.op_Implicit((Object)(object)self.victimBody) && Object.op_Implicit((Object)(object)self.victimBody.healthComponent)) { dotStack.damageType |= DamageTypeCombo.op_Implicit((DamageType)1); dotStack.damage = self.victimBody.healthComponent.fullHealth * 0.01f * 0.4f; EffectManager.SpawnEffect(lunarHelfireIgniteEffectPrefab, new EffectData { origin = self.victimBody.corePosition }, true); } } private void LunarWispChanges() { CharacterBody component = LunarWisp.GetComponent<CharacterBody>(); component.baseMoveSpeed = 20f; component.baseAcceleration = 20f; AISkillDriver[] components = LunarWispMaster.GetComponents<AISkillDriver>(); foreach (AISkillDriver val in components) { switch (val.customName) { case "Back Up": val.maxDistance = 15f; break; case "Minigun": val.minDistance = 15f; val.maxDistance = 75f; break; case "Chase": val.minDistance = 30f; val.shouldSprint = true; break; } } } private void LunarGolemChanges() { //IL_0078: 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_009e: Unknown result type (might be due to invalid IL or missing references) LunarShell.TryModifyFieldValue("buffDuration", 12f); LunarGolemShield.baseRechargeInterval = 30f; (from driver in LunarGolemMaster.GetComponents<AISkillDriver>() where driver.customName == "StrafeAndShoot" select driver).First().requireSkillReady = true; AISkillDriver obj = LunarGolemMaster.AddComponent<AISkillDriver>(); obj.customName = "LunarShell"; obj.skillSlot = (SkillSlot)1; obj.requireSkillReady = true; obj.requireEquipmentReady = false; obj.driverUpdateTimerOverride = 3f; obj.moveTargetType = (TargetType)0; obj.movementType = (MovementType)1; LunarGolemMaster.ReorderSkillDrivers(0); } private void GlobalEventManager_onServerDamageDealt(DamageReport damageReport) { //IL_0040: 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) if (!damageReport.damageInfo.rejected && Object.op_Implicit((Object)(object)damageReport.attackerBody) && Object.op_Implicit((Object)(object)damageReport.victimBody) && (damageReport.attackerBody.HasBuff(Buffs.LunarShell) || DamageAPI.HasModdedDamageType(damageReport.damageInfo, helfireDT)) && Util.CheckRoll(25f * damageReport.damageInfo.procCoefficient, damageReport.attackerMaster)) { DotController.InflictDot(((Component)damageReport.victim).gameObject, damageReport.attacker, helfireDotIdx, 6f, 1f, (uint?)3u); damageReport.victimBody.AddTimedBuff(Buffs.HealingDisabled, 6f); } } } public class LunarHelfireController : BurnEffectController { public DotController dotController; public void FixedUpdate() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)dotController.victimBody) || !dotController.HasDotActive(LunarChanges.helfireDotIdx)) { ((BurnEffectController)this).HandleDestroy(); } } } } namespace EnemiesPlus.Content.Lemur { internal class LemurChanges { [CompilerGenerated] private static class <>O { public static hook_OnEnter <0>__BiteLeap; } private SkillDef LemBite => Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Lemurian/LemurianBodyBite.asset").WaitForCompletion(); public static LemurChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new LemurChanges(); } } private LemurChanges() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown object obj = <>O.<0>__BiteLeap; if (obj == null) { hook_OnEnter val = BiteLeap; <>O.<0>__BiteLeap = val; obj = (object)val; } Bite.OnEnter += (hook_OnEnter)obj; LemBite.baseRechargeInterval = 1f; } private static void BiteLeap(orig_OnEnter orig, Bite self) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); Ray aimRay = ((BaseState)self).GetAimRay(); Vector3 val = ((Ray)(ref aimRay)).direction; val.y = 0f; float magnitude = ((Vector3)(ref val)).magnitude; if (magnitude > 0f) { val /= magnitude; } CharacterMotor characterMotor = ((EntityState)self).characterMotor; Vector3 velocity = val * ((EntityState)self).characterBody.moveSpeed; velocity.y = ((EntityState)self).characterBody.jumpPower * 0.25f; characterMotor.velocity = velocity; ((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(0.1f); } } } namespace EnemiesPlus.Content.Imp { internal class ImpChanges { public static GameObject impVoidSpikes; private GameObject ImpMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Imp/ImpMaster.prefab").WaitForCompletion(); private GameObject ImpBody => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Imp/ImpBody.prefab").WaitForCompletion(); public static ImpChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new ImpChanges(); } } private ImpChanges() { //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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) impVoidSpikes = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpVoidspikeProjectile.prefab").WaitForCompletion(), "ImpVoidSpikeProjectileScore"); impVoidSpikes.GetComponent<ProjectileImpactExplosion>().destroyOnWorld = true; ContentAddition.AddProjectile(impVoidSpikes); ImpVoidSpike.projectilePrefab = impVoidSpikes; CreateSpikeSkillFamily(); AISkillDriver obj = ImpMaster.AddComponent<AISkillDriver>(); obj.customName = "ImpVoidSpikes"; obj.skillSlot = (SkillSlot)1; obj.maxDistance = 30f; obj.minDistance = 15f; obj.shouldSprint = false; obj.selectionRequiresAimTarget = true; obj.selectionRequiresTargetLoS = true; obj.requireSkillReady = true; obj.movementType = (MovementType)2; obj.aimType = (AimType)2; obj.moveTargetType = (TargetType)0; ImpMaster.ReorderSkillDrivers(2); } private void CreateSpikeSkillFamily() { //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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.skillName = "ImpVoidSpikes"; ((Object)val).name = "ImpVoidSpikes"; val.skillNameToken = "Void Spikes"; val.skillDescriptionToken = "Throw spikes"; bool flag = default(bool); val.activationState = ContentAddition.AddEntityState<ImpVoidSpike>(ref flag); val.activationStateMachineName = "Weapon"; val.interruptPriority = (InterruptPriority)3; val.baseMaxStock = 1; val.baseRechargeInterval = 5f; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.dontAllowPastMaxStocks = true; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.forceSprintDuringState = false; val.fullRestockOnAssign = true; val.resetCooldownTimerOnUse = false; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = false; ContentAddition.AddSkillDef(val); GenericSkill val2 = ImpBody.AddComponent<GenericSkill>(); val2.skillName = "ImpVoidSpikes"; SkillFamily val3 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val3).name = "ImpVoidSpikesFamily"; val3.variants = (Variant[])(object)new Variant[1] { new Variant { skillDef = val } }; val2._skillFamily = val3; ContentAddition.AddSkillFamily(val3); ImpBody.GetComponent<SkillLocator>().secondary = val2; } } public class ImpVoidSpike : BaseState { public static GameObject projectilePrefab; private Animator modelAnimator; private float duration; private int slashCount; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = DoubleSlash.baseDuration / base.attackSpeedStat; modelAnimator = ((EntityState)this).GetModelAnimator(); ((EntityState)this).characterMotor.walkSpeedPenaltyCoefficient = DoubleSlash.walkSpeedPenaltyCoefficient; Util.PlayAttackSpeedSound(DoubleSlash.enterSoundString, ((EntityState)this).gameObject, base.attackSpeedStat); if (Object.op_Implicit((Object)(object)modelAnimator)) { ((EntityState)this).PlayAnimation("Gesture, Additive", "DoubleSlash", "DoubleSlash.playbackRate", duration, 0f); ((EntityState)this).PlayAnimation("Gesture, Override", "DoubleSlash", "DoubleSlash.playbackRate", duration, 0f); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.SetAimTimer(duration + 2f); } } public override void OnExit() { ((EntityState)this).characterMotor.walkSpeedPenaltyCoefficient = 1f; ((EntityState)this).OnExit(); } public void HandleSlash(string animatorParamName, string muzzleName) { //IL_004b: 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_005d: 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_0069: Unknown result type (might be due to invalid IL or missing references) if (!((double)modelAnimator.GetFloat(animatorParamName) <= 0.1)) { Util.PlaySound(DoubleSlash.slashSoundString, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(DoubleSlash.swipeEffectPrefab, ((EntityState)this).gameObject, muzzleName, true); slashCount++; Ray aimRay = ((BaseState)this).GetAimRay(); ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat, 0f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active && Object.op_Implicit((Object)(object)modelAnimator)) { switch (slashCount) { case 0: HandleSlash("HandR.hitBoxActive", "SwipeRight"); break; case 1: HandleSlash("HandL.hitBoxActive", "SwipeLeft"); break; } } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)5; } } } namespace EnemiesPlus.Content.Donger { internal class BellChanges { internal GameObject BellMaster => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bell/BellMaster.prefab").WaitForCompletion(); internal GameObject BellBody => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bell/BellBody.prefab").WaitForCompletion(); internal EntityStateConfiguration BuffBeamConfig => Addressables.LoadAssetAsync<EntityStateConfiguration>((object)"RoR2/Junk/Bell/EntityStates.Bell.BellWeapon.BuffBeam.asset").WaitForCompletion(); public static BellChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new BellChanges(); } } private BellChanges() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) if (BuffBeamConfig.TryGetFieldValueString<AnimationCurve>("beamWidthCurve", out AnimationCurve value)) { BuffBeamPlus.beamWidthCurve = value; } bool flag = default(bool); ContentAddition.AddEntityState<BuffBeamPlus>(ref flag); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.skillName = "BuffBeamPlus"; ((Object)val).name = "BuffBeamPlus"; val.skillNameToken = "BuffBeamPlus"; val.skillDescriptionToken = "Creates a beam to a nearby ally and makes them big time beefy"; val.activationState = new SerializableEntityStateType(typeof(BuffBeamPlus)); val.activationStateMachineName = "Weapon"; val.interruptPriority = (InterruptPriority)1; val.baseMaxStock = 1; val.baseRechargeInterval = 45f; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.cancelSprintingOnActivation = false; val.canceledFromSprinting = false; val.forceSprintDuringState = false; val.resetCooldownTimerOnUse = false; val.mustKeyPress = false; val.dontAllowPastMaxStocks = true; val.beginSkillCooldownOnSkillEnd = true; val.fullRestockOnAssign = true; val.isCombatSkill = true; ContentAddition.AddSkillDef(val); GenericSkill val2 = BellBody.AddComponent<GenericSkill>(); val2.skillName = "BuffBeamPlus"; SkillFamily val3 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val3).name = "BellBuffBeamPlusFamily"; val3.variants = (Variant[])(object)new Variant[1] { new Variant { skillDef = val } }; val2._skillFamily = val3; ContentAddition.AddSkillFamily(val3); BellBody.GetComponent<SkillLocator>().secondary = val2; AISkillDriver obj = BellMaster.AddComponent<AISkillDriver>(); obj.customName = "BuffBeam"; obj.skillSlot = (SkillSlot)1; obj.requiredSkill = val; obj.requireSkillReady = true; obj.requireEquipmentReady = false; obj.moveTargetType = (TargetType)1; obj.aimType = (AimType)1; obj.maxDistance = 75f; BellMaster.ReorderSkillDrivers(1); } } public class BuffBeamPlus : BaseState { public static float duration = 12f; public static GameObject buffBeamPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bell/BellBuffBeam.prefab").WaitForCompletion(); public static AnimationCurve beamWidthCurve; public static string playBeamSoundString = "Play_emergency_drone_heal_loop"; public static string stopBeamSoundString = "Stop_emergency_drone_heal_loop"; public HurtBox targetHurtbox; public GameObject buffBeamInstance; public BezierCurveLine healBeamCurve; public Transform muzzleTransform; public Transform beamTipTransform; public override void OnEnter() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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) //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_0040: 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_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_0050: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_00de: Invalid comparison between Unknown and I4 //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); Util.PlaySound(playBeamSoundString, ((EntityState)this).gameObject); Ray aimRay = ((BaseState)this).GetAimRay(); BullseyeSearch val = new BullseyeSearch { teamMaskFilter = TeamMask.none, sortMode = (SortMode)1, maxDistanceFilter = 75f, searchOrigin = ((Ray)(ref aimRay)).origin, searchDirection = ((Ray)(ref aimRay)).direction, maxAngleFilter = 180f, filterByLoS = true }; ((TeamMask)(ref val.teamMaskFilter)).AddTeam(((EntityState)this).teamComponent.teamIndex); val.RefreshCandidates(); val.FilterOutGameObject(((Component)((EntityState)this).characterBody).gameObject); foreach (HurtBox result in val.GetResults()) { CharacterBody val2 = (Object.op_Implicit((Object)(object)result.healthComponent) ? result.healthComponent.body : null); if (Object.op_Implicit((Object)(object)val2) && (int)val2.hullClassification != 2 && val2.bodyIndex != ((EntityState)this).characterBody.bodyIndex) { targetHurtbox = result; } } if (Object.op_Implicit((Object)(object)targetHurtbox)) { ((BaseState)this).StartAimMode(BuffBeam.duration, false); targetHurtbox.healthComponent.body.AddBuff(Buffs.ElephantArmorBoost.buffIndex); string text = "Muzzle"; ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator(); if (Object.op_Implicit((Object)(object)modelChildLocator)) { muzzleTransform = modelChildLocator.FindChild(text); buffBeamInstance = Object.Instantiate<GameObject>(buffBeamPrefab); ChildLocator component = buffBeamInstance.GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { beamTipTransform = component.FindChild("BeamTip"); healBeamCurve = buffBeamInstance.GetComponentInChildren<BezierCurveLine>(); } } } else { ((EntityState)this).skillLocator.secondary.AddOneStock(); ((EntityState)this).outer.SetNextStateToMain(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && (((EntityState)this).fixedAge >= duration || !Object.op_Implicit((Object)(object)targetHurtbox) || !Object.op_Implicit((Object)(object)targetHurtbox.healthComponent) || !targetHurtbox.healthComponent.alive)) { ((EntityState)this).outer.SetNextStateToMain(); } } public void UpdateHealBeamVisuals() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)muzzleTransform) || !Object.op_Implicit((Object)(object)healBeamCurve)) { return; } if (beamWidthCurve != null) { float widthMultiplier = beamWidthCurve.Evaluate(((EntityState)this).age / duration); if (Object.op_Implicit((Object)(object)healBeamCurve.lineRenderer)) { healBeamCurve.lineRenderer.widthMultiplier = widthMultiplier; } } healBeamCurve.v0 = muzzleTransform.forward * 3f; ((Component)healBeamCurve).transform.position = muzzleTransform.position; if (Object.op_Implicit((Object)(object)targetHurtbox)) { beamTipTransform.position = ((Component)targetHurtbox).transform.position; } } public override void Update() { ((EntityState)this).Update(); UpdateHealBeamVisuals(); } public override void OnExit() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) Util.PlaySound(stopBeamSoundString, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)buffBeamInstance)) { EntityState.Destroy((Object)(object)buffBeamInstance); } if (NetworkServer.active && Object.op_Implicit((Object)(object)targetHurtbox) && Object.op_Implicit((Object)(object)targetHurtbox.healthComponent) && Object.op_Implicit((Object)(object)targetHurtbox.healthComponent.body)) { targetHurtbox.healthComponent.body.RemoveBuff(Buffs.ElephantArmorBoost.buffIndex); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)4; } public override void OnSerialize(NetworkWriter writer) { //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) ((EntityState)this).OnSerialize(writer); HurtBoxReference val = HurtBoxReference.FromHurtBox(targetHurtbox); ((HurtBoxReference)(ref val)).Write(writer); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); HurtBoxReference val = default(HurtBoxReference); ((HurtBoxReference)(ref val)).Read(reader); GameObject obj = ((HurtBoxReference)(ref val)).ResolveGameObject(); targetHurtbox = ((obj != null) ? obj.GetComponent<HurtBox>() : null); } } } namespace EnemiesPlus.Content.Beetle { public class BeetleBurrow : BaseState { public static float burrowAccuracyCoefficient = 0.3f; public static float baseBurrowDuration = 1f; public static float radius = 10f; private HurtBox target; private Vector3 predictedDestination; public float duration; private CharacterModel characterModel; private HurtBoxGroup hurtboxGroup; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseBurrowDuration; Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { characterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>(); } if (Object.op_Implicit((Object)(object)characterModel)) { CharacterModel obj = characterModel; int invisibilityCount = obj.invisibilityCount; obj.invisibilityCount = invisibilityCount + 1; } if (Object.op_Implicit((Object)(object)hurtboxGroup)) { HurtBoxGroup obj2 = hurtboxGroup; int invisibilityCount = obj2.hurtBoxesDeactivatorCounter; obj2.hurtBoxesDeactivatorCounter = invisibilityCount + 1; } ((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((Behaviour)((EntityState)this).characterMotor).enabled = false; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); } CalculatePredictedDestination(); Util.PlaySound("Play_magmaWorm_burrowed_loop", ((EntityState)this).gameObject); } private void CalculatePredictedDestination() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //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_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) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0113: 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_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_014c: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0140: 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_014a: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Vector3.zero; Ray aimRay = ((BaseState)this).GetAimRay(); BullseyeSearch val2 = new BullseyeSearch { searchOrigin = ((Ray)(ref aimRay)).origin, searchDirection = ((Ray)(ref aimRay)).direction, maxDistanceFilter = 100f, teamMaskFilter = TeamMask.allButNeutral, filterByLoS = false, sortMode = (SortMode)2 }; ((TeamMask)(ref val2.teamMaskFilter)).RemoveTeam(TeamComponent.GetObjectTeam(((EntityState)this).gameObject)); val2.RefreshCandidates(); target = val2.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)target)) { val = ((Component)target).transform.position - ((EntityState)this).transform.position; HealthComponent healthComponent = target.healthComponent; object obj; if (healthComponent == null) { obj = null; } else { CharacterBody body = healthComponent.body; obj = ((body != null) ? body.characterMotor : null); } CharacterMotor val3 = (CharacterMotor)obj; if (Object.op_Implicit((Object)(object)val3)) { Vector3 moveDirection = val3.moveDirection; Vector3 normalized = ((Vector3)(ref moveDirection)).normalized; float num = target.healthComponent.body.moveSpeed * duration; Vector3 val4 = val + (num + radius) * normalized; if (((Vector3)(ref val4)).sqrMagnitude <= radius * radius) { val4 = val - (num - radius) * normalized; } val = val4; } } predictedDestination = ((EntityState)this).transform.position + val; ((EntityState)this).characterDirection.forward = val; } private Vector3 GetFinalPosition() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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) //IL_0035: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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_0068: 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_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) Vector3 val = (Object.op_Implicit((Object)(object)target) ? Vector3.Lerp(predictedDestination, ((Component)target).transform.position, burrowAccuracyCoefficient) : predictedDestination); NodeGraph groundNodes = SceneInfo.instance.groundNodes; NodeIndex val2 = groundNodes.FindClosestNode(val, ((EntityState)this).characterBody.hullClassification, float.PositiveInfinity); groundNodes.GetNodePosition(val2, ref val); return val + (((EntityState)this).transform.position - ((EntityState)this).characterBody.footPosition); } private void SetPosition(Vector3 newPosition) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) CharacterMotor characterMotor = ((EntityState)this).characterMotor; if (characterMotor != null) { ((BaseCharacterController)characterMotor).Motor.SetPositionAndRotation(newPosition, Quaternion.identity, true); } } public override void FixedUpdate() { //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) ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new ExitBurrow()); } } public override void OnExit() { //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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_0024: Unknown result type (might be due to invalid IL or missing references) Vector3 finalPosition = GetFinalPosition(); ((EntityState)this).characterDirection.forward = finalPosition - ((EntityState)this).transform.position; SetPosition(finalPosition); ((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal; CharacterMotor characterMotor = ((EntityState)this).characterMotor; if (characterMotor != null) { ((BaseCharacterController)characterMotor).Motor.RebuildCollidableLayers(); } if (Object.op_Implicit((Object)(object)characterModel)) { CharacterModel obj = characterModel; int invisibilityCount = obj.invisibilityCount; obj.invisibilityCount = invisibilityCount - 1; } if (Object.op_Implicit((Object)(object)hurtboxGroup)) { HurtBoxGroup obj2 = hurtboxGroup; int invisibilityCount = obj2.hurtBoxesDeactivatorCounter; obj2.hurtBoxesDeactivatorCounter = invisibilityCount - 1; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((Behaviour)((EntityState)this).characterMotor).enabled = true; } Util.PlaySound("Stop_magmaWorm_burrowed_loop", ((EntityState)this).gameObject); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class BeetleChanges { public static GameObject beetleSpit; public static GameObject beetleSpitGhost; public static GameObject beetleSpitExplosion; public static GameObject burrowFX; public static ModdedDamageType beetleJuiceDT; internal GameObject BeetleMaster => Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Beetle.BeetleMaster_prefab).WaitForCompletion(); internal GameObject BeetleBody => Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Beetle.BeetleBody_prefab).WaitForCompletion(); internal GameObject BeetleQueenSpit => Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleQueen.BeetleQueenSpit_prefab).WaitForCompletion(); internal GameObject BeetleQueenAcid => Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleQueen.BeetleQueenAcid_prefab).WaitForCompletion(); internal BuffDef BeetleJuice => Addressables.LoadAssetAsync<BuffDef>((object)RoR2_Base_BeetleGroup.bdBeetleJuice_asset).WaitForCompletion(); internal GameObject BeetleGuardMaster => Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleGuard.BeetleGuardMaster_prefab).WaitForCompletion(); internal GameObject BeetleGuardBody => Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleGuard.BeetleGuardBody_prefab).WaitForCompletion(); internal SkillDef BGUtilitySkillDef => Addressables.LoadAssetAsync<SkillDef>((object)RoR2_Base_BeetleGuard.BeetleGuardBodyDefenseUp_asset).WaitForCompletion(); internal SkillDef BeetlePrimary => Addressables.LoadAssetAsync<SkillDef>((object)RoR2_Base_Beetle.BeetleBodyHeadbutt_asset).WaitForCompletion(); internal SkillDef BeetleSecondary => Addressables.LoadAssetAsync<SkillDef>((object)RoR2_Base_Beetle.BeetleBodySleep_asset).WaitForCompletion(); internal EntityStateConfiguration BeetleSpawn => Addressables.LoadAssetAsync<EntityStateConfiguration>((object)RoR2_Base_Beetle_EntityStates_BeetleMonster.SpawnState_asset).WaitForCompletion(); public static BeetleChanges Instance { get; private set; } public static void Init() { if (Instance == null) { Instance = new BeetleChanges(); } } private BeetleChanges() { MakeJuice(); if (EnemiesPlusConfig.beetleBurrow.Value || EnemiesPlusConfig.beetleSpit.Value) { LilGuyChanges(); } if (EnemiesPlusConfig.bgChanges.Value) { GuardChanges(); } if (EnemiesPlusConfig.queenChanges.Value) { QueenChanges(); } } private void CharacterBody_AddTimedBuff_BuffDef_float(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, AccessTools.Field(typeof(Buffs), "BeetleJuice")) }) && val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 10) })) { val.Next.Operand = 1; } } private static void CharacterBody_RecalculateStats(ILContext il) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown ILCursor val = new ILCursor(il); int juiceLoc = 0; float num = default(float); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, AccessTools.Field(typeof(Buffs), "BeetleJuice")), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "GetBuffCount") }) && val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref juiceLoc) }) && val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1f), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, juiceLoc) })) { int index = val.Index; val.Index = index + 1; val.Next.Operand = 0f; } else { Log.Error("ILHook failed for beetle juice CharacterBody.RecalculateStats"); } } private static void GlobalEventManager_onServerDamageDealt(DamageReport damageReport) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) DamageInfo damageInfo = damageReport.damageInfo; if (damageInfo != null && !damageInfo.rejected && Object.op_Implicit((Object)(object)damageReport.victimBody) && DamageAPI.HasModdedDamageType(damageReport.damageInfo, beetleJuiceDT)) { damageReport.victimBody.AddTimedBuff(Buffs.BeetleJuice, 5f); } } private void MakeJuice() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_00b0: 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) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: 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_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0221: 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_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; CharacterBody.AddTimedBuff_BuffDef_float += new Manipulator(CharacterBody_AddTimedBuff_BuffDef_float); BeetleJuice.canStack = false; beetleJuiceDT = DamageAPI.ReserveDamageType(); beetleSpit = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleQueen.BeetleQueenSpit_prefab).WaitForCompletion(), "BeetleSpitProjectileScore"); beetleSpit.GetComponent<ProjectileSimple>().desiredForwardSpeed = 60f; Transform transform = beetleSpit.transform; transform.localScale /= 2f; beetleSpit.GetComponent<Rigidbody>().useGravity = true; beetleSpitExplosion = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleQueen.BeetleSpitExplosion_prefab).WaitForCompletion(), "BeetleSpitExplosionScore", false); Transform child = beetleSpitExplosion.transform.GetChild(0); child.localScale /= 2f; foreach (Transform item in beetleSpitExplosion.transform.GetChild(0)) { item.localScale /= 2f; } ProjectileImpactExplosion component = beetleSpit.GetComponent<ProjectileImpactExplosion>(); component.impactEffect = beetleSpitExplosion; ((ProjectileExplosion)component).childrenProjectilePrefab = null; component.destroyOnEnemy = true; ((ProjectileExplosion)component).fireChildren = false; ((ProjectileExplosion)component).blastRadius = 2f; beetleSpitGhost = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleQueen.BeetleQueenSpitGhost_prefab).WaitForCompletion(), "BeetleSpitProjectileGhostScore", false); Transform transform2 = beetleSpitGhost.transform; transform2.localScale /= 2f; Transform child2 = beetleSpitGhost.transform.GetChild(1); child2.localScale /= 2f; Transform child3 = beetleSpitGhost.transform.GetChild(0).GetChild(0); child3.localScale /= 2f; Transform child4 = beetleSpitGhost.transform.GetChild(1).GetChild(0); child4.localScale /= 2f; Transform child5 = beetleSpitGhost.transform.GetChild(1).GetChild(1); child5.localScale /= 2f; beetleSpit.GetComponent<ProjectileController>().ghostPrefab = beetleSpitGhost; ContentAddition.AddEffect(beetleSpitExplosion); ContentAddition.AddProjectile(beetleSpit); BeetleSpit.projectilePrefab = beetleSpit; } private void LilGuyChanges() { BeetleSpawn.TryModifyFieldValue("duration", 3.5f); BeetleBody.GetComponent<CharacterBody>().baseMoveSpeed = 7f; if (EnemiesPlusConfig.beetleSpit.Value) { MakeSpit(); } if (EnemiesPlusConfig.beetleBurrow.Value) { MakeBurrow(); } GameObject beetleMaster = BeetleMaster; BaseAI component = beetleMaster.GetComponent<BaseAI>(); component.aimVectorDampTime = 0.1f; component.aimVectorMaxSpeed = 180f; AISkillDriver[] components = beetleMaster.GetComponents<AISkillDriver>(); foreach (AISkillDriver val in components) { switch (val.customName) { case "HeadbuttOffNodegraph": val.minDistance = 0f; val.maxDistance = 5f; break; default: val.shouldSprint = true; break; case "SpitOffNodeGraph": case "BurrowTowardsTarget": break; } } } private void MakeSpit() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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) SkillDef copyOf = ((ScriptableObject)(object)BeetleSecondary).GetCopyOf<SkillDef>(BeetlePrimary); ((Object)copyOf).name = "BeetleBodySpit"; bool flag = default(bool); copyOf.activationState = ContentAddition.AddEntityState<BeetleSpit>(ref flag); copyOf.skillName = "BeetleSpit"; copyOf.baseRechargeInterval = 6f; copyOf.baseMaxStock = 1; BeetleBody.GetComponent<SkillLocator>().secondary.skillName = "BeetleSpit"; AISkillDriver val = BeetleMaster.AddComponent<AISkillDriver>(); val.customName = "SpitOffNodeGraph"; val.skillSlot = (SkillSlot)1; val.selectionRequiresAimTarget = true; val.selectionRequiresTargetLoS = true; val.minDistance = 5f; val.maxDistance = 15f; val.ignoreNodeGraph = true; val.shouldSprint = true; val.movementType = (MovementType)1; val.moveTargetType = (TargetType)0; val.aimType = (AimType)2; BeetleMaster.ReorderSkillDrivers(val, 1); } private void MakeBurrow() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_003f: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: 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_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Expected O, but got Unknown //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<BeetleBurrow>(ref flag); ContentAddition.AddEntityState<ExitBurrow>(ref flag); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); ((Object)val).name = "BeetleBodyBurrow"; val.skillName = "BeetleBurrow"; val.activationStateMachineName = "Body"; val.activationState = ContentAddition.AddEntityState<EnterBurrow>(ref flag); val.baseRechargeInterval = 12f; val.cancelSprintingOnActivation = false; val.isCombatSkill = false; ContentAddition.AddSkillDef(val); SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val2).name = "BeetleBodyUtilityFamily"; val2.variants = (Variant[])(object)new Variant[1] { new Variant { skillDef = val } }; GenericSkill val3 = BeetleBody.AddComponent<GenericSkill>(); val3.skillName = "BeetleBurrow"; val3._skillFamily = val2; BeetleBody.GetComponent<SkillLocator>().utility = val3; ContentAddition.AddSkillFamily(val2); AISkillDriver val4 = BeetleMaster.GetComponents<AISkillDriver>().Last(); AISkillDriver obj = BeetleMaster.AddComponent<AISkillDriver>(); obj.customName = "BurrowTowardsTarget"; obj.skillSlot = (SkillSlot)2; obj.requireSkillReady = true; obj.minDistance = 50f; obj.maxDistance = 100f; obj.selectionRequiresOnGround = true; obj.ignoreNodeGraph = true; obj.movementType = (MovementType)1; obj.moveTargetType = (TargetType)0; obj.aimType = (AimType)1; obj.resetCurrentEnemyOnNextDriverSelection = true; BeetleMaster.AddComponentCopy<AISkillDriver>(val4); Object.DestroyImmediate((Object)(object)val4); burrowFX = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleGuard.BeetleGuardSunderPop_prefab).WaitForCompletion(), "BeetleBurrowEffectScore", false); burrowFX.GetComponent<VFXAttributes>().vfxPriority = (VFXPriority)2; Transform val5 = burrowFX.transform.Find("Particles/ParticleInitial/Dust"); ParticleSystemRenderer val6 = default(ParticleSystemRenderer); if (Object.op_Implicit((Object)(object)val5) && ((Component)val5).TryGetComponent<ParticleSystemRenderer>(ref val6)) { ((Renderer)val6).sharedMaterial = new Material(((Renderer)val6).sharedMaterial); ((Renderer)val6).sharedMaterial.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)201, (byte)126, (byte)44, byte.MaxValue))); } Transform val7 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BeetleGuard.BeetleGuardGroundSlam_prefab).WaitForCompletion().transform.Find("ParticleInitial/Decal"); if (Object.op_Implicit((Object)(object)val7)) { Object.Instantiate<GameObject>(((Component)val7).gameObject, burrowFX.transform).transform.localScale = Vector3.one * 5f; } ContentAddition.AddEffect(burrowFX); } private void QueenChanges() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) BeetleQueenSpit.GetComponent<ProjectileImpactExplosion>().destroyOnEnemy = true; DamageAPI.AddModdedDamageType(ref BeetleQueenSpit.GetComponent<ProjectileDamage>().damageType, beetleJuiceDT); } private void GuardChanges() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) AISkillDriver val = BeetleGuardMaster.AddComponent<AISkillDriver>(); val.customName = "RallyCry"; val.skillSlot = (SkillSlot)2; val.requireSkillReady = true; val.maxUserHealthFraction = 0.8f; val.movementType = (MovementType)0; BeetleGuardMaster.ReorderSkillDrivers(val, 2); bool flag = default(bool); BGUtilitySkillDef.activationState = ContentAddition.AddEntityState<RallyCry>(ref flag); } } public class BeetleSpit : BaseSkillState { public static float baseDuration = 1f; public static string attackSoundString = "Play_beetle_worker_attack"; public static GameObject projectilePrefab; private bool hasFired; private float duration; private float fireTime; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireTime = duration * 0.9f; ((BaseState)this).StartAimMode(fireTime, false); ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.walkSpeedPenaltyCoefficient = 0f; } Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, duration - fireTime); ((EntityState)this).PlayCrossfade("Body", "EmoteSurprise", "Headbutt.playbackRate", duration, 0.1f); } public void Fire() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; Ray aimRay = ((BaseState)this).GetAimRay(); Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, duration - fireTime); if (((EntityState)this).isAuthority) { ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat, 0f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.walkSpeedPenaltyCoefficient = 1f; } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class EnterBurrow : BaseState { public static float animSpeed = 1.3f; public static float crossfadeDelay = 1.1f; public static float crossfadeDuration = 0.2f; public static string burrowSoundString = "Play_treeBot_sprint_end"; public static string startSoundString = "Play_beetle_worker_idle"; private Animator modelAnimator; private float duration; private bool didCrossfade; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = crossfadeDelay + crossfadeDuration; ((EntityState)this).PlayCrossfade("Body", "EmoteSurprise", 0.1f); modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { modelAnimator.speed = animSpeed; } Util.PlaySound(startSoundString, ((EntityState)this).gameObject); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= crossfadeDelay) { TryCrossfade(); } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new BeetleBurrow()); } } public override void OnExit() { TryCrossfade(); if (NetworkServer.active) { Util.CleanseBody(((EntityState)this).characterBody, true, false, false, true, false, false); } ((EntityState)this).OnExit(); } public void TryCrossfade() { //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) if (!didCrossfade && Object.op_Implicit((Object)(object)modelAnimator)) { modelAnimator.speed = 1f; modelAnimator.Update(0f); modelAnimator.SetFloat("Spawn1.playbackRate", 0f); modelAnimator.CrossFadeInFixedTime("Spawn1", crossfadeDuration, modelAnimator.GetLayerIndex("Body")); EffectManager.SimpleEffect(BeetleChanges.burrowFX, ((EntityState)this).characterBody.footPosition, Quaternion.identity, false); Util.PlaySound(burrowSoundString, ((EntityState)this).gameObject); didCrossfade = true; } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class ExitBurrow : BaseState { public static float ANIM_DURATION_COEF = 0.7f; public static float baseBurrowExitDuration = 1.3f; public static float exitJumpMarker = 0.4f; public static string endSoundString = "Play_hermitCrab_unburrow"; public static string burrowSoundString = "Play_treeBot_sprint_end"; private float duration; private bool didJump; private bool didCancelAnimation; private bool movementHitAuthority; public override void OnEnter() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown ((BaseState)this).OnEnter(); duration = baseBurrowExitDuration / base.attackSpeedStat; ((EntityState)this).PlayAnimation("Body", "Spawn1", "Spawn1.playbackRate", duration / ANIM_DURATION_COEF, 0f); if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.onMovementHit += new MovementHitDelegate(OnMovementHit); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration * exitJumpMarker / ANIM_DURATION_COEF) { TryJump(); } if (!(((EntityState)this).fixedAge < duration)) { TryCancelAnimation(); if (((EntityState)this).isAuthority && (((EntityState)this).fixedAge >= duration || movementHitAuthority || (((BaseCharacterController)((EntityState)this).characterMotor).Motor.GroundingStatus.IsStableOnGround && !((BaseCharacterController)((EntityState)this).characterMotor).Motor.LastGroundingStatus.IsStableOnGround))) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override void OnExit() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown TryJump(); TryCancelAnimation(); if (((EntityState)this).isAuthority) { ((EntityState)this).characterMotor.onMovementHit -= new MovementHitDelegate(OnMovementHit); } ((EntityState)this).OnExit(); } public void TryJump() { //IL_0020: Unknown result type (might be due