Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Ms Isle v2.2.0
MsIsle.dll
Decompiled 2 years agousing System; using System.Collections; 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.Logging; using EntityStates; using EntityStates.Commando; using EntityStates.Drone.DroneWeapon; using MissileDroneSurvivor.MsIsleEntityStates; using MissileDroneSurvivor.Projectiles; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RoR2; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("MsIsle")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("MsIsle")] [assembly: AssemblyTitle("MsIsle")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace ExamplePlugin { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } } namespace MissileDroneSurvivor { internal class DamageAccumulator : MonoBehaviour { public float accumulatedDamage; public float damageMultiplier = 0.175f; public float damageToRadiusMultiplier = 0.15f; private float baseDamageCoeff; private float baseRadius; private HealthComponent healthComponent; private ProjectileImpactExplosion projectileImpactExplosion; private const float maxDamageMult = 20f; private const float maxRadiusMult = 125f; private TeamComponent teamComponent; private bool forcedTeamYet; private void Awake() { healthComponent = ((Component)this).GetComponent<HealthComponent>(); projectileImpactExplosion = ((Component)this).GetComponent<ProjectileImpactExplosion>(); healthComponent.dontShowHealthbar = true; accumulatedDamage = 0f; baseDamageCoeff = ((ProjectileExplosion)projectileImpactExplosion).blastDamageCoefficient; baseRadius = ((ProjectileExplosion)projectileImpactExplosion).blastRadius; teamComponent = ((Component)this).GetComponent<TeamComponent>(); forcedTeamYet = false; } public void FixedUpdate() { float num = healthComponent.fullHealth - healthComponent.health; healthComponent.health = healthComponent.fullHealth; accumulatedDamage += num; float num2 = SCurveAccumulatedDamage(accumulatedDamage * damageMultiplier, 20f, 0.01f, 45f); float num3 = SCurveAccumulatedDamage(accumulatedDamage * damageToRadiusMultiplier, 125f, 0.01f, 45f); ((ProjectileExplosion)projectileImpactExplosion).blastDamageCoefficient = baseDamageCoeff + num2; ((ProjectileExplosion)projectileImpactExplosion).blastRadius = baseRadius + num3; if (!forcedTeamYet) { teamComponent.teamIndex = (TeamIndex)2; forcedTeamYet = true; } } private float SCurveAccumulatedDamage(float x, float L, float k, float s) { float num = L / (1f + Mathf.Exp((0f - k) * (x - s))); float num2 = L / (1f + Mathf.Exp(k * s)); return num - num2; } } internal class DamageAccumulatorFixed : MonoBehaviour, IOnIncomingDamageServerReceiver { public float accumulatedDamage; public float damageMultiplier = 0.175f; public float damageToRadiusMultiplier = 0.15f; private float baseDamageCoeff; private float baseRadius; private HealthComponent healthComponent; private ProjectileImpactExplosion projectileImpactExplosion; private const float maxDamageMult = 30f; private const float maxRadiusMult = 150f; private TeamComponent teamComponent; private bool forcedTeamYet; private void Start() { ProjectileController component = ((Component)this).GetComponent<ProjectileController>(); if ((Object)(object)component != (Object)null && (Object)(object)component.owner != (Object)null) { DronePassiveSkill component2 = component.owner.GetComponent<DronePassiveSkill>(); if ((Object)(object)component2 != (Object)null) { component2.mostRecentNuke = ((Component)this).transform; } } } private void Awake() { healthComponent = ((Component)this).GetComponent<HealthComponent>(); projectileImpactExplosion = ((Component)this).GetComponent<ProjectileImpactExplosion>(); healthComponent.dontShowHealthbar = true; accumulatedDamage = 0f; baseDamageCoeff = ((ProjectileExplosion)projectileImpactExplosion).blastDamageCoefficient; baseRadius = ((ProjectileExplosion)projectileImpactExplosion).blastRadius; teamComponent = ((Component)this).GetComponent<TeamComponent>(); forcedTeamYet = false; } public void FixedUpdate() { if (!forcedTeamYet) { teamComponent.teamIndex = (TeamIndex)4; forcedTeamYet = true; } } public void OnIncomingDamageServer(DamageInfo damageInfo) { damageInfo.rejected = true; float damage = damageInfo.damage; accumulatedDamage += damage; float num = SCurveAccumulatedDamage(accumulatedDamage * damageMultiplier, 30f, 0.01f, 45f); float num2 = SCurveAccumulatedDamage(accumulatedDamage * damageToRadiusMultiplier, 150f, 0.01f, 45f); ((ProjectileExplosion)projectileImpactExplosion).blastDamageCoefficient = baseDamageCoeff + num; ((ProjectileExplosion)projectileImpactExplosion).blastRadius = baseRadius + num2; } private float SCurveAccumulatedDamage(float x, float L, float k, float s) { float num = L / (1f + Mathf.Exp((0f - k) * (x - s))); float num2 = L / (1f + Mathf.Exp(k * s)); return num - num2; } } internal class DroneDisplaySpoofer : MonoBehaviour { private class soundEffect { public string soundName; public float timeToPlay; public uint playbackID; public bool hasID; public soundEffect(string name, float timeToPlay) { soundName = name; this.timeToPlay = timeToPlay; playbackID = 0u; hasID = false; } } private class vfxEffect { public GameObject effect; public float timeToPlay; public vfxEffect(GameObject effect, float timeToPlay) { this.effect = effect; this.timeToPlay = timeToPlay; } } private vfxEffect[] effects; private soundEffect[] soundEffects; private Vector3 targetDronePosition; private Vector3 currentDronePosition; private Vector3 hoverCycleOffset; private const float hoverCycleDistanceY = 0.08f; private const float hoverCycleDistanceXZ = 0.04f; private void Awake() { //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) effects = new vfxEffect[2] { new vfxEffect(Resources.Load<GameObject>("prefabs/effects/impacteffects/CharacterLandImpact"), 0.2f), new vfxEffect(Resources.Load<GameObject>("Prefabs/effects/impacteffects/BootShockwave"), 0.35f) }; soundEffects = new soundEffect[3] { new soundEffect("Play_drone_repair", 0.35f), new soundEffect("Play_drone_active_loop", 0.35f), new soundEffect("Play_engi_R_turret_spawn", 0.1f) }; vfxEffect[] array = effects; foreach (vfxEffect effect in array) { ((MonoBehaviour)this).StartCoroutine(DelayEffect(effect)); } soundEffect[] array2 = soundEffects; foreach (soundEffect effect2 in array2) { ((MonoBehaviour)this).StartCoroutine(DelaySound(effect2)); } Object.Destroy((Object)(object)((Component)this).GetComponent<AimAnimator>()); Object.Destroy((Object)(object)((Component)this).GetComponent<Animator>()); targetDronePosition = ((Component)this).transform.position + new Vector3(0f, 1.25f, 0f); currentDronePosition = ((Component)this).transform.position + new Vector3(3f, 5f, 0f); } private void Update() { //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_0048: 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) //IL_0053: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) hoverCycleOffset = new Vector3(Mathf.Sin(Time.time) * 0.04f, Mathf.Sin(Time.time * 2f) * 0.08f, Mathf.Sin(Time.time * 0.75f) * 0.04f); Vector3 val = targetDronePosition - currentDronePosition; if (((Vector3)(ref val)).magnitude > 0.05f) { currentDronePosition = Vector3.Lerp(currentDronePosition, targetDronePosition, 0.985f * Time.deltaTime); } ((Component)this).transform.position = currentDronePosition + hoverCycleOffset; } private IEnumerator DelayEffect(vfxEffect effect) { yield return (object)new WaitForSeconds(effect.timeToPlay); EffectManager.SpawnEffect(effect.effect, new EffectData { origin = ((Component)this).transform.position, scale = 1f }, true); } private IEnumerator DelaySound(soundEffect effect) { yield return (object)new WaitForSeconds(effect.timeToPlay); effect.playbackID = Util.PlaySound(effect.soundName, ((Component)this).gameObject); effect.hasID = true; } private void OnDestroy() { soundEffect[] array = soundEffects; for (int i = 0; i < array.Length; i++) { AkSoundEngine.StopPlayingID(array[i].playbackID); } } } public class DronePassiveSkill : MonoBehaviour { private CharacterBody body; private KillCounterComponent killCounter; private InputBankTest inputBank; private RigidbodyMotor motor; public float radiusToCheckEntrance = 5f; public float radiusToCheckExit = 8f; public GenericSkill utilitySkill; public SkillDef utilitySkillDef; private int boostsDone; private bool _isBoosting; private Transform jetEffectLeft; private Transform jetEffectRight; private GameObject jetEffect; private float boostEffectSize = 1f; public static string boostEffectString = "prefabs/effects/impacteffects/CharacterLandImpact"; private static GameObject boostEffect = null; private LayerMask layerMask; private bool isSprinting; private float verticalMoveSpeed = 10f; private bool _isNukeInWorld; public GenericSkill packHoundsSkill; private int _packHoundCount; public Transform mostRecentNuke; public bool isBoosting { get { return _isBoosting; } private set { _isBoosting = value; } } public bool isNukeInWorld { get { return _isNukeInWorld; } private set { _isNukeInWorld = value; } } public int packHoundCount { get { return _packHoundCount; } set { _packHoundCount = value; } } public void Awake() { //IL_0072: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Expected O, but got Unknown //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0148: 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_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015d: 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_0172: 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_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) body = ((Component)this).GetComponent<CharacterBody>(); inputBank = ((Component)body).GetComponent<InputBankTest>(); motor = ((Component)body).GetComponent<RigidbodyMotor>(); killCounter = ((Component)body).GetComponent<KillCounterComponent>(); if (!Object.op_Implicit((Object)(object)killCounter)) { killCounter = ((Component)body).gameObject.AddComponent<KillCounterComponent>(); } layerMask = LayerMask.op_Implicit(1 << LayerMask.NameToLayer("World")); isSprinting = false; GameObject val = new GameObject("empty"); Transform val2 = ((Component)body).GetComponent<ModelLocator>().modelBaseTransform.Find("mdlMissileDrone").Find("MissileDroneArmature").Find("ROOT") .Find("Body"); if ((Object)(object)jetEffect == (Object)null) { jetEffect = DodgeState.jetEffect; } boostEffect = Resources.Load<GameObject>(boostEffectString); jetEffectLeft = Object.Instantiate<GameObject>(val, val2).transform; jetEffectLeft.SetParent(val2); ((Component)jetEffectLeft).transform.localPosition = new Vector3(-0.61f, 0f, -0.769f); ((Object)jetEffectLeft).name = "jetEffectLeft"; jetEffectLeft.LookAt(val2.position + -3f * val2.forward + -0.9f * val2.right, Vector3.up); jetEffectRight = Object.Instantiate<GameObject>(val, val2).transform; jetEffectRight.SetParent(val2); ((Component)jetEffectRight).transform.localPosition = new Vector3(0.61f, 0f, -0.769f); ((Object)jetEffectRight).name = "jetEffectRight"; jetEffectRight.LookAt(val2.position + -3f * val2.forward + 0.9f * val2.right, Vector3.up); if (Object.op_Implicit((Object)(object)body.inventory)) { utilitySkillDef.baseMaxStock = body.baseJumpCount + body.inventory.GetItemCount(Items.Feather) + body.inventory.GetItemCount(Items.UtilitySkillMagazine); } else { utilitySkillDef.baseMaxStock = body.baseJumpCount; } utilitySkill.stock = utilitySkillDef.baseMaxStock; packHoundsSkill.stock = 0; } public void FixedUpdate() { //IL_0011: 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_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: 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) if (!isBoosting) { if (Physics.CheckSphere(body.corePosition, isSprinting ? radiusToCheckExit : radiusToCheckEntrance, LayerMask.op_Implicit(layerMask), (QueryTriggerInteraction)1)) { if (!isSprinting) { isSprinting = true; body.isSprinting = isSprinting; utilitySkillDef.baseMaxStock = body.baseJumpCount + body.inventory.GetItemCount(Items.Feather) + body.inventory.GetItemCount(Items.UtilitySkillMagazine); if (utilitySkill.stock < utilitySkillDef.baseMaxStock) { utilitySkill.stock = utilitySkillDef.baseMaxStock; } } } else if (isSprinting) { isSprinting = false; body.isSprinting = isSprinting; } } if (inputBank.jump.down) { RigidbodyMotor obj = motor; obj.moveVector += new Vector3(0f, verticalMoveSpeed, 0f); } if (LocalUserManager.GetFirstLocalUser().inputPlayer.GetButton("sprint")) { RigidbodyMotor obj2 = motor; obj2.moveVector -= new Vector3(0f, verticalMoveSpeed, 0f); } motor.moveVector.y = Mathf.Clamp(motor.moveVector.y, 0f - verticalMoveSpeed, verticalMoveSpeed); if (utilitySkill.stock > utilitySkillDef.baseMaxStock) { utilitySkill.stock = utilitySkillDef.baseMaxStock; } if (packHoundsSkill.stock != packHoundCount) { packHoundsSkill.stock = packHoundCount; } } public void AddKill() { packHoundCount++; packHoundCount = Mathf.Min(packHoundCount, packHoundsSkill.maxStock); packHoundsSkill.stock = packHoundCount; } public void OnPackHoundsUsed() { packHoundsSkill.stock = 0; packHoundCount = 0; } public void OnDroneBoost(DroneBoostAbility boostAbility) { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown utilitySkillDef.baseMaxStock = body.baseJumpCount + body.inventory.GetItemCount(Items.Feather) + body.inventory.GetItemCount(Items.UtilitySkillMagazine); boostAbility.quailsOwned = body.inventory.GetItemCount(Items.JumpBoost); if (Object.op_Implicit((Object)(object)jetEffect)) { if (Object.op_Implicit((Object)(object)jetEffectLeft)) { Object.Instantiate<GameObject>(jetEffect, jetEffectLeft); } if (Object.op_Implicit((Object)(object)jetEffectRight)) { Object.Instantiate<GameObject>(jetEffect, jetEffectRight); } } EffectManager.SpawnEffect(boostEffect, new EffectData { origin = body.transform.position, scale = boostEffectSize }, true); isBoosting = true; } public void OnDroneBoostExit(DroneBoostAbility boostAbility) { boostAbility.quailsOwned = body.inventory.GetItemCount(Items.JumpBoost); utilitySkillDef.baseMaxStock = body.baseJumpCount + body.inventory.GetItemCount(Items.Feather) + body.inventory.GetItemCount(Items.UtilitySkillMagazine); if (isSprinting) { utilitySkill.stock = utilitySkill.maxStock; } isBoosting = false; } } public class MasterKillCounter : MonoBehaviour { private int _killCount; public int killCount { get { return _killCount; } private set { _killCount = value; } } public void AddKill(DronePassiveSkill passiveSkill) { killCount++; if (Object.op_Implicit((Object)(object)passiveSkill)) { passiveSkill.AddKill(); } } } public class SyncSomething : INetMessage, ISerializableObject { private NetworkInstanceId netID; private Vector3 position; private int number; public SyncSomething() { } public SyncSomething(NetworkInstanceId netID, Vector3 position, int num) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) this.netID = netID; this.position = position; number = num; } public void Deserialize(NetworkReader reader) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_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) netID = reader.ReadNetworkId(); position = reader.ReadVector3(); number = reader.ReadInt32(); } public void OnReceived() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { Debug.Log((object)"SyncSomething: Host ran the OnReceived; skipping."); return; } GameObject val = Util.FindNetworkObject(netID); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)"SyncSomething: bodyObject is null"); return; } CharacterBody component = val.GetComponent<CharacterBody>(); DronePassiveSkill component2 = val.GetComponent<DronePassiveSkill>(); MasterKillCounter masterKillCounter = ((Component)component.master).GetComponent<MasterKillCounter>(); if (!Object.op_Implicit((Object)(object)masterKillCounter)) { masterKillCounter = ((Component)component.master).gameObject.AddComponent<MasterKillCounter>(); } masterKillCounter?.AddKill(component2); } public void Serialize(NetworkWriter writer) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) writer.Write(netID); writer.Write(position); writer.Write(number); } } public class KillCounterComponent : MonoBehaviour, IOnKilledOtherServerReceiver { private CharacterBody body; private DronePassiveSkill passiveSkill; public MasterKillCounter masterKillCounter; private int lastHashCode = -1; public void OnHostKill() { Debug.Log((object)$"OnKilledOtherServer: OnHostKill() called on host :) ({((object)((Component)this).gameObject).GetHashCode()})"); body = ((Component)this).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)passiveSkill)) { passiveSkill = ((Component)body).GetComponent<DronePassiveSkill>(); } masterKillCounter = ((Component)body.master).GetComponent<MasterKillCounter>(); if (!Object.op_Implicit((Object)(object)masterKillCounter)) { masterKillCounter = ((Component)body.master).gameObject.AddComponent<MasterKillCounter>(); } ((Component)body.master).GetComponent<MasterKillCounter>()?.AddKill(passiveSkill); } public void OnKilledOtherServer(DamageReport report) { //IL_008b: 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) if (!Object.op_Implicit((Object)(object)report.victim) || !Object.op_Implicit((Object)(object)report.attackerMaster)) { Debug.LogWarning((object)"OnKilledOtherServer: DamageReport did not have both victim and attackerMaster"); } else { if (((object)report.victim).GetHashCode() == lastHashCode) { return; } lastHashCode = ((object)report.victim).GetHashCode(); if (!report.attackerMaster.hasEffectiveAuthority) { Debug.Log((object)"OnKilledOtherServer: Getting network identity component from attackerBody"); NetworkIdentity component = ((Component)report.attackerBody).GetComponent<NetworkIdentity>(); if (!Object.op_Implicit((Object)(object)component)) { Debug.LogWarning((object)"OnKilledOtherServer: The attackerBody did not have a NetworkIdentity component!"); return; } Debug.Log((object)"OnKilledOtherServer: Creating new SyncSomething and sending it"); NetMessageExtensions.Send((INetMessage)(object)new SyncSomething(component.netId, report.attackerBody.transform.position, 9000), (NetworkDestination)1); } else { Debug.Log((object)"OnKilledOtherServer: Calling OnReceived on the host"); OnHostKill(); } } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.hogynmelyn.msisle", "Ms Isle", "2.0.0")] public class MsIsle : BaseUnityPlugin { public const string PluginGUID = "com.hogynmelyn.msisle"; public const string PluginName = "Ms Isle"; public const string PluginVersion = "2.0.0"; public SkillLocator skillLocator; public static GameObject msIsleCharacter; public static CharacterBody bodyComponent; private DronePassiveSkill dronePassiveManager; private const int numRocketsBase = 4; private const float rocketFireIntervalBase = 0.5f; private const float missileRecharge = 2f; private GameObject missilePrefab; public void Awake() { Debug.Log((object)">|Loaded Ms. Isle survivor mod! :)"); RegisterStates(); SetupCharacterBody(); SetupPreSkills(); SetupPassive(); SetupPrimary(); SetupSecondary(); SetupUtility(); SetupSpecial(); Skins.RegisterSkins(); } private void RegisterStates() { NetworkingAPI.RegisterMessageType<SyncSomething>(); LoadoutAPI.AddSkill(typeof(MissileBarrage)); LoadoutAPI.AddSkill(typeof(PackHounds)); LoadoutAPI.AddSkill(typeof(DroneBoostAbility)); LoadoutAPI.AddSkill(typeof(NukeAbility)); LoadoutAPI.AddSkill(typeof(TestPrimarySkill)); Debug.Log((object)" >|Registered networked skill states with LoadoutAPI!"); } private void SetupCharacterBody() { //IL_0047: 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_018b: Unknown result type (might be due to invalid IL or missing references) //IL_018c: 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_0237: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_0292: 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_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Expected O, but got Unknown msIsleCharacter = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/CharacterBodies/MissileDroneBody"), "MissileDroneSurvivor"); msIsleCharacter.GetComponent<NetworkIdentity>().localPlayerAuthority = true; msIsleCharacter.GetComponent<CharacterBody>().aimOriginTransform.Translate(new Vector3(0f, 0.5f, 0f)); msIsleCharacter.AddComponent<EquipmentSlot>(); bodyComponent = msIsleCharacter.GetComponent<CharacterBody>(); bodyComponent.baseDamage = 10f; bodyComponent.levelDamage = 1f; bodyComponent.baseCrit = 1f; bodyComponent.levelCrit = 0f; bodyComponent.baseMaxHealth = 50f; bodyComponent.levelMaxHealth = 15f; bodyComponent.baseArmor = 0f; bodyComponent.baseRegen = 1.5f; bodyComponent.levelRegen = 0.25f; bodyComponent.baseMoveSpeed = 10f; bodyComponent.levelMoveSpeed = 0.1f; bodyComponent.baseAttackSpeed = 1f; bodyComponent.levelAttackSpeed = 0f; bodyComponent.baseMaxShield = 0f; bodyComponent.levelMaxShield = 0f; ((Object)bodyComponent).name = "Ms. Isle"; bodyComponent.portraitIcon = Resources.Load<Texture>("Textures/Bodyicons/texMissileDroneIcon"); bodyComponent.baseJumpCount = 1; bodyComponent.bodyFlags = (BodyFlags)(bodyComponent.bodyFlags | 0x20); dronePassiveManager = msIsleCharacter.AddComponent<DronePassiveSkill>(); msIsleCharacter.GetComponent<CharacterBody>().preferredPodPrefab = Resources.Load<GameObject>("Prefabs/CharacterBodies/toolbotbody").GetComponent<CharacterBody>().preferredPodPrefab; LanguageAPI.Add("MSISLECHAR_DESCRIPTION", "Ms. Isle is a glass-cannon Missile Drone, capable of <i>extremely</i> high damage output and unique evasive flight-based movement, but with minimal health. <style=cSub>\r\n\r\n< ! > Fly-By serves as Ms Isle’s sprint mechanism – use it to navigate stages more quickly, and then take to the skies to evade enemy attacks!\r\n\r\n< ! > Missile Barrage always fires its swarm of rockets over <i>1 second</i>, but the number of rockets it fires is determined by Ms Isle’s overall fire-rate.\r\n\r\n< ! > Cumulative Warhead absorbs all damage dealt to it by you and your allies! Fire it into a group of enemies from a distance and focus your fire to increase its damage multiplier up to <style=cIsDamage>many times its base damage</style>!\r\n\r\n< ! > Pack Hound missiles will target whatever is closest, <i>including</i> your Cumulative Warhead!</style>"); LanguageAPI.Add("MSISLECHAR_NAME", "Ms. Isle"); LanguageAPI.Add("MSISLECHAR_DISPLAYNAME", "Ms. Isle"); LanguageAPI.Add("MSISLE_SUBTITLE", "Missile Drone"); GameObject val = PrefabAPI.InstantiateClone(((Component)((Component)bodyComponent).GetComponent<ModelLocator>().modelBaseTransform).gameObject, "MissileDroneSurvivorDisplay"); val.AddComponent<NetworkIdentity>(); Transform transform = val.transform; transform.localScale *= 0.75f; val.transform.Find("mdlMissileDrone").Find("MissileDroneArmature"); ((Component)val.transform.Find("mdlMissileDrone")).gameObject.AddComponent<DroneDisplaySpoofer>(); SurvivorDef val2 = new SurvivorDef { cachedName = "MSISLECHAR_NAME", bodyPrefab = msIsleCharacter, displayPrefab = val, unlockableName = "", displayNameToken = "MSISLECHAR_DISPLAYNAME", descriptionToken = "MSISLECHAR_DESCRIPTION", primaryColor = new Color(41f / 51f, 41f / 85f, 43f / 51f), outroFlavorToken = "MSISLE_SUBTITLE" }; Debug.Log((object)" >|Created survivor definition!"); ContentAddition.AddSurvivorDef(val2); Debug.Log((object)" >|Added survivor to API!"); Debug.Log((object)" >|Adding msIsleCharacter GameObject to the body catalogue..."); ContentAddition.AddBody(msIsleCharacter); Debug.Log((object)" >|Finished setting up character body!"); } private void SetupPreSkills() { Debug.Log((object)" >|Setting up skills..."); Debug.Log((object)" >|Setting the global SkillLocator var to the SkillLocator component on the CharacterBody!"); skillLocator = msIsleCharacter.GetComponent<SkillLocator>(); Debug.Log((object)" >|Deleting existing GenericSkill components attached..."); GenericSkill[] components = msIsleCharacter.GetComponents<GenericSkill>(); for (int i = 0; i < components.Length; i++) { Object.Destroy((Object)(object)components[i]); Debug.Log((object)" >|Deleted a GenericSkill component!"); } skillLocator.primary = ((Component)bodyComponent).gameObject.AddComponent<GenericSkill>(); Debug.Log((object)" >|Added primary skill slot!"); SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>(); Reflection.SetFieldValue<SkillFamily>((object)skillLocator.primary, "_skillFamily", val); Debug.Log((object)" >|Added the primary skill family!"); skillLocator.secondary = ((Component)bodyComponent).gameObject.AddComponent<GenericSkill>(); Debug.Log((object)" >|Added secondary skill slot!"); SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); Reflection.SetFieldValue<SkillFamily>((object)skillLocator.secondary, "_skillFamily", val2); Debug.Log((object)" >|Added the secondary skill family!"); skillLocator.utility = ((Component)bodyComponent).gameObject.AddComponent<GenericSkill>(); Debug.Log((object)" >|Added utility skill slot!"); SkillFamily val3 = ScriptableObject.CreateInstance<SkillFamily>(); Reflection.SetFieldValue<SkillFamily>((object)skillLocator.utility, "_skillFamily", val3); Debug.Log((object)" >|Added the utility skill family!"); skillLocator.special = ((Component)bodyComponent).gameObject.AddComponent<GenericSkill>(); Debug.Log((object)" >|Added special skill slot!"); SkillFamily val4 = ScriptableObject.CreateInstance<SkillFamily>(); Reflection.SetFieldValue<SkillFamily>((object)skillLocator.special, "_skillFamily", val4); Debug.Log((object)" >|Added the special skill family!"); LoadoutAPI.AddSkillFamily(val); LoadoutAPI.AddSkillFamily(val2); LoadoutAPI.AddSkillFamily(val3); LoadoutAPI.AddSkillFamily(val4); Debug.Log((object)" >|Registered all Skill Families with the API!"); } private void SetupPassive() { LanguageAPI.Add("MSISLE_PASSIVE_NAME", "Fly-by"); LanguageAPI.Add("MSISLE_PASSIVE_DESCRIPTION", "Ms. Isle can <style=cIsUtility>fly</style> in any direction, and <style=cIsUtility>sprints</style> automatically when close to terrain. <style=cIsUtility>Jumping</style> is replaced with <style=cIsUtility>Overclocked Drives.</style>"); skillLocator.passiveSkill.enabled = true; skillLocator.passiveSkill.skillNameToken = "MSISLE_PASSIVE_NAME"; skillLocator.passiveSkill.skillDescriptionToken = "MSISLE_PASSIVE_DESCRIPTION"; skillLocator.passiveSkill.icon = Resources.Load<Sprite>("textures/miscicons/texDroneIconOutlined"); Debug.Log((object)" >|Passive ability set up successfuly!"); } private void SetupPrimary() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Expected O, but got Unknown //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: 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) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)" >|Adding Primary ability..."); LanguageAPI.Add("MSISLE_1_MISSILEBARRAGE_NAME", "AtG Misike Mk.II"); LanguageAPI.Add("MSISLE_1_MISSILEBARRAGE_DESCRIPTION", "<style=cIsUtility>Agile</style>. Fire a barrage of missiles for <style=cIsDamage>6x150% Damage</style>. Each missile explodes in a small radius. Fire-rate bonuses increase the number of missiles in the barrage."); Debug.Log((object)" >|Creating primary skill definition..."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(MissileBarrage)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 1; val.baseRechargeInterval = 2f; val.beginSkillCooldownOnSkillEnd = false; val.canceledFromSprinting = false; val.cancelSprintingOnActivation = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = true; val.mustKeyPress = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Resources.Load<Sprite>("Textures/Achievementicons/texEngiClearTeleporterWithZeroMonstersIcon"); val.skillDescriptionToken = "MSISLE_1_MISSILEBARRAGE_DESCRIPTION"; val.skillName = "MSISLE_1_MISSILEBARRAGE_NAME"; val.skillNameToken = "MSISLE_1_MISSILEBARRAGE_NAME"; val.keywordTokens = new string[1] { "KEYWORD_AGILE" }; Debug.Log((object)" >|Registering skill definition with the API..."); LoadoutAPI.AddSkillDef(val); Debug.Log((object)" >|Setting up the projectile..."); missilePrefab = Resources.Load<GameObject>("Prefabs/Projectiles/MissileProjectile"); missilePrefab = PrefabAPI.InstantiateClone(missilePrefab, "Prefabs/MissileDroneMod/MissilePrefab"); if ((Object)(object)missilePrefab != (Object)null) { MissileController component = missilePrefab.GetComponent<MissileController>(); missilePrefab.GetComponent<ProjectileDamage>().force = 10f; missilePrefab.GetComponent<ProjectileController>().procCoefficient = 0.4f; Object.Destroy((Object)(object)missilePrefab.GetComponent<ProjectileSingleTargetImpact>()); ProjectileImpactExplosion obj = missilePrefab.AddComponent<ProjectileImpactExplosion>(); obj.impactEffect = Resources.Load<GameObject>("Prefabs/Effects/Omnieffect/OmniExplosionVFXCommandoGrenade"); obj.destroyOnEnemy = true; obj.destroyOnWorld = true; obj.timerAfterImpact = false; ((ProjectileExplosion)obj).falloffModel = (FalloffModel)1; obj.lifetime = 10f; obj.lifetimeAfterImpact = 0f; obj.lifetimeRandomOffset = 0f; ((ProjectileExplosion)obj).blastRadius = 8f; ((ProjectileExplosion)obj).blastDamageCoefficient = 1.5f; ((ProjectileExplosion)obj).blastProcCoefficient = 0.9f; ((ProjectileExplosion)obj).blastAttackerFiltering = (AttackerFiltering)0; ((ProjectileExplosion)obj).bonusBlastForce = new Vector3(0f, 0f, 750f); ((ProjectileExplosion)obj).fireChildren = false; ((ProjectileExplosion)obj).childrenCount = 0; ((ProjectileExplosion)obj).childrenDamageCoefficient = 0f; ((ProjectileExplosion)obj).minAngleOffset = Vector3.zero; ((ProjectileExplosion)obj).maxAngleOffset = Vector3.zero; obj.transformSpace = (TransformSpace)0; if ((Object)(object)missilePrefab != (Object)null) { MissileBarrage.projectilePrefab = missilePrefab; } MissileBarrage.baseFireInterval = bodyComponent.baseAttackSpeed; Debug.Log((object)" >|Adding MsIsleMissileController component and setting/copying properties..."); MsIsleMissileController msIsleMissileController = missilePrefab.AddComponent<MsIsleMissileController>(); msIsleMissileController.acceleration = 9f; msIsleMissileController.deathTimer = component.deathTimer; msIsleMissileController.delayTimer = component.delayTimer; msIsleMissileController.giveupTimer = component.giveupTimer; msIsleMissileController.maxSeekDistance = component.maxSeekDistance; msIsleMissileController.maxVelocity = 50f; msIsleMissileController.rollVelocity = component.rollVelocity; ((Component)msIsleMissileController).tag = ((Component)component).tag; msIsleMissileController.turbulence = 0.05f; Object.Destroy((Object)(object)component); if (!Object.op_Implicit((Object)(object)missilePrefab.GetComponent<NetworkIdentity>())) { missilePrefab.AddComponent<NetworkIdentity>(); } ProjectileCatalog.getAdditionalEntries += delegate(List<GameObject> list) { list.Add(missilePrefab); }; PrefabAPI.RegisterNetworkPrefab(missilePrefab, "Prefabs/MissileDroneMod/MissilePrefab", "SetupPrimary", 412); } Debug.Log((object)" >|Adding skill variant to the primary family..."); SkillFamily skillFamily = skillLocator.primary.skillFamily; Variant[] array = new Variant[1]; Variant val2 = new Variant { skillDef = val, unlockableName = "" }; ((Variant)(ref val2)).viewableNode = new Node(val.skillNameToken, false, (Node)null); array[0] = val2; skillFamily.variants = (Variant[])(object)array; Debug.Log((object)" >|Added primary ability!"); } private void SetupSecondary() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)" >|Adding Secondary ability..."); LanguageAPI.Add("MSISLE_2_BARRAGE_NAME", "Pack Hounds"); LanguageAPI.Add("MSISLE_2_BARRAGE_DESCRIPTION", "<style=cIsUtility>Agile.</style> Fire a salvo of auto-targeting pack-hound missiles for <style=cIsDamage>4x90% damage</style>. <i><b><style=cIsUtility>Charges for this skill are gained by kills</style></b></i>."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(PackHounds)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 4; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.cancelSprintingOnActivation = false; val.dontAllowPastMaxStocks = true; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = true; val.mustKeyPress = true; val.rechargeStock = 0; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Resources.Load<Sprite>("Textures/itemicons/texMissileRackIcon"); val.skillDescriptionToken = "MSISLE_2_BARRAGE_DESCRIPTION"; val.skillName = "MSISLE_2_BARRAGE_NAME"; val.skillNameToken = "MSISLE_2_BARRAGE_NAME"; val.keywordTokens = new string[1] { "KEYWORD_AGILE" }; LoadoutAPI.AddSkillDef(val); skillLocator.secondary.skillFamily.variants = (Variant[])(object)new Variant[1]; Variant[] variants = skillLocator.secondary.skillFamily.variants; Variant val2 = new Variant { skillDef = val, unlockableName = "" }; ((Variant)(ref val2)).viewableNode = new Node(val.skillNameToken, false, (Node)null); variants[0] = val2; PackHounds.projectilePrefab = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/Projectiles/MissileProjectile"), "Prefabs/MissileDroneMod/PackHoundMissile"); PackHounds.projectilePrefab.AddComponent<MissileControllerNotFucked>().CannibaliseFucked(); PackHounds.projectilePrefab.GetComponent<ProjectileController>().procCoefficient = 0.7f; PackHounds.projectilePrefab.GetComponent<ProjectileSingleTargetImpact>().destroyOnWorld = false; if (!Object.op_Implicit((Object)(object)PackHounds.projectilePrefab.GetComponent<NetworkIdentity>())) { PackHounds.projectilePrefab.AddComponent<NetworkIdentity>(); } ProjectileCatalog.getAdditionalEntries += delegate(List<GameObject> list) { list.Add(PackHounds.projectilePrefab); }; PrefabAPI.RegisterNetworkPrefab(PackHounds.projectilePrefab, "Prefabs/MissileDroneMod/PackHoundMissile", "SetupSecondary", 517); skillLocator.secondary.stock = 0; dronePassiveManager.packHoundsSkill = skillLocator.secondary; Debug.Log((object)" >|Added secondary ability!"); } private void SetupUtility() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_0118: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Expected O, but got Unknown //IL_0146: 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) Debug.Log((object)" >|Adding Utility ability..."); LanguageAPI.Add("MSISLE_3_DRONEBOOST_NAME", "Overclocked Drives"); LanguageAPI.Add("MSISLE_3_DRONEBOOST_DESCRIPTION", "Enter a brief <style=cIsUtility>omnidirectional boost</style>. <style=cIsUtility>Replenishes all charges</style> when near terrain. <b>Bonuses to jump stats affect this ability instead!</b>"); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(DroneBoostAbility)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 1; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = false; val.mustKeyPress = true; val.cancelSprintingOnActivation = false; val.rechargeStock = 0; val.requiredStock = 1; val.dontAllowPastMaxStocks = true; val.stockToConsume = 1; val.icon = Resources.Load<Sprite>("Textures/achievementicons/texDiscover5EquipmentIcon"); val.skillDescriptionToken = "MSISLE_3_DRONEBOOST_DESCRIPTION"; val.skillName = "MSISLE_3_DRONEBOOST_NAME"; val.skillNameToken = "MSISLE_3_DRONEBOOST_NAME"; LoadoutAPI.AddSkillDef(val); skillLocator.utility.skillFamily.variants = (Variant[])(object)new Variant[1]; Variant[] variants = skillLocator.utility.skillFamily.variants; Variant val2 = new Variant { skillDef = val, unlockableName = "" }; ((Variant)(ref val2)).viewableNode = new Node(val.skillNameToken, false, (Node)null); variants[0] = val2; dronePassiveManager.utilitySkill = skillLocator.utility; dronePassiveManager.utilitySkillDef = val; Debug.Log((object)" >|Added secondary ability!"); } private void SetupSpecial() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_012b: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)" >|Adding Special ability..."); LanguageAPI.Add("MSISLE_4_NUKE_NAME", "Cumulative Warhead"); LanguageAPI.Add("MSISLE_4_NUKE_DESCRIPTION", "<style=cIsUtility>Stunning</style>. Fire a slow-moving rocket for <style=cIsDamage>500% damage</style> that <style=cIsDamage>absorbs damage</style> and releases it in a <style=cIsDamage>huge detonation</style> on impact."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(NukeAbility)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 1; val.baseRechargeInterval = 35f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = false; val.mustKeyPress = true; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Resources.Load<Sprite>("Textures/Achievementicons/texObtainArtifactBombIcon"); val.skillDescriptionToken = "MSISLE_4_NUKE_DESCRIPTION"; val.skillName = "MSISLE_4_NUKE_NAME"; val.skillNameToken = "MSISLE_4_NUKE_NAME"; val.keywordTokens = new string[1] { "KEYWORD_STUNNING" }; SetupNukeProjectile(); LoadoutAPI.AddSkillDef(val); skillLocator.special.skillFamily.variants = (Variant[])(object)new Variant[1]; Variant[] variants = skillLocator.special.skillFamily.variants; Variant val2 = new Variant { skillDef = val, unlockableName = "" }; ((Variant)(ref val2)).viewableNode = new Node(val.skillNameToken, false, (Node)null); variants[0] = val2; Debug.Log((object)" >|Added special ability!"); } private void SetupNukeProjectile() { //IL_0080: 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_00da: Unknown result type (might be due to invalid IL or missing references) GameObject val = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/Projectiles/VagrantTrackingBomb"), "Prefabs/MissileDroneMod/NukePrefabTestVagrant"); HealthComponent component = val.GetComponent<HealthComponent>(); component.health = 1000f; component.body.baseMaxHealth = 1000f; ProjectileController component2 = val.GetComponent<ProjectileController>(); GameObject val2 = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/projectileghosts/EngiHarpoonGhost"), "Prefabs/MissileDroneMod/MsIsleNukeGhost"); if (!Object.op_Implicit((Object)(object)val2.GetComponent<NetworkIdentity>())) { val2.AddComponent<NetworkIdentity>(); } PrefabAPI.RegisterNetworkPrefab(val2, "Prefabs/MissileDroneMod/MsIsleNukeGhost", "SetupNukeProjectile", 654); Transform transform = val2.transform; transform.localScale *= 7.5f; component2.ghostPrefab = val2; ProjectileSimple component3 = val.GetComponent<ProjectileSimple>(); component3.lifetime = 128f; component3.desiredForwardSpeed = 12f; val.AddComponent<DamageAccumulatorFixed>(); ProjectileImpactExplosion component4 = val.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component4).blastRadius = 5f; ((ProjectileExplosion)component4).blastDamageCoefficient = 0.5f; ((ProjectileExplosion)component4).falloffModel = (FalloffModel)1; component4.impactEffect = Resources.Load<GameObject>("Prefabs/effects/impacteffects/BootShockwave"); Object.Destroy((Object)(object)val.GetComponent<ProjectileSteerTowardTarget>()); Object.Destroy((Object)(object)val.GetComponent<ProjectileDirectionalTargetFinder>()); val.GetComponent<SphereCollider>().radius = 2f; NukeAbility.projectilePrefabNuke = val; if (!Object.op_Implicit((Object)(object)val.GetComponent<NetworkIdentity>())) { val.AddComponent<NetworkIdentity>(); } ContentAddition.AddProjectile(val); ContentAddition.AddBody(val); PrefabAPI.RegisterNetworkPrefab(val, "Prefabs/MissileDroneMod/NukePrefabTestVagrant", "SetupNukeProjectile", 709); Debug.Log((object)" >|\"Nuke\" projectile set up and assigned!"); } public static float GetICBMDamageMult(CharacterBody body) { float num = 1f; if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory)) { int itemCount = body.inventory.GetItemCount(Items.MoreMissile); int num2 = itemCount - 1; if (num2 > 0) { num += (float)num2 * 0.5f; } if (itemCount > 0) { num *= 0.5f; } } return num; } } public static class Skins { public static void RegisterSkins() { //IL_005e: 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_00a1: 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_00c9: 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) GameObject gameObject = ((Component)MsIsle.msIsleCharacter.GetComponentInChildren<ModelLocator>().modelTransform).gameObject; CharacterModel component = gameObject.GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)gameObject.GetComponent<ModelSkinController>())) { Object.Destroy((Object)(object)gameObject.GetComponent<ModelSkinController>()); } ModelSkinController obj = gameObject.AddComponent<ModelSkinController>(); gameObject.GetComponent<ChildLocator>(); Reflection.GetFieldValue<SkinnedMeshRenderer>((object)component, "mainSkinnedMeshRenderer"); LanguageAPI.Add("MSISLE_DEFAULT_SKIN_NAME", "Stock"); SkinDef val = LoadoutAPI.CreateNewSkinDef(new SkinDefInfo { BaseSkins = Array.Empty<SkinDef>(), GameObjectActivations = Array.Empty<GameObjectActivation>(), Icon = LoadoutAPI.CreateSkinIcon(new Color(4f / 15f, 0.57254905f, 0.40784314f), new Color(0f, 0.18039216f, 31f / 85f), new Color(1f, 1f, 0.9372549f), new Color(0f, 0.03137255f, 0.0627451f)), MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0], Name = "MSISLE_DEFAULT_SKIN_NAME", NameToken = "MSISLE_DEFAULT_SKIN_NAME", RendererInfos = component.baseRendererInfos, RootObject = gameObject, UnlockableDef = null, MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0], ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0] }); obj.skins = (SkinDef[])(object)new SkinDef[1] { val }; } } internal class SpawnState : FlyState { public override void OnEnter() { //IL_0012: 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_0038: 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) ((FlyState)this).OnEnter(); TeleportHelper.TeleportBody(((EntityState)this).characterBody, new Vector3(((EntityState)this).characterBody.footPosition.x, ((EntityState)this).characterBody.footPosition.y + 2f, ((EntityState)this).characterBody.footPosition.z)); } } } namespace MissileDroneSurvivor.Projectiles { [RequireComponent(typeof(ProjectileTargetComponent))] [RequireComponent(typeof(Rigidbody))] public class MissileControllerNotFucked : MonoBehaviour { private Transform transform; private Rigidbody rigidbody; private TeamFilter teamFilter; private ProjectileTargetComponent targetComponent; public float maxVelocity; public float rollVelocity; public float acceleration; public float delayTimer; public float giveupTimer = 8f; public float deathTimer = 10f; private float timer; private QuaternionPID torquePID; public float turbulence; public float maxTurbulence; public float turbulenceMaxDist = 17f; public float turbulenceMinDist = 4f; public float maxSeekDistance = 40f; private BullseyeSearch search = new BullseyeSearch(); private ProjectileController controller; private Transform overrideTarget; public void CannibaliseFucked() { MissileController component = ((Component)this).GetComponent<MissileController>(); if (Object.op_Implicit((Object)(object)component)) { acceleration = component.acceleration; deathTimer = component.deathTimer; giveupTimer = component.giveupTimer; maxSeekDistance = component.maxSeekDistance; maxVelocity = component.maxVelocity; rollVelocity = component.rollVelocity; Object.Destroy((Object)(object)component); } } private void Start() { float num = 5f; float num2 = 3f; maxTurbulence = (turbulence = num + (Random.value - 0.5f) * 2f * num2); float num3 = 0.3f; float num4 = 0.125f; delayTimer = num3 + (Random.value * 2f - 1f) * num4; } private void Awake() { transform = ((Component)this).transform; rigidbody = ((Component)this).GetComponent<Rigidbody>(); torquePID = ((Component)this).GetComponent<QuaternionPID>(); teamFilter = ((Component)this).GetComponent<TeamFilter>(); targetComponent = ((Component)this).GetComponent<ProjectileTargetComponent>(); controller = ((Component)this).GetComponent<ProjectileController>(); } private void FixedUpdate() { //IL_002f: 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_0076: 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_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_00cb: 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) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) timer += Time.fixedDeltaTime; if (timer < giveupTimer) { rigidbody.velocity = transform.forward * maxVelocity; if (Object.op_Implicit((Object)(object)targetComponent.target) && timer >= delayTimer) { rigidbody.velocity = transform.forward * (maxVelocity + timer * acceleration); turbulence = CalculateTurbulence(targetComponent.target); Vector3 val = targetComponent.target.position + Random.insideUnitSphere * turbulence - transform.position; if (val != Vector3.zero) { Quaternion rotation = transform.rotation; Quaternion targetQuat = Util.QuaternionSafeLookRotation(val); torquePID.inputQuat = rotation; torquePID.targetQuat = targetQuat; rigidbody.angularVelocity = torquePID.UpdatePID(); } } } if (!Object.op_Implicit((Object)(object)targetComponent.target)) { targetComponent.target = FindTarget(); } else { HealthComponent component = ((Component)targetComponent.target).GetComponent<HealthComponent>(); if (Object.op_Implicit((Object)(object)component) && !component.alive) { targetComponent.target = FindTarget(); } } if (timer > deathTimer) { Object.Destroy((Object)(object)((Component)this).gameObject); } } private Transform FindTarget() { //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_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_003d: 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) search.searchOrigin = transform.position; search.searchDirection = transform.forward; ((TeamMask)(ref search.teamMaskFilter)).RemoveTeam(teamFilter.teamIndex); search.RefreshCandidates(); search.sortMode = (SortMode)1; IEnumerable<HurtBox> results = search.GetResults(); int num = results.Count(); if (num < 1) { return null; } int index = Random.RandomRangeInt(0, Mathf.Min(4, num)); HurtBox val = results.ElementAt(index); if ((Object)(object)val == (Object)null) { return null; } return ((Component)val).transform; } private float CalculateTurbulence(Transform target) { //IL_0001: 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) return RemapValueClamped(Vector3.Distance(target.position, transform.position), turbulenceMinDist, turbulenceMaxDist, 0f, maxTurbulence); } public static float RemapValueClamped(float value, float low1, float high1, float low2, float high2) { return Mathf.Clamp(low2 + (value - low1) * (high2 - low2) / (high1 - low1), low2, high2); } } [RequireComponent(typeof(ProjectileTargetComponent))] [RequireComponent(typeof(Rigidbody))] public class MsIsleMissileController : MonoBehaviour { private Transform transform; private Rigidbody rigidbody; private TeamFilter teamFilter; private ProjectileTargetComponent targetComponent; public float maxVelocity; public float rollVelocity; public float acceleration; public float delayTimer; public float giveupTimer = 8f; public float deathTimer = 10f; private float timer; private QuaternionPID torquePID; public float turbulence; public float maxTurbulence; private float turbulenceMaxDist = 18f; private float turbulenceMinDist = 4f; public float maxSeekDistance = 40f; private BullseyeSearch search = new BullseyeSearch(); public void Start() { float num = 7f; float num2 = 3f; turbulence = (maxTurbulence = num + (Random.value - 0.5f) * 2f * num2); float num3 = 0.2f; float num4 = 0.125f; delayTimer = num3 + (Random.value * 2f - 1f) * num4; } public void Awake() { transform = ((Component)this).transform; rigidbody = ((Component)this).GetComponent<Rigidbody>(); torquePID = ((Component)this).GetComponent<QuaternionPID>(); teamFilter = ((Component)this).GetComponent<TeamFilter>(); targetComponent = ((Component)this).GetComponent<ProjectileTargetComponent>(); } public void FixedUpdate() { //IL_002f: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: 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_00cb: 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) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) timer += Time.fixedDeltaTime; if (timer < giveupTimer) { rigidbody.velocity = transform.forward * maxVelocity; if (Object.op_Implicit((Object)(object)targetComponent.target) && timer >= delayTimer) { turbulence = CalculateTurbulence(targetComponent.target); rigidbody.velocity = transform.forward * (maxVelocity + timer * acceleration); Vector3 val = targetComponent.target.position + Random.insideUnitSphere * turbulence - transform.position; if (val != Vector3.zero) { Quaternion rotation = transform.rotation; Quaternion targetQuat = Util.QuaternionSafeLookRotation(val); torquePID.inputQuat = rotation; torquePID.targetQuat = targetQuat; rigidbody.angularVelocity = torquePID.UpdatePID(); } } } if (!Object.op_Implicit((Object)(object)targetComponent.target)) { targetComponent.target = FindTarget(); } else { HealthComponent component = ((Component)targetComponent.target).GetComponent<HealthComponent>(); if (Object.op_Implicit((Object)(object)component) && !component.alive) { targetComponent.target = FindTarget(); } } if (timer > deathTimer) { Object.Destroy((Object)(object)((Component)this).gameObject); } } private Transform FindTarget() { //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_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_004d: 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) search.searchOrigin = transform.position; search.searchDirection = transform.forward; search.maxAngleFilter = 20f; ((TeamMask)(ref search.teamMaskFilter)).RemoveTeam(teamFilter.teamIndex); search.sortMode = (SortMode)2; search.RefreshCandidates(); HurtBox val = search.GetResults().FirstOrDefault(); if ((Object)(object)val == (Object)null) { return null; } return ((Component)val).transform; } private float CalculateTurbulence(Transform target) { //IL_0001: 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) return MissileControllerNotFucked.RemapValueClamped(Vector3.Distance(target.position, transform.position), turbulenceMinDist, turbulenceMaxDist, 0f, maxTurbulence); } } } namespace MissileDroneSurvivor.MsIsleEntityStates { public class MissileBarrage : BaseState { private const int numRocketsBase = 6; private const float rocketFireIntervalBase = 0.5f; private const float missileRecharge = 2f; public static GameObject effectPrefab; public static GameObject projectilePrefab; public static float damageCoefficient = 1.5f; public static float baseFireInterval = 1f; public static float minSpread = 0.5f; public static float maxSpread = 1.5f; public static int maxMissileCount; private float fireTimer; private float fireInterval; private Transform modelTransform; private AimAnimator aimAnimator; private int missileCount; private int ICBMCount; private void FireMissile(string targetMuzzle) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: 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_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0166: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_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_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0251: 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_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) missileCount++; ((EntityState)this).PlayAnimation("Gesture, Additive", "FireMissile"); Ray aimRay = ((BaseState)this).GetAimRay(); if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform val = component.FindChild(targetMuzzle); if (Object.op_Implicit((Object)(object)val)) { ((Ray)(ref aimRay)).origin = val.position; } } } if (Object.op_Implicit((Object)(object)effectPrefab)) { EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, targetMuzzle, false); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.SetAimTimer(2f); } if (((EntityState)this).isAuthority) { float num = Random.Range(minSpread, maxSpread); float num2 = Random.Range(0f, 360f); Vector3 up = Vector3.up; Vector3 val2 = Vector3.Cross(up, ((Ray)(ref aimRay)).direction); Vector3 val3 = Quaternion.Euler(0f, 0f, num2) * (Quaternion.Euler(num, 0f, 0f) * Vector3.forward); float y = val3.y; val3.y = 0f; float num3 = Mathf.Atan2(val3.z, val3.x) * 57.29578f - 90f; float num4 = Mathf.Atan2(y, ((Vector3)(ref val3)).magnitude) * 57.29578f; Vector3 val4 = Quaternion.AngleAxis(num3, up) * (Quaternion.AngleAxis(num4, val2) * ((Ray)(ref aimRay)).direction); float iCBMDamageMult = MsIsle.GetICBMDamageMult(((EntityState)this).characterBody); ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val4), ((EntityState)this).gameObject, base.damageStat * damageCoefficient * iCBMDamageMult, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); if (ICBMCount > 0) { Vector3 val5 = Vector3.Cross(Vector3.up, ((Ray)(ref aimRay)).direction); Vector3 val6 = Vector3.Cross(((Ray)(ref aimRay)).direction, val5); Quaternion val7 = Quaternion.AngleAxis(5f, val6); Quaternion val8 = Quaternion.AngleAxis(-5f, val6); Vector3 val9 = val7 * val4; Vector3 val10 = val8 * val4; ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val9), ((EntityState)this).gameObject, base.damageStat * damageCoefficient * iCBMDamageMult, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val10), ((EntityState)this).gameObject, base.damageStat * damageCoefficient * iCBMDamageMult, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); } } } public override void OnEnter() { ((BaseState)this).OnEnter(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.inventory)) { ICBMCount = ((EntityState)this).characterBody.inventory.GetItemCount(Items.MoreMissile); } modelTransform = ((EntityState)this).GetModelTransform(); float num = (base.attackSpeedStat / baseFireInterval - 1f) / 0.3f; int num2 = Mathf.RoundToInt(num); int num3 = 6 + num2; float num4 = 2f / (2f * (6f + num)); fireInterval = num4; float num5 = 1f + (num - (float)num2) * 0.25f; ((EntityState)this).skillLocator.secondary.cooldownScale = 1f / num5; maxMissileCount = num3; FireMissileBarrage.minSpread = 0f; FireMissileBarrage.maxSpread = 3.5f; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); fireTimer -= Time.fixedDeltaTime; if (fireTimer <= 0f) { FireMissile("Muzzle"); fireTimer += fireInterval; } if (missileCount >= maxMissileCount && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } public class DroneBoostAbility : BaseState { public float boostDuration = 2f; private float stopwatch; public float boostBaseStrength = 2f; public float boostStrengthPerUpgrade = 0.15f; public int quailsOwned; private bool isSprinting; private const float kNonSprintBonus = 1.6f; private float storedBaseSpeed; private DronePassiveSkill passiveManager; private CharacterBody body; public static float dodgeFOV; public override void OnEnter() { //IL_00ee: 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_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_0107: 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) ((BaseState)this).OnEnter(); if (!Object.op_Implicit((Object)(object)body)) { body = ((EntityState)this).gameObject.GetComponent<CharacterBody>(); } if (!Object.op_Implicit((Object)(object)passiveManager)) { passiveManager = ((EntityState)this).gameObject.GetComponent<DronePassiveSkill>(); } isSprinting = body.isSprinting; stopwatch = 0f; passiveManager.OnDroneBoost(this); Util.PlaySound("Play_drone_repair", ((EntityState)this).gameObject); Util.PlaySound("Play_loader_m2_launch", ((EntityState)this).gameObject); storedBaseSpeed = base.moveSpeedStat * (boostBaseStrength + boostStrengthPerUpgrade * (float)quailsOwned) * (isSprinting ? 1f : 1.6f); Vector3 val; if (((Vector3)(ref ((EntityState)this).rigidbodyMotor.moveVector)).magnitude > 0.01f) { val = ((Vector3)(ref ((EntityState)this).rigidbodyMotor.moveVector)).normalized; } else { Ray aimRay = ((BaseState)this).GetAimRay(); val = ((Ray)(ref aimRay)).direction; } ((EntityState)this).rigidbodyMotor.rigid.AddForce(val * storedBaseSpeed, (ForceMode)2); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (stopwatch >= boostDuration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)6; } public override void OnExit() { passiveManager.OnDroneBoostExit(this); ((EntityState)this).OnExit(); } } public class NukeAbility : BaseState { public static GameObject effectPrefab; public static GameObject projectilePrefabNuke; public static float damageCoefficient = 5f; public static float baseFireDelay = 0.2f; private bool hasFired; private float fireTimer; public static float minSpread = 0f; public static float maxSpread = 5f; private Transform modelTransform; private AimAnimator aimAnimator; private void FireMissile(string targetMuzzle) { //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_004b: 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_00c1: 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_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: 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_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_00f9: 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_0105: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0151: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).PlayAnimation("Gesture, Additive", "FireMissile"); Ray aimRay = ((BaseState)this).GetAimRay(); if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform val = component.FindChild(targetMuzzle); if (Object.op_Implicit((Object)(object)val)) { ((Ray)(ref aimRay)).origin = val.position; } } } if (Object.op_Implicit((Object)(object)effectPrefab)) { EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, targetMuzzle, false); } if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { ((EntityState)this).characterBody.SetAimTimer(2f); } if (((EntityState)this).isAuthority) { float num = Random.Range(minSpread, maxSpread); float num2 = Random.Range(0f, 360f); Vector3 up = Vector3.up; Vector3 val2 = Vector3.Cross(up, ((Ray)(ref aimRay)).direction); Vector3 val3 = Quaternion.Euler(0f, 0f, num2) * (Quaternion.Euler(num, 0f, 0f) * Vector3.forward); float y = val3.y; val3.y = 0f; float num3 = Mathf.Atan2(val3.z, val3.x) * 57.29578f - 90f; float num4 = Mathf.Atan2(y, ((Vector3)(ref val3)).magnitude) * 57.29578f; Vector3 val4 = Quaternion.AngleAxis(num3, up) * (Quaternion.AngleAxis(num4, val2) * ((Ray)(ref aimRay)).direction); ProjectileManager.instance.FireProjectile(projectilePrefabNuke, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val4), ((EntityState)this).gameObject, base.damageStat * damageCoefficient, 100f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); Util.PlaySound("Play_engi_seekerMissile_shoot", ((EntityState)this).gameObject); hasFired = true; } } public override void OnEnter() { ((BaseState)this).OnEnter(); modelTransform = ((EntityState)this).GetModelTransform(); hasFired = false; fireTimer = baseFireDelay; Util.PlaySound("Play_engi_seekerMissile_lockOn", ((EntityState)this).gameObject); Util.PlaySound("Play_engi_seekerMissile_HUD_open", ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); fireTimer -= Time.fixedDeltaTime; if (!hasFired && fireTimer <= 0f) { FireMissile("Muzzle"); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } public class PackHounds : BaseState { public static GameObject effectPrefab; public static GameObject projectilePrefab; public static float damageCoefficient = 0.9f; public static float baseFireInterval = 0.1f; public static float minSpread = 0f; public static float maxSpread = 5f; public static int maxSalvoCount; private float fireTimer; private float fireInterval; private Transform modelTransform; private AimAnimator aimAnimator; private int missileCount; private int ICBMCount; private const int kSalvoSize = 4; public static float kSalvoIntermissionDelay = 0.35f; private int salvoIdx; private int salvoMissileIdx; private void FireMissile() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_00db: 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_00dd: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) missileCount++; if (((EntityState)this).isAuthority) { bool flag = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master); Vector3 val = (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) ? ((EntityState)this).inputBank.aimOrigin : ((EntityState)this).transform.position); if (!Object.op_Implicit((Object)(object)((EntityState)this).inputBank)) { _ = ((EntityState)this).transform.forward; } else { _ = ((EntityState)this).inputBank.aimDirection; } Vector3 val2 = Vector3.up + Random.insideUnitSphere * 0.1f; GameObject val3 = null; DronePassiveSkill component = ((Component)((EntityState)this).characterBody).GetComponent<DronePassiveSkill>(); if ((Object)(object)component != (Object)null && (Object)(object)component.mostRecentNuke != (Object)null) { val3 = ((Component)component.mostRecentNuke).gameObject; } ProjectileManager.instance.FireProjectile(projectilePrefab, val, Util.QuaternionSafeLookRotation(val2 + Random.insideUnitSphere * 0f), ((EntityState)this).gameObject, ((EntityState)this).characterBody.damage * damageCoefficient, 200f, flag, (DamageColorIndex)3, val3, -1f); } } public override void OnEnter() { ((BaseState)this).OnEnter(); Util.PlaySound("Play_engi_seekerMissile_lockOn", ((EntityState)this).gameObject); modelTransform = ((EntityState)this).GetModelTransform(); fireInterval = baseFireInterval / base.attackSpeedStat; DronePassiveSkill component = ((EntityState)this).gameObject.GetComponent<DronePassiveSkill>(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody.inventory)) { ICBMCount = ((EntityState)this).characterBody.inventory.GetItemCount(Items.MoreMissile); } maxSalvoCount = component.packHoundCount + ((ICBMCount > 0) ? 2 : 0); component.OnPackHoundsUsed(); salvoIdx = 0; salvoMissileIdx = 0; } public override void OnExit() { int packHoundCount = Mathf.Max(maxSalvoCount - 1 - (salvoIdx - 1), 0); ((EntityState)this).gameObject.GetComponent<DronePassiveSkill>().packHoundCount = packHoundCount; ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (salvoIdx >= maxSalvoCount) { ((EntityState)this).outer.SetNextStateToMain(); return; } fireTimer -= Time.fixedDeltaTime; if (fireTimer <= 0f) { FireMissile(); salvoMissileIdx++; if (salvoMissileIdx >= 4 + ((ICBMCount > 0) ? 2 : 0)) { salvoMissileIdx = 0; salvoIdx++; fireTimer += kSalvoIntermissionDelay; } else { fireTimer += fireInterval; } } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)6; } } public class TestPrimarySkill : BaseSkillState { public float baseDuration = 0.5f; private float duration; public GameObject effectPrefab = Resources.Load<GameObject>("prefabs/effects/impacteffects/Hitspark"); public GameObject hitEffectPrefab = Resources.Load<GameObject>("prefabs/effects/impacteffects/critspark"); public GameObject tracerEffectPrefab = Resources.Load<GameObject>("prefabs/effects/tracers/tracerbanditshotgun"); public override void OnEnter() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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_0088: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009a: 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_00b6: 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_00c8: 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_00e4: 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_00f7: 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_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); Chat.AddMessage("YOOOO we just entered the Ms. Isle primary skill state!"); duration = baseDuration / ((BaseState)this).attackSpeedStat; Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).PlayAnimation("Gesture, Override", "FireShotgun", "FireShotgun.playbackRate", duration * 1.1f); if (((EntityState)this).isAuthority) { new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, aimVector = ((Ray)(ref aimRay)).direction, minSpread = 0f, maxSpread = ((EntityState)this).characterBody.spreadBloomAngle, bulletCount = 1u, procCoefficient = 1f, damage = ((EntityState)this).characterBody.damage, force = 3f, falloffModel = (FalloffModel)1, tracerEffectPrefab = tracerEffectPrefab, hitEffectPrefab = hitEffectPrefab, isCrit = ((BaseState)this).RollCrit(), HitEffectNormal = false, stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask, smartCollision = true, maxDistance = 300f }.Fire(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } }