Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Overseer v0.7.3
Overseer.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using HG.Reflection; using Microsoft.CodeAnalysis; using On.RoR2; using On.RoR2.Projectile; using Overseer.Components; using Overseer.Content; using Overseer.States; using Overseer.Units; using Overseer.Units.Defense; using RoR2; using RoR2.CharacterAI; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.UI; using YAU.AddressableUtils; using YAU.AddressableUtils.Assets; using YAU.Attributes; using YAU.Components; using YAU.Constants; using YAU.Content; using YAU.ContentBases; using YAU.Extensions.Enumeration; using YAU.Extensions.Text; using YAU.Helpers; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("Overseer")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Overseer")] [assembly: AssemblyTitle("Overseer")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Overseer { [ConfigSection("Overseer")] public class Overseer : GenericBase<Overseer> { [CompilerGenerated] private static class <>O { public static hook_IgnoreCollisionsWithOwner <0>__Ignore; public static hook_TakeDamage <1>__WardenAbsorb; public static hook_TakeDamage <2>__MarkedDamage; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<CharacterModel, bool> <>9__2_0; public static FilterCallback <>9__6_0; internal bool <Initialize>b__2_0(CharacterModel x) { return Object.op_Implicit((Object)(object)x.body) && Object.op_Implicit((Object)(object)((Component)x.body).GetComponent<Marker>()); } internal bool <AlliesDontEatShots>b__6_0(BulletAttack attack, ref BulletHit hit) { if (Object.op_Implicit((Object)(object)hit.hitHurtBox) && Object.op_Implicit((Object)(object)hit.hitHurtBox.healthComponent) && ((Component)hit.hitHurtBox.healthComponent.body).GetComponent<IUnitC>() != null) { return false; } return BulletAttack.DefaultFilterCallbackImplementation(attack, ref hit); } } public SurvivorDef sdOverseer; public GameObject OverseerBody; public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier) { //IL_0090: 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_009b: Expected O, but got Unknown //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_00ed: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown ((GenericBase)this).contentPack = pack; sdOverseer = Main.assets.LoadAsset<SurvivorDef>("sdOverseer.asset"); OverseerBody = Main.assets.LoadAsset<GameObject>("OverseerBody.prefab"); OverseerBody.GetComponent<CameraTargetParams>().cameraParams = CharacterCameraParams.ccpStandard; OverseerBody.GetComponent<CharacterBody>().preferredPodPrefab = GameObject.RoboCratePod; ((GenericBase)this).contentPack.RegisterGameObject(OverseerBody); ((GenericBase)this).contentPack.RegisterScriptableObject((ScriptableObject)(object)sdOverseer); object obj = <>O.<0>__Ignore; if (obj == null) { hook_IgnoreCollisionsWithOwner val = Ignore; <>O.<0>__Ignore = val; obj = (object)val; } ProjectileController.IgnoreCollisionsWithOwner += (hook_IgnoreCollisionsWithOwner)obj; SetupLang(); OverlayManager.AddOverlay(Material.matPulverizedOverlay, (Func<CharacterModel, bool>)((CharacterModel x) => Object.op_Implicit((Object)(object)x.body) && Object.op_Implicit((Object)(object)((Component)x.body).GetComponent<Marker>()))); object obj2 = <>O.<1>__WardenAbsorb; if (obj2 == null) { hook_TakeDamage val2 = WardenAbsorb; <>O.<1>__WardenAbsorb = val2; obj2 = (object)val2; } HealthComponent.TakeDamage += (hook_TakeDamage)obj2; object obj3 = <>O.<2>__MarkedDamage; if (obj3 == null) { hook_TakeDamage val3 = MarkedDamage; <>O.<2>__MarkedDamage = val3; obj3 = (object)val3; } HealthComponent.TakeDamage += (hook_TakeDamage)obj3; } private static void MarkedDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<Marker>())) { info.damage *= 1.25f; } orig.Invoke(self, info); } private static void WardenAbsorb(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)((Component)self).GetComponent<OverseerController>())) { orig.Invoke(self, info); return; } OverseerController component = ((Component)self).GetComponent<OverseerController>(); List<WardenController> list = new List<WardenController>(); foreach (IUnitC activeUnit in component.activeUnits) { if (Object.op_Implicit((Object)(object)activeUnit.GetSelf().GetComponent<WardenController>())) { list.Add(activeUnit.GetSelf().GetComponent<WardenController>()); } } if (list.Count() > 0) { float num = info.damage * 0.4f; info.damage *= 0.6f; float damage = num / (float)list.Count(); foreach (WardenController item in list) { item.body.healthComponent.TakeDamage(new DamageInfo { damage = damage, position = ((Component)item).transform.position, damageColorIndex = (DamageColorIndex)2 }); } } orig.Invoke(self, info); } private static void Ignore(orig_IgnoreCollisionsWithOwner orig, ProjectileController self, bool ignore) { orig.Invoke(self, ignore); if (!Object.op_Implicit((Object)(object)self.owner) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<CharacterBody>()) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<CharacterBody>().master) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<OverseerController>())) { return; } foreach (IUnitC activeUnit in self.owner.GetComponent<OverseerController>().activeUnits) { Collider[] myColliders = self.myColliders; foreach (Collider val in myColliders) { Physics.IgnoreCollision(activeUnit.GetSelf().GetComponentInChildren<Collider>(), val, true); } } } private static void AlliesDontEatShots(orig_Fire orig, BulletAttack self) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown if ((Delegate?)(object)self.filterCallback == (Delegate?)(object)BulletAttack.defaultFilterCallback) { object obj = <>c.<>9__6_0; if (obj == null) { FilterCallback val = delegate(BulletAttack attack, ref BulletHit hit) { return (!Object.op_Implicit((Object)(object)hit.hitHurtBox) || !Object.op_Implicit((Object)(object)hit.hitHurtBox.healthComponent) || ((Component)hit.hitHurtBox.healthComponent.body).GetComponent<IUnitC>() == null) && BulletAttack.DefaultFilterCallbackImplementation(attack, ref hit); }; <>c.<>9__6_0 = val; obj = (object)val; } self.filterCallback = (FilterCallback)obj; } orig.Invoke(self); } private void SetupLang() { StringExtensions.Add("OVERSEER_NAME", "Overseer"); StringExtensions.Add("OVERSEER_PASSIVE1_NAME", "Defense System"); StringExtensions.Add("OVERSEER_PASSIVE1_DESC", "A defensive shield absorbs heavy hits. Regenerates 50% slower when assembling a unit."); StringExtensions.Add("OVERSEER_PASSIVE2_NAME", "Vengeance Protocol"); StringExtensions.Add("OVERSEER_PASSIVE2_DESC", "Units <style=cIsUtility>seek out</style> targets on death, exploding for <style=cIsDamage>800%</style> damage."); StringExtensions.Add("OVERSEER_PASSIVE3_NAME", "Swarm Commander"); StringExtensions.Add("OVERSEER_PASSIVE3_DESC", "Increase unit cap and unit assembly speed by <style=cIsDamage>200%</style>. Units are <style=cDeath>half as effective</style>."); StringExtensions.Add("OVERSEER_PRIMARY_NAME", "Spectral Cascade"); StringExtensions.Add("OVERSEER_PRIMARY_DESC", "Fire a volley of 3 <style=cIsUtility>plasma blasts</style> for <style=cIsDamage>70% damage</style>. The last shot deals <style=cIsDamage>160%</style> and <style=cDeath>Marks</style> targets."); StringExtensions.Add("OVERSEER_SECONDARY_NAME", "Discharge"); StringExtensions.Add("OVERSEER_SECONDARY_DESC", "<style=cIsUtility>Shocking</style>. Launch a burst of plasma for <style=cIsDamage>400% damage</style>. Units struck <style=cDeath>detonate</style> in an <style=cIsUtility>electrifying blast</style>."); StringExtensions.Add("OVERSEER_UTILITY_NAME", "Beam Transmission"); StringExtensions.Add("OVERSEER_UTILITY_DESC", "Perform a short <style=cIsUtility>intangible</style> dash."); StringExtensions.Add("OVERSEER_SPECIAL_NAME", "Reconfigure"); StringExtensions.Add("OVERSEER_SPECIAL_DESC", "Switch to <style=cIsUtility>producing</style> the next type of <style=cIsDamage>unit</style>."); StringExtensions.Add("OVERSEER_SENTINEL_NAME", "Unit: Sentinel"); StringExtensions.Add("OVERSEER_SENTINEL_DESC", "An agile unit that fires piercing lasers for <style=cIsDamage>50% damage</style> and launches homing missiles for <style=cIsDamage>200% damage</style>."); StringExtensions.Add("OVERSEER_MENDER_NAME", "Unit: Mender"); StringExtensions.Add("OVERSEER_MENDER_DESC", "A sturdy unit that <style=cIsHealing>repairs</style> you and nearby units."); StringExtensions.Add("OVERSEER_BEACON_NAME", "Unit: Beacon"); StringExtensions.Add("OVERSEER_BEACON_DESC", "A fragile unit that overclocks you, <style=cIsUtility>increasing your speed</style>."); StringExtensions.Add("OVERSEER_SWARMER_NAME", "Unit: Swarmer"); StringExtensions.Add("OVERSEER_SWARMER_DESC", "A fragile unit that performs quick ram attacks at targets for <style=cIsDamage>100% damage per second</style>."); StringExtensions.Add("OVERSEER_WARDEN_NAME", "Unit: Warden"); StringExtensions.Add("OVERSEER_WARDEN_DESC", "A sturdy unit that redirects <style=cIsUtility>40%</style> of the damage taken by you and nearby units to itself."); StringExtensions.Add("OVERSEER_VICTORY", "And so it left, "); } } [BepInPlugin("pseudopulse.Overseer", "Overseer", "0.7.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { public const string PluginGUID = "pseudopulse.Overseer"; public const string PluginAuthor = "pseudopulse"; public const string PluginName = "Overseer"; public const string PluginVersion = "0.7.0"; private const bool ShouldShowLog = false; [StubShaders] public static AssetBundle assets; public static ManualLogSource ModLogger; public static YAUContentPack contentPack; public void Awake() { assets = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("Overseer.dll", "overseerbundle")); ModLogger = ((BaseUnityPlugin)this).Logger; contentPack = ContentPackManager.CreateContentPack(Assembly.GetExecutingAssembly(), "Overseer"); ContentScanner.ScanTypes<GenericBase>(Assembly.GetExecutingAssembly(), (Action<GenericBase>)delegate(GenericBase x) { x.Initialize(contentPack, ((BaseUnityPlugin)this).Config, "Overseer"); }); ConfigManager.HandleConfigAttributes(Assembly.GetExecutingAssembly(), ((BaseUnityPlugin)this).Config); UnitCatalog.Initialize(); Dash.CreatePrefabs(); Material[] array = assets.LoadAllAssets<Material>(); foreach (Material val in array) { val.shader = Shader.HGStandard; } } public static void Log(string text) { bool flag = true; } } } namespace Overseer.Units { [CreateAssetMenu(menuName = "Overseer/Action", fileName = "Action")] public class UnitAction : ScriptableObject { public Sprite Icon; public KeyCode ActivationKey; public ActionType ActionType; public string KeyCodeText; } public enum ActionType { Recall, Retarget, Terminate, BuildOffense, BuildDefense, BuildSupport, Cancel } public class SwarmerController : UnitController { private bool isCurrentlyInDashAttack = false; private float stopwatch = 0f; private float attackCooldown = Random.Range(1f, 3f); private Vector3 forwardVec; private float stopwatch2; public ContactDamage contactDamage; private bool shouldTarget = true; public override HurtBox Target { get; set; } public override void OverrideTarget(HurtBox newTarget) { Target = newTarget; } public override void PerformMovement(int totalUnits, int thisUnit) { if (isCurrentlyInDashAttack) { DashMovement(); } else { OrbitalMovement(totalUnits, thisUnit, 360f, 0f, 3.5f); } } public override void PerformSecondaryAction() { } public void DashMovement() { //IL_0007: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) Vector3 position = Vector3.Lerp(((Component)this).transform.position, ((Component)this).transform.position + forwardVec * 3f, 20f * Time.fixedDeltaTime); ((Component)this).transform.position = position; } public void Cancel() { isCurrentlyInDashAttack = false; } public override void FixedUpdate() { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: 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_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); contactDamage.overlapAttack.attacker = ((Component)owner).gameObject; if (!isCurrentlyInDashAttack) { stopwatch += Time.fixedDeltaTime; } Vector3 val; if (stopwatch >= attackCooldown) { stopwatch = 0f; attackCooldown = Random.Range(1f, 3f); if (Object.op_Implicit((Object)(object)Target)) { isCurrentlyInDashAttack = true; val = ((Component)Target).transform.position - ((Component)this).transform.position; forwardVec = ((Vector3)(ref val)).normalized; ((MonoBehaviour)this).Invoke("Cancel", 3f); } else { Target = FindNearbyEnemy(); } } if (!Object.op_Implicit((Object)(object)Target)) { isCurrentlyInDashAttack = false; } if (Object.op_Implicit((Object)(object)Target) && !((Behaviour)Target).isActiveAndEnabled) { Target = null; } stopwatch2 += Time.fixedDeltaTime; if (stopwatch2 >= 0.5f && isCurrentlyInDashAttack) { val = ((Component)Target).transform.position - ((Component)this).transform.position; forwardVec = ((Vector3)(ref val)).normalized; stopwatch2 = 0f; } if (isCurrentlyInDashAttack) { ((Component)this).transform.rotation = Quaternion.identity; ((Component)this).transform.forward = forwardVec; } else { ((Component)this).transform.rotation = Quaternion.Euler(-90f, 0f, 0f); } } public override void Recall() { if (isCurrentlyInDashAttack) { isCurrentlyInDashAttack = false; } shouldTarget = !shouldTarget; } } [CreateAssetMenu(menuName = "Overseer/Unit", fileName = "Unit")] public class Unit : ScriptableObject { public string Name; public string Description; public Sprite Icon; public GameObject Prefab; public float AssemblyTime; public UnitIndex UnitType; public void Initialize() { } } public enum UnitIndex { Sentinel, Swarmer, Warden, Mender, Beacon, Battery } public static class UnitCatalog { public static List<Unit> allUnits; public static void Initialize() { allUnits = Main.assets.LoadAllAssets<Unit>().ToList(); foreach (Unit allUnit in allUnits) { allUnit.Initialize(); } } public static Unit GetUnitType(UnitIndex index) { return allUnits.FirstOrDefault((Unit x) => x.UnitType == index); } public static GameObject SpawnUnit(OverseerController owner, Unit type) { //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) GameObject val = Object.Instantiate<GameObject>(type.Prefab, ((Component)owner).transform.position, Quaternion.identity); IUnitC component = val.GetComponent<IUnitC>(); component.Initialize(owner); NetworkServer.Spawn(val); return val; } } public interface IUnitC { HurtBox Target { get; set; } Unit UnitType { get; set; } TargetType TargetType { get; set; } void OverrideTarget(HurtBox newTarget); void PerformMovement(int totalUnits, int thisUnit); void Recall(); void PerformSecondaryAction(); void Initialize(OverseerController owner); void Destruct(bool ignoreVengeance = false); GameObject GetSelf(); } public abstract class UnitController : MonoBehaviour, IUnitC { public Unit type; private Vector3 freeformTargetPos; private float freeformUpdateStopwatch; public CharacterBody body; public OverseerController owner; private bool hasRequestedDestruction = false; private HurtBox destructionTarget; private bool isDoingInfernalDestruction = false; private float altFireStopwatch = 0f; protected bool isOvercharged = false; private float overchargeTimer = 0f; public abstract HurtBox Target { get; set; } public Unit UnitType { get { return type; } set { type = value; } } public virtual TargetType TargetType { get; set; } = (TargetType)0; public virtual float OrbitDistance { get; } = 3f; public virtual float FreeformDistance { get; } = 3f; public virtual bool OrbitalPivotIsTarget { get; } = false; public abstract void OverrideTarget(HurtBox newTarget); public abstract void PerformMovement(int totalUnits, int thisUnit); public abstract void PerformSecondaryAction(); public abstract void Recall(); public GameObject GetSelf() { return ((Component)this).gameObject; } public void Initialize(OverseerController owner) { this.owner = owner; body = ((Component)this).GetComponent<CharacterBody>(); } public void Overcharge() { } public void Destruct(bool ignoreVengenace = false) { //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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) if (owner.isPassiveInfernal && !ignoreVengenace) { isDoingInfernalDestruction = true; destructionTarget = FindNearbyEnemy(); if (Object.op_Implicit((Object)(object)destructionTarget)) { freeformTargetPos = ((Component)destructionTarget).transform.position; return; } } EffectManager.SpawnEffect(GameObject.ExplosionDroneDeath, new EffectData { origin = ((Component)this).transform.position }, true); Object.Destroy((Object)(object)((Component)this).gameObject); } public void OrbitalMovement(int totalUnits, int thisUnit, float fullAngle, float offset) { //IL_0036: 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_003b: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if (!isDoingInfernalDestruction) { Vector3 val = (OrbitalPivotIsTarget ? ((Component)Target).transform.position : owner.body.corePosition) + Vector3.up + Quaternion.AngleAxis(fullAngle / (float)totalUnits * (float)thisUnit + offset, Vector3.up) * owner.body.characterDirection.forward * OrbitDistance; Vector3 position = Vector3.Lerp(((Component)this).transform.position, val, 20f * Time.fixedDeltaTime); ((Component)this).transform.position = position; } } public void OrbitalMovement(int totalUnits, int thisUnit, float fullAngle, float offset, float dist) { //IL_0036: 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_003b: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) if (!isDoingInfernalDestruction) { Vector3 val = (OrbitalPivotIsTarget ? ((Component)Target).transform.position : owner.body.corePosition) + Vector3.up + Quaternion.AngleAxis(fullAngle / (float)totalUnits * (float)thisUnit + offset, Vector3.up) * owner.body.characterDirection.forward * dist; Vector3 position = Vector3.Lerp(((Component)this).transform.position, val, 20f * Time.fixedDeltaTime); ((Component)this).transform.position = position; } } public void OrbitalMovement(int totalUnits, int thisUnit, float fullAngle, float offset, float dist, float vertoffset) { //IL_0036: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) if (!isDoingInfernalDestruction) { Vector3 val = (OrbitalPivotIsTarget ? ((Component)Target).transform.position : owner.body.corePosition) + Vector3.up * vertoffset + Quaternion.AngleAxis(fullAngle / (float)totalUnits * (float)thisUnit + offset, Vector3.up) * owner.body.characterDirection.forward * dist; Vector3 position = Vector3.Lerp(((Component)this).transform.position, val, 20f * Time.fixedDeltaTime); ((Component)this).transform.position = position; } } public void FreeformMovement() { //IL_0007: 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_001d: 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_0029: Unknown result type (might be due to invalid IL or missing references) Vector3 position = Vector3.Lerp(((Component)this).transform.position, freeformTargetPos, 2f * Time.fixedDeltaTime); ((Component)this).transform.position = position; } public virtual void FixedUpdate() { //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Expected O, but got Unknown //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_017f: 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_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: 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) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Expected O, but got Unknown freeformUpdateStopwatch -= Time.fixedDeltaTime; if (isOvercharged) { overchargeTimer -= Time.fixedDeltaTime; if (overchargeTimer <= 0f) { isOvercharged = false; } } altFireStopwatch -= Time.fixedDeltaTime; if (altFireStopwatch <= 0f) { altFireStopwatch = Random.Range(3f, 6f); PerformSecondaryAction(); } if (isDoingInfernalDestruction) { if (Object.op_Implicit((Object)(object)destructionTarget)) { freeformTargetPos = ((Component)destructionTarget).transform.position; } FreeformMovement(); if (Vector3.Distance(body.corePosition, freeformTargetPos) < 3f) { BlastAttack val = new BlastAttack(); val.baseDamage = owner.body.damage * 8f; val.radius = 5f; val.crit = false; val.damageColorIndex = (DamageColorIndex)3; val.falloffModel = (FalloffModel)0; val.position = body.corePosition; val.procChainMask = default(ProcChainMask); val.procCoefficient = 1f; val.attacker = ((Component)owner).gameObject; val.teamIndex = (TeamIndex)1; val.attackerFiltering = (AttackerFiltering)2; val.Fire(); EffectManager.SpawnEffect(GameObject.OmniExplosionVFX, new EffectData { origin = body.corePosition, scale = 5f }, true); AkSoundEngine.PostEvent(WwiseEvents.Play_wGiantJellyExplosion, ((Component)this).gameObject); Object.Destroy((Object)(object)((Component)this).gameObject); } return; } if (freeformUpdateStopwatch <= 0f) { freeformUpdateStopwatch = 1f; if (Object.op_Implicit((Object)(object)Target)) { freeformTargetPos = Target.healthComponent.body.corePosition + Random.onUnitSphere * FreeformDistance; freeformTargetPos.y = Target.healthComponent.body.corePosition.y + Random.Range(-0.5f, 1.5f); } else { freeformTargetPos = owner.body.corePosition + Random.onUnitSphere * FreeformDistance; freeformTargetPos.y = owner.body.corePosition.y + Random.Range(-0.5f, 1.5f); } } if (Object.op_Implicit((Object)(object)body) && !body.healthComponent.alive && !hasRequestedDestruction) { hasRequestedDestruction = true; owner.RequestDestruction(this); } } public HurtBox FindNearbyEnemy() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0028: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) SphereSearch val = new SphereSearch(); val.radius = (isDoingInfernalDestruction ? 300f : 60f); val.origin = ((Component)this).transform.position; val.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; val.RefreshCandidates(); val.OrderCandidatesByDistance(); val.FilterCandidatesByHurtBoxTeam(TeamMask.GetUnprotectedTeams((TeamIndex)1)); val.FilterCandidatesByDistinctHurtBoxEntities(); return val.GetHurtBoxes().FirstOrDefault(); } } [CreateAssetMenu(fileName = "UnitSkillDef", menuName = "Overseer/UnitSkillDef")] public class UnitSkillDef : SkillDef { public Unit UnitType; } } namespace Overseer.Units.Support { public class BeaconController : UnitController { private float stopwatch = 3f; private float tpStopwatch = 0f; private float tpDelay = 1f; public override HurtBox Target { get; set; } public override bool OrbitalPivotIsTarget => true; public override float OrbitDistance => 4f; public override float FreeformDistance => 5f; public override TargetType TargetType => (TargetType)1; public override void OverrideTarget(HurtBox newTarget) { } public override void PerformMovement(int totalUnits, int thisUnit) { //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_0058: 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) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0104: 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_010c: Unknown result type (might be due to invalid IL or missing references) //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_0123: Expected O, but got Unknown tpStopwatch += Time.fixedDeltaTime; if (!(tpStopwatch >= tpDelay)) { return; } tpDelay = Random.Range(0.7f, 2f); Vector3 position = ((Component)this).transform.position; Vector3[] array = (from x in Utils.GetSafePositionsWithinDistance(((Component)Target).transform.position, 8f) where HasLOS(x) select x).ToArray(); if (array.Length != 0) { tpStopwatch = 0f; Vector3 random = EnumeratorExtensions.GetRandom<Vector3>((IEnumerable<Vector3>)array, Run.instance.runRNG); random += Vector3.up * 1.5f + Random.onUnitSphere; if (!(Vector3.Distance(random, ((Component)this).transform.position) < 3f)) { ((Component)this).transform.position = random; EffectManager.SpawnEffect(Dash.TPTracer, new EffectData { origin = random, start = position, scale = 0.6f }, true); } } } public bool HasLOS(Vector3 pos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_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_001b: 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) Vector3 val = ((Component)Target).transform.position - pos; return Physics.Raycast(pos, ((Vector3)(ref val)).normalized, 2000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); } public override void PerformSecondaryAction() { } public override void FixedUpdate() { //IL_0065: 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) base.FixedUpdate(); if (!Object.op_Implicit((Object)(object)Target)) { Target = owner.body.mainHurtBox; } stopwatch += Time.fixedDeltaTime; if (stopwatch >= 1f && Object.op_Implicit((Object)(object)Target) && Vector3.Distance(((Component)this).transform.position, ((Component)Target).transform.position) < 10f) { stopwatch = 0f; Target.healthComponent.body.AddTimedBuff(BeaconSpeedBoost.BeaconSpeed, 3f); } } public override void Recall() { Target = owner.body.mainHurtBox; } } } namespace Overseer.Units.Offense { public class SentinelController : UnitController { private bool isFreeform = true; private float stopwatch = 0f; public override HurtBox Target { get; set; } public override void OverrideTarget(HurtBox newTarget) { Target = newTarget; } public override void PerformMovement(int totalUnits, int thisUnit) { //IL_0021: 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) if (!Object.op_Implicit((Object)(object)Target) || !isFreeform || !(Vector3.Distance(((Component)Target).transform.position, ((Component)this).transform.position) < 5f)) { if (isFreeform) { FreeformMovement(); return; } float fullAngle = 0f; float offset = 270f; float dist = ((thisUnit >= totalUnits / 2) ? (-(thisUnit - totalUnits / 2) - 1) : (thisUnit + 1)); OrbitalMovement(totalUnits, thisUnit, fullAngle, offset, dist); } } public override void PerformSecondaryAction() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) if (isFreeform || Object.op_Implicit((Object)(object)Target)) { FireProjectileInfo val = default(FireProjectileInfo); val.crit = Util.CheckRoll(owner.body.crit, 0f, (CharacterMaster)null); val.damage = owner.body.damage * 2f; val.owner = ((Component)owner).gameObject; val.position = ((Component)this).transform.position; Vector3 val2 = ((isFreeform && Object.op_Implicit((Object)(object)Target)) ? (((Component)Target).transform.position - ((Component)this).transform.position) : (owner.AimPoint - ((Component)this).transform.position)); val.rotation = Util.QuaternionSafeLookRotation(((Vector3)(ref val2)).normalized); val.projectilePrefab = GameObject.MissileProjectile; ProjectileManager.instance.FireProjectile(val); } } public override void FixedUpdate() { //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_00f8: 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_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (Object.op_Implicit((Object)(object)Target) && !((Behaviour)Target).isActiveAndEnabled) { Target = null; } if (stopwatch >= 1f) { if (!Object.op_Implicit((Object)(object)Target)) { Target = FindNearbyEnemy(); } stopwatch = 0f; if (Object.op_Implicit((Object)(object)Target) && isFreeform) { FireLaser(); } else if (!isFreeform) { FireLaserFlank(); } } Vector3 val; if (Object.op_Implicit((Object)(object)Target)) { Transform transform = ((Component)this).transform; val = ((Component)Target).transform.position - ((Component)this).transform.position; transform.forward = ((Vector3)(ref val)).normalized; } if (!isFreeform) { Transform transform2 = ((Component)this).transform; val = owner.AimPoint - ((Component)this).transform.position; transform2.forward = ((Vector3)(ref val)).normalized; } if (isFreeform && !Object.op_Implicit((Object)(object)Target)) { Transform transform3 = ((Component)this).transform; val = owner.body.corePosition - ((Component)this).transform.position; transform3.forward = ((Vector3)(ref val)).normalized; } } public void FireLaser() { //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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) BulletAttack val = new BulletAttack(); val.origin = ((Component)this).transform.position; val.owner = ((Component)owner).gameObject; val.weapon = ((Component)this).gameObject; Vector3 val2 = ((Component)Target).transform.position - ((Component)this).transform.position; val.aimVector = ((Vector3)(ref val2)).normalized; val.damage = owner.body.damage * owner.UnitEffectModifier * 0.5f; val.isCrit = Util.CheckRoll(owner.body.crit, 0f, (CharacterMaster)null); val.minSpread = 0f; val.maxSpread = 3f; val.procCoefficient = 1f; val.damageColorIndex = (DamageColorIndex)3; val.tracerEffectPrefab = GameObject.TracerCaptainDefenseMatrix; val.Fire(); CharacterMaster master = Target.healthComponent.body.master; BaseAI val3 = ((master != null) ? ((Component)master).GetComponent<BaseAI>() : null) ?? null; if (Object.op_Implicit((Object)(object)val3)) { val3.currentEnemy.gameObject = ((Component)this).gameObject; } AkSoundEngine.PostEvent(WwiseEvents.Play_captain_drone_zap, ((Component)this).gameObject); } public void FireLaserFlank() { //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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_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) BulletAttack val = new BulletAttack(); val.origin = ((Component)this).transform.position; val.owner = ((Component)owner).gameObject; val.weapon = ((Component)this).gameObject; val.aimVector = GetFlankLaserAimDir(); val.damage = owner.body.damage * owner.UnitEffectModifier * 1f; val.isCrit = Util.CheckRoll(owner.body.crit, 0f, (CharacterMaster)null); val.minSpread = 0f; val.maxSpread = 0f; val.procCoefficient = 1f; val.damageColorIndex = (DamageColorIndex)3; val.tracerEffectPrefab = GameObject.TracerCaptainDefenseMatrix; val.stopperMask = ((LayerIndex)(ref LayerIndex.world)).collisionMask; val.Fire(); AkSoundEngine.PostEvent(WwiseEvents.Play_captain_drone_zap, ((Component)this).gameObject); } public Vector3 GetFlankLaserAimDir() { //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) //IL_0017: 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_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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_006a: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = owner.body.inputBank.GetAimRay(); RaycastHit val = default(RaycastHit); if (Physics.Raycast(aimRay, ref val, 4000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { Vector3 val2 = ((RaycastHit)(ref val)).point - ((Component)this).transform.position; return ((Vector3)(ref val2)).normalized; } return ((Ray)(ref aimRay)).direction; } public override void Recall() { isFreeform = !isFreeform; } } } namespace Overseer.Units.Defense { public class MenderController : UnitController { private float stopwatch = 0f; private bool formationClose = true; public override HurtBox Target { get; set; } public override TargetType TargetType => (TargetType)1; public override void OverrideTarget(HurtBox newTarget) { } public override void PerformMovement(int totalUnits, int thisUnit) { if (formationClose) { OrbitalMovement(totalUnits, thisUnit, 360f, 0f, 1.5f); } else { OrbitalMovement(totalUnits, thisUnit, 20f, -10f, 3f); } } public override void PerformSecondaryAction() { } public override void Recall() { formationClose = !formationClose; } public override void FixedUpdate() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (!Object.op_Implicit((Object)(object)Target)) { Target = owner.body.mainHurtBox; } if (!(stopwatch >= 1f) || !Object.op_Implicit((Object)(object)Target)) { return; } stopwatch = 0f; List<CharacterBody> list = CharacterBody.readOnlyInstancesList.Where((CharacterBody x) => Object.op_Implicit((Object)(object)((Component)x).GetComponent<OverseerController>()) || Object.op_Implicit((Object)(object)((Component)x).GetComponent<UnitController>())).ToList(); foreach (CharacterBody item in list) { if (Vector3.Distance(((Component)Target).transform.position, item.corePosition) < 15f) { item.healthComponent.HealFraction(0.015f * owner.UnitEffectModifier, default(ProcChainMask)); } } } } public class WardenController : UnitController { private ProjectileController target; public LineRenderer lr; private bool isReflecting = false; private float stopwatch = 0f; public override HurtBox Target { get; set; } public override void OverrideTarget(HurtBox newTarget) { } public override void FixedUpdate() { base.FixedUpdate(); } public override void PerformMovement(int totalUnits, int thisUnit) { OrbitalMovement(totalUnits, thisUnit, 360f, 0f, 3.5f); } public override void PerformSecondaryAction() { } public override void Recall() { } } } namespace Overseer.States { public class Dash : BaseState { public static GameObject TPEffect; public static GameObject TPTracer; public Vector3 blinkVector; public CharacterModel model; public HurtBoxGroup hbg; public float duration = 0.2f; public float speedCoeff = 5f; public Vector3 startPos; public override void OnEnter() { //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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); AkSoundEngine.PostEvent(WwiseEvents.Play_huntress_shift_mini_blink, ((EntityState)this).gameObject); model = ((Component)((EntityState)this).GetModelTransform()).GetComponent<CharacterModel>(); hbg = ((Component)model).GetComponent<HurtBoxGroup>(); CharacterModel obj = model; obj.invisibilityCount++; HurtBoxGroup obj2 = hbg; int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter; obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter + 1; blinkVector = GetBlinkVector(); startPos = ((EntityState)this).characterBody.corePosition; } public Vector3 GetBlinkVector() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_002b: 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_0030: 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) return (((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector; } public override void FixedUpdate() { //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_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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); ((EntityState)this).characterMotor.velocity = Vector3.zero; CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.rootMotion += blinkVector * (base.moveSpeedStat * speedCoeff * Time.fixedDeltaTime); if (((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //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_0014: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown ((EntityState)this).OnExit(); EffectManager.SpawnEffect(TPTracer, new EffectData { origin = startPos, start = ((EntityState)this).characterBody.corePosition }, true); CharacterModel obj = model; obj.invisibilityCount--; HurtBoxGroup obj2 = hbg; int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter; obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter - 1; } public static void CreatePrefabs() { //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_0046: 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_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) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) TPEffect = RuntimePrefabManager.CreatePrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Parent/ParentTeleportEffect.prefab").WaitForCompletion(), "LunarConstructTeleport"); Transform child = TPEffect.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); TPTracer = RuntimePrefabManager.CreatePrefab(GameObject.VoidSurvivorBeamTracer, "OverloadingTracer"); ((Component)TPTracer.transform.GetChild(0)).gameObject.SetActive(false); ((Component)TPTracer.transform.GetChild(1)).gameObject.SetActive(false); LineRenderer component3 = TPTracer.GetComponent<LineRenderer>(); component3.widthMultiplier = 0.33f; component3.numCapVertices = 10; Material val3 = Object.Instantiate<Material>(Material.matVoidSurvivorBeamTrail); val3.SetTexture("_RemapTex", (Texture)(object)Texture2D.texRampLunarWardDecal); ((Renderer)component3).material = val3; AnimateShaderAlpha component4 = TPTracer.GetComponent<AnimateShaderAlpha>(); component4.timeMax = 0.4f; Main.contentPack.RegisterGameObject(TPTracer); Main.contentPack.RegisterGameObject(TPEffect); } } public class Discharge : BaseSkillState { public float DamageCoefficient = 4f; public override void OnEnter() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0038: 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_0044: 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_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Expected O, but got Unknown ((BaseState)this).OnEnter(); ((EntityState)this).characterBody.SetAimTimer(0.1f); BulletAttack val = new BulletAttack(); val.damage = ((BaseState)this).damageStat * DamageCoefficient; val.damageType = (DamageType)16777216; Ray aimRay = ((BaseState)this).GetAimRay(); val.aimVector = ((Ray)(ref aimRay)).direction; val.isCrit = ((BaseState)this).RollCrit(); val.origin = ((EntityState)this).inputBank.aimOrigin; val.procCoefficient = 1f; val.owner = ((EntityState)this).gameObject; val.tracerEffectPrefab = GameObject.TracerMageLightningLaser; val.radius = 0.3f; val.hitCallback = (HitCallback)delegate(BulletAttack attack, ref BulletHit hitInfo) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_00de: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox)) { Debug.Log((object)"we hit something"); UnitController componentInParent = ((Component)hitInfo.hitHurtBox).GetComponentInParent<UnitController>(); if (Object.op_Implicit((Object)(object)componentInParent)) { Debug.Log((object)"we hit a unit"); BlastAttack val2 = new BlastAttack(); val2.attacker = ((EntityState)this).gameObject; val2.baseDamage = ((BaseState)this).damageStat * 4f; val2.radius = 10f; val2.crit = false; val2.falloffModel = (FalloffModel)0; val2.damageType = (DamageType)16777216; val2.position = ((Component)componentInParent).transform.position; val2.teamIndex = (TeamIndex)1; val2.procCoefficient = 1f; EffectManager.SpawnEffect(GameObject.CaptainTazerSupplyDropNova, new EffectData { origin = ((Component)componentInParent).transform.position, scale = 10f }, false); val2.Fire(); componentInParent.owner.RequestDestruction(componentInParent, ignoreVengeance: true); } } return BulletAttack.DefaultHitCallbackImplementation(attack, ref hitInfo); }; val.Fire(); AkSoundEngine.PostEvent(WwiseEvents.Play_roboBall_death_small_explo, ((EntityState)this).gameObject); ((EntityState)this).outer.SetNextStateToMain(); } } public class Reconfigure : BaseState { public override void OnEnter() { ((BaseState)this).OnEnter(); ((EntityState)this).GetComponent<OverseerController>().ReconfigureUnits(); AkSoundEngine.PostEvent(WwiseEvents.Play_MULT_R_variant_activate, ((EntityState)this).gameObject); ((EntityState)this).outer.SetNextStateToMain(); } } public class Spectral : BaseSkillState { public class MarkOnHit : MonoBehaviour, IProjectileImpactBehavior { public void OnProjectileImpact(ProjectileImpactInfo impactInfo) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Invalid comparison between Unknown and I4 if (Object.op_Implicit((Object)(object)impactInfo.collider)) { HurtBox component = ((Component)impactInfo.collider).GetComponent<HurtBox>(); if (Object.op_Implicit((Object)(object)component) && (int)component.healthComponent.body.teamComponent.teamIndex != 1) { ProjectileController component2 = ((Component)this).GetComponent<ProjectileController>(); OverseerController component3 = component2.owner.GetComponent<OverseerController>(); component3.Retarget(component); ((Component)component.healthComponent).gameObject.AddComponent<Marker>(); } } } } public static GameObject ProjectileStandard; public static GameObject ProjectileLast; public static int TotalShots; public int ShotsFired = 0; public float FireDelay = 0.2f; public float DamageCoefficient => (ShotsFired > 2) ? 1.6f : 0.7f; public GameObject ProjectilePrefab => (ShotsFired > 2) ? ProjectileLast : ProjectileStandard; static Spectral() { TotalShots = 3; ProjectileStandard = RuntimePrefabManager.CreatePrefab(GameObject.RoboBallProjectile, "OverseerPlasmaShot"); ((ProjectileExplosion)ProjectileStandard.GetComponent<ProjectileImpactExplosion>()).blastDamageCoefficient = 1f; ((ProjectileExplosion)ProjectileStandard.GetComponent<ProjectileImpactExplosion>()).blastRadius = 3f; ProjectileLast = RuntimePrefabManager.CreatePrefab(GameObject.RoboBallProjectile, "OverseerPlasmaShotEnd"); ProjectileLast.AddComponent<MarkOnHit>(); ((ProjectileExplosion)ProjectileLast.GetComponent<ProjectileImpactExplosion>()).blastDamageCoefficient = 1f; ((ProjectileExplosion)ProjectileLast.GetComponent<ProjectileImpactExplosion>()).blastRadius = 3f; Main.contentPack.RegisterGameObject(ProjectileStandard); Main.contentPack.RegisterGameObject(ProjectileLast); } public override void OnEnter() { ((BaseState)this).OnEnter(); FireDelay /= ((BaseState)this).attackSpeedStat; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.SetAimTimer(0.5f); if (((EntityState)this).fixedAge >= FireDelay) { ((EntityState)this).fixedAge = 0f; Fire(); } if (ShotsFired >= 3) { ((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)2; } public void Fire() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) ShotsFired++; FireProjectileInfo val = default(FireProjectileInfo); val.damage = ((BaseState)this).damageStat * DamageCoefficient; val.projectilePrefab = ProjectilePrefab; val.owner = ((EntityState)this).gameObject; val.position = ((EntityState)this).inputBank.aimOrigin; val.crit = ((BaseState)this).RollCrit(); val.rotation = Util.QuaternionSafeLookRotation(((EntityState)this).inputBank.aimDirection); val.useSpeedOverride = true; ((FireProjectileInfo)(ref val)).speedOverride = 200f; ProjectileManager.instance.FireProjectile(val); } } } namespace Overseer.Content { public class BeaconSpeedBoost : GenericBase<BeaconSpeedBoost> { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_RecalculateStats <>9__1_0; internal void <Initialize>b__1_0(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (NetworkServer.active && self.HasBuff(BeaconSpeed)) { float num = 1f + 0.05f * (float)self.GetBuffCount(BeaconSpeed); self.moveSpeed *= num; } } } public static BuffDef BeaconSpeed; public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier) { //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_0034: Expected O, but got Unknown BeaconSpeed = Main.assets.LoadAsset<BuffDef>("bdBeaconSpeed.asset"); object obj = <>c.<>9__1_0; if (obj == null) { hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (NetworkServer.active && self.HasBuff(BeaconSpeed)) { float num = 1f + 0.05f * (float)self.GetBuffCount(BeaconSpeed); self.moveSpeed *= num; } }; <>c.<>9__1_0 = val; obj = (object)val; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj; pack.RegisterScriptableObject((ScriptableObject)(object)BeaconSpeed); } } public class WardenRes : GenericBase<BeaconSpeedBoost> { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_TakeDamage <>9__1_0; internal void <Initialize>b__1_0(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { if (self.body.HasBuff(WardenResBuff)) { float num = 1f - 0.02f * (float)self.body.GetBuffCount(WardenResBuff); info.damage *= num; } orig.Invoke(self, info); } } public static BuffDef WardenResBuff; public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier) { //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_0034: Expected O, but got Unknown WardenResBuff = Main.assets.LoadAsset<BuffDef>("bdWardenRes.asset"); object obj = <>c.<>9__1_0; if (obj == null) { hook_TakeDamage val = delegate(orig_TakeDamage orig, HealthComponent self, DamageInfo info) { if (self.body.HasBuff(WardenResBuff)) { float num = 1f - 0.02f * (float)self.body.GetBuffCount(WardenResBuff); info.damage *= num; } orig.Invoke(self, info); }; <>c.<>9__1_0 = val; obj = (object)val; } HealthComponent.TakeDamage += (hook_TakeDamage)obj; pack.RegisterScriptableObject((ScriptableObject)(object)WardenResBuff); } } } namespace Overseer.Components { public class ActionSelection : MonoBehaviour { public Image image; public UnitAction action; public TextMeshProUGUI text; public void Initialize() { image.sprite = action.Icon; ((TMP_Text)text).text = action.KeyCodeText; } } public class ActionSelector : MonoBehaviour { public RectTransform container; public GameObject selectorPrefab; public List<UnitAction> actions; private ActionSelection[] actionElements; private int currentSelected = 0; internal OnFireAction onActionFired = new OnFireAction(); public void Start() { UIElementAllocator<ActionSelection> val = new UIElementAllocator<ActionSelection>(container, selectorPrefab, true, false); val.AllocateElements(actions.Count); actionElements = val.elements.ToArray(); for (int i = 0; i < actionElements.Length; i++) { actionElements[i].action = actions[i]; actionElements[i].Initialize(); } } public void UpdateBasedOnUnitChoices(Unit offense, Unit defense, Unit support) { actionElements[0].image.sprite = offense.Icon; actionElements[1].image.sprite = defense.Icon; actionElements[2].image.sprite = support.Icon; } public void FixedUpdate() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < actionElements.Length; i++) { if (Input.GetKeyDown((KeyCode)27) || Input.GetKeyDown((KeyCode)114) || Input.GetKeyDown((KeyCode)325)) { ((UnityEvent<ActionType>)onActionFired).Invoke(ActionType.Cancel); Object.Destroy((Object)(object)this); break; } if (Input.GetKeyDown(actionElements[i].action.ActivationKey)) { ((UnityEvent<ActionType>)onActionFired).Invoke(actionElements[i].action.ActionType); Object.Destroy((Object)(object)this); break; } } } } public class OnFireAction : UnityEvent<ActionType> { private int guh; } public class Marker : MonoBehaviour { private float timeAlive = 0f; public void FixedUpdate() { timeAlive += Time.fixedDeltaTime; if (timeAlive >= 5f) { Object.Destroy((Object)(object)this); } } } public class OverseerController : MonoBehaviour { public CharacterBody body; public int unitCap; public GenericSkill offenseFamily; public GenericSkill defenseFamily; public GenericSkill supportFamily; public GenericSkill passive; public Unit NullUnit; public GameObject OverseerUIPrefab; public SkillDef passiveInfernal; public SkillDef passiveSwarmer; private Unit currentUnitType = null; private float unitStopwatch = 0f; internal List<IUnitC> activeUnits = new List<IUnitC>(); private GameObject UIPrefabInstance; private bool hasRecalled = false; internal Vector3 AimPoint; private bool isPassiveSwarmer = false; internal bool isPassiveInfernal = false; internal float UnitEffectModifier = 1f; internal float UnitAssemblyModifier = 1f; private GameObject MainHUDInstance; private List<Unit> UnitTypes = new List<Unit>(); private int index = 0; public void Start() { currentUnitType = NullUnit; UIPrefabInstance = Object.Instantiate<GameObject>(OverseerUIPrefab); UIPrefabInstance.GetComponent<UnitUIBar>().controller = this; if ((Object)(object)passive.skillDef == (Object)(object)passiveSwarmer) { isPassiveSwarmer = true; unitCap *= 2; UnitAssemblyModifier = 0.5f; UnitEffectModifier = 0.5f; } if ((Object)(object)passive.skillDef == (Object)(object)passiveInfernal) { isPassiveInfernal = true; } } public void TriggerAltFire() { foreach (IUnitC activeUnit in activeUnits) { activeUnit.PerformSecondaryAction(); } } public float GetAssemblyPercentage() { if ((Object)(object)currentUnitType == (Object)(object)NullUnit) { return 0f; } if (activeUnits.Count >= unitCap) { return 1f; } return unitStopwatch / (currentUnitType.AssemblyTime * UnitAssemblyModifier); } public Sprite GetUnitIcon() { return currentUnitType.Icon; } public string GetUnitCountText() { return activeUnits.Count + " / " + unitCap; } public void SpawnUnit() { if (!((Object)(object)currentUnitType == (Object)(object)NullUnit) && activeUnits.Count <= unitCap) { GameObject val = UnitCatalog.SpawnUnit(this, currentUnitType); IUnitC component = val.GetComponent<IUnitC>(); if (hasRecalled) { component.Recall(); } CharacterBody component2 = val.GetComponent<CharacterBody>(); component2.level = body.level; component2.baseDamage = body.baseDamage; component2.levelDamage = body.levelDamage; activeUnits.Add(component); } } public void HandleAction(ActionType type) { switch (type) { case ActionType.Recall: foreach (IUnitC activeUnit in activeUnits) { activeUnit.Recall(); } hasRecalled = !hasRecalled; break; case ActionType.Retarget: break; case ActionType.Terminate: { List<IUnitC> list = new List<IUnitC>(); for (int i = 0; i < activeUnits.Count; i++) { IUnitC item = activeUnits[i]; list.Add(item); } for (int j = 0; j < list.Count; j++) { activeUnits.Remove(list[j]); list[j].Destruct(); } break; } } } public void Retarget(HurtBox target) { foreach (IUnitC activeUnit in activeUnits) { activeUnit.OverrideTarget(target); } } public void RequestDestruction(IUnitC unit, bool ignoreVengeance = false) { activeUnits.Remove(unit); unit.Destruct(); } public void ReconfigureUnits() { UnitTypes.Clear(); UnitTypes.Add(NullUnit); UnitTypes.Add((offenseFamily.skillDef as UnitSkillDef).UnitType); UnitTypes.Add((defenseFamily.skillDef as UnitSkillDef).UnitType); UnitTypes.Add((supportFamily.skillDef as UnitSkillDef).UnitType); index++; if (index >= UnitTypes.Count) { index = 0; } currentUnitType = UnitTypes[index]; } public float GetAssemblyTime() { return currentUnitType.AssemblyTime * UnitAssemblyModifier; } public void FixedUpdate() { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) foreach (Unit unitType in UnitCatalog.allUnits) { List<IUnitC> list = activeUnits.Where((IUnitC x) => (Object)(object)x.UnitType == (Object)(object)unitType).ToList(); for (int i = 0; i < list.Count; i++) { list[i].PerformMovement(list.Count, i); } } if (activeUnits.Count < unitCap) { unitStopwatch += Time.fixedDeltaTime; } if (Object.op_Implicit((Object)(object)currentUnitType) && unitStopwatch >= GetAssemblyTime()) { unitStopwatch = 0f; SpawnUnit(); } Ray aimRay = body.inputBank.GetAimRay(); AimPoint = ((Ray)(ref aimRay)).GetPoint(40f); if (!Object.op_Implicit((Object)(object)MainHUDInstance)) { MainHUDInstance = GameObject.Find("HUDSimple(Clone)"); if (Object.op_Implicit((Object)(object)MainHUDInstance)) { MainHUDInstance = ((Component)MainHUDInstance.transform.Find("MainContainer").Find("MainUIArea")).gameObject; } } if (Object.op_Implicit((Object)(object)MainHUDInstance)) { UIPrefabInstance.SetActive(MainHUDInstance.activeInHierarchy); } } } public class OverseerSpikeController : MonoBehaviour { public GenericSkill spikeStockTarget; public List<GameObject> Spikes = new List<GameObject>(); public GameObject SpikePrefab; public Transform[] unitSpawnPoints; public void FixedUpdate() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: 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_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) if (Spikes.Count() < spikeStockTarget.stock && Spikes.Count() < 3) { FireProjectileInfo val = default(FireProjectileInfo); val.owner = ((Component)this).gameObject; val.damage = ((Component)this).GetComponent<CharacterBody>().damage * 2f; val.position = ((Component)this).transform.position; val.rotation = Quaternion.identity; val.projectilePrefab = SpikePrefab; ProjectileManager.instance.FireProjectile(val); } for (int i = 0; i < Spikes.Count; i++) { if (!Spikes[i].GetComponent<Spike>().hasFired) { Vector3 position = ((Component)unitSpawnPoints[i]).transform.position; Vector3 position2 = Vector3.Lerp(Spikes[i].transform.position, position, 20f * Time.fixedDeltaTime); Spikes[i].transform.position = position2; Spikes[i].transform.forward = ((Component)this).GetComponent<CharacterDirection>().forward; } } } public void FireSpikes() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) foreach (GameObject spike in Spikes) { if (!spike.GetComponent<Spike>().hasFired) { spike.transform.forward = GetFlankLaserAimDir(spike.transform.position); spike.GetComponent<Spike>().Fire(); } } } public Vector3 GetFlankLaserAimDir(Vector3 pos) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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) Ray aimRay = ((Component)this).GetComponent<CharacterBody>().inputBank.GetAimRay(); RaycastHit val = default(RaycastHit); if (Physics.Raycast(aimRay, ref val, 4000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1)) { Vector3 val2 = ((RaycastHit)(ref val)).point - pos; return ((Vector3)(ref val2)).normalized; } return ((Ray)(ref aimRay)).direction; } } public class Spike : MonoBehaviour { internal OverseerController owner; internal OverseerSpikeController spikeController; [SerializeField] private List<MonoBehaviour> ToEnable; private HealthComponent component; internal bool hasFired = false; internal bool shouldCheck = false; internal bool hasChecked = false; public void Fire() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Component)this).GetComponent<Rigidbody>().velocity = Vector3.zero; foreach (MonoBehaviour item in ToEnable) { ((Behaviour)item).enabled = true; } hasFired = true; } public void OnHit() { shouldCheck = true; } public void Start() { component = ((Component)this).GetComponent<HealthComponent>(); spikeController = ((Component)this).GetComponent<ProjectileController>().owner.GetComponent<OverseerSpikeController>(); owner = ((Component)spikeController).GetComponent<OverseerController>(); spikeController.Spikes.Add(((Component)this).gameObject); Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren<Collider>(); foreach (Collider val in componentsInChildren) { foreach (IUnitC activeUnit in owner.activeUnits) { Collider[] componentsInChildren2 = activeUnit.GetSelf().GetComponentsInChildren<Collider>(); foreach (Collider val2 in componentsInChildren2) { Physics.IgnoreCollision(val, val2, true); } } } } public void OnDestroy() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown if (NetworkServer.active) { } spikeController.spikeStockTarget.DeductStock(1); spikeController.Spikes.Remove(((Component)this).gameObject); EffectManager.SpawnEffect(GameObject.ExplosionDroneDeath, new EffectData { origin = ((Component)this).transform.position }, false); } public void FixedUpdate() { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Invalid comparison between Unknown and I4 //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_0148: 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) if (!component.alive) { Object.Destroy((Object)(object)((Component)this).gameObject); } if (!shouldCheck || hasChecked) { return; } ProjectileStickOnImpact val = ((Component)this).GetComponent<ProjectileStickOnImpact>(); if (Object.op_Implicit((Object)(object)val.stuckBody)) { Main.Log("stuckbody found"); CharacterBody stuckBody = val.stuckBody; hasChecked = true; if (Object.op_Implicit((Object)(object)((Component)stuckBody).GetComponent<UnitController>())) { Main.Log("we hit a unit, return"); return; } if ((int)stuckBody.teamComponent.teamIndex == 1) { Main.Log("hit a friendly, return"); return; } Main.Log("retargeting to: " + (object)stuckBody.mainHurtBox); owner.Retarget(stuckBody.mainHurtBox); DamageInfo val2 = new DamageInfo(); val2.damage = owner.body.damage * 3f; val2.crit = Util.CheckRoll(owner.body.crit, owner.body.master); val2.position = ((Component)this).transform.position; val2.procCoefficient = 1f; val2.attacker = ((Component)owner.body).gameObject; stuckBody.healthComponent.TakeDamage(val2); GlobalEventManager.instance.OnHitEnemy(val2, ((Component)stuckBody).gameObject); GlobalEventManager.instance.OnHitAll(val2, ((Component)stuckBody).gameObject); } } } public class TrackerAlly : HurtboxTracker { public override void Start() { ((HurtboxTracker)this).Start(); } public override void FixedUpdate() { ((Tracker)this).FixedUpdate(); if ((Object)(object)((Tracker)this).target != (Object)null && ((Component)((Component)((Tracker)this).target).GetComponent<HurtBox>().healthComponent).GetComponent<IUnitC>() != null) { ((Tracker)this).target = null; } } } public class TrackerEnemy : HurtboxTracker { } public class UnitUIBar : MonoBehaviour { public Image RadialChargeMeter; public Image UnitIcon; public TextMeshProUGUI UnitCountText; internal OverseerController controller; public void FixedUpdate() { if (Object.op_Implicit((Object)(object)controller)) { RadialChargeMeter.fillAmount = controller.GetAssemblyPercentage(); UnitIcon.sprite = controller.GetUnitIcon(); ((TMP_Text)UnitCountText).text = controller.GetUnitCountText(); } } } }