using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Captain.Weapon;
using EntityStates.CaptainDefenseMatrixItem;
using EntityStates.CaptainSupplyDrop;
using HIFUCaptainTweaks.Misc;
using HarmonyLib;
using IL.EntityStates.CaptainSupplyDrop;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using On.EntityStates;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.CaptainDefenseMatrixItem;
using On.EntityStates.CaptainSupplyDrop;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
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.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("HIFUCaptainTweaks")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("HIFUCaptainTweaks")]
[assembly: AssemblyTitle("HIFUCaptainTweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[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 HIFUCaptainTweaks
{
public class ConfigManager
{
internal static bool ConfigChanged;
internal static bool VersionChanged;
public static T HandleConfig<T>(ConfigEntryBase entry, ConfigFile config, string name)
{
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Expected O, but got Unknown
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Expected O, but got Unknown
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Expected O, but got Unknown
MethodInfo methodInfo = (from x in typeof(ConfigFile).GetMethods()
where x.Name == "Bind"
select x).First();
methodInfo = methodInfo.MakeGenericMethod(typeof(T));
object[] parameters = new object[3]
{
(object)new ConfigDefinition(Regex.Replace(config.ConfigFilePath, "\\W", "") + " : " + entry.Definition.Section, name),
entry.DefaultValue,
(object)new ConfigDescription(entry.Description.Description, (AcceptableValueBase)null, Array.Empty<object>())
};
ConfigEntryBase val = (ConfigEntryBase)methodInfo.Invoke(config, parameters);
if (Main._preVersioning)
{
entry.BoxedValue = entry.DefaultValue;
}
if (!ConfigEqual(val.DefaultValue, val.BoxedValue) && VersionChanged)
{
entry.BoxedValue = entry.DefaultValue;
val.BoxedValue = val.DefaultValue;
}
return default(T);
}
private static bool ConfigEqual(object a, object b)
{
if (a.Equals(b))
{
return true;
}
if (float.TryParse(a.ToString(), out var result) && float.TryParse(b.ToString(), out var result2) && (double)Mathf.Abs(result - result2) < 0.0001)
{
return true;
}
return false;
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("HIFU.HIFUCaptainTweaks", "HIFUCaptainTweaks", "1.2.2")]
public class Main : BaseUnityPlugin
{
public const string PluginGUID = "HIFU.HIFUCaptainTweaks";
public const string PluginAuthor = "HIFU";
public const string PluginName = "HIFUCaptainTweaks";
public const string PluginVersion = "1.2.2";
public static AssetBundle hifucaptaintweaks;
public static ConfigFile HCAPTConfig;
public static ConfigFile HCAPTBackupConfig;
public static ManualLogSource HCAPTLogger;
public static bool _preVersioning;
public static ConfigEntry<bool> enableAutoConfig { get; set; }
public static ConfigEntry<string> latestVersion { get; set; }
public void Awake()
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
HCAPTLogger = ((BaseUnityPlugin)this).Logger;
HCAPTConfig = ((BaseUnityPlugin)this).Config;
hifucaptaintweaks = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("HIFUCaptainTweaks.dll", "hifucaptaintweaks"));
HCAPTBackupConfig = new ConfigFile(Paths.ConfigPath + "\\HIFU.HIFUCaptainTweaks.Backup.cfg", true);
HCAPTBackupConfig.Bind<string>(": DO NOT MODIFY THIS FILES CONTENTS :", ": DO NOT MODIFY THIS FILES CONTENTS :", ": DO NOT MODIFY THIS FILES CONTENTS :", ": DO NOT MODIFY THIS FILES CONTENTS :");
enableAutoConfig = HCAPTConfig.Bind<bool>("Config", "Enable Auto Config Sync", true, "Disabling this would stop HIFUCaptainTweaks from syncing config whenever a new version is found.");
_preVersioning = !((Dictionary<ConfigDefinition, string>)AccessTools.DeclaredPropertyGetter(typeof(ConfigFile), "OrphanedEntries").Invoke(HCAPTConfig, null)).Keys.Any((ConfigDefinition x) => x.Key == "Latest Version");
latestVersion = HCAPTConfig.Bind<string>("Config", "Latest Version", "1.2.2", "DO NOT CHANGE THIS");
if (enableAutoConfig.Value && (_preVersioning || latestVersion.Value != "1.2.2"))
{
latestVersion.Value = "1.2.2";
ConfigManager.VersionChanged = true;
HCAPTLogger.LogInfo((object)"Config Autosync Enabled.");
}
IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes()
where !type.IsAbstract && type.IsSubclassOf(typeof(TweakBase))
select type;
HCAPTLogger.LogInfo((object)"==+----------------==TWEAKS==----------------+==");
foreach (Type item in enumerable)
{
TweakBase tweakBase = (TweakBase)Activator.CreateInstance(item);
if (ValidateTweak(tweakBase))
{
tweakBase.Init();
}
}
IEnumerable<Type> enumerable2 = from type in Assembly.GetExecutingAssembly().GetTypes()
where !type.IsAbstract && type.IsSubclassOf(typeof(MiscBase))
select type;
HCAPTLogger.LogInfo((object)"==+----------------==MISC==----------------+==");
foreach (Type item2 in enumerable2)
{
MiscBase miscBase = (MiscBase)Activator.CreateInstance(item2);
if (ValidateMisc(miscBase))
{
miscBase.Init();
}
}
OrbitalsInHiddenRealms.HopooLore();
TryRespawn.HopooBugs();
}
public bool ValidateTweak(TweakBase tb)
{
if (tb.isEnabled && ((BaseUnityPlugin)this).Config.Bind<bool>(tb.Name, "Enable?", true, "Vanilla is false").Value)
{
return true;
}
return false;
}
public bool ValidateMisc(MiscBase mb)
{
if (mb.isEnabled && ((BaseUnityPlugin)this).Config.Bind<bool>(mb.Name, "Enable?", true, "Vanilla is false").Value)
{
return true;
}
return false;
}
private void PeripheryMyBeloved()
{
}
}
public abstract class MiscBase
{
public abstract string Name { get; }
public virtual bool isEnabled { get; } = true;
public T ConfigOption<T>(T value, string name, string description)
{
ConfigEntry<T> val = Main.HCAPTConfig.Bind<T>(Name, name, value, description);
ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)val, Main.HCAPTBackupConfig, name);
return val.Value;
}
public abstract void Hooks();
public string d(float f)
{
return f * 100f + "%";
}
public virtual void Init()
{
Hooks();
Main.HCAPTLogger.LogInfo((object)("Added " + Name));
}
}
public abstract class MiscBase<T> : MiscBase where T : MiscBase<T>
{
public static T instance { get; set; }
public MiscBase()
{
if (instance != null)
{
throw new InvalidOperationException("Singleton class " + typeof(T).Name + " was instantiated twice");
}
instance = this as T;
}
}
public abstract class TweakBase
{
public abstract string Name { get; }
public abstract string SkillToken { get; }
public abstract string DescText { get; }
public virtual bool isEnabled { get; } = true;
public T ConfigOption<T>(T value, string name, string description)
{
ConfigEntry<T> val = Main.HCAPTConfig.Bind<T>(Name, name, value, description);
ConfigManager.HandleConfig<T>((ConfigEntryBase)(object)val, Main.HCAPTBackupConfig, name);
return val.Value;
}
public abstract void Hooks();
public string d(float f)
{
return f * 100f + "%";
}
public virtual void Init()
{
Hooks();
string text = "CAPTAIN_" + SkillToken.ToUpper() + "_DESCRIPTION";
LanguageAPI.Add(text, DescText);
Main.HCAPTLogger.LogInfo((object)("Added " + Name));
}
}
public abstract class TweakBase<T> : TweakBase where T : TweakBase<T>
{
public static T instance { get; set; }
public TweakBase()
{
if (instance != null)
{
throw new InvalidOperationException("Singleton class " + typeof(T).Name + " was instantiated twice");
}
instance = this as T;
}
}
}
namespace HIFUCaptainTweaks.Skills
{
public class HackingBeacon : TweakBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__12_0;
public static hook_OnEnter <>9__12_1;
internal void <Changes>b__12_0(orig_OnEnter orig, HackingMainState self)
{
HackingMainState.baseRadius = Radius;
orig.Invoke(self);
}
internal void <Changes>b__12_1(orig_OnEnter orig, HackingInProgressState self)
{
HackingInProgressState.baseGoldForBaseDuration = DurationPerGold;
HackingInProgressState.baseDuration = BaseDuration;
orig.Invoke(self);
}
}
public static float Radius;
public static float BaseDuration;
public static int DurationPerGold;
public static bool Formula;
public override string Name => ": Special :::: Hacking Beacon";
public override string SkillToken => "supply_hacking";
public override string DescText => "<style=cIsUtility>Hack</style> all nearby purchasables to a cost of <style=cIsUtility>$0</style> over time.";
public override void Init()
{
Radius = ConfigOption(16f, "Radius", "Vanilla is 10");
BaseDuration = ConfigOption(2f, "Duration Multiplier", "Vanilla is 3");
DurationPerGold = ConfigOption(25, "Duration Per Gold", "Vanilla is 25");
Formula = ConfigOption(value: true, "Hacking Speed Formula", "(Interactable Cost / Duration Per Gold) * Duration Multiplier");
base.Init();
}
public override void Hooks()
{
Changes();
}
public static void Changes()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Expected O, but got Unknown
LanguageAPI.Add("CAPTAIN_SUPPLY_HACKING_NAME", "Hacking Beacon");
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, Hacking.prefab").WaitForCompletion();
Transform child = val.GetComponent<ModelLocator>().modelTransform.GetChild(4);
((Component)child).GetComponent<ObjectScaleCurve>().baseScale = new Vector3(Radius / 1.5f, Radius / 1.5f, Radius / 1.5f);
object obj = <>c.<>9__12_0;
if (obj == null)
{
hook_OnEnter val2 = delegate(orig_OnEnter orig, HackingMainState self)
{
HackingMainState.baseRadius = Radius;
orig.Invoke(self);
};
<>c.<>9__12_0 = val2;
obj = (object)val2;
}
HackingMainState.OnEnter += (hook_OnEnter)obj;
object obj2 = <>c.<>9__12_1;
if (obj2 == null)
{
hook_OnEnter val3 = delegate(orig_OnEnter orig, HackingInProgressState self)
{
HackingInProgressState.baseGoldForBaseDuration = DurationPerGold;
HackingInProgressState.baseDuration = BaseDuration;
orig.Invoke(self);
};
<>c.<>9__12_1 = val3;
obj2 = (object)val3;
}
HackingInProgressState.OnEnter += (hook_OnEnter)obj2;
}
}
public class HealingBeacon : TweakBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__14_0;
internal void <Changes>b__14_0(orig_OnEnter orig, HealZoneMainState self)
{
HealingWard component = HealZoneMainState.healZonePrefab.GetComponent<HealingWard>();
component.radius = Radius;
component.healFraction = Interval * Healing;
orig.Invoke(self);
}
}
public static float Healing;
public static float Radius;
public static float Interval;
public static float MoveSpeed;
public static BuffDef MoveSpeedBuff;
public override string Name => ": Special : Remedy Beacon";
public override string SkillToken => "supply_heal";
public override string DescText => "<style=cIsHealing>Heal</style> all nearby allies constantly" + ((MoveSpeed > 0f) ? " and <style=cIsUtility>increase movement speed</style>." : ".");
public override void Init()
{
Healing = ConfigOption(0.07f, "Healing", "Decimal. Vanilla is 0.1");
Interval = ConfigOption(0.2f, "Interval", "Vanilla is 0.2");
Radius = ConfigOption(24f, "Radius", "Vanilla is 10");
MoveSpeed = ConfigOption(0.2f, "Buff Move Speed", "Decimal. Vanilla is 0");
base.Init();
}
public override void Hooks()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
Changes();
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
}
private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && sender.HasBuff(MoveSpeedBuff))
{
args.moveSpeedMultAdd += MoveSpeed;
}
}
public static void Changes()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Expected O, but got Unknown
LanguageAPI.Add("CAPTAIN_SUPPLY_HEAL_NAME", "Remedy Beacon");
Texture2D val = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/texMovespeedBuffIcon.tif").WaitForCompletion();
MoveSpeedBuff = ScriptableObject.CreateInstance<BuffDef>();
((Object)MoveSpeedBuff).name = "Remedy Beacon Speed";
MoveSpeedBuff.buffColor = Color32.op_Implicit(new Color32((byte)128, (byte)209, (byte)132, byte.MaxValue));
MoveSpeedBuff.canStack = false;
MoveSpeedBuff.iconSprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0f, 0f));
MoveSpeedBuff.isDebuff = false;
ContentAddition.AddBuffDef(MoveSpeedBuff);
object obj = <>c.<>9__14_0;
if (obj == null)
{
hook_OnEnter val2 = delegate(orig_OnEnter orig, HealZoneMainState self)
{
HealingWard component2 = HealZoneMainState.healZonePrefab.GetComponent<HealingWard>();
component2.radius = Radius;
component2.healFraction = Interval * Healing;
orig.Invoke(self);
};
<>c.<>9__14_0 = val2;
obj = (object)val2;
}
HealZoneMainState.OnEnter += (hook_OnEnter)obj;
GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, Healing.prefab").WaitForCompletion();
Transform child = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainHealingWard.prefab").WaitForCompletion().transform.GetChild(0);
val3.AddComponent<BuffWard>();
BuffWard component = val3.GetComponent<BuffWard>();
component.Networkradius = Radius;
component.shape = (BuffWardShape)0;
component.radius = Radius;
component.interval = 0.5f;
component.rangeIndicator = ((Component)child).transform;
component.buffDef = MoveSpeedBuff;
component.buffDuration = 1.5f;
component.floorWard = true;
component.expires = false;
component.invertTeamFilter = false;
component.expireDuration = 0f;
component.animateRadius = false;
component.removalTime = 0f;
component.requireGrounded = false;
component.teamFilter = val3.GetComponent<TeamFilter>();
}
}
public class OGM72DIABLOStrike : TweakBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__14_0;
public static hook_ModifyProjectile <>9__14_1;
internal void <Changes>b__14_0(orig_OnEnter orig, CallAirstrikeBase self)
{
//IL_0049: 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_00b0: 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_0163: Unknown result type (might be due to invalid IL or missing references)
if (self is CallAirstrikeAlt)
{
((AimThrowableBase)self).damageCoefficient = Damage;
((AimThrowableBase)self).projectilePrefab.transform.localScale = new Vector3(Radius / 16f, Radius / 16f, Radius / 16f);
((ProjectileExplosion)((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileImpactExplosion>()).blastRadius = Radius;
((ProjectileExplosion)((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileImpactExplosion>()).falloffModel = (FalloffModel)0;
((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileController>().ghostPrefab.transform.localScale = new Vector3(Radius / 16f, Radius / 16f, Radius / 16f);
Empower component = ((EntityState)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component != (Object)null && component.IsEmpowered)
{
((ProjectileExplosion)((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileImpactExplosion>()).blastRadius = EmpoweredRadius;
((AimThrowableBase)self).projectilePrefab.transform.localScale = new Vector3(EmpoweredRadius / 16f, EmpoweredRadius / 16f, EmpoweredRadius / 16f);
((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileController>().ghostPrefab.transform.localScale = new Vector3(EmpoweredRadius / 16f, EmpoweredRadius / 16f, EmpoweredRadius / 16f);
}
}
orig.Invoke(self);
}
internal void <Changes>b__14_1(orig_ModifyProjectile orig, AimThrowableBase self, ref FireProjectileInfo fireProjectileInfo)
{
orig.Invoke(self, ref fireProjectileInfo);
if (self is CallAirstrikeAlt)
{
fireProjectileInfo.useFuseOverride = true;
((FireProjectileInfo)(ref fireProjectileInfo)).fuseOverride = TimeToLand;
}
}
}
public static float Damage;
public static float Radius;
public static float Cooldown;
public static float TimeToLand;
public static float EmpoweredRadius;
public static SkillDef Diablo;
public override string Name => ": Utility :: OGM-72 DIABLO Strike";
public override string SkillToken => "utility_alt1";
public override string DescText => "<style=cIsDamage>Stunning</style>. Request a <style=cIsDamage>kinetic strike</style> from the <style=cIsDamage>UES Safe Travels</style>. After <style=cIsUtility>" + TimeToLand + " seconds</style>, it deals <style=cIsDamage>" + d(Damage) + " damage</style> to ALL characters.";
public override void Init()
{
Damage = ConfigOption(140f, "Damage", "Decimal. Vanilla is 400");
Radius = ConfigOption(16f, "Radius", "Vanilla is 16");
Cooldown = ConfigOption(24f, "Cooldown", "Vanilla is 40");
TimeToLand = ConfigOption(15f, "Explosion Timer", "Vanilla is 20");
EmpoweredRadius = ConfigOption(32f, "Empowered Radius", "Vanilla is 16");
base.Init();
}
public override void Hooks()
{
Changes();
}
public static void Changes()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
object obj = <>c.<>9__14_0;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, CallAirstrikeBase self)
{
//IL_0049: 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_00b0: 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_0163: Unknown result type (might be due to invalid IL or missing references)
if (self is CallAirstrikeAlt)
{
((AimThrowableBase)self).damageCoefficient = Damage;
((AimThrowableBase)self).projectilePrefab.transform.localScale = new Vector3(Radius / 16f, Radius / 16f, Radius / 16f);
((ProjectileExplosion)((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileImpactExplosion>()).blastRadius = Radius;
((ProjectileExplosion)((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileImpactExplosion>()).falloffModel = (FalloffModel)0;
((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileController>().ghostPrefab.transform.localScale = new Vector3(Radius / 16f, Radius / 16f, Radius / 16f);
Empower component = ((EntityState)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component != (Object)null && component.IsEmpowered)
{
((ProjectileExplosion)((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileImpactExplosion>()).blastRadius = EmpoweredRadius;
((AimThrowableBase)self).projectilePrefab.transform.localScale = new Vector3(EmpoweredRadius / 16f, EmpoweredRadius / 16f, EmpoweredRadius / 16f);
((AimThrowableBase)self).projectilePrefab.GetComponent<ProjectileController>().ghostPrefab.transform.localScale = new Vector3(EmpoweredRadius / 16f, EmpoweredRadius / 16f, EmpoweredRadius / 16f);
}
}
orig.Invoke(self);
};
<>c.<>9__14_0 = val;
obj = (object)val;
}
CallAirstrikeBase.OnEnter += (hook_OnEnter)obj;
object obj2 = <>c.<>9__14_1;
if (obj2 == null)
{
hook_ModifyProjectile val2 = delegate(orig_ModifyProjectile orig, AimThrowableBase self, ref FireProjectileInfo fireProjectileInfo)
{
orig.Invoke(self, ref fireProjectileInfo);
if (self is CallAirstrikeAlt)
{
fireProjectileInfo.useFuseOverride = true;
((FireProjectileInfo)(ref fireProjectileInfo)).fuseOverride = TimeToLand;
}
};
<>c.<>9__14_1 = val2;
obj2 = (object)val2;
}
AimThrowableBase.ModifyProjectile += (hook_ModifyProjectile)obj2;
Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/PrepAirstrikeAlt.asset").WaitForCompletion().baseRechargeInterval = Cooldown;
}
}
public class OrbitalProbe : TweakBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__11_0;
internal void <Changes>b__11_0(orig_OnEnter orig, AimThrowableBase self)
{
if (self is CallAirstrike1 || self is CallAirstrike2 || self is CallAirstrike3)
{
self.damageCoefficient = Damage;
Empower component = ((EntityState)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component != (Object)null && component.IsEmpowered)
{
self.damageCoefficient = EmpoweredDamage;
}
}
orig.Invoke(self);
}
}
public static float Damage;
public static float Cooldown;
public static float EmpoweredDamage;
public override string Name => ": Utility : Orbital Probe";
public override string SkillToken => "utility";
public override string DescText => "<style=cIsDamage>Stunning</style>. Request up to <style=cIsDamage>3</style> Orbital Probes from the <style=cIsDamage>UES Safe Travels</style>. Each probe deals <style=cIsDamage>" + d(Damage) + " damage</style>.";
public override void Init()
{
Damage = ConfigOption(10f, "Damage", "Decimal. Vanilla is 10");
Cooldown = ConfigOption(9f, "Cooldown", "Vanilla is 11");
EmpoweredDamage = ConfigOption(14f, "Empowered Damage", "Decimal. Vanilla is 10");
base.Init();
}
public override void Hooks()
{
Changes();
}
public static void Changes()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__11_0;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, AimThrowableBase self)
{
if (self is CallAirstrike1 || self is CallAirstrike2 || self is CallAirstrike3)
{
self.damageCoefficient = Damage;
Empower component = ((EntityState)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component != (Object)null && component.IsEmpowered)
{
self.damageCoefficient = EmpoweredDamage;
}
}
orig.Invoke(self);
};
<>c.<>9__11_0 = val;
obj = (object)val;
}
AimThrowableBase.OnEnter += (hook_OnEnter)obj;
SkillDef val2 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/PrepAirstrike.asset").WaitForCompletion();
val2.baseRechargeInterval = Cooldown;
}
}
public class PowerTazer : TweakBase
{
public static float Damage;
public static float Cooldown;
public static int Charges;
public static int ChargesToRecharges;
public static float AoE;
public static float EmpowerDuration;
public static float Size;
public static SkillDef CaptainShotgun;
public static SkillDef PrepAirstrike;
public static SkillDef PrepAirstrikeAlt;
public override string Name => ": Secondary : Thunder Tazer";
public override string SkillToken => "secondary";
public override string DescText => "<style=cIsUtility>Empowering</style>. <style=cIsDamage>Shocking</style>. Fire a fast tazer that deals <style=cIsDamage>" + d(Damage) + " damage</style> and <style=cIsUtility>empowers</style> your other abilities.";
public override void Init()
{
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
Damage = ConfigOption(3.8f, "Damage", "Decimal. Vanilla is 1");
Cooldown = ConfigOption(7f, "Cooldown", "Vanilla is 6");
Charges = ConfigOption(1, "Charges", "Vanilla is 1");
ChargesToRecharges = ConfigOption(1, "Charges to Recharge", "Vanilla is 1");
AoE = ConfigOption(8f, "Area of Effect", "Vanilla is 2");
EmpowerDuration = ConfigOption(1.5f, "Empower Duration", "Default is 1.5");
Size = ConfigOption(2f, "Size Multiplier", "Vanilla is 1");
CaptainShotgun = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CaptainShotgun.asset").WaitForCompletion();
PrepAirstrike = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/PrepAirstrike.asset").WaitForCompletion();
PrepAirstrikeAlt = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/PrepAirstrikeAlt.asset").WaitForCompletion();
base.Init();
}
public override void Hooks()
{
Changes();
}
public static void Changes()
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: 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_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Expected O, but got Unknown
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0222: Unknown result type (might be due to invalid IL or missing references)
//IL_0244: Unknown result type (might be due to invalid IL or missing references)
//IL_0253: Unknown result type (might be due to invalid IL or missing references)
//IL_0279: Unknown result type (might be due to invalid IL or missing references)
//IL_0288: Unknown result type (might be due to invalid IL or missing references)
//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
//IL_0317: 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_0348: Unknown result type (might be due to invalid IL or missing references)
//IL_0357: Unknown result type (might be due to invalid IL or missing references)
//IL_037a: Unknown result type (might be due to invalid IL or missing references)
//IL_0389: Unknown result type (might be due to invalid IL or missing references)
//IL_03af: Unknown result type (might be due to invalid IL or missing references)
//IL_03be: Unknown result type (might be due to invalid IL or missing references)
//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
//IL_03de: Expected O, but got Unknown
LanguageAPI.Add("KEYWORD_EMPOWERING", "<style=cKeywordName>Empowering</style><style=cSub>Makes your abilities stronger in unique ways.\nVulcan Shotgun: <style=cIsDamage>+75% Attack Speed</style>.\nOrbital Probe: <style=cIsDamage>+400% Damage</style>.\nOGM-72 'DIABLO' Strike: <style=cIsDamage>+100% Radius</style>.</style>");
string[] keywordTokens = new string[2] { "KEYWORD_EMPOWERING", "KEYWORD_SHOCKING" };
SkillFamily val = Addressables.LoadAssetAsync<SkillFamily>((object)"RoR2/Base/Captain/CaptainSecondarySkillFamily.asset").WaitForCompletion();
val.variants[0].skillDef.keywordTokens = keywordTokens;
LanguageAPI.Add("CAPTAIN_SECONDARY_NAME", "Thunder Tazer");
Texture2D val2 = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/ShockNearby/texBuffTeslaIcon.tif").WaitForCompletion();
BuffDef Empowered = ScriptableObject.CreateInstance<BuffDef>();
((Object)Empowered).name = "Empowered";
Empowered.buffColor = Color32.op_Implicit(new Color32((byte)41, (byte)99, (byte)181, byte.MaxValue));
Empowered.canStack = false;
Empowered.iconSprite = Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0f, 0f));
Empowered.isDebuff = false;
ContentAddition.AddBuffDef(Empowered);
FireTazer.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, FireTazer self)
{
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
FireTazer.baseDuration = 1f;
FireTazer.baseDurationUntilPriorityLowers = 0.3f;
FireTazer.damageCoefficient = Damage;
FireTazer.force = 500f;
if ((Object)(object)((EntityState)self).gameObject.GetComponent<Empower>() == (Object)null)
{
((EntityState)self).gameObject.AddComponent<Empower>();
}
((EntityState)self).gameObject.GetComponent<Empower>().IsEmpowered = true;
((EntityState)self).gameObject.GetComponent<Empower>().EmpowerDuration = EmpowerDuration;
((EntityState)self).characterBody.AddTimedBuffAuthority(Empowered.buffIndex, EmpowerDuration);
orig.Invoke(self);
};
SkillDef val3 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CaptainTazer.asset").WaitForCompletion();
val3.baseRechargeInterval = Cooldown;
val3.baseMaxStock = Charges;
val3.rechargeStock = ChargesToRecharges;
GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainTazer.prefab").WaitForCompletion();
val4.GetComponent<ProjectileSimple>().lifetime = 6f;
val4.transform.localScale = new Vector3(Size, Size, Size);
val4.GetComponent<ProjectileController>().ghostPrefab.transform.localScale = new Vector3(Size, Size, Size);
ProjectileImpactExplosion component = val4.GetComponent<ProjectileImpactExplosion>();
component.lifetimeAfterImpact = 5f;
component.lifetime = 6f;
((ProjectileExplosion)component).blastRadius = AoE;
Texture2D val5 = Main.hifucaptaintweaks.LoadAsset<Texture2D>("texCaptainIcons.png");
Texture2D val6 = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Captain/texCaptainSkillIcons.png").WaitForCompletion();
Sprite RealVulcan = Sprite.Create(val6, new Rect(128f, 384f, 128f, 128f), new Vector2(0f, 0f));
Sprite RealEmpoweredVulcan = Sprite.Create(val5, new Rect(128f, 384f, 128f, 128f), new Vector2(0f, 0f));
Sprite RealProbe = Sprite.Create(val6, new Rect(256f, 384f, 128f, 128f), new Vector2(0f, 0f));
Sprite RealEmpoweredProbe = Sprite.Create(val5, new Rect(256f, 384f, 128f, 128f), new Vector2(0f, 0f));
Sprite val7 = Sprite.Create(val6, new Rect(384f, 384f, 128f, 128f), new Vector2(0f, 0f));
Sprite val8 = Sprite.Create(val5, new Rect(384f, 384f, 128f, 128f), new Vector2(0f, 0f));
Sprite RealDiablo = Sprite.Create(val6, new Rect(384f, 0f, 128f, 128f), new Vector2(0f, 0f));
Sprite RealEmpoweredDiablo = Sprite.Create(val5, new Rect(384f, 0f, 128f, 128f), new Vector2(0f, 0f));
CharacterBody.FixedUpdate += (hook_FixedUpdate)delegate(orig_FixedUpdate orig, CharacterBody self)
{
Empower component2 = ((Component)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component2 != (Object)null && component2.IsEmpowered)
{
component2.EmpowerDuration -= Time.fixedDeltaTime;
if ((Object)(object)self.skillLocator.primary.skillDef == (Object)(object)CaptainShotgun)
{
self.skillLocator.primary.skillDef.icon = RealEmpoweredVulcan;
}
if ((Object)(object)self.skillLocator.utility.skillDef == (Object)(object)PrepAirstrike)
{
self.skillLocator.utility.skillDef.icon = RealEmpoweredProbe;
}
if ((Object)(object)self.skillLocator.utility.skillDef == (Object)(object)PrepAirstrikeAlt)
{
self.skillLocator.utility.skillDef.icon = RealEmpoweredDiablo;
}
if (component2.EmpowerDuration <= 0f)
{
if ((Object)(object)self.skillLocator.primary.skillDef == (Object)(object)CaptainShotgun)
{
self.skillLocator.primary.skillDef.icon = RealVulcan;
}
if ((Object)(object)self.skillLocator.utility.skillDef == (Object)(object)PrepAirstrike)
{
self.skillLocator.utility.skillDef.icon = RealProbe;
}
if ((Object)(object)self.skillLocator.utility.skillDef == (Object)(object)PrepAirstrikeAlt)
{
self.skillLocator.utility.skillDef.icon = RealDiablo;
}
component2.IsEmpowered = false;
}
}
orig.Invoke(self);
};
}
}
public class Empower : MonoBehaviour
{
public bool IsEmpowered;
public float EmpowerDuration;
}
public class ResupplyBeacon : TweakBase
{
public static float AttackSpeed;
public static float CooldownReduction;
public static float Radius;
public static BuffDef AttackSpeedBuff;
public override string Name => ": Special ::: Artillery Beacon";
public override string SkillToken => "supply_equipment_restock";
public override string DescText => "<style=cIsUtility>Recharge Equipment</style> on use" + ((AttackSpeed > 0f) ? ", <style=cIsDamage>increase attack speed</style> and <style=cIsUtility>reduce cooldowns</style>." : ".");
public override void Init()
{
AttackSpeed = ConfigOption(0.25f, "Buff Attack Speed", "Decimal. Vanilla is 0");
CooldownReduction = ConfigOption(0.1f, "Buff Cooldown Reduction", "Decimal. Vanilla is 0");
Radius = ConfigOption(20f, "Radius", "Vanilla is 0");
base.Init();
}
public override void Hooks()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
Changes();
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
}
private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && sender.HasBuff(AttackSpeedBuff))
{
args.attackSpeedMultAdd += AttackSpeed;
args.cooldownMultAdd -= CooldownReduction;
}
}
public static void Changes()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: 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_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: 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_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01ee: Expected O, but got Unknown
LanguageAPI.Add("CAPTAIN_SUPPLY_EQUIPMENT_RESTOCK_NAME", "Artillery Beacon");
Texture2D val = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/WarCryOnMultiKill/texWarcryBuffIcon.tif").WaitForCompletion();
AttackSpeedBuff = ScriptableObject.CreateInstance<BuffDef>();
((Object)AttackSpeedBuff).name = "Artillery Beacon Attack Speed";
AttackSpeedBuff.buffColor = Color32.op_Implicit(new Color32((byte)205, (byte)133, (byte)49, byte.MaxValue));
AttackSpeedBuff.canStack = false;
AttackSpeedBuff.iconSprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0f, 0f));
AttackSpeedBuff.isDebuff = false;
ContentAddition.AddBuffDef(AttackSpeedBuff);
GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, EquipmentRestock.prefab").WaitForCompletion();
Transform child = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainHealingWard.prefab").WaitForCompletion().transform.GetChild(0);
val2.AddComponent<BuffWard>();
BuffWard component = val2.GetComponent<BuffWard>();
component.Networkradius = Radius;
component.shape = (BuffWardShape)0;
component.radius = Radius;
component.rangeIndicator = ((Component)child).transform;
component.buffDef = AttackSpeedBuff;
component.buffDuration = 1.5f;
component.interval = 0.5f;
component.floorWard = true;
component.expires = false;
component.invertTeamFilter = false;
component.expireDuration = 0f;
component.animateRadius = false;
component.requireGrounded = false;
component.teamFilter = val2.GetComponent<TeamFilter>();
GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/WardOnLevel/WarbannerWard.prefab").WaitForCompletion();
Transform WarbannerVisual1 = val3.transform.GetChild(0);
Transform WarbannerVisual2 = val3.transform.GetChild(0).GetChild(0);
BaseCaptainSupplyDropState.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, BaseCaptainSupplyDropState self)
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
try
{
GameObject val4 = GameObject.Find("CaptainSupplyDrop, EquipmentRestock(Clone)");
if ((Object)(object)val4 != (Object)null)
{
Object.Instantiate<Transform>(WarbannerVisual1, val4.transform);
((Component)WarbannerVisual1).transform.localScale = new Vector3(Radius, Radius, Radius);
Object.Instantiate<Transform>(WarbannerVisual2, val4.transform);
}
}
catch
{
Main.HCAPTLogger.LogError((object)"GUHHHHHH IM MORBIN... 3... 2... 1..");
}
orig.Invoke(self);
};
}
}
public class ShockingBeacon : TweakBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Func<Instruction, bool> <>9__16_1;
public static Func<float, ShockZoneMainState, float> <>9__16_0;
public static Func<Instruction, bool> <>9__18_0;
public static hook_OnEnter <>9__19_0;
internal bool <ShockZoneMainState_Shock1>b__16_1(Instruction x)
{
return ILPatternMatchingExt.MatchLdcR4(x, 0f);
}
internal float <ShockZoneMainState_Shock1>b__16_0(float Damage, ShockZoneMainState self)
{
CharacterMaster ownerMaster = ((EntityState)self).gameObject.GetComponent<Deployable>().ownerMaster;
float num = ownerMaster.GetBody().damage * BigDamage;
return Damage + num;
}
internal bool <ShockZoneMainState_Shock>b__18_0(Instruction x)
{
return ILPatternMatchingExt.MatchLdcI4(x, 16779264);
}
internal void <Changes>b__19_0(orig_OnEnter orig, ShockZoneMainState self)
{
ShockZoneMainState.shockFrequency = BigFireRate;
ShockZoneMainState.shockRadius = BigRadius;
orig.Invoke(self);
}
}
public static float BigDamage;
public static float BigFireRate;
public static float BigRadius;
public static float SmolDamage;
public static float SmolFireRate;
public static float SmolRadius;
public static float SmolProcCoefficient;
public static int StunType;
public float timer = 69696970f;
public override string Name => ": Special :: Thunder Beacon";
public override string SkillToken => "supply_shocking";
public override string DescText => "Periodically <style=cIsDamage>stun</style>" + ((BigDamage > 0f || SmolDamage > 0f) ? " and <style=cIsDamage>damage</style>" : "") + " all nearby enemies, immobilizing them.";
public override void Init()
{
BigDamage = ConfigOption(5f, "Burst Damage", "Decimal. Vanilla is 0");
BigFireRate = ConfigOption(0.25f, "Burst Fire Rate", "Vanilla is 0.33334");
BigRadius = ConfigOption(24f, "Burst Radius", "Vanilla is 10");
SmolDamage = ConfigOption(1f, "Constant Damage", "Decimal. Vanilla is 0");
SmolFireRate = ConfigOption(1f, "Constant Fire Rate", "Vanilla is 0");
SmolRadius = ConfigOption(24f, "Constant Radius", "Vanilla is 0");
SmolProcCoefficient = ConfigOption(0f, "Constant Proc Coefficient", "Vanilla is 0");
StunType = ConfigOption(2, "Stun Type", "0 = None, 1 = Shock for 5s, 2 = Stun for 1s, Vanilla is 1");
base.Init();
}
public override void Hooks()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Expected O, but got Unknown
Changes();
ShockZoneMainState.Shock += new Manipulator(ShockZoneMainState_Shock);
ShockZoneMainState.Shock += new Manipulator(ShockZoneMainState_Shock1);
}
private void ShockZoneMainState_Shock1(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0f)
}))
{
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<float, ShockZoneMainState, float>>((Func<float, ShockZoneMainState, float>)delegate(float Damage, ShockZoneMainState self)
{
CharacterMaster ownerMaster = ((EntityState)self).gameObject.GetComponent<Deployable>().ownerMaster;
float num = ownerMaster.GetBody().damage * BigDamage;
return Damage + num;
});
}
else
{
Main.HCAPTLogger.LogError((object)"Failed changing damage for Thunder Beacon.");
}
}
private void ShockZoneMainState_Shock(ILContext il)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
timer += Time.fixedDeltaTime;
float num = 69696970f;
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 16779264)
}))
{
Instruction next = val.Next;
int stunType = StunType;
if (1 == 0)
{
}
int num2 = stunType switch
{
0 => 2048,
2 => 2080,
_ => 16779264,
};
if (1 == 0)
{
}
next.Operand = num2;
}
else if (timer > num)
{
Main.HCAPTLogger.LogError((object)"Failed changing damage type for Thunder Beacon.");
timer = 0f;
}
}
public static void Changes()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
LanguageAPI.Add("CAPTAIN_SUPPLY_SHOCKING_NAME", "Thunder Beacon");
object obj = <>c.<>9__19_0;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, ShockZoneMainState self)
{
ShockZoneMainState.shockFrequency = BigFireRate;
ShockZoneMainState.shockRadius = BigRadius;
orig.Invoke(self);
};
<>c.<>9__19_0 = val;
obj = (object)val;
}
ShockZoneMainState.OnEnter += (hook_OnEnter)obj;
float timer = 0f;
ShockZoneMainState.FixedUpdate += (hook_FixedUpdate)delegate(orig_FixedUpdate orig, ShockZoneMainState self)
{
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Expected O, but got Unknown
timer += Time.fixedDeltaTime;
if (timer > 1f / SmolFireRate && self != null && (Object)(object)((EntityState)self).gameObject != (Object)null && (Object)(object)((EntityState)self).gameObject.GetComponent<Deployable>() != (Object)null && (Object)(object)((EntityState)self).gameObject.GetComponent<Deployable>().ownerMaster != (Object)null && (Object)(object)((EntityState)self).gameObject.GetComponent<Deployable>().ownerMaster.GetBodyObject() != (Object)null && (Object)(object)((EntityState)self).gameObject.GetComponent<Deployable>().ownerMaster.GetBody() != (Object)null)
{
CharacterMaster ownerMaster = ((EntityState)self).gameObject.GetComponent<Deployable>().ownerMaster;
new BlastAttack
{
attacker = ownerMaster.GetBodyObject(),
baseDamage = ownerMaster.GetBody().damage * SmolDamage,
baseForce = 0f,
crit = ownerMaster.GetBody().RollCrit(),
damageType = (DamageType)0,
procCoefficient = SmolProcCoefficient,
radius = SmolRadius,
falloffModel = (FalloffModel)0,
position = ((EntityState)self).transform.position,
attackerFiltering = (AttackerFiltering)2,
teamIndex = ownerMaster.GetBody().teamComponent.teamIndex
}.Fire();
EffectManager.SpawnEffect(ShockZoneMainState.shockEffectPrefab, new EffectData
{
origin = ((EntityState)self).transform.position,
scale = SmolRadius,
color = new Color32((byte)121, (byte)184, byte.MaxValue, (byte)50)
}, true);
timer = 0f;
}
orig.Invoke(self);
};
}
}
public class VulcanShotgun : TweakBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__18_0;
public static hook_FixedUpdate <>9__18_1;
public static hook_OnEnter <>9__18_2;
public static hook_ModifyBullet <>9__18_3;
internal void <Changes>b__18_0(orig_OnEnter orig, ChargeCaptainShotgun self)
{
ChargeCaptainShotgun.baseChargeDuration = ChargeDuration;
ChargeCaptainShotgun.baseMinChargeDuration = 0f;
orig.Invoke(self);
}
internal void <Changes>b__18_1(orig_FixedUpdate orig, ChargeCaptainShotgun self)
{
if (Util.HasEffectiveAuthority(((EntityState)self).outer.networkIdentity) && ((EntityState)self).fixedAge / self.chargeDuration > 1f && !((Component)((EntityState)self).outer).gameObject.GetComponent<CharacterBody>().isSprinting)
{
self.released = true;
}
orig.Invoke(self);
}
internal void <Changes>b__18_2(orig_OnEnter orig, GenericBulletBaseState self)
{
if (self is FireCaptainShotgun)
{
self.bulletCount = PelletCount;
self.damageCoefficient = Damage;
self.procCoefficient = ProcCoefficient;
self.baseDuration = 1f / FireRate;
self.spreadPitchScale = 0.8f;
self.spreadYawScale = 0.8f;
self.force = 350f;
Empower component = ((EntityState)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component != (Object)null && component.IsEmpowered)
{
self.baseDuration = 1f / EmpoweredFireRate;
}
}
orig.Invoke(self);
}
internal void <Changes>b__18_3(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;
}
}
public static float Damage;
public static float ProcCoefficient;
public static float FireRate;
public static int PelletCount;
public static int Charges;
public static int ChargesToRecharge;
public static float Cooldown;
public static float EmpoweredFireRate;
public static float ChargeDuration;
public static float EmpoweredCooldown;
public override string Name => ": Primary : Vulcan Shotgun";
public override string SkillToken => "primary";
public override string DescText => "Fire a blast of pellets that deal <style=cIsDamage>" + PelletCount + "x" + d(Damage) + " damage</style>. Charging the attack narrows the <style=cIsUtility>spread</style>.";
public override void Init()
{
Damage = ConfigOption(0.75f, "Damage", "Decimal. Vanilla is 1.2");
ProcCoefficient = ConfigOption(0.55f, "Proc Coefficient", "Vanilla is 0.75");
FireRate = ConfigOption(3f, "Fire Rate", "Vanilla is 1");
PelletCount = ConfigOption(6, "Pellet Count", "Vanilla is 8");
Charges = ConfigOption(3, "Charges", "Vanilla is 0");
ChargesToRecharge = ConfigOption(3, "Charges to Recharge", "Vanilla is 0");
Cooldown = ConfigOption(1f, "Cooldown", "Vanilla is 0");
EmpoweredFireRate = ConfigOption(5.25f, "Empowered Fire Rate", "Vanilla is 1");
ChargeDuration = ConfigOption(0.4f, "Charging Duration", "Vanilla is 1.2");
base.Init();
}
public override void Hooks()
{
Changes();
}
public static void Changes()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: 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)
//IL_008f: Expected O, but got Unknown
object obj = <>c.<>9__18_0;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, ChargeCaptainShotgun self)
{
ChargeCaptainShotgun.baseChargeDuration = ChargeDuration;
ChargeCaptainShotgun.baseMinChargeDuration = 0f;
orig.Invoke(self);
};
<>c.<>9__18_0 = val;
obj = (object)val;
}
ChargeCaptainShotgun.OnEnter += (hook_OnEnter)obj;
object obj2 = <>c.<>9__18_1;
if (obj2 == null)
{
hook_FixedUpdate val2 = delegate(orig_FixedUpdate orig, ChargeCaptainShotgun self)
{
if (Util.HasEffectiveAuthority(((EntityState)self).outer.networkIdentity) && ((EntityState)self).fixedAge / self.chargeDuration > 1f && !((Component)((EntityState)self).outer).gameObject.GetComponent<CharacterBody>().isSprinting)
{
self.released = true;
}
orig.Invoke(self);
};
<>c.<>9__18_1 = val2;
obj2 = (object)val2;
}
ChargeCaptainShotgun.FixedUpdate += (hook_FixedUpdate)obj2;
object obj3 = <>c.<>9__18_2;
if (obj3 == null)
{
hook_OnEnter val3 = delegate(orig_OnEnter orig, GenericBulletBaseState self)
{
if (self is FireCaptainShotgun)
{
self.bulletCount = PelletCount;
self.damageCoefficient = Damage;
self.procCoefficient = ProcCoefficient;
self.baseDuration = 1f / FireRate;
self.spreadPitchScale = 0.8f;
self.spreadYawScale = 0.8f;
self.force = 350f;
Empower component = ((EntityState)self).gameObject.GetComponent<Empower>();
if ((Object)(object)component != (Object)null && component.IsEmpowered)
{
self.baseDuration = 1f / EmpoweredFireRate;
}
}
orig.Invoke(self);
};
<>c.<>9__18_2 = val3;
obj3 = (object)val3;
}
GenericBulletBaseState.OnEnter += (hook_OnEnter)obj3;
object obj4 = <>c.<>9__18_3;
if (obj4 == null)
{
hook_ModifyBullet val4 = delegate(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;
};
<>c.<>9__18_3 = val4;
obj4 = (object)val4;
}
FireCaptainShotgun.ModifyBullet += (hook_ModifyBullet)obj4;
SkillDef val5 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CaptainShotgun.asset").WaitForCompletion();
val5.baseMaxStock = Charges;
val5.rechargeStock = ChargesToRecharge;
val5.baseRechargeInterval = Cooldown;
val5.mustKeyPress = false;
val5.resetCooldownTimerOnUse = true;
}
}
}
namespace HIFUCaptainTweaks.Misc
{
public class AllBeacons : MiscBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__5_0;
internal void <Changes>b__5_0(orig_OnEnter orig, CallSupplyDropBase self)
{
CallSupplyDropBase.impactDamageCoefficient = Damage;
orig.Invoke(self);
}
}
public static float Damage;
public override string Name => ": Special ::::: All Beacons";
public override void Init()
{
Damage = ConfigOption(13f, "Damage", "Decimal. Vanilla is 20");
base.Init();
}
public override void Hooks()
{
Changes();
}
public static void Changes()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__5_0;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, CallSupplyDropBase self)
{
CallSupplyDropBase.impactDamageCoefficient = Damage;
orig.Invoke(self);
};
<>c.<>9__5_0 = val;
obj = (object)val;
}
CallSupplyDropBase.OnEnter += (hook_OnEnter)obj;
}
}
public class BaseStats : MiscBase
{
public static float MovementSpeed;
public override string Name => ": Misc :: Base Stats";
public override void Init()
{
MovementSpeed = ConfigOption(7.5f, "Base Move Speed", "Vanilla is 7");
base.Init();
}
public override void Hooks()
{
Changes();
}
private void Changes()
{
//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)
CharacterBody component = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainBody.prefab").WaitForCompletion().GetComponent<CharacterBody>();
component.baseMoveSpeed = MovementSpeed;
}
}
public class DefensiveMicrobots : MiscBase
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__13_0;
public static hook_DeleteNearbyProjectile <>9__13_1;
internal void <Changes>b__13_0(orig_OnEnter orig, DefenseMatrixOn self)
{
DefenseMatrixOn.baseRechargeFrequency = BaseRechargeFrequency;
DefenseMatrixOn.minimumFireFrequency = MinimumFireFrequency;
DefenseMatrixOn.projectileEraserRadius = Radius;
orig.Invoke(self);
}
internal bool <Changes>b__13_1(orig_DeleteNearbyProjectile orig, DefenseMatrixOn self)
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
bool flag = orig.Invoke(self);
if ((Object)(object)((BaseBodyAttachmentState)self).attachedBody != (Object)null && (Object)(object)((Component)((BaseBodyAttachmentState)self).attachedBody).GetComponent<CharacterBody>() != (Object)null && flag)
{
((Component)((BaseBodyAttachmentState)self).attachedBody).GetComponent<CharacterBody>().AddTimedBuffAuthority(MoveSpeedBuff.buffIndex, SpeedBuffDuration);
}
return flag;
}
}
public static float Radius;
public static float MinimumFireFrequency;
public static float BaseRechargeFrequency;
public static bool Formula;
public static float SpeedBuff;
public static bool StackSpeedBuff;
public static float SpeedBuffDuration;
public static BuffDef MoveSpeedBuff;
public override string Name => ":: Misc : Defensive Microbots";
public override void Init()
{
Radius = ConfigOption(20f, "Range", "Vanilla is 20");
MinimumFireFrequency = ConfigOption(1.3f, "Maximum Blocks Per Second", "Vanilla is 10");
BaseRechargeFrequency = ConfigOption(0.8f, "Blocks Per Second", "Vanilla is 2");
Formula = ConfigOption(value: true, "Microbots Formula", "Lowest value between 1 / Maximum Blocks Per Second and (1 / (Blocks Per Second * Attack Speed Stat))");
SpeedBuff = ConfigOption(0.12f, "Buff Speed", "Decimal. Vanilla is 0");
StackSpeedBuff = ConfigOption(value: true, "Stack Speed Buff?", "Vanilla is false");
SpeedBuffDuration = ConfigOption(3.5f, "Speed Buff Duration", "Vanilla is 0");
base.Init();
}
public override void Hooks()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
Changes();
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
}
private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && sender.GetBuffCount(MoveSpeedBuff) > 0)
{
args.moveSpeedMultAdd += SpeedBuff * (float)sender.GetBuffCount(MoveSpeedBuff);
}
}
public static void Changes()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Expected O, but got Unknown
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Expected O, but got Unknown
Texture2D val = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC1/MoveSpeedOnKill/texBuffKillMoveSpeed.tif").WaitForCompletion();
MoveSpeedBuff = ScriptableObject.CreateInstance<BuffDef>();
((Object)MoveSpeedBuff).name = "Microbot Speed";
MoveSpeedBuff.buffColor = Color32.op_Implicit(new Color32((byte)240, (byte)196, (byte)174, byte.MaxValue));
MoveSpeedBuff.canStack = StackSpeedBuff;
MoveSpeedBuff.iconSprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0f, 0f));
MoveSpeedBuff.isDebuff = false;
ContentAddition.AddBuffDef(MoveSpeedBuff);
object obj = <>c.<>9__13_0;
if (obj == null)
{
hook_OnEnter val2 = delegate(orig_OnEnter orig, DefenseMatrixOn self)
{
DefenseMatrixOn.baseRechargeFrequency = BaseRechargeFrequency;
DefenseMatrixOn.minimumFireFrequency = MinimumFireFrequency;
DefenseMatrixOn.projectileEraserRadius = Radius;
orig.Invoke(self);
};
<>c.<>9__13_0 = val2;
obj = (object)val2;
}
DefenseMatrixOn.OnEnter += (hook_OnEnter)obj;
object obj2 = <>c.<>9__13_1;
if (obj2 == null)
{
hook_DeleteNearbyProjectile val3 = delegate(orig_DeleteNearbyProjectile orig, DefenseMatrixOn self)
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
bool flag = orig.Invoke(self);
if ((Object)(object)((BaseBodyAttachmentState)self).attachedBody != (Object)null && (Object)(object)((Component)((BaseBodyAttachmentState)self).attachedBody).GetComponent<CharacterBody>() != (Object)null && flag)
{
((Component)((BaseBodyAttachmentState)self).attachedBody).GetComponent<CharacterBody>().AddTimedBuffAuthority(MoveSpeedBuff.buffIndex, SpeedBuffDuration);
}
return flag;
};
<>c.<>9__13_1 = val3;
obj2 = (object)val3;
}
DefenseMatrixOn.DeleteNearbyProjectile += (hook_DeleteNearbyProjectile)obj2;
LanguageAPI.Add("ITEM_CAPTAINDEFENSEMATRIX_DESC", "Shoot down <style=cIsDamage>1</style> <style=cStack>(+1 per stack)</style> projectiles within <style=cIsDamage>" + Radius + "m</style> every <style=cIsDamage>" + ((1f / BaseRechargeFrequency == 1f) ? "second" : (Math.Round(1f / BaseRechargeFrequency, 2) + " seconds</style>")) + ((SpeedBuff > 0f) ? (", gaining a small" + (StackSpeedBuff ? " stackable" : "") + " <style=cIsUtility>speed buff</style>.") : ".") + " <style=cIsUtility>Recharge rate scales with attack speed</style>.");
LanguageAPI.Add("CAPTAIN_PASSIVE_DESCRIPTION", "Passively gain <style=cIsUtility>Microbots</style> that <style=cIsUtility>shoot down nearby enemy projectiles</style>" + ((SpeedBuff > 0f) ? " and <style=cIsUtility>increase movement speed</style> for a short duration." : ".") + " <style=cIsUtility>Drones</style> are also given <style=cIsUtility>Microbots</style>.");
}
}
public static class TryRespawn
{
[CompilerGenerated]
private static class <>O
{
public static hook_HandlePlayerFirstEntryAnimation <0>__Run_HandlePlayerFirstEntryAnimation;
}
public static void HopooBugs()
{
//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
object obj = <>O.<0>__Run_HandlePlayerFirstEntryAnimation;
if (obj == null)
{
hook_HandlePlayerFirstEntryAnimation val = Run_HandlePlayerFirstEntryAnimation;
<>O.<0>__Run_HandlePlayerFirstEntryAnimation = val;
obj = (object)val;
}
Run.HandlePlayerFirstEntryAnimation += (hook_HandlePlayerFirstEntryAnimation)obj;
}
private static void Run_HandlePlayerFirstEntryAnimation(orig_HandlePlayerFirstEntryAnimation orig, Run self, CharacterBody body, Vector3 spawnPosition, Quaternion spawnRotation)
{
//IL_0004: 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)
orig.Invoke(self, body, spawnPosition, spawnRotation);
if (!NetworkServer.active || (Object)(object)GameObject.Find("CaptainBody(Clone)") == (Object)null)
{
return;
}
foreach (CharacterBody item in CharacterBody.instancesList.Where((CharacterBody x) => ((Object)x).name == "CaptainBody(Clone)"))
{
if ((Object)(object)((Component)item).GetComponent<RespawnTimerILoveHopooGames>() == (Object)null)
{
((Component)item).gameObject.AddComponent<RespawnTimerILoveHopooGames>();
}
}
}
public static void RespawnPlayer(CharacterMaster master)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)master != (Object)null)
{
Vector3 position = Stage.instance.GetPlayerSpawnTransform().position;
NodeGraph groundNodes = SceneInfo.instance.groundNodes;
NodeIndex val = groundNodes.FindClosestNode(position, master.GetBody().hullClassification, float.PositiveInfinity);
groundNodes.GetNodePosition(val, ref position);
master.Respawn(position, ((Component)master).transform.rotation);
}
else
{
Main.HCAPTLogger.LogError((object)"CaptainBody(Clone) Master null");
}
}
}
public class RespawnTimerILoveHopooGames : MonoBehaviour
{
public bool Active;
public float Timer;
public SkillDef Bullshit;
public CharacterBody Body;
private void Start()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
Active = true;
Bullshit = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/PrepSupplyDrop.asset").WaitForCompletion();
Body = ((Component)this).GetComponent<CharacterBody>();
}
private void FixedUpdate()
{
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
if (!Active)
{
return;
}
Timer += Time.fixedDeltaTime;
if (Timer >= 3f)
{
Active = false;
if ((Object)(object)((Component)Body).GetComponent<SkillLocator>().special.skillDef == (Object)(object)Bullshit && !((InstanceData)((Component)Body).GetComponent<SkillLocator>().special.skillInstanceData).anySupplyDropsAvailable)
{
TryRespawn.RespawnPlayer(Body.master);
}
}
}
}
public static class OrbitalsInHiddenRealms
{
private static Hook fuckyou;
public static void HopooLore()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
fuckyou = new Hook((MethodBase)Reflection.GetMethodCached(typeof(CaptainOrbitalSkillDef), "get_isAvailable"), Reflection.GetMethodCached(typeof(OrbitalsInHiddenRealms), "OrbitalSkillsHook"));
}
private static bool OrbitalSkillsHook(CaptainOrbitalSkillDef self)
{
return true;
}
}
public class RefreshBeacons : MiscBase
{
public static float Damage;
public List<GameObject> beacons = new List<GameObject>();
public override string Name => ": Special ::::: Refresh Beacons";
public override void Init()
{
base.Init();
}
public override void Hooks()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Expected O, but got Unknown
BaseCaptainSupplyDropState.OnEnter += new hook_OnEnter(BaseCaptainSupplyDropState_OnEnter);
IdleToChargingState.OnEnter += new hook_OnEnter(IdleToChargingState_OnEnter);
}
private void BaseCaptainSupplyDropState_OnEnter(orig_OnEnter orig, BaseCaptainSupplyDropState self)
{
beacons.Add(((EntityState)self).gameObject);
orig.Invoke(self);
}
private void IdleToChargingState_OnEnter(orig_OnEnter orig, BaseState self)
{
//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_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Expected O, but got Unknown
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/ExplosionVFX.prefab").WaitForCompletion();
orig.Invoke(self);
foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
{
CharacterBody body = instance.body;
if (Object.op_Implicit((Object)(object)body))
{
CaptainSupplyDropController component = ((Component)body).GetComponent<CaptainSupplyDropController>();
if (Object.op_Implicit((Object)(object)component))
{
component.supplyDrop1Skill.stock = 1;
component.supplyDrop2Skill.stock = 1;
}
}
}
for (int i = 0; i < beacons.Count; i++)
{
GameObject val2 = beacons[i];
if (Object.op_Implicit((Object)(object)val2))
{
Object.Destroy((Object)(object)val2);
EffectManager.SpawnEffect(val, new EffectData
{
origin = val2.transform.position,
scale = 10f
}, false);
}
beacons.Remove(val2);
}
}
}
internal class the_c
{
}
}