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 Admiral v2.5.2
Admiral.dll
Decompiled a year ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Captain.Weapon; using EntityStates.CaptainSupplyDrop; using IL.RoR2; using KinematicCharacterController; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using On.EntityStates; using On.EntityStates.Captain.Weapon; using On.RoR2; using On.RoR2.Orbs; using On.RoR2.Projectile; using On.RoR2.Skills; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.Hologram; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.Stats; using TILER2; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Admiral")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+29ca6b36d77913a3cb1d4634e8ee295e38eee509")] [assembly: AssemblyProduct("Admiral")] [assembly: AssemblyTitle("Admiral")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace ThinkInvisible.Admiral; [BepInDependency("com.bepis.r2api", "5.1.5")] [BepInDependency("com.ThinkInvisible.TILER2", "7.4.3")] [BepInPlugin("com.ThinkInvisible.Admiral", "Admiral", "2.5.2")] public class AdmiralPlugin : BaseUnityPlugin { public const string ModVer = "2.5.2"; public const string ModName = "Admiral"; public const string ModGuid = "com.ThinkInvisible.Admiral"; internal static ManualLogSource logger; internal static AssetBundle resources; internal static ConfigFile cfgFile; private FilingDictionary<T2Module> allModules; public void Awake() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) logger = ((BaseUnityPlugin)this).Logger; cfgFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "com.ThinkInvisible.Admiral.cfg"), true); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Admiral.admiral_assets")) { resources = AssetBundle.LoadFromStream(stream); } allModules = T2Module.InitModules(new ModInfo { displayName = "Admiral", longIdentifier = "Admiral", shortIdentifier = "ADML", mainConfigFile = cfgFile }); T2Module.SetupAll_PluginAwake((IEnumerable<T2Module>)allModules); } public void Start() { T2Module.SetupAll_PluginStart((IEnumerable<T2Module>)allModules, false); } } public class CaptainBeaconDecayer : MonoBehaviour { public float lifetime = 15f; public bool silent = false; private float stopwatch = 0f; private GenericEnergyComponent energyCpt; public static float lifetimeDropAdjust { get; internal set; } = 4f; private void Awake() { energyCpt = ((Component)this).gameObject.GetComponent<GenericEnergyComponent>(); } private void FixedUpdate() { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown stopwatch += Time.fixedDeltaTime; if (Object.op_Implicit((Object)(object)energyCpt)) { energyCpt.capacity = lifetime; energyCpt.energy = lifetime - stopwatch + lifetimeDropAdjust; } if (stopwatch >= lifetime + lifetimeDropAdjust) { if (!silent) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("prefabs/effects/omnieffect/OmniExplosionVFXEngiTurretDeath"), new EffectData { origin = ((Component)this).transform.position, scale = 5f }, true); } Object.Destroy((Object)(object)((Component)this).gameObject); } } } public class BeaconRebalance : T2Module<BeaconRebalance> { internal GameObject muzzleFlashPrefab; private bool isNormalRechargeRunning = false; [AutoConfigRoOSlider("{0:P0}", 0f, 1f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float beaconCDRInfluence { get; private set; } = 0.5f; [AutoConfigRoOSlider("{0:P0}", 0f, 1f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float beaconRestockInfluence { get; private set; } = 0.5f; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool removeOriginals { get; private set; } = true; public override string enabledConfigDescription => "Changes all Beacon skills to have cooldown and lifetime, and replaces some variants which are incompatible with this model."; public override AutoConfigUpdateActionTypes enabledConfigUpdateActionTypes => (AutoConfigUpdateActionTypes)1; public override AutoConfigFlags enabledConfigFlags => (AutoConfigFlags)66; public override void SetupAttributes() { ((T2Module)this).SetupAttributes(); muzzleFlashPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/effects/muzzleflashes/MuzzleflashSupplyDrop, Healing"); } public override void InstallLanguage() { ((T2Module)this).InstallLanguage(); ((T2Module)this).languageOverlays.Add(LanguageAPI.AddOverlay("CAPTAIN_SPECIAL_DESCRIPTION", "Request one of two <style=cIsUtility>temporary</style> Supply Beacons. Both beacons have <style=cIsUtility>independent cooldowns</style>.")); } public override void Install() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown ((T2Module)this).Install(); CaptainSupplyDropController.UpdateSkillOverrides += new Manipulator(IL_CSDCUpdateSkillOverrides); CaptainSupplyDropController.SetSkillOverride += new hook_SetSkillOverride(On_CSDCSetSkillOverride); GenericSkill.CalculateFinalRechargeInterval += new hook_CalculateFinalRechargeInterval(On_GSCalculateFinalRechargeInterval); GenericSkill.RecalculateMaxStock += new hook_RecalculateMaxStock(On_GSRecalculateMaxStock); GenericSkill.AddOneStock += new hook_AddOneStock(On_GSAddOneStock); GenericSkill.RunRecharge += new hook_RunRecharge(On_GSRunRecharge); GenericSkill.FixedUpdate += new hook_FixedUpdate(On_GSFixedUpdate); ((T2Module)T2Module<EquipBeacon>.instance).Install(); ((T2Module)T2Module<HackBeacon>.instance).Install(); ((T2Module)T2Module<HealBeacon>.instance).Install(); ((T2Module)T2Module<ShockBeacon>.instance).Install(); ((T2Module)T2Module<StasisBeacon>.instance).Install(); } public override void Uninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown ((T2Module)this).Uninstall(); CaptainSupplyDropController.UpdateSkillOverrides -= new Manipulator(IL_CSDCUpdateSkillOverrides); CaptainSupplyDropController.SetSkillOverride -= new hook_SetSkillOverride(On_CSDCSetSkillOverride); GenericSkill.CalculateFinalRechargeInterval -= new hook_CalculateFinalRechargeInterval(On_GSCalculateFinalRechargeInterval); GenericSkill.RecalculateMaxStock -= new hook_RecalculateMaxStock(On_GSRecalculateMaxStock); GenericSkill.AddOneStock -= new hook_AddOneStock(On_GSAddOneStock); GenericSkill.RunRecharge -= new hook_RunRecharge(On_GSRunRecharge); GenericSkill.FixedUpdate -= new hook_FixedUpdate(On_GSFixedUpdate); ((T2Module)T2Module<EquipBeacon>.instance).Uninstall(); ((T2Module)T2Module<HackBeacon>.instance).Uninstall(); ((T2Module)T2Module<HealBeacon>.instance).Uninstall(); ((T2Module)T2Module<ShockBeacon>.instance).Uninstall(); ((T2Module)T2Module<StasisBeacon>.instance).Uninstall(); } private bool SkillIsTemporaryBeacon(SkillDef skillDef) { return (Object)(object)skillDef == (Object)(object)T2Module<EquipBeacon>.instance.skillDef || (Object)(object)skillDef == (Object)(object)T2Module<HackBeacon>.instance.skillDef || (Object)(object)skillDef == (Object)(object)T2Module<HealBeacon>.instance.skillDef || (Object)(object)skillDef == (Object)(object)T2Module<ShockBeacon>.instance.skillDef || (Object)(object)skillDef == (Object)(object)T2Module<StasisBeacon>.instance.skillDef; } private bool SkillIsTemporaryBeacon(GenericSkill skill) { return SkillIsTemporaryBeacon(skill.skillDef); } private void On_GSFixedUpdate(orig_FixedUpdate orig, GenericSkill self) { isNormalRechargeRunning = true; orig.Invoke(self); isNormalRechargeRunning = false; } private void On_GSRunRecharge(orig_RunRecharge orig, GenericSkill self, float dt) { if (SkillIsTemporaryBeacon(self) && !isNormalRechargeRunning) { dt *= beaconCDRInfluence; } orig.Invoke(self, dt); } private void On_GSAddOneStock(orig_AddOneStock orig, GenericSkill self) { if (SkillIsTemporaryBeacon(self)) { self.rechargeStopwatch += self.finalRechargeInterval * beaconRestockInfluence; } else { orig.Invoke(self); } } private void On_GSRecalculateMaxStock(orig_RecalculateMaxStock orig, GenericSkill self) { orig.Invoke(self); if (SkillIsTemporaryBeacon(self)) { self.maxStock = 1; } } private float On_GSCalculateFinalRechargeInterval(orig_CalculateFinalRechargeInterval orig, GenericSkill self) { float num = orig.Invoke(self); if (SkillIsTemporaryBeacon(self)) { return self.baseRechargeInterval * (1f - beaconCDRInfluence) + num * beaconCDRInfluence; } return num; } private void On_CSDCSetSkillOverride(orig_SetSkillOverride orig, CaptainSupplyDropController self, ref SkillDef currentSkillDef, SkillDef newSkillDef, GenericSkill component) { if (!SkillIsTemporaryBeacon(currentSkillDef)) { orig.Invoke(self, ref currentSkillDef, newSkillDef, component); } } private void IL_CSDCUpdateSkillOverrides(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown ILCursor val = new ILCursor(il); int maskLocIndex = -1; int num = default(int); ILLabel val2 = default(ILLabel); if (val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref maskLocIndex), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, maskLocIndex), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CaptainSupplyDropController>(x, "authorityEnabledSkillsMask"), (Instruction x) => ILPatternMatchingExt.MatchBeq(x, ref val2) })) { val.Index = 0; val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, maskLocIndex) }); val.EmitDelegate<Func<byte, byte>>((Func<byte, byte>)((byte orig) => 3)); } else { AdmiralPlugin.logger.LogError((object)"BeaconRebalance/CSDCUpdateSkillOverrides: Failed to apply IL patch (target instructions not found)"); } } } public class CancelOrbitalSkills : T2Module<CancelOrbitalSkills> { public override string enabledConfigDescription => "Allows orbital skills to be cancelled by reactivating the skill."; public override void Install() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((T2Module)this).Install(); GenericSkill.ExecuteIfReady += new hook_ExecuteIfReady(GenericSkill_ExecuteIfReady); } public override void Uninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((T2Module)this).Uninstall(); GenericSkill.ExecuteIfReady -= new hook_ExecuteIfReady(GenericSkill_ExecuteIfReady); } private bool GenericSkill_ExecuteIfReady(orig_ExecuteIfReady orig, GenericSkill self) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) bool flag = orig.Invoke(self); if (flag || !Object.op_Implicit((Object)(object)self.stateMachine) || self.stateMachine.HasPendingState()) { return flag; } Type type = ((object)self.stateMachine.state).GetType(); SerializableEntityStateType activationState = self.activationState; if (type == ((SerializableEntityStateType)(ref activationState)).stateType && (self.stateMachine.state is SetupAirstrike || self.stateMachine.state is SetupSupplyDrop)) { self.stateMachine.SetNextStateToMain(); } return false; } } public class CatalyzerDartSkill : T2Module<CatalyzerDartSkill> { public class MalevolentCleanseOnHit : MonoBehaviour { } internal UnlockableDef unlockable; internal SkillDef skillDef; internal GameObject projectilePrefab; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRecharge { get; private set; } = 8f; [AutoConfigRoOSlider("{0:P0}", 0f, 10f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float evilCleanseDoTDamage { get; private set; } = 3f; [AutoConfigRoOSlider("{0:P0}", 0f, 20f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float evilCleanseNonDoTDamage { get; private set; } = 5f; public override string enabledConfigDescription => "Adds the Catalyzer Dart secondary skill variant."; public override AutoConfigFlags enabledConfigFlags => (AutoConfigFlags)72; public override void SetupAttributes() { //IL_000a: 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) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) ((T2Module)this).SetupAttributes(); bool flag = default(bool); SerializableEntityStateType activationState = ContentAddition.AddEntityState<EntStateFireCatalyzer>(ref flag); projectilePrefab = MiscUtil.ModifyVanillaPrefab("RoR2/Base/Captain/CaptainTazer.prefab", "CaptainCatalyzerProjectile", true, (Func<GameObject, GameObject>)delegate(GameObject projPfbPfb) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) projPfbPfb.GetComponent<ProjectileDamage>().damageType = DamageTypeCombo.op_Implicit((DamageType)0); ((ProjectileExplosion)projPfbPfb.GetComponent<ProjectileImpactExplosion>()).blastRadius = 1f; projPfbPfb.AddComponent<MalevolentCleanseOnHit>(); return projPfbPfb; }); ContentAddition.AddProjectile(projectilePrefab); string text = "ADMIRAL_CATALYZER_SKILL_NAME"; string text2 = "ADMIRAL_CATALYZER_SKILL_DESC"; string text3 = "Catalyzer Dart"; LanguageAPI.Add(text, text3); LanguageAPI.Add(text2, "Fire a fast dart which <style=cIsHealing>catalyzes all debuffs</style>, converting them to <style=cIsDamage>damage</style>: <style=cIsDamage>300%</style> of the remaining total for DoTs, <style=cIsDamage>1x500%</style> otherwise."); skillDef = ScriptableObject.CreateInstance<SkillDef>(); skillDef.activationStateMachineName = "Weapon"; skillDef.activationState = activationState; skillDef.interruptPriority = (InterruptPriority)1; skillDef.baseRechargeInterval = skillRecharge; skillDef.baseMaxStock = 1; skillDef.rechargeStock = 1; skillDef.beginSkillCooldownOnSkillEnd = false; skillDef.requiredStock = 1; skillDef.stockToConsume = 1; skillDef.isCombatSkill = true; skillDef.cancelSprintingOnActivation = true; skillDef.canceledFromSprinting = false; skillDef.mustKeyPress = false; skillDef.fullRestockOnAssign = true; skillDef.dontAllowPastMaxStocks = false; skillDef.skillName = text3; skillDef.skillNameToken = text; skillDef.skillDescriptionToken = text2; skillDef.icon = AdmiralPlugin.resources.LoadAsset<Sprite>("Assets/Admiral/Textures/Icons/icon_AdmiralCatalyzerSkill.png"); ContentAddition.AddSkillDef(skillDef); string text4 = "ACHIEVEMENT_ADMIRAL_" + ((T2Module)this).name.ToUpper(CultureInfo.InvariantCulture) + "_NAME"; string text5 = "ACHIEVEMENT_ADMIRAL_" + ((T2Module)this).name.ToUpper(CultureInfo.InvariantCulture) + "_DESCRIPTION"; unlockable = ScriptableObject.CreateInstance<UnlockableDef>(); unlockable.cachedName = "Admiral_" + ((T2Module)this).name + "Unlockable"; unlockable.sortScore = 200; unlockable.achievementIcon = AdmiralPlugin.resources.LoadAsset<Sprite>("Assets/Admiral/Textures/Icons/icon_AdmiralCatalyzerSkill.png"); ContentAddition.AddUnlockableDef(unlockable); LanguageAPI.Add(text4, "Captain: Hoist By Their Own Petard"); LanguageAPI.Add(text5, "As Captain, kill 6 other enemies by Shocking the same one."); } public override void Install() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown ((T2Module)this).Install(); SkillUtil.AddVariant(LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSecondarySkillFamily"), skillDef, unlockable); GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; FireTazer.Fire += new hook_Fire(FireTazer_Fire); } public override void Uninstall() { ((T2Module)this).Uninstall(); SkillUtil.RemoveVariant(LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSecondarySkillFamily"), skillDef); } private void FireTazer_Fire(orig_Fire orig, FireTazer self) { if (!(self is EntStateFireCatalyzer)) { orig.Invoke(self); return; } GameObject val = FireTazer.projectilePrefab; FireTazer.projectilePrefab = projectilePrefab; orig.Invoke(self); FireTazer.projectilePrefab = val; } private void GlobalEventManager_onServerDamageDealt(DamageReport obj) { //IL_0043: 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_007e: Invalid comparison between Unknown and I4 //IL_0048: 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_0074: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0189: 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_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: 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_01c9: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)obj.victimBody) || !Object.op_Implicit((Object)(object)obj.damageInfo.inflictor) || !Object.op_Implicit((Object)(object)obj.damageInfo.inflictor.GetComponent<MalevolentCleanseOnHit>())) { return; } int num = 0; for (BuffIndex val = (BuffIndex)0; (int)val < BuffCatalog.buffCount; val = (BuffIndex)(val + 1)) { BuffDef buffDef = BuffCatalog.GetBuffDef(val); if (buffDef.isDebuff) { num += obj.victimBody.GetBuffCount(val); } } EntityStateMachine val2 = ((Component)obj.victimBody).GetComponent<SetStateOnHurt>()?.targetStateMachine; if (Object.op_Implicit((Object)(object)val2) && (val2.state is FrozenState || val2.state is StunState || val2.state is ShockState)) { num++; } float num2 = 0f; if (DotController.dotControllerLocator.TryGetValue(((Object)((Component)obj.victimBody).gameObject).GetInstanceID(), out var value)) { List<DotStack> dotStackList = value.dotStackList; foreach (DotStack item in dotStackList) { num2 += item.damage * Mathf.Ceil(item.timer / item.dotDef.interval); } } obj.victimBody.healthComponent.TakeDamage(new DamageInfo { attacker = obj.attacker, crit = false, damage = (float)num * obj.attackerBody.damage * evilCleanseNonDoTDamage + num2 * evilCleanseDoTDamage, damageType = DamageTypeCombo.op_Implicit((DamageType)0), procCoefficient = 0f }); Util.CleanseBody(obj.victimBody, true, false, true, true, false, false); } } [RegisterAchievement("Admiral_CatalyzerDartSkill", "Admiral_CatalyzerDartSkillUnlockable", "CompleteMainEnding", 3u, null)] public class AdmiralCatalyzerAchievement : BaseAchievement { public override bool wantsBodyCallbacks => true; public override BodyIndex LookUpRequiredBodyIndex() { //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_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("CaptainBody"); } public override void OnInstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((BaseAchievement)this).OnInstall(); LightningOrb.OnArrival += new hook_OnArrival(LightningOrb_OnArrival); } public override void OnUninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((BaseAchievement)this).OnUninstall(); LightningOrb.OnArrival -= new hook_OnArrival(LightningOrb_OnArrival); } private void LightningOrb_OnArrival(orig_OnArrival orig, LightningOrb self) { orig.Invoke(self); if (!(self is ShockedOrb shockedOrb) || self.failedToKill || !Object.op_Implicit((Object)(object)shockedOrb.shockVictim)) { return; } ShockHelper component = shockedOrb.shockVictim.GetComponent<ShockHelper>(); if (Object.op_Implicit((Object)(object)component)) { component.shockKills++; if (component.shockKills >= 6) { ((BaseAchievement)this).Grant(); } } } } public class EntStateFireCatalyzer : FireTazer { } public class EquipBeacon : T2Module<EquipBeacon> { public class EntStateCallSupplyDropRejuvenator : CallSupplyDropEquipmentRestock { public override void OnEnter() { ((CallSupplyDropBase)this).supplyDropPrefab = T2Module<EquipBeacon>.instance.beaconPrefab; ((CallSupplyDropBase)this).muzzleflashEffect = T2Module<BeaconRebalance>.instance.muzzleFlashPrefab; ((CallSupplyDropBase)this).OnEnter(); } } public class EntStateRejuvenatorMainState : EquipmentRestockMainState { public override bool shouldShowEnergy => T2Module<EquipBeacon>.instance.useInteractable && T2Module<EquipBeacon>.instance.interactableLimited; public override void OnEnter() { //IL_0042: 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_006e: Unknown result type (might be due to invalid IL or missing references) ((BaseCaptainSupplyDropState)this).OnEnter(); if (NetworkServer.active && !T2Module<EquipBeacon>.instance.useInteractable) { GameObject val = Object.Instantiate<GameObject>(T2Module<EquipBeacon>.instance.rejuvWardPrefab, ((EntityState)this).outer.commonComponents.transform.position, ((EntityState)this).outer.commonComponents.transform.rotation); val.GetComponent<TeamFilter>().teamIndex = ((BaseCaptainSupplyDropState)this).teamFilter.teamIndex; NetworkServer.Spawn(val); } } public override void OnInteractionBegin(Interactor activator) { if (!Object.op_Implicit((Object)(object)activator)) { return; } CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && !component.HasBuff(T2Module<EquipBeacon>.instance.stimmedBuff)) { if (T2Module<EquipBeacon>.instance.interactableLimited) { ((BaseCaptainSupplyDropState)this).energyComponent.TakeEnergy(base.activationCost); } component.AddTimedBuff(T2Module<EquipBeacon>.instance.stimmedBuff, T2Module<EquipBeacon>.instance.skillLifetime); } } public override Interactability GetInteractability(Interactor activator) { //IL_0013: 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_008e: 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_006d: 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_0087: Unknown result type (might be due to invalid IL or missing references) if (!T2Module<EquipBeacon>.instance.useInteractable) { return (Interactability)0; } if (!Object.op_Implicit((Object)(object)activator)) { return (Interactability)0; } CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return (Interactability)0; } if (T2Module<EquipBeacon>.instance.interactableLimited && base.activationCost >= ((BaseCaptainSupplyDropState)this).energyComponent.energy) { return (Interactability)1; } if (component.HasBuff(T2Module<EquipBeacon>.instance.stimmedBuff)) { return (Interactability)1; } return (Interactability)2; } public override string GetContextString(Interactor activator) { return Language.GetString("ADMIRAL_SUPPLY_REJUVENATOR_CONTEXT"); } } private GameObject rejuvWardPrefab; private SkillFamily skillFamily1; private SkillFamily skillFamily2; private SkillDef origSkillDef; internal SkillDef skillDef; internal GameObject beaconPrefab; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillLifetime { get; private set; } = 20f; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRecharge { get; private set; } = 50f; [AutoConfigRoOSlider("{0:P0}", 0f, 5f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float rechargeRate { get; private set; } = 0.5f; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool useInteractable { get; private set; } = true; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool interactableLimited { get; private set; } = false; public override string enabledConfigDescription => "Contains config for the T.Beacon: Resupply submodule of Modules.BeaconRebalance. Replaces Beacon: Equipment."; public override bool managedEnable => false; public BuffDef stimmedBuff { get; private set; } public override void SetupAttributes() { //IL_000a: 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) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_0122: 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_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: 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_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0364: Unknown result type (might be due to invalid IL or missing references) ((T2Module)this).SetupAttributes(); bool flag = default(bool); SerializableEntityStateType activationState = ContentAddition.AddEntityState<EntStateCallSupplyDropRejuvenator>(ref flag); SerializableEntityStateType mainStateType = ContentAddition.AddEntityState<EntStateRejuvenatorMainState>(ref flag); skillFamily1 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop1SkillFamily"); skillFamily2 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop2SkillFamily"); origSkillDef = LegacyResourcesAPI.Load<SkillDef>("skilldefs/captainbody/CallSupplyDropEquipmentRestock"); skillDef = SkillUtil.CloneSkillDef(origSkillDef); skillDef.rechargeStock = 1; skillDef.baseRechargeInterval = skillRecharge; skillDef.skillName = "AdmiralSupplyDropRejuvenator"; skillDef.skillNameToken = "ADMIRAL_SUPPLY_REJUVENATOR_NAME"; skillDef.skillDescriptionToken = "ADMIRAL_SUPPLY_REJUVENATOR_DESCRIPTION"; skillDef.activationState = activationState; LanguageAPI.Add(skillDef.skillNameToken, "T.Beacon: Rejuvenator"); LanguageAPI.Add(skillDef.skillDescriptionToken, "<style=cIsUtility>Temporary beacon</style>. <style=cIsUtility>Buff</style> all nearby allies with <style=cIsUtility>+50% skill recharge rate</style>."); ContentAddition.AddSkillDef(skillDef); stimmedBuff = ScriptableObject.CreateInstance<BuffDef>(); ((Object)stimmedBuff).name = "Stimmed"; stimmedBuff.iconSprite = LegacyResourcesAPI.Load<Sprite>("textures/itemicons/texSyringeIcon"); stimmedBuff.buffColor = Color.red; stimmedBuff.canStack = false; stimmedBuff.isDebuff = false; ContentAddition.AddBuffDef(stimmedBuff); LanguageAPI.Add("ADMIRAL_SUPPLY_REJUVENATOR_CONTEXT", "Take stim charge"); GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/networkedobjects/captainsupplydrops/CaptainSupplyDrop, EquipmentRestock"), "TempSetup, BeaconPrefabPrefab", false); CaptainBeaconDecayer captainBeaconDecayer = val.AddComponent<CaptainBeaconDecayer>(); captainBeaconDecayer.lifetime = skillLifetime; if (!useInteractable) { ((Behaviour)val.GetComponent<ProxyInteraction>()).enabled = false; ((Behaviour)val.GetComponent<GenericEnergyComponent>()).enabled = true; } val.GetComponent<EntityStateMachine>().mainStateType = mainStateType; beaconPrefab = PrefabAPI.InstantiateClone(val, "AdmiralSupplyDrop, Rejuvenator", true); Object.Destroy((Object)(object)val); GameObject val2 = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("prefabs/networkedobjects/captainsupplydrops/CaptainHealingWard")); ((Behaviour)val2.GetComponent<HealingWard>()).enabled = false; Transform val3 = val2.transform.Find("Indicator"); CaptainBeaconDecayer captainBeaconDecayer2 = val2.AddComponent<CaptainBeaconDecayer>(); captainBeaconDecayer2.lifetime = skillLifetime - CaptainBeaconDecayer.lifetimeDropAdjust; captainBeaconDecayer2.silent = true; BuffWard val4 = val2.AddComponent<BuffWard>(); val4.buffDef = stimmedBuff; val4.buffDuration = 1f; val4.radius = 10f; val4.interval = 1f; val4.rangeIndicator = val3; ((Renderer)((Component)val3.Find("IndicatorRing")).GetComponent<MeshRenderer>()).material.SetColor("_TintColor", new Color(1f, 0.5f, 0f, 1f)); ParticleSystemRenderer component = ((Component)val3.Find("HealingSymbols")).GetComponent<ParticleSystemRenderer>(); ((Renderer)component).material.SetTexture("_MainTex", LegacyResourcesAPI.Load<Texture>("textures/bufficons/texBuffTeslaIcon")); ((Renderer)component).material.SetColor("_TintColor", new Color(2f, 0.05f, 0f, 1f)); component.trailMaterial.SetColor("_TintColor", new Color(2f, 0.05f, 0f, 1f)); MainModule main = ((Component)val3.Find("Flashes")).GetComponent<ParticleSystem>().main; ((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(0.5f, 0.25f, 0f, 1f)); rejuvWardPrefab = PrefabAPI.InstantiateClone(val2, "CaptainRejuvWard", true); Object.Destroy((Object)(object)val2); } public override void Install() { //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown ((T2Module)this).Install(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, origSkillDef, skillDef); SkillUtil.ReplaceVariant(skillFamily2, origSkillDef, skillDef); } else { SkillUtil.AddVariant(skillFamily1, skillDef, (UnlockableDef)null); SkillUtil.AddVariant(skillFamily2, skillDef, (UnlockableDef)null); } SkillDef.OnFixedUpdate += new hook_OnFixedUpdate(On_SkillDefFixedUpdate); } public override void Uninstall() { //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown ((T2Module)this).Uninstall(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, skillDef, origSkillDef); SkillUtil.ReplaceVariant(skillFamily2, skillDef, origSkillDef); } else { SkillUtil.RemoveVariant(skillFamily1, skillDef); SkillUtil.RemoveVariant(skillFamily2, skillDef); } SkillDef.OnFixedUpdate -= new hook_OnFixedUpdate(On_SkillDefFixedUpdate); } private void On_SkillDefFixedUpdate(orig_OnFixedUpdate orig, SkillDef self, GenericSkill skillSlot, float deltaTime) { if (skillSlot.characterBody.HasBuff(stimmedBuff)) { skillSlot.RunRecharge(deltaTime * rechargeRate); } orig.Invoke(self, skillSlot, deltaTime); } } public class HackBeacon : T2Module<HackBeacon> { public class EntStateCallSupplyDropSpecialOrder : CallSupplyDropHacking { public override void OnEnter() { ((CallSupplyDropBase)this).supplyDropPrefab = T2Module<HackBeacon>.instance.beaconPrefab; ((CallSupplyDropBase)this).muzzleflashEffect = T2Module<BeaconRebalance>.instance.muzzleFlashPrefab; ((CallSupplyDropBase)this).OnEnter(); } } public class EntStateSpecialOrderMainState : HackingMainState { public override bool shouldShowEnergy => true; public override void OnEnter() { //IL_04ad: Unknown result type (might be due to invalid IL or missing references) //IL_03f2: Unknown result type (might be due to invalid IL or missing references) ((HackingMainState)this).OnEnter(); if (!NetworkServer.active) { return; } ItemWard component = ((Component)((EntityState)this).outer).gameObject.GetComponent<ItemWard>(); List<ItemDef> list = (from x in Run.instance.availableTier1DropList select ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(x).itemIndex) into x where !FakeInventory.blacklist.Contains(x) select x).ToList(); List<ItemDef> list2 = (from x in Run.instance.availableTier2DropList select ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(x).itemIndex) into x where !FakeInventory.blacklist.Contains(x) select x).ToList(); List<ItemDef> list3 = (from x in Run.instance.availableTier3DropList select ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(x).itemIndex) into x where !FakeInventory.blacklist.Contains(x) select x).ToList(); if (T2Module<HackBeacon>.instance.splitDHU) { WeightedSelection<List<ItemDef>> val = new WeightedSelection<List<ItemDef>>(8); val.AddChoice(list.Where((ItemDef x) => x.ContainsTag((ItemTag)1)).ToList(), T2Module<HackBeacon>.instance.itemTier1Chance); val.AddChoice(list2.Where((ItemDef x) => x.ContainsTag((ItemTag)1)).ToList(), T2Module<HackBeacon>.instance.itemTier2Chance); val.AddChoice(list3.Where((ItemDef x) => x.ContainsTag((ItemTag)1)).ToList(), T2Module<HackBeacon>.instance.itemTier3Chance); WeightedSelection<List<ItemDef>> val2 = new WeightedSelection<List<ItemDef>>(8); val2.AddChoice(list.Where((ItemDef x) => x.ContainsTag((ItemTag)2)).ToList(), T2Module<HackBeacon>.instance.itemTier1Chance); val2.AddChoice(list2.Where((ItemDef x) => x.ContainsTag((ItemTag)2)).ToList(), T2Module<HackBeacon>.instance.itemTier2Chance); val2.AddChoice(list3.Where((ItemDef x) => x.ContainsTag((ItemTag)2)).ToList(), T2Module<HackBeacon>.instance.itemTier3Chance); WeightedSelection<List<ItemDef>> val3 = new WeightedSelection<List<ItemDef>>(8); val3.AddChoice(list.Where((ItemDef x) => x.DoesNotContainTag((ItemTag)1) && x.DoesNotContainTag((ItemTag)2)).ToList(), T2Module<HackBeacon>.instance.itemTier1Chance); val3.AddChoice(list2.Where((ItemDef x) => x.DoesNotContainTag((ItemTag)1) && x.DoesNotContainTag((ItemTag)2)).ToList(), T2Module<HackBeacon>.instance.itemTier2Chance); val3.AddChoice(list3.Where((ItemDef x) => x.DoesNotContainTag((ItemTag)1) && x.DoesNotContainTag((ItemTag)2)).ToList(), T2Module<HackBeacon>.instance.itemTier3Chance); int num = ((T2Module)T2Module<HackBeacon>.instance).rng.RangeInt(0, 3); for (int i = 0; i < T2Module<HackBeacon>.instance.baseItems + T2Module<HackBeacon>.instance.itemsPerStage * Run.instance.stageClearCount; i++) { List<ItemDef> list4 = ((WeightedSelection<List<ItemDef>>)(((i + num) % 3) switch { 0 => val, 1 => val2, _ => val3, })).Evaluate(Run.instance.treasureRng.nextNormalizedFloat); ItemDef val4 = Run.instance.treasureRng.NextElementUniform<ItemDef>(list4); component.ServerAddItem(val4.itemIndex); } } else { WeightedSelection<List<ItemDef>> val5 = new WeightedSelection<List<ItemDef>>(8); val5.AddChoice(list, T2Module<HackBeacon>.instance.itemTier1Chance); val5.AddChoice(list2, T2Module<HackBeacon>.instance.itemTier2Chance); val5.AddChoice(list3, T2Module<HackBeacon>.instance.itemTier3Chance); for (int j = 0; j < T2Module<HackBeacon>.instance.baseItems + T2Module<HackBeacon>.instance.itemsPerStage * Run.instance.stageClearCount; j++) { List<ItemDef> list5 = val5.Evaluate(Run.instance.treasureRng.nextNormalizedFloat); ItemDef val6 = Run.instance.treasureRng.NextElementUniform<ItemDef>(list5); component.ServerAddItem(val6.itemIndex); } } } public override void FixedUpdate() { ((EntityState)this).fixedAge = ((EntityState)this).fixedAge + Time.fixedDeltaTime; } } private SkillFamily skillFamily1; private SkillFamily skillFamily2; private SkillDef origSkillDef; internal SkillDef skillDef; internal GameObject beaconPrefab; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillLifetime { get; private set; } = 20f; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRecharge { get; private set; } = 40f; [AutoConfigRoOSlider("{0:N0} m", 0f, 100f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float wardRadius { get; private set; } = 10f; [AutoConfigRoOIntSlider("{0:N0}", 0, 30, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public int baseItems { get; private set; } = 6; [AutoConfigRoOIntSlider("{0:N0}", 0, 30, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public int itemsPerStage { get; private set; } = 3; [AutoConfigRoOSlider("{0:N3}", 0f, 2f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float itemTier1Chance { get; private set; } = 0.8f; [AutoConfigRoOSlider("{0:N3}", 0f, 2f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float itemTier2Chance { get; private set; } = 0.2f; [AutoConfigRoOSlider("{0:N3}", 0f, 2f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float itemTier3Chance { get; private set; } = 0.01f; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool splitDHU { get; private set; } = true; public override string enabledConfigDescription => "Contains config for the T.Beacon: Special Order submodule of Modules.BeaconRebalance. Replaces Beacon: Hacking."; public override bool managedEnable => false; public override void SetupAttributes() { //IL_000a: 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) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_013d: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) ((T2Module)this).SetupAttributes(); bool flag = default(bool); SerializableEntityStateType activationState = ContentAddition.AddEntityState<EntStateCallSupplyDropSpecialOrder>(ref flag); SerializableEntityStateType mainStateType = ContentAddition.AddEntityState<EntStateSpecialOrderMainState>(ref flag); skillFamily1 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop1SkillFamily"); skillFamily2 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop2SkillFamily"); origSkillDef = LegacyResourcesAPI.Load<SkillDef>("skilldefs/captainbody/CallSupplyDropHacking"); skillDef = SkillUtil.CloneSkillDef(origSkillDef); skillDef.rechargeStock = 1; skillDef.baseRechargeInterval = skillRecharge; skillDef.skillName = "AdmiralSupplyDropSpecialOrder"; skillDef.skillNameToken = "ADMIRAL_SUPPLY_SPECIALORDER_NAME"; skillDef.skillDescriptionToken = "ADMIRAL_SUPPLY_SPECIALORDER_DESCRIPTION"; skillDef.activationState = activationState; skillDef.icon = origSkillDef.icon; LanguageAPI.Add(skillDef.skillNameToken, "T.Beacon: Special Order"); LanguageAPI.Add(skillDef.skillDescriptionToken, "<style=cIsUtility>Temporary beacon</style>. Requisition a pack of <style=cIsUtility>random, disposable items</style> from your trusty quartermaster. All allies standing near the beacon receive these items until it runs out of energy."); ContentAddition.AddSkillDef(skillDef); GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/networkedobjects/captainsupplydrops/CaptainSupplyDrop, Hacking"), "TempSetup, BeaconPrefabPrefab", false); ((Behaviour)val.GetComponent<GenericEnergyComponent>()).enabled = true; CaptainBeaconDecayer captainBeaconDecayer = val.AddComponent<CaptainBeaconDecayer>(); captainBeaconDecayer.lifetime = skillLifetime; val.GetComponent<EntityStateMachine>().mainStateType = mainStateType; val.AddComponent<Inventory>(); ItemWard val2 = val.AddComponent<ItemWard>(); val2.radius = wardRadius; Transform val3 = val.transform.Find("ModelBase").Find("captain supply drop").Find("Indicator"); ((Behaviour)((Component)val3).gameObject.GetComponent<ObjectScaleCurve>()).enabled = false; Transform child = val3.GetChild(0); child.localScale /= 1.5f; val2.rangeIndicator = val3; beaconPrefab = PrefabAPI.InstantiateClone(val, "AdmiralSupplyDrop, SpecialOrder", true); Object.Destroy((Object)(object)val); } public override void Install() { ((T2Module)this).Install(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, origSkillDef, skillDef); SkillUtil.ReplaceVariant(skillFamily2, origSkillDef, skillDef); } else { SkillUtil.AddVariant(skillFamily1, skillDef, (UnlockableDef)null); SkillUtil.AddVariant(skillFamily2, skillDef, (UnlockableDef)null); } } public override void Uninstall() { ((T2Module)this).Uninstall(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, skillDef, origSkillDef); SkillUtil.ReplaceVariant(skillFamily2, skillDef, origSkillDef); } else { SkillUtil.RemoveVariant(skillFamily1, skillDef); SkillUtil.RemoveVariant(skillFamily2, skillDef); } } } public class HealBeacon : T2Module<HealBeacon> { public class EntStateCallSupplyDropHealing : CallSupplyDropHealing { public override void OnEnter() { ((CallSupplyDropBase)this).supplyDropPrefab = T2Module<HealBeacon>.instance.beaconPrefab; ((CallSupplyDropBase)this).muzzleflashEffect = T2Module<BeaconRebalance>.instance.muzzleFlashPrefab; ((CallSupplyDropBase)this).OnEnter(); } } public class EntStateHealingMainState : HealZoneMainState { public override bool shouldShowEnergy => true; } private SkillFamily skillFamily1; private SkillFamily skillFamily2; private SkillDef origSkillDef; internal SkillDef skillDef; internal GameObject beaconPrefab; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillLifetime { get; private set; } = 20f; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRecharge { get; private set; } = 40f; public override string enabledConfigDescription => "Contains config for the T.Beacon: Healing submodule of Modules.BeaconRebalance. Replaces Beacon: Healing."; public override bool managedEnable => false; public override void SetupAttributes() { //IL_000a: 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) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_0127: Unknown result type (might be due to invalid IL or missing references) ((T2Module)this).SetupAttributes(); bool flag = default(bool); SerializableEntityStateType activationState = ContentAddition.AddEntityState<EntStateCallSupplyDropHealing>(ref flag); SerializableEntityStateType mainStateType = ContentAddition.AddEntityState<EntStateHealingMainState>(ref flag); skillFamily1 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop1SkillFamily"); skillFamily2 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop2SkillFamily"); origSkillDef = LegacyResourcesAPI.Load<SkillDef>("skilldefs/captainbody/CallSupplyDropHealing"); skillDef = SkillUtil.CloneSkillDef(origSkillDef); skillDef.rechargeStock = 1; skillDef.baseRechargeInterval = skillRecharge; skillDef.skillName = "AdmiralSupplyDropHealing"; skillDef.skillNameToken = "ADMIRAL_SUPPLY_HEALING_NAME"; skillDef.skillDescriptionToken = "ADMIRAL_SUPPLY_HEALING_DESCRIPTION"; skillDef.activationState = activationState; LanguageAPI.Add(skillDef.skillNameToken, "T.Beacon: Healing"); LanguageAPI.Add(skillDef.skillDescriptionToken, "<style=cIsUtility>Temporary beacon</style>. <style=cIsHealing>Heal</style> all nearby allies for <style=cIsHealing>10%</style> of their <style=cIsHealing>maximum health</style> every second."); ContentAddition.AddSkillDef(skillDef); GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/networkedobjects/captainsupplydrops/CaptainSupplyDrop, Healing"), "TempSetup, BeaconPrefabPrefab", false); ((Behaviour)val.GetComponent<GenericEnergyComponent>()).enabled = true; CaptainBeaconDecayer captainBeaconDecayer = val.AddComponent<CaptainBeaconDecayer>(); captainBeaconDecayer.lifetime = skillLifetime; val.GetComponent<EntityStateMachine>().mainStateType = mainStateType; beaconPrefab = PrefabAPI.InstantiateClone(val, "AdmiralSupplyDrop, Healing", true); Object.Destroy((Object)(object)val); } public override void Install() { ((T2Module)this).Install(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, origSkillDef, skillDef); SkillUtil.ReplaceVariant(skillFamily2, origSkillDef, skillDef); } else { SkillUtil.AddVariant(skillFamily1, skillDef, (UnlockableDef)null); SkillUtil.AddVariant(skillFamily2, skillDef, (UnlockableDef)null); } } public override void Uninstall() { ((T2Module)this).Uninstall(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, skillDef, origSkillDef); SkillUtil.ReplaceVariant(skillFamily2, skillDef, origSkillDef); } else { SkillUtil.RemoveVariant(skillFamily1, skillDef); SkillUtil.RemoveVariant(skillFamily2, skillDef); } } } public class EntStateCallJumpPad : BaseSkillState { public override void OnEnter() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown ((BaseState)this).OnEnter(); if (((EntityState)this).isAuthority) { switch (((BaseSkillState)this).activatorSkillSlot.stock) { case 0: { CallAirstrike2 val2 = new CallAirstrike2(); ((AimThrowableBase)val2).projectilePrefab = T2Module<OrbitalJumpPadSkill>.instance.jumpPadPrefabProj2; ((AimThrowableBase)val2).maxDistance = 100f; ((EntityState)this).outer.SetNextState((EntityState)(object)val2); break; } case 1: { CallAirstrike1 val = new CallAirstrike1(); ((AimThrowableBase)val).projectilePrefab = T2Module<OrbitalJumpPadSkill>.instance.jumpPadPrefabProj1; ((AimThrowableBase)val).maxDistance = 100f; ((EntityState)this).outer.SetNextState((EntityState)(object)val); break; } default: AdmiralPlugin.logger.LogError((object)"Jump pad skill has invalid stock count!"); break; } } } 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 class EntStateSetupJumpPad : SetupAirstrike { public override void OnEnter() { SkillDef primarySkillDef = SetupAirstrike.primarySkillDef; SetupAirstrike.primarySkillDef = T2Module<OrbitalJumpPadSkill>.instance.callSkillDef; ((SetupAirstrike)this).OnEnter(); SetupAirstrike.primarySkillDef = primarySkillDef; } public override void OnExit() { SkillDef primarySkillDef = SetupAirstrike.primarySkillDef; SetupAirstrike.primarySkillDef = T2Module<OrbitalJumpPadSkill>.instance.callSkillDef; ((SetupAirstrike)this).OnExit(); SetupAirstrike.primarySkillDef = primarySkillDef; } } public class OrbitalJumpPadSkill : T2Module<OrbitalJumpPadSkill> { private struct MsgSetJumpPadTarget : INetMessage, ISerializableObject { private GameObject _targetJumpPad; private Vector3 _velocity; private Vector3 _targetPos; public void Serialize(NetworkWriter writer) { //IL_0010: 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) writer.Write(_targetJumpPad); writer.Write(_velocity); writer.Write(_targetPos); } public void Deserialize(NetworkReader reader) { //IL_000f: 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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) _targetJumpPad = reader.ReadGameObject(); _velocity = reader.ReadVector3(); _targetPos = reader.ReadVector3(); } public void OnReceived() { //IL_0041: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_targetJumpPad)) { GameObject gameObject = ((Component)_targetJumpPad.transform.Find("mdlHumanFan").Find("JumpVolume")).gameObject; gameObject.GetComponent<JumpVolume>().jumpVelocity = _velocity; LineRenderer component = gameObject.GetComponent<LineRenderer>(); if (T2Module<OrbitalJumpPadSkill>.instance.showArcs) { component.SetPositions(CalculateJumpPadPoints(gameObject.transform.position, _targetPos, 5f, 32)); } else { ((Renderer)component).enabled = false; } } } public MsgSetJumpPadTarget(GameObject targetJumpPad, Vector3 velocity, Vector3 targetPos) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) _targetJumpPad = targetJumpPad; _velocity = velocity; _targetPos = targetPos; } } internal SkillDef setupSkillDef; internal SkillDef callSkillDef; internal UnlockableDef unlockable; internal GameObject jumpPadPrefabBase; internal GameObject jumpPadPrefabProj1; internal GameObject jumpPadPrefabProj2; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillLifetime { get; private set; } = 20f; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRecharge { get; private set; } = 50f; [AutoConfigRoOSlider("{0:N0} m", 0f, 300f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRange { get; private set; } = 80f; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool showArcs { get; private set; } = true; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool doubleStock { get; private set; } = true; public override string enabledConfigDescription => "Adds the Orbital Jump Pad utility skill variant."; public override AutoConfigFlags enabledConfigFlags => (AutoConfigFlags)72; public override void SetupAttributes() { //IL_000a: 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) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: 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_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) ((T2Module)this).SetupAttributes(); bool flag = default(bool); SerializableEntityStateType activationState = ContentAddition.AddEntityState<EntStateCallJumpPad>(ref flag); SerializableEntityStateType activationState2 = ContentAddition.AddEntityState<EntStateSetupJumpPad>(ref flag); NetworkingAPI.RegisterMessageType<MsgSetJumpPadTarget>(); string text = "ACHIEVEMENT_ADMIRAL_" + ((T2Module)this).name.ToUpper(CultureInfo.InvariantCulture) + "_NAME"; string text2 = "ACHIEVEMENT_ADMIRAL_" + ((T2Module)this).name.ToUpper(CultureInfo.InvariantCulture) + "_DESCRIPTION"; unlockable = ScriptableObject.CreateInstance<UnlockableDef>(); unlockable.cachedName = "Admiral_" + ((T2Module)this).name + "Unlockable"; unlockable.sortScore = 200; unlockable.achievementIcon = AdmiralPlugin.resources.LoadAsset<Sprite>("Assets/Admiral/Textures/Icons/icon_AdmiralJumpPadSkill.png"); ContentAddition.AddUnlockableDef(unlockable); LanguageAPI.Add(text, "Captain: Damn The Torpedoes"); LanguageAPI.Add(text2, "As Captain, nail a very speedy target with an Orbital Probe."); jumpPadPrefabBase = MiscUtil.ModifyVanillaPrefab("RoR2/Base/frozenwall/FW_HumanFan.prefab", "CaptainJumpPad", true, (Func<GameObject, GameObject>)ModifyJumpPadPrefab); jumpPadPrefabProj1 = MiscUtil.ModifyVanillaPrefab("RoR2/Base/Captain/CaptainAirstrikeProjectile1.prefab", "CaptainJumpPadProjectile1", true, (Func<GameObject, GameObject>)ModifyAirstrike1Prefab); ContentAddition.AddProjectile(jumpPadPrefabProj1); jumpPadPrefabProj2 = MiscUtil.ModifyVanillaPrefab("RoR2/Base/Captain/CaptainAirstrikeProjectile1.prefab", "CaptainJumpPadProjectile2", true, (Func<GameObject, GameObject>)ModifyAirstrike2Prefab); ContentAddition.AddProjectile(jumpPadPrefabProj2); string text3 = "ADMIRAL_JUMPPAD_SKILL_NAME"; string text4 = "ADMIRAL_JUMPPAD_SKILL_DESC"; string text5 = "Orbital Jump Pad"; LanguageAPI.Add(text3, text5); LanguageAPI.Add(text4, "Request an Orbital Jump Pad from the <style=cIsUtility>UES Safe Travels</style>. Fire once to set the jump pad, then again to set its target (both within <style=cIsUtility>80 m</style>)."); setupSkillDef = ScriptableObject.CreateInstance<SkillDef>(); setupSkillDef.activationStateMachineName = "Skillswap"; setupSkillDef.activationState = activationState2; setupSkillDef.interruptPriority = (InterruptPriority)1; setupSkillDef.baseRechargeInterval = skillRecharge; setupSkillDef.baseMaxStock = ((!doubleStock) ? 1 : 2); setupSkillDef.rechargeStock = ((!doubleStock) ? 1 : 2); setupSkillDef.beginSkillCooldownOnSkillEnd = true; setupSkillDef.requiredStock = 1; setupSkillDef.stockToConsume = 1; setupSkillDef.isCombatSkill = false; setupSkillDef.cancelSprintingOnActivation = true; setupSkillDef.canceledFromSprinting = true; setupSkillDef.mustKeyPress = true; setupSkillDef.fullRestockOnAssign = true; setupSkillDef.skillName = text5; setupSkillDef.skillNameToken = text3; setupSkillDef.skillDescriptionToken = text4; setupSkillDef.icon = AdmiralPlugin.resources.LoadAsset<Sprite>("Assets/Admiral/Textures/Icons/icon_AdmiralJumpPadSkill.png"); ContentAddition.AddSkillDef(setupSkillDef); callSkillDef = ScriptableObject.CreateInstance<SkillDef>(); callSkillDef.activationStateMachineName = "Weapon"; callSkillDef.activationState = activationState; callSkillDef.interruptPriority = (InterruptPriority)2; callSkillDef.baseRechargeInterval = 0f; callSkillDef.baseMaxStock = 2; callSkillDef.rechargeStock = 0; callSkillDef.beginSkillCooldownOnSkillEnd = true; callSkillDef.requiredStock = 1; callSkillDef.stockToConsume = 1; callSkillDef.isCombatSkill = false; callSkillDef.cancelSprintingOnActivation = true; callSkillDef.canceledFromSprinting = true; callSkillDef.mustKeyPress = true; callSkillDef.fullRestockOnAssign = true; callSkillDef.dontAllowPastMaxStocks = true; callSkillDef.skillName = text5; callSkillDef.skillNameToken = text3; callSkillDef.skillDescriptionToken = text4; callSkillDef.icon = AdmiralPlugin.resources.LoadAsset<Sprite>("Assets/Admiral/Textures/Icons/icon_AdmiralJumpPadSkill.png"); ContentAddition.AddSkillDef(callSkillDef); } private void ProjectileExplosion_DetonateServer(orig_DetonateServer orig, ProjectileExplosion self) { //IL_0076: 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_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_017e: 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) orig.Invoke(self); if (!NetworkServer.active) { return; } if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<OrbitalJumpPad1ImpactEventFlag>())) { GameObject owner = ((Component)self).GetComponent<ProjectileController>().owner; if (Object.op_Implicit((Object)(object)owner)) { OrbitalJumpPadDeployTracker orbitalJumpPadDeployTracker = owner.GetComponent<OrbitalJumpPadDeployTracker>(); if (!Object.op_Implicit((Object)(object)orbitalJumpPadDeployTracker)) { orbitalJumpPadDeployTracker = owner.AddComponent<OrbitalJumpPadDeployTracker>(); } GameObject val = Object.Instantiate<GameObject>(jumpPadPrefabBase, ((Component)self).transform.position, ((Component)self).transform.rotation); if (Object.op_Implicit((Object)(object)orbitalJumpPadDeployTracker.prevPadBase)) { Object.Destroy((Object)(object)orbitalJumpPadDeployTracker.prevPadBase); } orbitalJumpPadDeployTracker.prevPadBase = orbitalJumpPadDeployTracker.lastPadBase; orbitalJumpPadDeployTracker.lastPadBase = val; NetworkServer.Spawn(val); } } else { if (!Object.op_Implicit((Object)(object)((Component)self).GetComponent<OrbitalJumpPad2ImpactEventFlag>())) { return; } GameObject owner2 = ((Component)self).GetComponent<ProjectileController>().owner; if (!Object.op_Implicit((Object)(object)owner2)) { return; } OrbitalJumpPadDeployTracker component = owner2.GetComponent<OrbitalJumpPadDeployTracker>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.lastPadBase)) { (Vector3, float) tuple = CalculateJumpPadTrajectory(component.lastPadBase.transform.position, ((Component)self).transform.position, 5f); if (!float.IsNaN(tuple.Item1.y)) { NetMessageExtensions.Send((INetMessage)(object)new MsgSetJumpPadTarget(component.lastPadBase, tuple.Item1, ((Component)self).transform.position), (NetworkDestination)1); component.lastPadBase.GetComponent<ChestBehavior>().Open(); } else { Object.Destroy((Object)(object)component.lastPadBase); } } } } public override void Install() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown ((T2Module)this).Install(); JumpVolume.OnTriggerStay += new hook_OnTriggerStay(JumpVolume_OnTriggerStay); ProjectileExplosion.DetonateServer += new hook_DetonateServer(ProjectileExplosion_DetonateServer); SkillFamily val = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainUtilitySkillFamily"); SkillUtil.AddVariant(val, setupSkillDef, unlockable); } public override void Uninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown ((T2Module)this).Uninstall(); JumpVolume.OnTriggerStay -= new hook_OnTriggerStay(JumpVolume_OnTriggerStay); ProjectileExplosion.DetonateServer -= new hook_DetonateServer(ProjectileExplosion_DetonateServer); SkillFamily val = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainUtilitySkillFamily"); SkillUtil.RemoveVariant(val, setupSkillDef); } public static (Vector3, float) CalculateJumpPadTrajectory(Vector3 source, Vector3 target, float extraPeakHeight) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: 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_0009: 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_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_008a: Unknown result type (might be due to invalid IL or missing references) Vector3 val = target - source; float y = val.y; float num = Mathf.Max(new float[3] { Mathf.Max(y, 0f) + extraPeakHeight, y, 0f }); float num2 = 0f - Physics.gravity.y; float num3 = Mathf.Sqrt(2f * num2 * num); float num4 = Mathf.Sqrt(2f) / num2 * (Mathf.Sqrt(num2 * (num - y)) + Mathf.Sqrt(num2 * num)); float num5 = val.x / num4; float num6 = val.z / num4; return (new Vector3(num5, num3, num6), num4); } public static Vector3[] CalculateJumpPadPoints(Vector3 source, Vector3 target, float extraPeakHeight, int displayPointsToGenerate) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: 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_0009: 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_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_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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) Vector3 val = target - source; float y = val.y; float num = Mathf.Max(new float[3] { Mathf.Max(y, 0f) + extraPeakHeight, y, 0f }); float num2 = 0f - Physics.gravity.y; float num3 = Mathf.Sqrt(2f * num2 * num); float num4 = Mathf.Sqrt(2f) / num2 * (Mathf.Sqrt(num2 * (num - y)) + Mathf.Sqrt(num2 * num)); float num5 = val.x / num4; float num6 = val.z / num4; Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num5, num3, num6); Vector3[] array = (Vector3[])(object)new Vector3[displayPointsToGenerate]; float num7 = num4 / ((float)displayPointsToGenerate - 1f); for (int i = 0; i < displayPointsToGenerate; i++) { array[i] = Trajectory.CalculatePositionAtTime(source, val2, num7 * (float)i); } return array; } private GameObject ModifyJumpPadPrefab(GameObject origPrefab) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_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_0112: 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_012e: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Expected O, but got Unknown origPrefab.transform.localScale = new Vector3(0.75f, 0.125f, 0.75f); Transform val = origPrefab.transform.Find("mdlHumanFan").Find("JumpVolume"); Transform val2 = val.Find("LoopParticles").Find("Particle System"); val2.localScale = new Vector3(0.25f, 0.25f, 0.25f); MainModule main = ((Component)val2).gameObject.GetComponent<ParticleSystem>().main; ((MainModule)(ref main)).startSpeed = new MinMaxCurve(6f); Transform val3 = val.Find("LoopParticles").Find("ForwardDust"); val3.localScale = new Vector3(0.25f, 0.25f, 0.25f); MainModule main2 = ((Component)val3).gameObject.GetComponent<ParticleSystem>().main; ((MainModule)(ref main2)).startSpeed = new MinMaxCurve(0.5f, 12f); Transform val4 = val.Find("ActivateParticles").Find("ForwardDust"); val4.localScale = new Vector3(0.3f, 0.3f, 0.3f); MainModule main3 = ((Component)val4).gameObject.GetComponent<ParticleSystem>().main; ((MainModule)(ref main3)).startSpeed = new MinMaxCurve(0.75f, 15f); Transform val5 = val.Find("ActivateParticles").Find("Circle"); val5.localScale = new Vector3(0.25f, 0.25f, 0.125f); LineRenderer val6 = ((Component)val).gameObject.AddComponent<LineRenderer>(); ((Renderer)val6).material = Object.Instantiate<Material>(LegacyResourcesAPI.Load<Material>("materials/matBlueprintsOk")); ((Renderer)val6).material.SetColor("_TintColor", new Color(2f, 0.2f, 10f, 3f)); val6.positionCount = 32; List<Keyframe> list = new List<Keyframe>(); for (int i = 0; i < val6.positionCount; i++) { list.Add(new Keyframe((float)i / 32f, (1f - MiscUtil.Wrap((float)i / 8f, 0f, 1f)) * 0.875f)); } val6.widthCurve = new AnimationCurve { keys = list.ToArray() }; ((Behaviour)origPrefab.GetComponent<PurchaseInteraction>()).enabled = false; ((Behaviour)origPrefab.GetComponent<HologramProjector>()).enabled = false; ((Behaviour)origPrefab.GetComponent<OccupyNearbyNodes>()).enabled = false; ((Component)val).gameObject.AddComponent<TemporaryFallProtectionProvider>(); CaptainBeaconDecayer captainBeaconDecayer = origPrefab.AddComponent<CaptainBeaconDecayer>(); captainBeaconDecayer.lifetime = skillLifetime; return origPrefab; } private GameObject ModifyAirstrike1Prefab(GameObject origPrefab) { ProjectileImpactExplosion component = origPrefab.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component).blastDamageCoefficient = 0.1f; ((ProjectileExplosion)component).blastRadius = 5f; component.lifetime = 0.5f; origPrefab.AddComponent<OrbitalJumpPad1ImpactEventFlag>(); return origPrefab; } private GameObject ModifyAirstrike2Prefab(GameObject origPrefab) { ProjectileImpactExplosion component = origPrefab.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component).blastDamageCoefficient = 0.05f; ((ProjectileExplosion)component).blastRadius = 2.5f; component.lifetime = 0.5f; origPrefab.AddComponent<OrbitalJumpPad2ImpactEventFlag>(); return origPrefab; } private void JumpVolume_OnTriggerStay(orig_OnTriggerStay orig, JumpVolume self, Collider other) { orig.Invoke(self, other); TemporaryFallProtectionProvider component = ((Component)self).GetComponent<TemporaryFallProtectionProvider>(); CharacterBody component2 = ((Component)other).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.characterMotor)) { TemporaryFallDamageProtection temporaryFallDamageProtection = ((Component)other).GetComponent<TemporaryFallDamageProtection>(); if (!Object.op_Implicit((Object)(object)temporaryFallDamageProtection)) { temporaryFallDamageProtection = ((Component)other).gameObject.AddComponent<TemporaryFallDamageProtection>(); } temporaryFallDamageProtection.Apply(); } } } public class TemporaryFallDamageProtection : NetworkBehaviour { private CharacterBody attachedBody; private bool hasProtection = false; private bool disableNextFrame = false; private bool disableN2f = false; private void FixedUpdate() { //IL_0040: 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_0048: Unknown result type (might be due to invalid IL or missing references) if (disableN2f) { disableN2f = false; disableNextFrame = true; } else if (disableNextFrame) { disableNextFrame = false; hasProtection = false; CharacterBody obj = attachedBody; obj.bodyFlags = (BodyFlags)(obj.bodyFlags & -2); } else if (hasProtection && ((BaseCharacterController)attachedBody.characterMotor).Motor.GroundingStatus.IsStableOnGround && !((BaseCharacterController)attachedBody.characterMotor).Motor.LastGroundingStatus.IsStableOnGround) { disableN2f = true; } } private void Awake() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown attachedBody = ((Component)this).GetComponent<CharacterBody>(); attachedBody.characterMotor.onMovementHit += new MovementHitDelegate(CharacterMotor_onMovementHit); } public void Apply() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) hasProtection = true; CharacterBody obj = attachedBody; obj.bodyFlags = (BodyFlags)(obj.bodyFlags | 1); } private void CharacterMotor_onMovementHit(ref MovementHitInfo movementHitInfo) { if (hasProtection && !disableN2f && !disableNextFrame) { disableN2f = true; } } } public class TemporaryFallProtectionProvider : MonoBehaviour { } public class OrbitalJumpPadDeployTracker : MonoBehaviour { public GameObject lastPadBase; public GameObject prevPadBase; } public class OrbitalJumpPad1ImpactEventFlag : MonoBehaviour { } public class OrbitalJumpPad2ImpactEventFlag : MonoBehaviour { } [RegisterAchievement("Admiral_OrbitalJumpPadSkill", "Admiral_OrbitalJumpPadSkillUnlockable", "CompleteMainEnding", 5u, null)] public class AdmiralJumpPadAchievement : BaseAchievement { private int projTestInd1 = -1; private int projTestInd2 = -1; private int projTestInd3 = -1; public override bool wantsBodyCallbacks => true; public override BodyIndex LookUpRequiredBodyIndex() { //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_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("CaptainBody"); } public override void OnInstall() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown ((BaseAchievement)this).OnInstall(); GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; CharacterBody.Awake += new hook_Awake(CharacterBody_Awake); projTestInd1 = ProjectileCatalog.FindProjectileIndex("CaptainAirstrikeProjectile1"); projTestInd2 = ProjectileCatalog.FindProjectileIndex("CaptainAirstrikeProjectile2"); projTestInd3 = ProjectileCatalog.FindProjectileIndex("CaptainAirstrikeProjectile3"); } public override void OnUninstall() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown ((BaseAchievement)this).OnUninstall(); GlobalEventManager.onServerDamageDealt -= GlobalEventManager_onServerDamageDealt; CharacterBody.Awake -= new hook_Awake(CharacterBody_Awake); } private void CharacterBody_Awake(orig_Awake orig, CharacterBody self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<AverageSpeedTracker>(); } private void GlobalEventManager_onServerDamageDealt(DamageReport obj) { //IL_00f0: 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_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) if (!((BaseAchievement)this).meetsBodyRequirement || !Object.op_Implicit((Object)(object)obj.victimBody) || !Object.op_Implicit((Object)(object)obj.damageInfo.attacker) || !Object.op_Implicit((Object)(object)obj.damageInfo.inflictor) || NetworkUser.readOnlyLocalPlayersList.Count == 0) { return; } GameObject attacker = obj.damageInfo.attacker; CharacterBody currentBody = NetworkUser.readOnlyLocalPlayersList[0].GetCurrentBody(); if ((Object)(object)attacker != (Object)(object)((currentBody != null) ? ((Component)currentBody).gameObject : null)) { return; } int projectileIndex = ProjectileCatalog.GetProjectileIndex(obj.damageInfo.inflictor); if (projectileIndex != projTestInd1 && projectileIndex != projTestInd2 && projectileIndex != projTestInd3) { return; } AverageSpeedTracker component = ((Component)obj.victimBody).GetComponent<AverageSpeedTracker>(); if (Object.op_Implicit((Object)(object)component)) { float num = component.QuerySpeed(); Vector3 val = obj.damageInfo.position - obj.damageInfo.inflictor.transform.position; float magnitude = ((Vector3)(ref val)).magnitude; if (num > 20f && magnitude < 4f) { ((BaseAchievement)this).Grant(); } } } } public class AverageSpeedTracker : MonoBehaviour { private readonly List<Vector3> positions = new List<Vector3>(); private readonly List<float> deltas = new List<float>(); public float pollingRate = 0.2f; private uint _history = 5u; private float stopwatch = 0f; public uint history { get { return _history; } set { positions.Clear(); deltas.Clear(); _history = value; } } private void FixedUpdate() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) stopwatch += Time.fixedDeltaTime; if (stopwatch > pollingRate) { positions.Add(((Component)this).transform.position); deltas.Add(stopwatch); if (positions.Count >= _history) { positions.RemoveAt(0); deltas.RemoveAt(0); } stopwatch = 0f; } } public float QuerySpeed() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) float num = 0f; for (int i = 0; i < positions.Count - 1; i++) { float num2 = num; Vector3 val = positions[i + 1] - positions[i]; num = num2 + ((Vector3)(ref val)).magnitude / deltas[i + 1]; } return num; } } public class OrbitalSkillsAnywhere : T2Module<OrbitalSkillsAnywhere> { private Hook CUOSHook; public override string enabledConfigDescription => "Allows orbital skills to be used anywhere except Bazaar."; public override void SetupBehavior() { //IL_0037: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown ((T2Module)this).SetupBehavior(); MethodInfo methodCached = Reflection.GetMethodCached(typeof(CaptainOrbitalSkillDef), "get_isAvailable"); MethodInfo methodCached2 = Reflection.GetMethodCached(typeof(OrbitalSkillsAnywhere), "Hook_Get_IsAvailable"); CUOSHook = new Hook((MethodBase)methodCached, methodCached2, new HookConfig { ManualApply = true }); } public override void Install() { ((T2Module)this).Install(); CUOSHook.Apply(); } public override void Uninstall() { ((T2Module)this).Uninstall(); CUOSHook.Undo(); } private static bool Hook_Get_IsAvailable(CaptainOrbitalSkillDef self) { return SceneCatalog.mostRecentSceneDef.baseSceneName != "bazaar"; } } public class ShockBeacon : T2Module<ShockBeacon> { public class EntStateCallSupplyDropShocking : CallSupplyDropShocking { public override void OnEnter() { ((CallSupplyDropBase)this).supplyDropPrefab = T2Module<ShockBeacon>.instance.beaconPrefab; ((CallSupplyDropBase)this).muzzleflashEffect = T2Module<BeaconRebalance>.instance.muzzleFlashPrefab; ((CallSupplyDropBase)this).OnEnter(); } } public class EntStateShockingMainState : ShockZoneMainState { public override bool shouldShowEnergy => true; public override void FixedUpdate() { ((EntityState)this).fixedAge = ((EntityState)this).fixedAge + Time.fixedDeltaTime; base.shockTimer += Time.fixedDeltaTime; if (base.shockTimer > T2Module<ShockBeacon>.instance.shockRate) { base.shockTimer -= T2Module<ShockBeacon>.instance.shockRate; ((ShockZoneMainState)this).Shock(); } } } private SkillFamily skillFamily1; private SkillFamily skillFamily2; private SkillDef origSkillDef; internal SkillDef skillDef; internal GameObject beaconPrefab; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillLifetime { get; private set; } = 8f; [AutoConfigRoOSlider("{0:N0} s", 0f, 120f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float skillRecharge { get; private set; } = 24f; [AutoConfigRoOSlider("{0:N2} s", 0f, 30f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float shockRate { get; private set; } = 0.95f; public override string enabledConfigDescription => "Contains config for the T.Beacon: Shocking submodule of Modules.BeaconRebalance. Replaces Beacon: Shocking."; public override bool managedEnable => false; public override void SetupAttributes() { //IL_000a: 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) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_0127: Unknown result type (might be due to invalid IL or missing references) ((T2Module)this).SetupAttributes(); bool flag = default(bool); SerializableEntityStateType activationState = ContentAddition.AddEntityState<EntStateCallSupplyDropShocking>(ref flag); SerializableEntityStateType mainStateType = ContentAddition.AddEntityState<EntStateShockingMainState>(ref flag); skillFamily1 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop1SkillFamily"); skillFamily2 = LegacyResourcesAPI.Load<SkillFamily>("skilldefs/captainbody/CaptainSupplyDrop2SkillFamily"); origSkillDef = LegacyResourcesAPI.Load<SkillDef>("skilldefs/captainbody/CallSupplyDropShocking"); skillDef = SkillUtil.CloneSkillDef(origSkillDef); skillDef.rechargeStock = 1; skillDef.baseRechargeInterval = skillRecharge; skillDef.skillName = "AdmiralSupplyDropShocking"; skillDef.skillNameToken = "ADMIRAL_SUPPLY_SHOCKING_NAME"; skillDef.skillDescriptionToken = "ADMIRAL_SUPPLY_SHOCKING_DESCRIPTION"; skillDef.activationState = activationState; LanguageAPI.Add(skillDef.skillNameToken, "T.Beacon: Shocking"); LanguageAPI.Add(skillDef.skillDescriptionToken, "<style=cIsUtility>Temporary beacon</style>. <style=cIsDamage>Shock</style> all nearby enemies rapidly for a short time."); ContentAddition.AddSkillDef(skillDef); GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/networkedobjects/captainsupplydrops/CaptainSupplyDrop, Shocking"), "TempSetup, BeaconPrefabPrefab", false); ((Behaviour)val.GetComponent<GenericEnergyComponent>()).enabled = true; CaptainBeaconDecayer captainBeaconDecayer = val.AddComponent<CaptainBeaconDecayer>(); captainBeaconDecayer.lifetime = skillLifetime; val.GetComponent<EntityStateMachine>().mainStateType = mainStateType; beaconPrefab = PrefabAPI.InstantiateClone(val, "AdmiralSupplyDrop, Shocking", true); Object.Destroy((Object)(object)val); } public override void Install() { ((T2Module)this).Install(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, origSkillDef, skillDef); SkillUtil.ReplaceVariant(skillFamily2, origSkillDef, skillDef); } else { SkillUtil.AddVariant(skillFamily1, skillDef, (UnlockableDef)null); SkillUtil.AddVariant(skillFamily2, skillDef, (UnlockableDef)null); } } public override void Uninstall() { ((T2Module)this).Uninstall(); if (T2Module<BeaconRebalance>.instance.removeOriginals) { SkillUtil.ReplaceVariant(skillFamily1, skillDef, origSkillDef); SkillUtil.ReplaceVariant(skillFamily2, skillDef, origSkillDef); } else { SkillUtil.RemoveVariant(skillFamily1, skillDef); SkillUtil.RemoveVariant(skillFamily2, skillDef); } } } internal class ShockedOrb : LightningOrb { public GameObject shockVictim; } public class ShockStatusTweaks : T2Module<ShockStatusTweaks> { [AutoConfigRoOSlider("{0:P2}", 0f, 1f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float shockChance { get; private set; } = 0.033f; [AutoConfigRoOSlider("{0:P1}", 0f, 2f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float shockDamageFrac { get; private set; } = 0.02f; [AutoConfigRoOSlider("{0:N0} m", 0f, 100f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float shockRadius { get; private set; } = 15f; [AutoConfigRoOSlider("{0:P0}", 0f, 1f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float shockProcCoef { get; private set; } = 0.1f; [AutoConfigRoOCheckbox(null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public bool doThresholdTweak { get; private set; } = true; public override string enabledConfigDescription => "Removes the health threshold from the Shocked status and causes it to deal AoE damage based on victim max health."; public override AutoConfigUpdateActionTypes enabledConfigUpdateActionTypes => (AutoConfigUpdateActionTypes)1; public override void InstallLanguage() { ((T2Module)this).InstallLanguage(); ((T2Module)this).languageOverlays.Add(LanguageAPI.AddOverlay("KEYWORD_SHOCKING", "<style=cKeywordName>Shocking</style><style=cSub>Interrupts enemies and temporarily stuns them. A victim of Shocking will <style=cIsDamage>damage their nearby allies</style> for a fraction of their own maximum health per second.")); } public override void Install() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown ((T2Module)this).Install(); ShockState.OnEnter += new hook_OnEnter(On_ShockStateOnEnter); ShockState.FixedUpdate += new hook_FixedUpdate(On_ShockStateFixedUpdate); SetStateOnHurt.OnTakeDamageServer += new Manipulator(IL_SSOHTakeDamageServer); } public override void Uninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown ((T2Module)this).Uninstall(); ShockState.OnEnter -= new hook_OnEnter(On_ShockStateOnEnter); ShockState.FixedUpdate -= new hook_FixedUpdate(On_ShockStateFixedUpdate); SetStateOnHurt.OnTakeDamageServer -= new Manipulator(IL_SSOHTakeDamageServer); } private void IL_SSOHTakeDamageServer(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0039: 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) ILCursor val = new ILCursor(il); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<SetStateOnHurt>(x, "SetShock") }); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<SetStateOnHurt, DamageReport>>((Action<SetStateOnHurt, DamageReport>)delegate(SetStateOnHurt ssoh, DamageReport dr) { ShockHelper shockHelper = ((Component)ssoh.targetStateMachine).gameObject.GetComponent<ShockHelper>(); if (!Object.op_Implicit((Object)(object)shockHelper)) { shockHelper = ((Component)ssoh.targetStateMachine).gameObject.AddComponent<ShockHelper>(); } shockHelper.currentAttacker = dr.attacker; }); } private void On_ShockStateOnEnter(orig_OnEnter orig, ShockState self) { orig.Invoke(self); if (doThresholdTweak) { ShockState.healthFractionToForceExit = 100f; } } private void On_ShockStateFixedUpdate(orig_FixedUpdate orig, ShockState self) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Invalid comparison between Unknown and I4 //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Invalid comparison between Unknown and I4 //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Invalid comparison between Unknown and I4 //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_00f2: 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_0179: 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_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!NetworkServer.active || !(((T2Module)this).rng.nextNormalizedFloat < shockChance)) { return; } TeamComponent teamComponent = ((EntityState)self).outer.commonComponents.teamComponent; List<TeamComponent> list = new List<TeamComponent>(); bool flag = (int)FriendlyFireManager.friendlyFireMode > 0; if (flag || (int)teamComponent.teamIndex == 2) { list.AddRange(TeamComponent.GetTeamMembers((TeamIndex)2)); } if (flag || (int)teamComponent.teamIndex == 0) { list.AddRange(TeamComponent.GetTeamMembers((TeamIndex)0)); } if (flag || (int)teamComponent.teamIndex == 1) { list.AddRange(TeamComponent.GetTeamMembers((TeamIndex)1)); } float sqrad = shockRadius * shockRadius; Vector3 tpos = ((EntityState)self).outer.commonComponents.characterBody.transform.position; list.Remove(teamComponent); list.RemoveAll(delegate(TeamComponent x) { //IL_0006: 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_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) Vector3 val2 = ((Component)x).transform.position - tpos; return ((Vector3)(ref val2)).sqrMagnitude > sqrad || !Object.op_Implicit((Object)(object)x.body) || !Object.op_Implicit((Object)(object)x.body.mainHurtBox) || !((Behaviour)x.body).isActiveAndEnabled; }); if (list.Count != 0) { TeamComponent val = ((T2Module)this).rng.NextElementUniform<TeamComponent>(list); GameObject attacker = null; ShockHelper component = ((EntityState)self).GetComponent<ShockHelper>(); if (Object.op_Implicit((Object)(object)component)) { attacker = component.currentAttacker; } OrbManager.instance.AddOrb((Orb)(object)new ShockedOrb { attacker = attacker, bouncesRemaining = 0, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)131072), damageValue = ((EntityState)self).outer.commonComponents.characterBody.maxHealth * shockDamageFrac, isCrit = false, lightningType = (LightningType)1, origin = tpos, procChainMask = default(ProcChainMask), procCoefficient = shockProcCoef, target = val.body.mainHurtBox, teamIndex = (TeamIndex)(-1), shockVictim = ((EntityState)self).gameObject }); } } } public class ShockHelper : MonoBehaviour { public GameObject currentAttacker; public int shockKills = 0; } public class ShotgunAutofire : T2Module<ShotgunAutofire> { [AutoConfigRoOSlider("{0:N2} s", 0f, 10f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float fireDelayDynamic { get; private set; } = 0.2f; [AutoConfigRoOSlider("{0:N2} s", 0f, 10f, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public float fireDelayFixed { get; private set; } = 0f; public override bool managedEnable => true; public override string enabledConfigDescription => "Causes Vulcan Shotgun to autofire. Client-side."; public override AutoConfigFlags enabledConfigFlags => (AutoConfigFlags)0; public override void Install() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((T2Module)this).Install(); ChargeCaptainShotgun.FixedUpdate += new hook_FixedUpdate(On_CapChargeShotgunFixedUpdate); } public override void Uninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((T2Module)this).Uninstall(); ChargeCaptainShotgun.FixedUpdate -= new hook_FixedUpdate(On_CapChargeShotgunFixedUpdate); } private void On_CapChargeShotgunFixedUpdate(orig_FixedUpdate orig, ChargeCaptainShotgun self) { if (Util.HasEffectiveAuthority(((EntityState)self).outer.networkIdentity) && ((EntityState)self).fixedAge / self.chargeDuration > fireDelayDynamic + 1f && ((EntityState)self).fixedAge - self.chargeDuration > fireDelayFixed) { self.released = true; } orig.Invoke(self); } } public class ShotgunRebalance : T2Module<ShotgunRebalance> { [AutoConfigRoOIntSlider("{0:N0}", 1, 30, null, null)] [AutoConfig(/*Could not decode attribute arguments.*/)] public int pelletCount { get; private set; } = 6; public override bool managedEnable => true; public override string enabledConfigDescription => "Reduces Vulcan Shotgun pellet count."; public override AutoConfigUpdateActionTypes enabledConfigUpdateActionTypes => (AutoConfigUpdateActionTypes)1; public override void InstallLanguage() { ((T2Module)this).genericLanguageTokens["CAPTAIN_PRIMARY_DESCRIPTION"] = "Fire a blast of pellets that deal <style=cIsDamage>6x120% damage</style> with no falloff. Charging the attack narrows the <style=cIsUtility>spread</style>."; ((T2Module)this).InstallLanguage(); } public override void Install() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown ((T2Module)this).Install(); FireCaptainShotgun.ModifyBullet += new hook_ModifyBullet(On_FCSModifyBullet); FireCaptainShotgun.ctor += new hook_ctor(On_FireCaptainShotgunCtor); } public override void Uninstall() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown ((T2Module)this).Uninstall(); FireCaptainShotgun.ModifyBullet -= new hook_ModifyBullet(On_FCSModifyBullet); FireCaptainShotgun.ctor -= new hook_ctor(On_FireCaptainShotgunCtor); } private void On_FCSModifyBullet(orig_ModifyBullet orig, FireCaptainShotgun self, BulletAttack bulletAttack) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, bulletAttack); bulletAttack.falloffModel = (FalloffModel)0; } private void On_FireCaptainShotgunCtor(orig_ctor orig, FireCaptainShotgun self) { orig.Invoke(self); ((GenericBulletBaseState)self).bulletCount = pelletCount; } } public class EntStateChargeSKGun : ChargeCaptainShotgun { public override void OnEnter() { ((ChargeCaptainShotgun)this).OnEnter(); base.chargeDuration = Mathf.Max(base.chargeDuration, T2Module<SKGunSkill>.instance.minChargeTime); } public override void FixedUpdate() { ((EntityState)this).fixedAge = ((EntityState)this).fixedAge + Time.fixedDeltaTime; ((EntityState)this).characterBody.SetAimTimer(1f); ((EntityState)this).characterBody.isSprinting = false; if (((EntityState)this).fixedAge >= base.chargeDuration) { if (Object.op_Implicit((Object)(object)base.chargeupVfxGameObject)) { EntityState.Destroy((Object)(object)base.chargeupVfxGameObject); base.chargeupVfxGameObject = null; } if (!Object.op_Implicit((Object)(object)base.holdChargeVfxGameObject) && Object.op_Implicit((Object)(object)base.muzzleTransform)) { base.holdChargeVfxGameObject = Object.Instantiate<GameObject>(ChargeCaptainShotgun.holdCharg