Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of DwarfMushrum v1.1.4
DwarfMushrum.dll
Decompiled a week agousing System; using System.Collections; 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.Configuration; using DwarfMushrum.Modules; using DwarfMushrum.States; using EntityStates; using EntityStates.Mage.Weapon; using EntityStates.MiniMushroom; using KinematicCharacterController; using Microsoft.CodeAnalysis; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Navigation; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("DwarfMushrum")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+ba56d804b334787786864985cc0764613641f52d")] [assembly: AssemblyProduct("DwarfMushrum")] [assembly: AssemblyTitle("DwarfMushrum")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace DwarfMushrum { [BepInPlugin("com.rob.DwarfMushrum", "DwarfMushrum", "1.1.4")] public class DwarfMushrumPlugin : BaseUnityPlugin { public const string MODUID = "com.rob.DwarfMushrum"; public static DwarfMushrumPlugin instance; public static Material commandoMat; private void Awake() { instance = this; DMAssets.PopulateAssets(); Config.ReadConfig(); Tokens.RegisterLanguageTokens(); Prefabs.CreatePrefab(); DwarfMushrum.Modules.States.RegisterStates(); Skills.RegisterSkills(); Projectiles.CreateProjectiles(); SpawnCards.CreateSpawnCards(); new ContentPacks().Initialize(); } } internal class SkillDefInfo { public string skillName; public string skillNameToken; public string skillDescriptionToken; public string[] keywordTokens = new string[0]; public Sprite skillIcon; public SerializableEntityStateType activationState; public InterruptPriority interruptPriority; public string activationStateMachineName; public float baseRechargeInterval; public int baseMaxStock = 1; public int rechargeStock = 1; public int requiredStock = 1; public int stockToConsume = 1; public bool isCombatSkill = true; public bool canceledFromSprinting; public bool forceSprintDuringState; public bool cancelSprintingOnActivation = true; public bool beginSkillCooldownOnSkillEnd; public bool fullRestockOnAssign = true; public bool resetCooldownTimerOnUse; public bool mustKeyPress; public SkillDefInfo() { } public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName, InterruptPriority interruptPriority, bool isCombatSkill, float baseRechargeInterval) { //IL_0063: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) this.skillName = skillName; this.skillNameToken = skillNameToken; this.skillDescriptionToken = skillDescriptionToken; this.skillIcon = skillIcon; this.activationState = activationState; this.activationStateMachineName = activationStateMachineName; this.interruptPriority = interruptPriority; this.isCombatSkill = isCombatSkill; this.baseRechargeInterval = baseRechargeInterval; } public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName = "Weapon", bool agile = false) { //IL_0063: 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_0074: Unknown result type (might be due to invalid IL or missing references) this.skillName = skillName; this.skillNameToken = skillNameToken; this.skillDescriptionToken = skillDescriptionToken; this.skillIcon = skillIcon; this.activationState = activationState; this.activationStateMachineName = activationStateMachineName; interruptPriority = (InterruptPriority)0; isCombatSkill = true; baseRechargeInterval = 0f; requiredStock = 0; stockToConsume = 0; cancelSprintingOnActivation = !agile; if (agile) { keywordTokens = new string[1] { "KEYWORD_AGILE" }; } } } } namespace DwarfMushrum.States { public class Burrow : BaseState { public static float burrowDistance = 256f; public static float duration = 0.8f; public static float delayDuration = 0.4f; public static float exitDuration = 2.5f; private Transform modelTransform; private Vector3 burrowDestination = Vector3.zero; private Vector3 burrowStart = Vector3.zero; private Animator animator; private CharacterModel characterModel; private HurtBoxGroup hurtboxGroup; private ChildLocator childLocator; private bool isExiting; private bool hasBurrowed; private bool hasFinishedBurrow; public override void OnEnter() { ((BaseState)this).OnEnter(); ((BaseState)this).StartAimMode(2f, false); modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { animator = ((Component)modelTransform).GetComponent<Animator>(); characterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>(); childLocator = ((Component)modelTransform).GetComponent<ChildLocator>(); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((Behaviour)((EntityState)this).characterMotor).enabled = false; } ((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); CalculateBurrowDestination(); ((EntityState)this).PlayAnimation("FullBody, Override", "Burrow", "Burrow.playbackRate", duration - delayDuration, 0f); } private void CalculateBurrowDestination() { //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_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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: 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_0025: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0045: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0106: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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) Vector3 val = Vector3.zero; Ray aimRay = ((BaseState)this).GetAimRay(); BullseyeSearch val2 = new BullseyeSearch(); Ray val3 = aimRay; val2.searchOrigin = ((Ray)(ref val3)).origin; val3 = aimRay; val2.searchDirection = ((Ray)(ref val3)).direction; val2.maxDistanceFilter = burrowDistance; val2.teamMaskFilter = TeamMask.allButNeutral; val2.filterByLoS = false; ((TeamMask)(ref val2.teamMaskFilter)).RemoveTeam(TeamComponent.GetObjectTeam(((EntityState)this).gameObject)); val2.sortMode = (SortMode)2; val2.RefreshCandidates(); HurtBox val4 = val2.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val4)) { val = ((Component)val4).transform.position - ((EntityState)this).transform.position; } burrowDestination = ((EntityState)this).transform.position; burrowStart = ((EntityState)this).transform.position; NodeGraph groundNodes = SceneInfo.instance.groundNodes; NodeIndex val5 = groundNodes.FindClosestNode(((EntityState)this).transform.position + val, ((EntityState)this).characterBody.hullClassification, float.PositiveInfinity); groundNodes.GetNodePosition(val5, ref burrowDestination); burrowDestination += ((EntityState)this).transform.position - ((EntityState)this).characterBody.footPosition; ((EntityState)this).characterDirection.forward = val; } private void CreateBurrowEffect(Vector3 origin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) EffectData val = new EffectData(); val.rotation = modelTransform.rotation; val.origin = origin; EffectManager.SpawnEffect(InPlant.burrowPrefab, val, false); } private void SetPosition(Vector3 newPosition) { //IL_001c: 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) if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPositionAndRotation(newPosition, Quaternion.identity, true); } } public override void FixedUpdate() { //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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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).fixedAge >= duration - delayDuration && !hasBurrowed) { hasBurrowed = true; Util.PlaySound(InPlant.burrowInSoundString, ((EntityState)this).gameObject); CreateBurrowEffect(Util.GetCorePosition(((EntityState)this).gameObject)); } if (((EntityState)this).fixedAge >= duration && !hasFinishedBurrow) { hasFinishedBurrow = true; ExitCleanup(); ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); ((EntityState)this).PlayAnimation("Body", "Spawn", "Spawn.playbackRate", exitDuration, 0f); SetPosition(burrowDestination); Util.PlaySound(UnPlant.UnplantOutSoundString, ((EntityState)this).gameObject); CreateBurrowEffect(burrowDestination); } if (((EntityState)this).fixedAge >= duration + exitDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void ExitCleanup() { if (!isExiting) { isExiting = true; ((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.RebuildCollidableLayers(); modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((Behaviour)((EntityState)this).characterMotor).enabled = true; } } } public override void OnExit() { ((EntityState)this).OnExit(); ExitCleanup(); } } public class ChargeProjectile : BaseSkillState { public static float baseDuration = 1.75f; private float duration; private GameObject chargeVfxInstance; private uint playID; public override void OnEnter() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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) ((BaseState)this).OnEnter(); ((BaseState)this).StartAimMode(2f, false); duration = baseDuration / ((BaseState)this).attackSpeedStat; Transform modelTransform = ((EntityState)this).GetModelTransform(); playID = Util.PlayAttackSpeedSound(SporeGrenade.chargeUpSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); if (Object.op_Implicit((Object)(object)modelTransform)) { Transform val = ((BaseState)this).FindModelChild("Muzzle"); chargeVfxInstance = Object.Instantiate<GameObject>(SporeGrenade.chargeEffectPrefab, val.position, val.rotation); chargeVfxInstance.transform.parent = val; chargeVfxInstance.transform.localPosition = new Vector3(0f, -0.065f, 0f); chargeVfxInstance.transform.localRotation = Quaternion.identity; } ((EntityState)this).PlayAnimation("FullBody, Override", "ShootSpores", "ShootSpores.playbackRate", duration * 2.5f, 0f); } public override void OnExit() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)chargeVfxInstance)) { EntityState.Destroy((Object)chargeVfxInstance); } AkSoundEngine.StopPlayingID(playID); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { FireProjectile nextState = new FireProjectile(); ((EntityState)this).outer.SetNextState((EntityState)(object)nextState); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class DeathState : GenericCharacterDeath { public override void OnEnter() { ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); ((GenericCharacterDeath)this).OnEnter(); } } public class FireProjectile : BaseSkillState { public static float baseDuration = 0.1f; public static float damageCoefficient = 1.2f; public static float force = 10f; private float duration; public override void OnEnter() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; Util.PlaySound(SporeGrenade.attackSoundString, ((EntityState)this).gameObject); Ray aimRay = ((BaseState)this).GetAimRay(); string text = "Muzzle"; if (Object.op_Implicit((Object)(object)FireLaserbolt.muzzleEffectPrefab)) { EffectManager.SimpleMuzzleFlash(FireLaserbolt.muzzleEffectPrefab, ((EntityState)this).gameObject, text, false); } if (((EntityState)this).isAuthority) { ProjectileManager instance = ProjectileManager.instance; GameObject projectilePrefab = SporeGrenade.projectilePrefab; Ray val = aimRay; Vector3 origin = ((Ray)(ref val)).origin; val = aimRay; instance.FireProjectile(projectilePrefab, origin, Util.QuaternionSafeLookRotation(((Ray)(ref val)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat * damageCoefficient, force, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class ForceDeath : BaseSkillState { public override void OnEnter() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); if (((EntityState)this).isAuthority) { ((EntityState)this).healthComponent.Suicide((GameObject)null, (GameObject)null, DamageTypeCombo.op_Implicit((DamageType)0)); } ((EntityState)this).outer.SetNextStateToMain(); } } } namespace DwarfMushrum.Modules { internal static class Config { public static List<StageSpawnInfo> StageList = new List<StageSpawnInfo>(); internal static void ReadConfig() { string value = ((BaseUnityPlugin)DwarfMushrumPlugin.instance).Config.Bind<string>("Dwarf Mushrum", "Stage List", "arena, blackbeach, blackbeach2, foggyswamp, itgoolake, itskymeadow, rootjungle, shipgraveyard, skymeadow, sulfurpools, goldshores, slumberingsatellite, habitat, habitatfall, helminthroost, lakes, lakesnight", "What stages the monster will show up on. Add a '- loop' after the stagename to make it only spawn after looping. List of stage names can be found at https://github.com/risk-of-thunder/R2Wiki/wiki/Mod-Creation_Developer-Reference_Scene-Names").Value; value = new string((from c in value.ToCharArray() where !char.IsWhiteSpace(c) select c).ToArray()); string[] array = value.Split(new char[1] { ',' }); string[] array2 = array; string[] array3 = array2; foreach (string text in array3) { string[] array4 = text.Split(new char[1] { '-' }); string stageName = array4[0]; int minStages = 0; if (array4.Length > 1) { minStages = 5; } StageList.Add(new StageSpawnInfo(stageName, minStages)); } } internal static ConfigEntry<bool> EnemyEnableConfig(string characterName) { //IL_0011: 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_002c: Expected O, but got Unknown //IL_002c: Expected O, but got Unknown return ((BaseUnityPlugin)DwarfMushrumPlugin.instance).Config.Bind<bool>(new ConfigDefinition(characterName, "Enabled"), true, new ConfigDescription("Set to false to disable this enemy", (AcceptableValueBase)null, Array.Empty<object>())); } internal static ConfigEntry<bool> CharacterEnableConfig(string characterName) { //IL_0011: 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_002c: Expected O, but got Unknown //IL_002c: Expected O, but got Unknown return ((BaseUnityPlugin)DwarfMushrumPlugin.instance).Config.Bind<bool>(new ConfigDefinition(characterName, "Enabled"), false, new ConfigDescription("Set to false to disable this character", (AcceptableValueBase)null, Array.Empty<object>())); } } internal class ContentPacks : IContentPackProvider { [CompilerGenerated] private sealed class <FinalizeAsync>d__7 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public FinalizeAsyncArgs args; public ContentPacks <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FinalizeAsync>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <GenerateContentPackAsync>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GetContentPackAsyncArgs args; public ContentPacks <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GenerateContentPackAsync>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; ContentPack.Copy(<>4__this.contentPack, args.output); args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadStaticContentAsync>d__5 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LoadStaticContentAsyncArgs args; public ContentPacks <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadStaticContentAsync>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; <>4__this.contentPack.identifier = <>4__this.identifier; <>4__this.contentPack.bodyPrefabs.Add(Prefabs.bodyPrefabs.ToArray()); <>4__this.contentPack.effectDefs.Add(DMAssets.effectDefs.ToArray()); <>4__this.contentPack.entityStateTypes.Add(States.entityStates.ToArray()); <>4__this.contentPack.masterPrefabs.Add(Prefabs.masterPrefabs.ToArray()); <>4__this.contentPack.projectilePrefabs.Add(Projectiles.projectilePrefabs.ToArray()); <>4__this.contentPack.skillDefs.Add(Skills.skillDefs.ToArray()); <>4__this.contentPack.skillFamilies.Add(Skills.skillFamilies.ToArray()); args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal ContentPack contentPack = new ContentPack(); public string identifier => "com.rob.DwarfMushrum"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } [IteratorStateMachine(typeof(<LoadStaticContentAsync>d__5))] public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadStaticContentAsync>d__5(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(<GenerateContentPackAsync>d__6))] public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GenerateContentPackAsync>d__6(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(<FinalizeAsync>d__7))] public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FinalizeAsync>d__7(0) { <>4__this = this, args = args }; } } public static class DMAssets { public static AssetBundle mainAssetBundle; internal static List<EffectDef> effectDefs = new List<EffectDef>(); public static Texture charPortrait; public static void PopulateAssets() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown if ((Object)mainAssetBundle == (Object)null) { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DwarfMushrum.dwarfmushrum"); mainAssetBundle = AssetBundle.LoadFromStream(stream); } charPortrait = (Texture)mainAssetBundle.LoadAsset<Sprite>("texFuckerIcon").texture; } private static GameObject LoadEffect(string resourceName, string soundName) { //IL_002b: 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) GameObject val = mainAssetBundle.LoadAsset<GameObject>(resourceName); val.AddComponent<DestroyOnTimer>().duration = 12f; val.AddComponent<NetworkIdentity>(); val.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2; EffectComponent val2 = val.AddComponent<EffectComponent>(); val2.applyScale = false; val2.effectIndex = (EffectIndex)(-1); val2.parentToReferencedTransform = true; val2.positionAtReferencedTransform = true; val2.soundName = soundName; AddNewEffectDef(val, soundName); return val; } public static Material CreateMaterial(string materialName, float emission, Color emissionColor, float normalStrength) { //IL_0081: 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) if (!Object.op_Implicit((Object)(object)DwarfMushrumPlugin.commandoMat)) { DwarfMushrumPlugin.commandoMat = Resources.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial; } Material val = Object.Instantiate<Material>(DwarfMushrumPlugin.commandoMat); Material val2 = mainAssetBundle.LoadAsset<Material>(materialName); if (!Object.op_Implicit((Object)(object)val2)) { Debug.LogError((object)(materialName + " does not exist you fucking dumbass")); return DwarfMushrumPlugin.commandoMat; } val.SetColor("_Color", val2.GetColor("_Color")); val.SetTexture("_MainTex", val2.GetTexture("_MainTex")); val.SetColor("_EmColor", emissionColor); val.SetFloat("_EmPower", emission); val.SetTexture("_EmTex", val2.GetTexture("_EmissionMap")); val.SetFloat("_NormalStrength", normalStrength); return val; } internal static void AddNewEffectDef(GameObject effectPrefab) { AddNewEffectDef(effectPrefab, ""); } internal static void AddNewEffectDef(GameObject effectPrefab, string soundName) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown EffectDef val = new EffectDef(); val.prefab = effectPrefab; val.prefabEffectComponent = effectPrefab.GetComponent<EffectComponent>(); val.prefabName = ((Object)effectPrefab).name; val.prefabVfxAttributes = effectPrefab.GetComponent<VFXAttributes>(); val.spawnSoundEventName = soundName; effectDefs.Add(val); } } internal class ItemDisplays { } public static class Prefabs { public static GameObject bodyPrefab; public static GameObject masterPrefab; public static List<GameObject> bodyPrefabs = new List<GameObject>(); public static List<GameObject> masterPrefabs = new List<GameObject>(); public static void CreatePrefab() { //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: 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_0134: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) bodyPrefab = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody"), "DwarfMushrumBody"); CharacterBody component = bodyPrefab.GetComponent<CharacterBody>(); ((Object)component).name = "DwarfMushrumBody"; component.baseNameToken = "DWARFMUSHRUM_BODY_NAME"; component.subtitleNameToken = "NULL_SUBTITLE"; component.baseMoveSpeed = 0f; component.baseMaxHealth = 160f; component.levelMaxHealth = 48f; component.baseDamage = 8f; component.levelDamage = component.baseDamage * 0.2f; component.isChampion = false; component.baseJumpCount = 0; component.portraitIcon = DMAssets.charPortrait; SfxLocator component2 = bodyPrefab.GetComponent<SfxLocator>(); component2.barkSound = "Play_minimushroom_idle_VO"; component2.deathSound = "Play_minimushroom_death"; component2.fallDamageSound = ""; component2.landingSound = "Play_minimushroom_step"; DeathRewards val = bodyPrefab.AddComponent<DeathRewards>(); val.logUnlockableDef = Addressables.LoadAssetAsync<UnlockableDef>((object)"RoR2/Base/MiniMushroom/Logs.MiniMushroom.0.asset").WaitForCompletion(); SetStateOnHurt component3 = bodyPrefab.GetComponent<SetStateOnHurt>(); component3.canBeFrozen = true; component3.canBeHitStunned = true; component3.canBeStunned = true; component3.hitThreshold = 0.1f; component3.hurtState = new SerializableEntityStateType(typeof(HurtState)); bodyPrefab.GetComponent<CharacterDeathBehavior>().deathState = new SerializableEntityStateType(typeof(DeathState)); SetupModel(); masterPrefab = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/CharacterMasters/SquidTurretMaster"), "DwarfMushrumMaster"); CharacterMaster component4 = masterPrefab.GetComponent<CharacterMaster>(); CreateAI(); component4.bodyPrefab = bodyPrefab; component4.isBoss = false; bodyPrefabs.Add(bodyPrefab); masterPrefabs.Add(masterPrefab); } private static void CreateAI() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_0051: 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_0091: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010c: 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_0169: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) AISkillDriver[] componentsInChildren = masterPrefab.GetComponentsInChildren<AISkillDriver>(); AISkillDriver[] array = componentsInChildren; foreach (AISkillDriver val in array) { Object.DestroyImmediate((Object)val); } AISkillDriver val2 = masterPrefab.AddComponent<AISkillDriver>(); val2.customName = "Burrow"; val2.movementType = (MovementType)1; val2.moveTargetType = (TargetType)0; val2.activationRequiresAimConfirmation = false; val2.activationRequiresTargetLoS = false; val2.selectionRequiresTargetLoS = false; val2.maxDistance = 512f; val2.minDistance = 25f; val2.requireSkillReady = true; val2.aimType = (AimType)0; val2.ignoreNodeGraph = false; val2.moveInputScale = 1f; val2.driverUpdateTimerOverride = -1f; val2.buttonPressType = (ButtonPressType)0; val2.minTargetHealthFraction = float.NegativeInfinity; val2.maxTargetHealthFraction = float.PositiveInfinity; val2.minUserHealthFraction = float.NegativeInfinity; val2.maxUserHealthFraction = float.PositiveInfinity; val2.skillSlot = (SkillSlot)2; AISkillDriver val3 = masterPrefab.AddComponent<AISkillDriver>(); val3.customName = "Shoot"; val3.movementType = (MovementType)1; val3.moveTargetType = (TargetType)0; val3.activationRequiresAimConfirmation = true; val3.activationRequiresTargetLoS = false; val3.selectionRequiresTargetLoS = true; val3.maxDistance = 32f; val3.minDistance = 0f; val3.requireSkillReady = true; val3.aimType = (AimType)2; val3.ignoreNodeGraph = false; val3.moveInputScale = 1f; val3.driverUpdateTimerOverride = -1f; val3.buttonPressType = (ButtonPressType)0; val3.minTargetHealthFraction = float.NegativeInfinity; val3.maxTargetHealthFraction = float.PositiveInfinity; val3.minUserHealthFraction = float.NegativeInfinity; val3.maxUserHealthFraction = float.PositiveInfinity; val3.skillSlot = (SkillSlot)0; AISkillDriver val4 = masterPrefab.AddComponent<AISkillDriver>(); val4.customName = "Idle"; val4.movementType = (MovementType)1; val4.moveTargetType = (TargetType)0; val4.activationRequiresAimConfirmation = false; val4.activationRequiresTargetLoS = false; val4.selectionRequiresTargetLoS = false; val4.maxDistance = 512f; val4.minDistance = 0f; val4.requireSkillReady = true; val4.aimType = (AimType)2; val4.ignoreNodeGraph = false; val4.moveInputScale = 1f; val4.driverUpdateTimerOverride = -1f; val4.buttonPressType = (ButtonPressType)1; val4.minTargetHealthFraction = float.NegativeInfinity; val4.maxTargetHealthFraction = float.PositiveInfinity; val4.minUserHealthFraction = float.NegativeInfinity; val4.maxUserHealthFraction = float.PositiveInfinity; val4.skillSlot = (SkillSlot)(-1); } private static GameObject CreateModel(GameObject main) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)main.transform.Find("ModelBase"))) { Object.Destroy((Object)((Component)main.transform.Find("ModelBase")).gameObject); } if (Object.op_Implicit((Object)(object)main.transform.Find("CameraPivot"))) { Object.Destroy((Object)((Component)main.transform.Find("CameraPivot")).gameObject); } if (Object.op_Implicit((Object)(object)main.transform.Find("AimOrigin"))) { Object.Destroy((Object)((Component)main.transform.Find("AimOrigin")).gameObject); } GameObject val = null; return DMAssets.mainAssetBundle.LoadAsset<GameObject>("mdlDwarfMushrum"); } private static void SetupModel() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_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_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Expected O, but got Unknown //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Expected O, but got Unknown //IL_0383: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateModel(bodyPrefab); GameObject val2 = new GameObject("ModelBase"); val2.transform.parent = bodyPrefab.transform; val2.transform.localPosition = new Vector3(0f, -0.81f, 0f); val2.transform.localRotation = Quaternion.identity; val2.transform.localScale = new Vector3(1f, 1f, 1f); GameObject val3 = new GameObject("CameraPivot"); val3.transform.parent = bodyPrefab.transform; val3.transform.localPosition = new Vector3(0f, 1.6f, 0f); val3.transform.localRotation = Quaternion.identity; val3.transform.localScale = Vector3.one; GameObject val4 = new GameObject("AimOrigin"); val4.transform.parent = bodyPrefab.transform; val4.transform.localPosition = new Vector3(0f, 0.5f, 0f); val4.transform.localRotation = Quaternion.identity; val4.transform.localScale = Vector3.one; Transform transform = val.transform; transform.parent = val2.transform; transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.identity; CharacterDirection component = bodyPrefab.GetComponent<CharacterDirection>(); component.moveVector = Vector3.zero; component.targetTransform = val2.transform; component.overrideAnimatorForwardTransform = null; component.rootMotionAccumulator = null; component.modelAnimator = val.GetComponentInChildren<Animator>(); component.driveFromRootRotation = false; component.turnSpeed = 720f; ModelLocator component2 = bodyPrefab.GetComponent<ModelLocator>(); component2.modelTransform = transform; component2.modelBaseTransform = val2.transform; ChildLocator component3 = val.GetComponent<ChildLocator>(); CharacterModel val5 = val.AddComponent<CharacterModel>(); val5.body = null; val5.baseRendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = DMAssets.CreateMaterial("matDwarfMushrum", 0.5f, Color.white, 0f), renderer = (Renderer)((Component)component3.FindChild("Model")).GetComponent<SkinnedMeshRenderer>(), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false } }; val5.autoPopulateLightInfos = true; val5.invisibilityCount = 0; val5.temporaryOverlays = new List<TemporaryOverlayInstance>(); val5.body = bodyPrefab.GetComponent<CharacterBody>(); val5.mainSkinnedMeshRenderer = ((Component)val5.baseRendererInfos[0].renderer).gameObject.GetComponent<SkinnedMeshRenderer>(); CreateHurtbox(val, bodyPrefab.GetComponent<HealthComponent>(), component3); AimAnimator val6 = val.AddComponent<AimAnimator>(); val6.directionComponent = component; val6.pitchRangeMax = 60f; val6.pitchRangeMin = -60f; val6.yawRangeMin = -80f; val6.yawRangeMax = 80f; val6.pitchGiveupRange = 30f; val6.yawGiveupRange = 10f; val6.giveupDuration = 3f; val6.inputBank = bodyPrefab.GetComponent<InputBankTest>(); Transform parent = component3.FindChild("Head"); GameObject val7 = new GameObject(); Transform transform2 = val7.transform; transform2.parent = parent; transform2.localPosition = new Vector3(-0.006f, 0f, 0.005f); transform2.localRotation = Quaternion.Euler(new Vector3(90f, 230f, 0f)); transform2.localScale = Vector3.one * 0.03f; for (int i = 0; i < component3.transformPairs.Length; i++) { if (component3.transformPairs[i].name == "Head") { component3.transformPairs[i].transform = transform2; } } val5.itemDisplayRuleSet = Addressables.LoadAssetAsync<ItemDisplayRuleSet>((object)"RoR2/Base/Beetle/idrsBeetle.asset").WaitForCompletion(); } private static void CreateHurtbox(GameObject model, HealthComponent healthComponent, ChildLocator childLocator) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) HurtBoxGroup val = model.AddComponent<HurtBoxGroup>(); HurtBox val2 = ((Component)childLocator.FindChild("MainHurtbox")).gameObject.AddComponent<HurtBox>(); ((Component)val2).gameObject.layer = LayerIndex.entityPrecise.intVal; val2.healthComponent = healthComponent; val2.isBullseye = true; val2.damageModifier = (DamageModifier)0; val2.hurtBoxGroup = val; val2.indexInGroup = 0; val2.isSniperTarget = true; val.hurtBoxes = (HurtBox[])(object)new HurtBox[1] { val2 }; val.mainHurtBox = val2; val.bullseyeCount = 1; } } public static class Projectiles { public static GameObject sporeProjectile; public static List<GameObject> projectilePrefabs = new List<GameObject>(); public static void CreateProjectiles() { sporeProjectile = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/Projectiles/Fireball"), "DwarfMushrumSpore", true); sporeProjectile.GetComponent<ProjectileController>().ghostPrefab = Resources.Load<GameObject>("Prefabs/Projectiles/SporeGrenadeProjectile").GetComponent<ProjectileController>().ghostPrefab; projectilePrefabs.Add(sporeProjectile); } } internal static class Skills { internal static List<SkillFamily> skillFamilies = new List<SkillFamily>(); internal static List<SkillDef> skillDefs = new List<SkillDef>(); public static void RegisterSkills() { //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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) GameObject bodyPrefab = Prefabs.bodyPrefab; CreateSkillFamilies(bodyPrefab); SkillLocator component = bodyPrefab.GetComponent<SkillLocator>(); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(ChargeProjectile)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 1; val.baseRechargeInterval = 12f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.beginSkillCooldownOnSkillEnd = false; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; AddPrimarySkills(bodyPrefab, val); val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(InPlant)); val.activationStateMachineName = "Body"; val.baseMaxStock = 1; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = false; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.beginSkillCooldownOnSkillEnd = false; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 0; AddSecondarySkills(bodyPrefab, val); val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(Burrow)); val.activationStateMachineName = "Body"; val.baseMaxStock = 1; val.baseRechargeInterval = 8f; val.beginSkillCooldownOnSkillEnd = false; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.beginSkillCooldownOnSkillEnd = false; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; AddUtilitySkills(bodyPrefab, val); AddSpecialSkills(bodyPrefab, val); } public static void CreateSkillFamilies(GameObject targetPrefab, int families = 15, bool destroyExisting = true) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown if (destroyExisting) { GenericSkill[] componentsInChildren = targetPrefab.GetComponentsInChildren<GenericSkill>(); GenericSkill[] array = componentsInChildren; foreach (GenericSkill val in array) { Object.DestroyImmediate((Object)val); } } SkillLocator component = targetPrefab.GetComponent<SkillLocator>(); if (((uint)families & (true ? 1u : 0u)) != 0) { component.primary = CreateGenericSkillWithSkillFamily(targetPrefab, "Primary"); } if (((uint)families & 2u) != 0) { component.secondary = CreateGenericSkillWithSkillFamily(targetPrefab, "Secondary"); } if (((uint)families & 4u) != 0) { component.utility = CreateGenericSkillWithSkillFamily(targetPrefab, "Utility"); } if (((uint)families & 8u) != 0) { component.special = CreateGenericSkillWithSkillFamily(targetPrefab, "Special"); } } public static GenericSkill CreateGenericSkillWithSkillFamily(GameObject targetPrefab, string familyName, bool hidden = false) { GenericSkill val = targetPrefab.AddComponent<GenericSkill>(); val.skillName = familyName; val.hideInCharacterSelect = hidden; SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val2).name = ((Object)targetPrefab).name + familyName + "Family"; val2.variants = (Variant[])(object)new Variant[0]; val._skillFamily = val2; skillFamilies.Add(val2); return val; } public static void AddSkillToFamily(SkillFamily skillFamily, SkillDef skillDef, UnlockableDef unlockableDef = null) { //IL_0029: 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_0053: Expected O, but got Unknown //IL_0054: 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) Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); Variant[] variants = skillFamily.variants; int num = skillFamily.variants.Length - 1; Variant val = new Variant { skillDef = skillDef, unlockableDef = unlockableDef }; ((Variant)(ref val)).viewableNode = new Node(skillDef.skillNameToken, false, (Node)null); variants[num] = val; } public static void AddSkillsToFamily(SkillFamily skillFamily, params SkillDef[] skillDefs) { foreach (SkillDef skillDef in skillDefs) { AddSkillToFamily(skillFamily, skillDef); } } public static void AddPrimarySkills(GameObject targetPrefab, params SkillDef[] skillDefs) { AddSkillsToFamily(targetPrefab.GetComponent<SkillLocator>().primary.skillFamily, skillDefs); } public static void AddSecondarySkills(GameObject targetPrefab, params SkillDef[] skillDefs) { AddSkillsToFamily(targetPrefab.GetComponent<SkillLocator>().secondary.skillFamily, skillDefs); } public static void AddUtilitySkills(GameObject targetPrefab, params SkillDef[] skillDefs) { AddSkillsToFamily(targetPrefab.GetComponent<SkillLocator>().utility.skillFamily, skillDefs); } public static void AddSpecialSkills(GameObject targetPrefab, params SkillDef[] skillDefs) { AddSkillsToFamily(targetPrefab.GetComponent<SkillLocator>().special.skillFamily, skillDefs); } public static void AddUnlockablesToFamily(SkillFamily skillFamily, params UnlockableDef[] unlockableDefs) { //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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < unlockableDefs.Length; i++) { Variant val = skillFamily.variants[i]; val.unlockableDef = unlockableDefs[i]; skillFamily.variants[i] = val; } } public static SkillDef CreateSkillDef(SkillDefInfo skillDefInfo) { return Skills.CreateSkillDef<SkillDef>(skillDefInfo); } public static T CreateSkillDef<T>(SkillDefInfo skillDefInfo) where T : SkillDef { T val = ScriptableObject.CreateInstance<T>(); popuplateSKillDef(skillDefInfo, (SkillDef)(object)val); skillDefs.Add((SkillDef)(object)val); return val; } private static void popuplateSKillDef(SkillDefInfo skillDefInfo, SkillDef skillDef) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) skillDef.skillName = skillDefInfo.skillName; ((Object)skillDef).name = skillDefInfo.skillName; skillDef.skillNameToken = skillDefInfo.skillNameToken; skillDef.skillDescriptionToken = skillDefInfo.skillDescriptionToken; skillDef.icon = skillDefInfo.skillIcon; skillDef.activationState = skillDefInfo.activationState; skillDef.activationStateMachineName = skillDefInfo.activationStateMachineName; skillDef.baseMaxStock = skillDefInfo.baseMaxStock; skillDef.baseRechargeInterval = skillDefInfo.baseRechargeInterval; skillDef.beginSkillCooldownOnSkillEnd = skillDefInfo.beginSkillCooldownOnSkillEnd; skillDef.canceledFromSprinting = skillDefInfo.canceledFromSprinting; skillDef.forceSprintDuringState = skillDefInfo.forceSprintDuringState; skillDef.fullRestockOnAssign = skillDefInfo.fullRestockOnAssign; skillDef.interruptPriority = skillDefInfo.interruptPriority; skillDef.resetCooldownTimerOnUse = skillDefInfo.resetCooldownTimerOnUse; skillDef.isCombatSkill = skillDefInfo.isCombatSkill; skillDef.mustKeyPress = skillDefInfo.mustKeyPress; skillDef.cancelSprintingOnActivation = skillDefInfo.cancelSprintingOnActivation; skillDef.rechargeStock = skillDefInfo.rechargeStock; skillDef.requiredStock = skillDefInfo.requiredStock; skillDef.stockToConsume = skillDefInfo.stockToConsume; skillDef.keywordTokens = skillDefInfo.keywordTokens; } internal static SkillDef CreatePrimarySkillDef(SerializableEntityStateType state, string stateMachine, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, bool agile) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(skillNameToken, skillNameToken, skillDescriptionToken, skillIcon, state, stateMachine, agile); return CreateSkillDef(skillDefInfo); } } public static class SpawnCards { public static CharacterSpawnCard monsterSpawnCard; internal static ConfigEntry<int> minimumStageCount; internal static ConfigEntry<int> spawnCost; public static void CreateSpawnCards() { //IL_0015: 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: Expected O, but got Unknown //IL_0030: Expected O, but got Unknown //IL_0049: 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_0065: Expected O, but got Unknown //IL_0065: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: 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_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) minimumStageCount = ((BaseUnityPlugin)DwarfMushrumPlugin.instance).Config.Bind<int>(new ConfigDefinition("Dwarf Mushrum", "Minimum Stage Clear Count"), 0, new ConfigDescription("Number of stages that must be completed before this monster can spawn", (AcceptableValueBase)null, Array.Empty<object>())); spawnCost = ((BaseUnityPlugin)DwarfMushrumPlugin.instance).Config.Bind<int>(new ConfigDefinition("Dwarf Mushrum", "Spawn Cost"), 27, new ConfigDescription("How many director credits does this monster cost", (AcceptableValueBase)null, Array.Empty<object>())); CharacterSpawnCard val = ScriptableObject.CreateInstance<CharacterSpawnCard>(); ((Object)val).name = "cscDwarfMushrum"; ((SpawnCard)val).prefab = Prefabs.masterPrefab; ((SpawnCard)val).sendOverNetwork = true; ((SpawnCard)val).hullSize = (HullClassification)0; ((SpawnCard)val).nodeGraphType = (GraphType)0; ((SpawnCard)val).requiredFlags = (NodeFlags)0; ((SpawnCard)val).forbiddenFlags = (NodeFlags)2; ((SpawnCard)val).directorCreditCost = spawnCost.Value; ((SpawnCard)val).occupyPosition = false; val.loadout = new SerializableLoadout(); val.noElites = false; val.forbiddenAsBoss = false; DirectorCard val2 = new DirectorCard { spawnCard = (SpawnCard)(object)val, selectionWeight = 1, preventOverhead = false, minimumStageCompletions = minimumStageCount.Value, spawnDistance = (MonsterSpawnDistance)0 }; DirectorCardHolder val3 = new DirectorCardHolder { Card = val2, MonsterCategory = (MonsterCategory)2 }; DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)(object)val, selectionWeight = 1, preventOverhead = false, minimumStageCompletions = 5, spawnDistance = (MonsterSpawnDistance)2 }; DirectorCardHolder val4 = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)2 }; DirectorCardCategorySelection val5 = Addressables.LoadAssetAsync<DirectorCardCategorySelection>((object)"RoR2/Base/MixEnemy/dccsMixEnemy.asset").WaitForCompletion(); val5.AddCard(1, val2); foreach (StageSpawnInfo stage in Config.StageList) { DirectorCardHolder val6 = ((stage.GetMinStages() == 0) ? val3 : val4); Helpers.AddNewMonsterToStage(val6, false, DirectorAPI.ParseInternalStageName(stage.GetStageName()), stage.GetStageName()); } } } public class StageSpawnInfo { private string stageName; private int minStages; public StageSpawnInfo(string stageName, int minStages) { this.stageName = stageName; this.minStages = minStages; } public string GetStageName() { return stageName; } public int GetMinStages() { return minStages; } } public class States { internal static List<Type> entityStates = new List<Type>(); internal static void AddSkill(Type t) { entityStates.Add(t); } public static void RegisterStates() { //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) GameObject bodyPrefab = Prefabs.bodyPrefab; AddSkill(typeof(ChargeProjectile)); AddSkill(typeof(FireProjectile)); AddSkill(typeof(Burrow)); AddSkill(typeof(DeathState)); EntityStateMachine componentInChildren = bodyPrefab.GetComponentInChildren<EntityStateMachine>(); if (Object.op_Implicit((Object)(object)componentInChildren)) { componentInChildren.initialStateType = new SerializableEntityStateType(typeof(SpawnState)); } } } public static class StaticValues { public const string monsterName = "Dwarf Mushrum"; public const string monsterLore = "Bottom text"; } public static class Tokens { public static void RegisterLanguageTokens() { LanguageAPI.Add("DWARFMUSHRUM_BODY_NAME", "Dwarf Mushrum"); LanguageAPI.Add("DWARFMUSHRUM_BODY_LORE", "Bottom text"); } } }