using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EntityStates; using EntityStates.Captain.Weapon; using Microsoft.CodeAnalysis; using On.EntityStates.Captain.Weapon; using On.RoR2; using R2API; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Skills; using UnityEngine; [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("CaptainExtraEffects")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+6686b40000462618185446117d26af7c219c2017")] [assembly: AssemblyProduct("CaptainExtraEffects")] [assembly: AssemblyTitle("CaptainExtraEffects")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace CaptainExtraEffects { public sealed class ConfigValue { public ConfigEntry Entry; public readonly T DefaultValue; public readonly T MinValue; public readonly T MaxValue; public T Value => Entry.Value; public ConfigValue(T defaultValue) { DefaultValue = defaultValue; MinValue = default(T); MaxValue = default(T); } public ConfigValue(T defaultValue, T minValue, T maxValue) { DefaultValue = defaultValue; MinValue = minValue; MaxValue = maxValue; } public string DefaultAsString() { return $"Default: {DefaultValue}"; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.fafnir62.CaptainExtraEffects", "Captain Extra Effects", "1.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public sealed class CaptainExtraEffectsPlugin : BaseUnityPlugin { private sealed class CaptainTazerTracker : MonoBehaviour { private CharacterBody body; private float boostStopwatch; private bool wasBoostActive; public bool IsBoostActive => boostStopwatch > 0f; private void Awake() { body = ((Component)this).GetComponent(); } public void Activate(float duration) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)body == (Object)null) { body = ((Component)this).GetComponent(); } if ((Object)(object)body != (Object)null && (Object)(object)body.characterMotor != (Object)null) { Vector3 velocity = body.characterMotor.velocity; velocity.y = Mathf.Max(velocity.y, 6f); body.characterMotor.velocity = velocity; } boostStopwatch = Mathf.Max(boostStopwatch, duration); UpdateStatsIfNeeded(); } private void FixedUpdate() { if (boostStopwatch <= 0f) { if (wasBoostActive) { UpdateStatsIfNeeded(); } } else { boostStopwatch = Mathf.Max(0f, boostStopwatch - Time.fixedDeltaTime); UpdateStatsIfNeeded(); } } private void UpdateStatsIfNeeded() { bool isBoostActive = IsBoostActive; if (isBoostActive != wasBoostActive) { wasBoostActive = isBoostActive; if ((Object)(object)body != (Object)null) { body.MarkAllStatsDirty(); body.RecalculateStats(); } } } } [CompilerGenerated] private static class <>O { public static hook_OnEnter <0>__FireTazer_OnEnter; public static hook_RecalculateStats <1>__CharacterBody_RecalculateStats; public static hook_Start <2>__CharacterBody_Start; } public const string PluginGuid = "com.fafnir62.CaptainExtraEffects"; public const string PluginName = "Captain Extra Effects"; public const string PluginVersion = "1.1.0"; private const string ConfigSectionPowerTazer = "Power Tazer"; private const string ConfigSectionBeaconsCooldown = "Beacons Cooldown"; private static ConfigValue tazerBoostDuration = new ConfigValue(3f, 1f, 6f); private static ConfigValue tazerEnableExtraJumps = new ConfigValue(defaultValue: true); private static ConfigValue tazerExtraJumpCount = new ConfigValue(1, 1, 5); private static ConfigValue tazerEnableSpeedBoost = new ConfigValue(defaultValue: true); private static ConfigValue tazerSpeedBoostPercent = new ConfigValue(40f, 0f, 100f); private static ConfigValue tazerEnableAgile = new ConfigValue(defaultValue: true); private static BodyIndex captainBodyIndex = (BodyIndex)(-1); private static BuffDef tazerBuff; private static ConfigValue EnableBeaconCD = new ConfigValue(defaultValue: true); private static ConfigValue HealingBeaconCD = new ConfigValue(60, 30, 720); private static ConfigValue ShockingBeaconCD = new ConfigValue(60, 30, 720); private static ConfigValue EquipmentBeaconCD = new ConfigValue(90, 45, 720); private static ConfigValue HackingBeaconCD = new ConfigValue(240, 120, 720); public float[] beaconCooldowns; public string[] beaconNameTokens = new string[4] { "CAPTAIN_SUPPLY_HEAL_NAME", "CAPTAIN_SUPPLY_SHOCKING_NAME", "CAPTAIN_SUPPLY_EQUIPMENT_RESTOCK_NAME", "CAPTAIN_SUPPLY_HACKING_NAME" }; public float leftBeaconStopwatch = 0f; public float rightBeaconStopwatch = 0f; public float leftBeaconCooldown; public float rightBeaconCooldown; private void Awake() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown BindConfig(); RegisterRiskOfOptions(); CreateBuff(); object obj = <>O.<0>__FireTazer_OnEnter; if (obj == null) { hook_OnEnter val = FireTazer_OnEnter; <>O.<0>__FireTazer_OnEnter = val; obj = (object)val; } FireTazer.OnEnter += (hook_OnEnter)obj; object obj2 = <>O.<1>__CharacterBody_RecalculateStats; if (obj2 == null) { hook_RecalculateStats val2 = CharacterBody_RecalculateStats; <>O.<1>__CharacterBody_RecalculateStats = val2; obj2 = (object)val2; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj2; object obj3 = <>O.<2>__CharacterBody_Start; if (obj3 == null) { hook_Start val3 = CharacterBody_Start; <>O.<2>__CharacterBody_Start = val3; obj3 = (object)val3; } CharacterBody.Start += (hook_Start)obj3; CaptainSupplyDropController.FixedUpdate += new hook_FixedUpdate(OnRoR2SkillsCaptainSupplyDropSkillDefIsReady); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Captain Extra Effects loaded."); } private void OnDestroy() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown object obj = <>O.<0>__FireTazer_OnEnter; if (obj == null) { hook_OnEnter val = FireTazer_OnEnter; <>O.<0>__FireTazer_OnEnter = val; obj = (object)val; } FireTazer.OnEnter -= (hook_OnEnter)obj; object obj2 = <>O.<1>__CharacterBody_RecalculateStats; if (obj2 == null) { hook_RecalculateStats val2 = CharacterBody_RecalculateStats; <>O.<1>__CharacterBody_RecalculateStats = val2; obj2 = (object)val2; } CharacterBody.RecalculateStats -= (hook_RecalculateStats)obj2; object obj3 = <>O.<2>__CharacterBody_Start; if (obj3 == null) { hook_Start val3 = CharacterBody_Start; <>O.<2>__CharacterBody_Start = val3; obj3 = (object)val3; } CharacterBody.Start -= (hook_Start)obj3; CaptainSupplyDropController.FixedUpdate -= new hook_FixedUpdate(OnRoR2SkillsCaptainSupplyDropSkillDefIsReady); } private static Sprite LoadEmbeddedSprite(string resourceName) { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) Assembly assembly = typeof(CaptainExtraEffectsPlugin).Assembly; using Stream stream = assembly.GetManifestResourceStream(resourceName); if (stream == null) { Debug.LogError((object)("Failed to load resource: " + resourceName)); return null; } byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); Texture2D val = new Texture2D(2, 2); ImageConversion.LoadImage(val, array); return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f)); } private void CreateBuff() { tazerBuff = ScriptableObject.CreateInstance(); ((Object)tazerBuff).name = "CaptainTazerBuff"; tazerBuff.isDebuff = false; tazerBuff.canStack = false; tazerBuff.isCooldown = false; tazerBuff.iconSprite = LoadEmbeddedSprite("ExamplePlugin.Assets.tazer_buff_icon.png"); ContentAddition.AddBuffDef(tazerBuff); } private void BindConfig() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Expected O, but got Unknown //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Expected O, but got Unknown //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Expected O, but got Unknown //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Expected O, but got Unknown //IL_037c: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Expected O, but got Unknown tazerBoostDuration.Entry = ((BaseUnityPlugin)this).Config.Bind("Power Tazer", "Secondary Effects Duration", tazerBoostDuration.DefaultValue, new ConfigDescription("How long Power Tazer grants Captain an extra jump and the configured move speed bonus (in seconds). " + tazerBoostDuration.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(tazerBoostDuration.MinValue, tazerBoostDuration.MaxValue), Array.Empty())); tazerEnableExtraJumps.Entry = ((BaseUnityPlugin)this).Config.Bind("Power Tazer", "Enable Extra Jumps", tazerEnableExtraJumps.DefaultValue, "If enabled, Power Tazer grants extra jumps during the boost duration" + tazerEnableExtraJumps.DefaultAsString()); tazerExtraJumpCount.Entry = ((BaseUnityPlugin)this).Config.Bind("Power Tazer", "Extra Jump Count", tazerExtraJumpCount.DefaultValue, new ConfigDescription("How many extra jumps Power Tazer grants during the boost duration. " + tazerExtraJumpCount.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(tazerExtraJumpCount.MinValue, tazerExtraJumpCount.MaxValue), Array.Empty())); tazerEnableSpeedBoost.Entry = ((BaseUnityPlugin)this).Config.Bind("Power Tazer", "Enable Speed Boost", tazerEnableSpeedBoost.DefaultValue, "If enabled, Power Tazer grants the configured move speed bonus during the boost duration. " + tazerEnableSpeedBoost.DefaultAsString()); tazerSpeedBoostPercent.Entry = ((BaseUnityPlugin)this).Config.Bind("Power Tazer", "Speed Boost Percent", tazerSpeedBoostPercent.DefaultValue, new ConfigDescription("Percent move speed bonus while the Power Tazer boost is active. For example 30 will grant +30% speed boost. " + tazerSpeedBoostPercent.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(0f, 300f), Array.Empty())); tazerEnableAgile.Entry = ((BaseUnityPlugin)this).Config.Bind("Power Tazer", "Enable Agile Tazer Boost", tazerEnableAgile.DefaultValue, "If enabled, Tazer can be used while sprinting. " + tazerEnableAgile.DefaultAsString()); EnableBeaconCD.Entry = ((BaseUnityPlugin)this).Config.Bind("Beacons Cooldown", "Enable Beacons Cooldown", tazerEnableAgile.DefaultValue, "If enabled, Beacons will recharge after certain amount of time. " + tazerEnableAgile.DefaultAsString()); HealingBeaconCD.Entry = ((BaseUnityPlugin)this).Config.Bind("Beacons Cooldown", "Healing Beacon Cooldown", HealingBeaconCD.DefaultValue, new ConfigDescription("Captain's Healing Beacon Cooldown in seconds. " + HealingBeaconCD.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(HealingBeaconCD.MinValue, HealingBeaconCD.MaxValue), Array.Empty())); ShockingBeaconCD.Entry = ((BaseUnityPlugin)this).Config.Bind("Beacons Cooldown", "Shocking Beacon Cooldown", ShockingBeaconCD.DefaultValue, new ConfigDescription("Captain's Shocking Beacon Cooldown in seconds. " + ShockingBeaconCD.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(ShockingBeaconCD.MinValue, ShockingBeaconCD.MaxValue), Array.Empty())); EquipmentBeaconCD.Entry = ((BaseUnityPlugin)this).Config.Bind("Beacons Cooldown", "Equipment Beacon Cooldown", EquipmentBeaconCD.DefaultValue, new ConfigDescription("Captain's Equipment Beacon Cooldown in seconds. Default: " + EquipmentBeaconCD.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(EquipmentBeaconCD.MinValue, EquipmentBeaconCD.MaxValue), Array.Empty())); HackingBeaconCD.Entry = ((BaseUnityPlugin)this).Config.Bind("Beacons Cooldown", "Hacking Beacon Cooldown", HackingBeaconCD.DefaultValue, new ConfigDescription("Captain's Hacking Beacon Cooldown in seconds. " + HackingBeaconCD.DefaultAsString(), (AcceptableValueBase)(object)new AcceptableValueRange(HackingBeaconCD.MinValue, HackingBeaconCD.MaxValue), Array.Empty())); beaconCooldowns = new float[4] { HealingBeaconCD.Value, ShockingBeaconCD.Value, EquipmentBeaconCD.Value, HackingBeaconCD.Value }; } private static void RegisterRiskOfOptions() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Expected O, but got Unknown //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Expected O, but got Unknown //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Expected O, but got Unknown //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Expected O, but got Unknown //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Expected O, but got Unknown //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Expected O, but got Unknown //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Expected O, but got Unknown //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Expected O, but got Unknown //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Expected O, but got Unknown //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Expected O, but got Unknown //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Expected O, but got Unknown if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { ModSettingsManager.SetModDescription("Adds configurable Power Tazer extra effects for Captain, and beacons restock cooldown."); Sprite modIcon = LoadEmbeddedSprite("ExamplePlugin.Assets.captain-extra-effects-icon-256.png"); ModSettingsManager.SetModIcon(modIcon); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(tazerBoostDuration.Entry, new StepSliderConfig { min = tazerBoostDuration.MinValue, max = tazerBoostDuration.MaxValue })); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(tazerEnableExtraJumps.Entry)); ModSettingsManager.AddOption((BaseOption)new IntSliderOption(tazerExtraJumpCount.Entry, new IntSliderConfig { min = tazerExtraJumpCount.MinValue, max = tazerExtraJumpCount.MaxValue })); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(tazerEnableSpeedBoost.Entry)); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(tazerSpeedBoostPercent.Entry, new StepSliderConfig { min = tazerSpeedBoostPercent.MinValue, max = tazerSpeedBoostPercent.MaxValue, increment = 1f })); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(tazerEnableAgile.Entry)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(EnableBeaconCD.Entry)); ModSettingsManager.AddOption((BaseOption)new IntSliderOption(HealingBeaconCD.Entry, new IntSliderConfig { min = HealingBeaconCD.MinValue, max = HealingBeaconCD.MaxValue })); ModSettingsManager.AddOption((BaseOption)new IntSliderOption(ShockingBeaconCD.Entry, new IntSliderConfig { min = ShockingBeaconCD.MinValue, max = ShockingBeaconCD.MaxValue })); ModSettingsManager.AddOption((BaseOption)new IntSliderOption(EquipmentBeaconCD.Entry, new IntSliderConfig { min = EquipmentBeaconCD.MinValue, max = EquipmentBeaconCD.MaxValue })); ModSettingsManager.AddOption((BaseOption)new IntSliderOption(HackingBeaconCD.Entry, new IntSliderConfig { min = HackingBeaconCD.MinValue, max = HackingBeaconCD.MaxValue })); } } private static void FireTazer_OnEnter(orig_OnEnter orig, FireTazer self) { orig.Invoke(self); CharacterBody val = ((self != null) ? ((EntityState)self).characterBody : null); if (IsCaptain(val)) { CaptainTazerTracker captainTazerTracker = ((Component)val).GetComponent(); if ((Object)(object)captainTazerTracker == (Object)null) { captainTazerTracker = ((Component)val).gameObject.AddComponent(); } captainTazerTracker.Activate(Mathf.Max(0f, tazerBoostDuration.Value)); if (tazerEnableExtraJumps.Value || tazerEnableSpeedBoost.Value) { val.AddTimedBuff(tazerBuff, Mathf.Max(0f, tazerBoostDuration.Value)); } } } private static void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { CaptainTazerTracker captainTazerTracker = (Object.op_Implicit((Object)(object)self) ? ((Component)self).GetComponent() : null); bool flag = (Object)(object)captainTazerTracker != (Object)null && captainTazerTracker.IsBoostActive; int num = (tazerEnableExtraJumps.Value ? Math.Max(0, tazerExtraJumpCount.Value) : 0); if (flag && num > 0) { self.baseJumpCount += num; } orig.Invoke(self); if (flag) { if (num > 0) { self.baseJumpCount -= num; } if (tazerEnableSpeedBoost.Value) { float num2 = 1f + Mathf.Max(0f, tazerSpeedBoostPercent.Value) / 100f; self.moveSpeed *= num2; self.acceleration = ((self.baseMoveSpeed <= 0f) ? 0f : (self.moveSpeed / self.baseMoveSpeed * self.baseAcceleration)); } } } private static void CharacterBody_Start(orig_Start orig, CharacterBody self) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!IsCaptain(self)) { return; } SkillLocator skillLocator = self.skillLocator; if (!Object.op_Implicit((Object)(object)skillLocator) || (Object)(object)skillLocator.secondary == (Object)null) { return; } SkillFamily skillFamily = skillLocator.secondary.skillFamily; if ((Object)(object)skillFamily == (Object)null) { return; } Variant[] variants = skillFamily.variants; foreach (Variant val in variants) { SkillDef skillDef = val.skillDef; if (!((Object)(object)skillDef == (Object)null)) { skillDef.cancelSprintingOnActivation = !tazerEnableAgile.Value; } } } private static bool IsCaptain(CharacterBody body) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Invalid comparison between Unknown and I4 //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Invalid comparison between Unknown and I4 //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)body == (Object)null) { return false; } if ((int)captainBodyIndex == -1) { captainBodyIndex = BodyCatalog.FindBodyIndex("CaptainBody"); } return (int)captainBodyIndex != -1 && body.bodyIndex == captainBodyIndex; } private void OnRoR2SkillsCaptainSupplyDropSkillDefIsReady(orig_FixedUpdate orig, CaptainSupplyDropController self) { if (EnableBeaconCD.Value) { self.supplyDrop1Skill.maxStock = 1 + self.supplyDrop1Skill.bonusStockFromBody; self.supplyDrop2Skill.maxStock = 1 + self.supplyDrop2Skill.bonusStockFromBody; for (int i = 0; i < beaconNameTokens.Length; i++) { if (self.supplyDrop1Skill.skillNameToken == beaconNameTokens[i]) { leftBeaconCooldown = beaconCooldowns[i]; } if (self.supplyDrop2Skill.skillNameToken == beaconNameTokens[i]) { rightBeaconCooldown = beaconCooldowns[i]; } } if (self.supplyDrop1Skill.stock < self.supplyDrop1Skill.maxStock) { leftBeaconStopwatch += Time.fixedDeltaTime; } if (self.supplyDrop2Skill.stock < 1) { rightBeaconStopwatch += Time.fixedDeltaTime; } if (self.supplyDrop2Skill.stock > 1) { self.supplyDrop2Skill.stock = 1; } if (leftBeaconStopwatch >= leftBeaconCooldown) { leftBeaconStopwatch = 0f; GenericSkill supplyDrop1Skill = self.supplyDrop1Skill; supplyDrop1Skill.stock += 1; } if (rightBeaconStopwatch >= rightBeaconCooldown) { rightBeaconStopwatch = 0f; GenericSkill supplyDrop2Skill = self.supplyDrop2Skill; supplyDrop2Skill.stock += 1; } } orig.Invoke(self); } } }