Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of LunarConstructRevived v1.0.7
LunarConstruct.dll
Decompiled 6 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using LunarConstruct.Enemies; using LunarConstruct.Projectiles; using LunarConstruct.SkillDefs; using LunarConstruct.States; using Microsoft.CodeAnalysis; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.ExpansionManagement; using RoR2.Navigation; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LunarConstruct")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+2b51a89599817085288faa0ffaf041102fb834ae")] [assembly: AssemblyProduct("LunarConstruct")] [assembly: AssemblyTitle("LunarConstruct")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LunarConstruct { public static class Extensions { public static T GetRandom<T>(this List<T> list, Xoroshiro128Plus rng = null) { if (list.Count == 0) { return default(T); } if (rng == null) { return list[Random.RandomRangeInt(0, list.Count)]; } return list[rng.RangeInt(0, list.Count)]; } public static T GetRandom<T>(this T[] array) { int num = Random.Range(0, array.Length); return array[num]; } } [BepInPlugin("HIFU.LunarConstruct", "LunarConstruct", "1.0.7")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { public const string PluginGUID = "HIFU.LunarConstruct"; public const string PluginAuthor = "HIFU"; public const string PluginName = "LunarConstruct"; public const string PluginVersion = "1.0.7"; public static ExpansionDef SOTVExpansionDef; public static ManualLogSource LCLogger; public static AssetBundle lunarConstruct; public static ConfigEntry<bool> useWolfoNameScheme { get; set; } public void Awake() { //IL_0011: 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) LCLogger = ((BaseUnityPlugin)this).Logger; SOTVExpansionDef = Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC1/Common/DLC1.asset").WaitForCompletion(); useWolfoNameScheme = ((BaseUnityPlugin)this).Config.Bind<bool>("Name", "Use WolfoQoL name scheme?", false, "Changes Lunar Construct's in-game name from Lunar Chimera to Lunar Chimera Construct."); lunarConstruct = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("LunarConstruct.dll", "lunarconstruct")); LunarShard.Init(); TeleportEffect.Init(); IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(SkillDefBase)) select type; foreach (Type item in enumerable) { SkillDefBase skillDefBase = (SkillDefBase)Activator.CreateInstance(item); skillDefBase.Create(); } IEnumerable<Type> enumerable2 = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(EnemyBase)) select type; foreach (Type item2 in enumerable2) { EnemyBase enemyBase = (EnemyBase)Activator.CreateInstance(item2); enemyBase.Create(); } } } } namespace LunarConstruct.States { public class ChargeShardsState : BaseState { [SerializeField] public string enterSoundString = "Play_minorConstruct_attack_chargeUp"; [SerializeField] public string exitSoundString = "Stop_minorConstruct_attack_chargeUp"; [SerializeField] public string animationLayerName = "Weapon"; [SerializeField] public string animationStateName = "ChargeConstructBeam"; [SerializeField] public string animationPlaybackRateParam = "ConstructBeam.playbackRate"; [SerializeField] public string chargeEffectMuzzle = "Muzzle"; [SerializeField] public GameObject chargeEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/ChargeLunarGolemTwinShot.prefab").WaitForCompletion(); [SerializeField] public float baseDuration = 0.2f; private float duration; private GameObject chargeInstance; public override void OnEnter() { //IL_0081: 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) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; ((EntityState)this).PlayAnimation(animationLayerName, animationStateName, animationPlaybackRateParam, duration, 0f); Util.PlaySound(enterSoundString, ((EntityState)this).gameObject); Transform val = ((BaseState)this).FindModelChild(chargeEffectMuzzle); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)chargeEffectPrefab)) { chargeInstance = Object.Instantiate<GameObject>(chargeEffectPrefab, val.position, val.rotation); chargeInstance.transform.parent = ((EntityState)this).gameObject.transform; ScaleParticleSystemDuration component = chargeInstance.GetComponent<ScaleParticleSystemDuration>(); if (Object.op_Implicit((Object)(object)component)) { component.newDuration = duration; } } } public override void Update() { //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) //IL_002c: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).Update(); if (Object.op_Implicit((Object)(object)chargeInstance)) { Ray aimRay = ((BaseState)this).GetAimRay(); chargeInstance.transform.forward = ((Ray)(ref aimRay)).direction; } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge > duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new FireShardsState()); } } public override void OnExit() { Util.PlaySound(exitSoundString, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)chargeInstance)) { EntityState.Destroy((Object)(object)chargeInstance); } ((EntityState)this).OnExit(); } 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 FireShardsState : BaseState { [SerializeField] public GameObject effectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarSkillReplacements/MuzzleflashLunarNeedle.prefab").WaitForCompletion(); [SerializeField] public GameObject projectilePrefab = LunarShard.projectile; [SerializeField] public float damageCoefficient = 1.5f; [SerializeField] public float force = 1800f; [SerializeField] public float minSpread = 4f; [SerializeField] public float maxSpread = 10f; [SerializeField] public float baseDuration = 1f / 60f; [SerializeField] public float recoilAmplitude = 1f; [SerializeField] public string attackSoundString = "Play_minorConstruct_attack_shoot"; [SerializeField] public string targetMuzzle = "Muzzle"; [SerializeField] public float bloom = 1f; [SerializeField] public string animationLayerName = "Weapon"; [SerializeField] public string animationStateName = "FireConstructBeam"; protected float stopwatch; protected float duration; protected bool firedProjectile; public override void OnEnter() { ((BaseState)this).OnEnter(); stopwatch = 0f; duration = baseDuration / base.attackSpeedStat; if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.SetAimTimer(2f); } ((EntityState)this).PlayAnimation(animationLayerName, animationStateName); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void PlayAnimation(string layerName, string animationStateName) { Animator modelAnimator = ((EntityState)this).GetModelAnimator(); if (Object.op_Implicit((Object)(object)modelAnimator)) { EntityState.PlayAnimationOnAnimator(modelAnimator, layerName, animationStateName); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (!firedProjectile) { firedProjectile = true; FireProjectile(); DoFireEffects(); } if (stopwatch >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public void FireProjectile() { //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_001a: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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) if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((Ray)(ref aimRay)).direction = Util.ApplySpread(((Ray)(ref aimRay)).direction, minSpread, maxSpread, 1f, 1f, 0f, 0f); ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat * damageCoefficient, force, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } } public void DoFireEffects() { Util.PlaySound(attackSoundString, ((EntityState)this).gameObject); ((BaseState)this).AddRecoil(-2f * recoilAmplitude, -3f * recoilAmplitude, -1f * recoilAmplitude, 1f * recoilAmplitude); if (Object.op_Implicit((Object)(object)effectPrefab)) { EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, targetMuzzle, false); } ((EntityState)this).characterBody.AddSpreadBloom(bloom); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } } namespace LunarConstruct.SkillDefs { public class FireShards : SkillDefBase<FireShards> { public override string NameToken => "LUNARCONSTRUCT_FIRESHARDS_NAME"; public override string DescToken => "LUNARCONSTRUCT_FIRESHARDS_DESC"; public override SerializableEntityStateType ActivationState => new SerializableEntityStateType(typeof(ChargeShardsState)); public override string ActivationStateMachineName => "Weapon"; public override int BaseMaxStock => 5; public override float BaseRechargeInterval => 0.25f; public override bool BeginSkillCooldownOnSkillEnd => true; public override bool CanceledFromSprinting => false; public override bool CancelSprintingOnActivation => true; public override bool FullRestockOnAssign => true; public override InterruptPriority SkillInterruptPriority => (InterruptPriority)0; public override bool IsCombatSkill => true; public override bool MustKeyPress => false; public override int RechargeStock => 1; public override Sprite Icon => null; public override int StockToConsume => 1; public override int RequiredStock => 5; } public abstract class SkillDefBase<T> : SkillDefBase where T : SkillDefBase<T> { public static T Instance { get; private set; } public SkillDefBase() { if (Instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting SkillDefBase was instantiated twice"); } Instance = this as T; } } public abstract class SkillDefBase { public SkillDef SkillDef; public abstract string NameToken { get; } public abstract string DescToken { get; } public abstract SerializableEntityStateType ActivationState { get; } public abstract string ActivationStateMachineName { get; } public abstract int BaseMaxStock { get; } public abstract float BaseRechargeInterval { get; } public abstract bool BeginSkillCooldownOnSkillEnd { get; } public abstract bool CanceledFromSprinting { get; } public abstract bool CancelSprintingOnActivation { get; } public abstract bool FullRestockOnAssign { get; } public abstract InterruptPriority SkillInterruptPriority { get; } public abstract bool IsCombatSkill { get; } public abstract bool MustKeyPress { get; } public abstract int RechargeStock { get; } public abstract Sprite Icon { get; } public abstract int StockToConsume { get; } public abstract int RequiredStock { get; } public virtual void Create() { //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_009b: 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) SkillDef = ScriptableObject.CreateInstance<SkillDef>(); SkillDef.activationState = ActivationState; SkillDef.activationStateMachineName = ActivationStateMachineName; SkillDef.baseMaxStock = BaseMaxStock; SkillDef.baseRechargeInterval = BaseRechargeInterval; SkillDef.beginSkillCooldownOnSkillEnd = BeginSkillCooldownOnSkillEnd; SkillDef.canceledFromSprinting = CanceledFromSprinting; SkillDef.cancelSprintingOnActivation = CancelSprintingOnActivation; SkillDef.fullRestockOnAssign = FullRestockOnAssign; SkillDef.interruptPriority = SkillInterruptPriority; SkillDef.isCombatSkill = IsCombatSkill; SkillDef.mustKeyPress = MustKeyPress; SkillDef.rechargeStock = RechargeStock; SkillDef.icon = Icon; SkillDef.skillNameToken = NameToken; SkillDef.skillDescriptionToken = DescToken; SkillDef.stockToConsume = StockToConsume; SkillDef.requiredStock = RequiredStock; ContentAddition.AddSkillDef(SkillDef); } } } namespace LunarConstruct.Projectiles { public static class LunarShard { public static GameObject projectile; public static void Init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown //IL_00bd: 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_00e1: 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_010b: 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_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) projectile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MajorAndMinorConstruct/MinorConstructProjectile.prefab").WaitForCompletion(), "LunarConstructLunarShard"); AnimationCurve velocityOverLifetime = new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 1f), new Keyframe(2.5f, 0.5f), new Keyframe(5f, 0.25f) }) { preWrapMode = (WrapMode)8, postWrapMode = (WrapMode)8 }; ProjectileSimple component = projectile.GetComponent<ProjectileSimple>(); component.lifetime = 6f; component.desiredForwardSpeed = 45f; component.updateAfterFiring = true; component.enableVelocityOverLifetime = true; component.velocityOverLifetime = velocityOverLifetime; component.lifetimeExpiredEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/MuzzleflashLunarGolemTwinShot.prefab").WaitForCompletion(); ProjectileSingleTargetImpact component2 = projectile.GetComponent<ProjectileSingleTargetImpact>(); component2.impactEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/OmniImpactVFXBrotherLunarShardExplosion.prefab").WaitForCompletion(); ProjectileController component3 = projectile.GetComponent<ProjectileController>(); component3.flightSoundLoop = null; GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarExploder/LunarExploderShardGhost.prefab").WaitForCompletion(), "LunarConstructLunarShardGhost", false); TrailRenderer component4 = ((Component)val.transform.GetChild(1)).GetComponent<TrailRenderer>(); component4.widthMultiplier = 1.25f; ((Renderer)component4).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/LunarSun/matLunarSunProjectileTrail.mat").WaitForCompletion(); ParticleSystem component5 = ((Component)val.transform.GetChild(5)).GetComponent<ParticleSystem>(); MainModule main = component5.main; MinMaxGradient startColor = ((MainModule)(ref main)).startColor; ((MinMaxGradient)(ref startColor)).mode = (ParticleSystemGradientMode)0; ((MinMaxGradient)(ref startColor)).color = Color32.op_Implicit(new Color32((byte)0, (byte)12, (byte)238, byte.MaxValue)); component3.ghostPrefab = val; PrefabAPI.RegisterNetworkPrefab(projectile); } } public static class TeleportEffect { public static GameObject prefab; public static void Init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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_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_00ba: 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_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) prefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Parent/ParentTeleportEffect.prefab").WaitForCompletion(), "LunarConstructTeleport", false); Transform child = prefab.transform.GetChild(0); ParticleSystemRenderer component = ((Component)child.GetChild(0)).GetComponent<ParticleSystemRenderer>(); Texture2D val = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/ColorRamps/texRampLunarWispFire.png").WaitForCompletion(); Material val2 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Parent/matParentTeleportPortal.mat").WaitForCompletion()); val2.SetTexture("_RemapTex", (Texture)(object)val); ((Renderer)component).sharedMaterial = val2; ((Component)child.GetChild(1)).gameObject.SetActive(false); ParticleSystemRenderer component2 = ((Component)child.GetChild(3)).GetComponent<ParticleSystemRenderer>(); ((Renderer)component2).sharedMaterial = val2; ((Component)component2).gameObject.transform.localScale = Vector3.one * 0.25f; MainModule main = ((Component)child.GetChild(3)).GetComponent<ParticleSystem>().main; ((MainModule)(ref main)).duration = 0.17f; ((Component)child.GetChild(4)).gameObject.SetActive(false); ContentAddition.AddEffect(prefab); } } } namespace LunarConstruct.Enemies { public abstract class EnemyBase<T> : EnemyBase where T : EnemyBase<T> { public static T Instance { get; private set; } public EnemyBase() { if (Instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting EnemyBase was instantiated twice"); } Instance = this as T; } } public abstract class EnemyBase { public DirectorCard card; public DirectorCardHolder cardHolder; public CharacterSpawnCard isc; public GameObject prefab; public GameObject prefabMaster; public virtual string PathToClone { get; } = null; public virtual string CloneName { get; } = null; public virtual string PathToCloneMaster { get; } = null; public virtual bool local { get; } = false; public virtual bool localMaster { get; } = false; public virtual ExpansionDef RequiredExpansionHolder { get; } = Main.SOTVExpansionDef; public virtual void Create() { if (PathToClone != null && CloneName != null && PathToCloneMaster != null) { CreatePrefab(); ExpansionRequirementComponent val = prefab.AddComponent<ExpansionRequirementComponent>(); ExpansionRequirementComponent val2 = prefabMaster.AddComponent<ExpansionRequirementComponent>(); val.requiredExpansion = RequiredExpansionHolder; val2.requiredExpansion = RequiredExpansionHolder; } Modify(); AddSpawnCard(); AddDirectorCard(); PostCreation(); } public virtual void Modify() { } public virtual void PostCreation() { } public virtual void AddSpawnCard() { isc = ScriptableObject.CreateInstance<CharacterSpawnCard>(); } public virtual void AddDirectorCard() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown card = new DirectorCard(); card.spawnCard = (SpawnCard)(object)isc; cardHolder = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)2, MonsterCategorySelectionWeight = 2f }; } public void RegisterEnemy(GameObject bodyPrefab, GameObject masterPrefab, List<DirectorCardCategorySelection> stages) { PrefabAPI.RegisterNetworkPrefab(bodyPrefab); PrefabAPI.RegisterNetworkPrefab(masterPrefab); ContentAddition.AddBody(bodyPrefab); ContentAddition.AddMaster(masterPrefab); foreach (DirectorCardCategorySelection stage in stages) { DirectorAPI.AddCard(stage, cardHolder); } } public void DestroyModelLeftovers(GameObject prefab) { Object.Destroy((Object)(object)((Component)prefab.GetComponentInChildren<ModelLocator>().modelBaseTransform).gameObject); } public virtual void CreatePrefab() { //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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) if (!local) { prefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)PathToClone).WaitForCompletion(), CloneName + "Body"); } if (!localMaster) { prefabMaster = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)PathToCloneMaster).WaitForCompletion(), CloneName + "Master"); } } public void ReplaceSkill(GenericSkill slot, SkillDef replaceWith, string familyName = "temp") { //IL_0035: 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_0044: Unknown result type (might be due to invalid IL or missing references) SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val).name = familyName; slot._skillFamily = val; slot._skillFamily.variants = (Variant[])(object)new Variant[1]; slot._skillFamily.variants[0] = new Variant { skillDef = replaceWith }; } } public class LunarConstruct : EnemyBase<LunarConstruct> { public delegate Vector3 orig_aimOrigin(InputBankTest self); public CharacterBody body; public CharacterMaster master; public override string PathToClone => "RoR2/DLC1/MajorAndMinorConstruct/MinorConstructBody.prefab"; public override string CloneName => "LunarConstruct"; public override string PathToCloneMaster => "RoR2/DLC1/MajorAndMinorConstruct/MinorConstructMaster.prefab"; public override void CreatePrefab() { base.CreatePrefab(); body = prefab.GetComponent<CharacterBody>(); body.baseArmor = 0f; body.baseDamage = 13f; body.levelDamage = 2.6f; body.baseMaxHealth = 260f; body.levelMaxHealth = 78f; body.autoCalculateLevelStats = true; body.baseNameToken = "LUNARCONSTRUCT_NAME"; body.portraitIcon = (Texture)(object)Main.lunarConstruct.LoadAsset<Texture2D>("Assets/LunarConstruct/texPortrait.png"); } public override void AddSpawnCard() { //IL_000f: 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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) base.AddSpawnCard(); ((SpawnCard)isc).hullSize = (HullClassification)0; ((SpawnCard)isc).nodeGraphType = (GraphType)0; ((SpawnCard)isc).requiredFlags = (NodeFlags)0; ((SpawnCard)isc).forbiddenFlags = (NodeFlags)4; ((SpawnCard)isc).directorCreditCost = 120; ((SpawnCard)isc).occupyPosition = false; ((SpawnCard)isc).eliteRules = (EliteRules)2; ((SpawnCard)isc).sendOverNetwork = true; ((SpawnCard)isc).prefab = prefabMaster; ((Object)isc).name = "cscLunarConstruct"; } public override void AddDirectorCard() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) base.AddDirectorCard(); card.minimumStageCompletions = 0; card.selectionWeight = 1; card.spawnDistance = (MonsterSpawnDistance)0; } public override void Modify() { //IL_010b: 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_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) base.Modify(); master = prefabMaster.GetComponent<CharacterMaster>(); SkillLocator componentInChildren = prefab.GetComponentInChildren<SkillLocator>(); ReplaceSkill(componentInChildren.primary, SkillDefBase<FireShards>.Instance.SkillDef); LanguageAPI.Add("LUNARCONSTRUCT_NAME", "Lunar Chimera" + (Main.useWolfoNameScheme.Value ? " Construct" : "")); LanguageAPI.Add("LUNARCONSTRUCT_LORE", "Design driven. Cheap- and replicable. A shell made of two pyramids- I love triangles, after all.\r\n\r\nA central energy core capable of delivering a powerful blast within close quarters.\r\n\r\nThe energy core is heavy- the construct cannot move. Inefficient- speed is war.\r\n\r\nI have implemented a technology similar to my old gates. They can close distance to threats in the blink of an eye.\r\n\r\nTo see my brother bastardize this design- and for what? To act as security guards to keep his carnival of vermin trapped?\r\n\r\nIronic, then, that those very designs will be their destruction."); LanguageAPI.Add("LUNARCONSTRUCT_SUBTITLE", "Horde of Many"); AISkillDriver val = (from x in ((Component)master).GetComponents<AISkillDriver>() where x.customName == "Shooty" select x).First(); val.requiredSkill = SkillDefBase<FireShards>.Instance.SkillDef; val.requireSkillReady = true; val.maxDistance = 150f; ((Component)body).gameObject.AddComponent<TeleportController>(); Texture2D val2 = Main.lunarConstruct.LoadAsset<Texture2D>("Assets/LunarConstruct/texRamp.png"); Material val3 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/MajorAndMinorConstruct/matMinorConstructAlly.mat").WaitForCompletion()); val3.SetTexture("_FresnelRamp", (Texture)(object)val2); val3.SetTexture("_FlowHeightRamp", (Texture)(object)val2); val3.SetTexture("_MainTex", (Texture)(object)Main.lunarConstruct.LoadAsset<Texture2D>("Assets/LunarConstruct/texLunarConstruct.png")); val3.SetColor("_EmColor", Color32.op_Implicit(new Color32((byte)73, (byte)107, (byte)229, byte.MaxValue))); Transform child = ((Component)body).gameObject.transform.GetChild(0).GetChild(0); CharacterModel component = ((Component)child).GetComponent<CharacterModel>(); RendererInfo[] baseRendererInfos = component.baseRendererInfos; for (int i = 0; i < baseRendererInfos.Length; i++) { baseRendererInfos[i].defaultMaterial = val3; } ((Component)body).gameObject.transform.localScale = new Vector3(1.25f, 1.25f, 1.25f); ChildLocator component2 = ((Component)child).GetComponent<ChildLocator>(); Transform transform = component2.transformPairs[1].transform; Light component3 = ((Component)transform.GetChild(0)).GetComponent<Light>(); component3.color = Color32.op_Implicit(new Color32((byte)132, (byte)193, byte.MaxValue, byte.MaxValue)); Light component4 = ((Component)transform.GetChild(1)).GetComponent<Light>(); component4.color = Color32.op_Implicit(new Color32((byte)94, (byte)145, byte.MaxValue, byte.MaxValue)); ((Component)transform.GetChild(2)).gameObject.SetActive(false); Texture2D val4 = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/ColorRamps/texRampRJMushroom.png").WaitForCompletion(); Material val5 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/MajorAndMinorConstruct/matMinorConstructShield.mat").WaitForCompletion()); val5.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)12, (byte)31, (byte)63, byte.MaxValue))); val5.SetTexture("_RemapTex", (Texture)(object)val4); Transform transform2 = component2.transformPairs[2].transform; Transform child2 = transform2.GetChild(0); MeshRenderer component5 = ((Component)child2).GetComponent<MeshRenderer>(); ((Renderer)component5).material = val5; master.bodyPrefab = prefab; } public override void PostCreation() { //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_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) base.PostCreation(); List<DirectorCardCategorySelection> stages = new List<DirectorCardCategorySelection> { Addressables.LoadAssetAsync<DirectorCardCategorySelection>((object)"RoR2/Base/moon/dccsMoonMonsters.asset").WaitForCompletion(), Addressables.LoadAssetAsync<DirectorCardCategorySelection>((object)"RoR2/DLC1/itmoon/dccsITMoonMonsters.asset").WaitForCompletion() }; RegisterEnemy(prefab, prefabMaster, stages); } } public class TeleportController : MonoBehaviour { public HealthComponent hc; public CharacterBody cb; public float stopwatch = 0f; public GameObject teleportEffect = TeleportEffect.prefab; public void Start() { hc = ((Component)this).GetComponent<HealthComponent>(); cb = hc.body; } public void FixedUpdate() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) stopwatch += Time.fixedDeltaTime; if (stopwatch >= GetDelay()) { stopwatch = 0f; HandleTeleport(PickTeleportPosition()); } } public float GetDelay() { return 6f; } public void HandleTeleport(Vector3 pos) { //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) //IL_0025: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_004a: 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_005f: Unknown result type (might be due to invalid IL or missing references) if (!cb.isPlayerControlled) { Vector3 position = ((Component)this).transform.position; EffectManager.SpawnEffect(teleportEffect, new EffectData { scale = 0.6f, origin = position }, true); TeleportHelper.TeleportBody(cb, pos + new Vector3(0f, 1f, 0f)); } } public Vector3[] PickValidPositions(float min, float max, Node[] nodes) { //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) Node[] array = nodes.Where((Node x) => Vector3.Distance(x.position, ((Component)this).transform.position) > min && Vector3.Distance(x.position, ((Component)this).transform.position) < max).ToArray(); if (array.Length <= 1) { return (Vector3[])(object)new Vector3[1] { ((Component)this).transform.position }; } return array.Select((Node node) => node.position).ToArray(); } public Vector3 PickTeleportPosition() { //IL_0058: 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_002d: 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_0060: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)SceneInfo.instance) || !Object.op_Implicit((Object)(object)SceneInfo.instance.groundNodes)) { return ((Component)this).transform.position; } Node[] nodes = SceneInfo.instance.groundNodes.nodes; Vector3[] array = PickValidPositions(0f, 35f, nodes); return array.GetRandom(); } } }