Decompiled source of ESF v1.2.1
plugins/ESF.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dolso; using Dolso.RoO; using ESF.Components; using ESF.EntityStates; using EntityStates; using HG.BlendableTypes; using HG.GeneralSerializer; using HG.Reflection; using JetBrains.Annotations; using KinematicCharacterController; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using MotorAPI; using RiskOfOptions; using RiskOfOptions.Components.Options; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.CameraModes; using RoR2.ConVar; using RoR2.ContentManagement; using RoR2.HudOverlay; using RoR2.Networking; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using TMPro; using Unity; using Unity.Burst; using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] namespace Dolso { internal static class Utilities { internal static ConfigFile configFile; private static GameObject _prefabParent; internal static void Awake(BaseUnityPlugin plugin) { configFile = plugin.Config; } internal static GameObject CreatePrefab(GameObject gameObject, string name = null) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)_prefabParent)) { _prefabParent = new GameObject("DolsoPrefabs"); Object.DontDestroyOnLoad((Object)(object)_prefabParent); ((Object)_prefabParent).hideFlags = (HideFlags)61; _prefabParent.SetActive(false); } GameObject val = Object.Instantiate<GameObject>(gameObject, _prefabParent.transform); if (name != null) { ((Object)val).name = name; } return val; } internal static void ModifyStateConfig(this EntityStateConfiguration stateConfig, string fieldName, object newValue) { SerializedField[] serializedFields = stateConfig.serializedFieldsCollection.serializedFields; for (int i = 0; i < serializedFields.Length; i++) { if (serializedFields[i].fieldName == fieldName) { Object val = (Object)((newValue is Object) ? newValue : null); if (val != null) { serializedFields[i].fieldValue.objectValue = val; } else if (newValue != null && StringSerializer.CanSerializeType(newValue.GetType())) { serializedFields[i].fieldValue.stringValue = StringSerializer.Serialize(newValue.GetType(), newValue); } else { log.error("Invalid value for SerializedField: " + newValue); } return; } } log.error("Failed to find " + fieldName + " for " + ((Object)stateConfig).name); } internal static bool IsKeyDown(this KeyboardShortcut key, bool onlyJustPressed) { //IL_0005: 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_0034: Unknown result type (might be due to invalid IL or missing references) if ((onlyJustPressed && !Input.GetKeyDown(((KeyboardShortcut)(ref key)).MainKey)) || (!onlyJustPressed && !Input.GetKey(((KeyboardShortcut)(ref key)).MainKey))) { return false; } foreach (KeyCode modifier in ((KeyboardShortcut)(ref key)).Modifiers) { if (!Input.GetKey(modifier)) { return false; } } return true; } } internal class ConfigVar<T> : BaseConVar { internal readonly ConfigEntry<T> configEntry; private T _value; internal T value { get { return _value; } set { if (configEntry != null) { configEntry.Value = value; } else { _value = value; } } } internal ConfigVar(string section, string name, T defaultValue) : this(section, name, defaultValue, string.Empty) { } internal ConfigVar(string section, string name, T defaultValue, string description) : base(GenerateName(section, name), (ConVarFlags)0, (string)null, $"{description} [Default: {defaultValue}]") { if (description.Length > 0 && Utilities.configFile != null) { configEntry = Utilities.configFile.Bind<T>(section, name, defaultValue, description); SetupConfig(autoroo: true); } else { _value = defaultValue; } } internal ConfigVar(string section, string name, T defaultValue, string description, float min, float max) : this(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<float>(min, max), Array.Empty<object>())) { }//IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown internal ConfigVar(string section, string name, T defaultValue, ConfigDescription description) : base(GenerateName(section, name), (ConVarFlags)0, (string)null, $"{description.Description} [Default: {defaultValue}]") { if (Utilities.configFile != null) { configEntry = Utilities.configFile.Bind<T>(section, name, defaultValue, description); SetupConfig(autoroo: true); } else { _value = defaultValue; } } internal ConfigVar(ConfigEntry<T> entry, bool autoroo = true) : base(GenerateName(((ConfigEntryBase)entry).Definition.Section, ((ConfigEntryBase)entry).Definition.Key), (ConVarFlags)0, (string)null, $"{((ConfigEntryBase)entry).Description.Description} [Default: {((ConfigEntryBase)entry).DefaultValue}]") { configEntry = entry; SetupConfig(autoroo); } public override void SetString(string newValue) { string text = ((object)this).ToString(); if (configEntry != null) { ((ConfigEntryBase)configEntry).SetSerializedValue(newValue); } else { _value = TomlTypeConverter.ConvertToValue<T>(newValue); } Debug.LogFormat("\"{0}\" set from \"{1}\" to \"{2}\"", new object[3] { base.name, text, ((object)this).ToString() }); } public override string GetString() { return TomlTypeConverter.ConvertToString((object)_value, typeof(T)); } public override string ToString() { return TomlTypeConverter.ConvertToString((object)_value, typeof(T)); } protected virtual void SetupConfig(bool autoroo) { configEntry.SettingChanged += ConfigValueChanged; _value = configEntry.Value; if (autoroo && RiskofOptions.enabled) { AddToRoO(); } } private void AddToRoO() { RiskofOptions.AddOption((ConfigEntryBase)(object)configEntry); } private void ConfigValueChanged(object sender, EventArgs args) { _value = configEntry.Value; } private static string GenerateName(string section, string name) { return (Assembly.GetExecutingAssembly().GetName().Name + "_" + section + "_" + name).ToLower().Replace(' ', '_'); } public static implicit operator T(ConfigVar<T> self) { return self._value; } } internal class ConfigHookAttribute : HookAttribute { private readonly ConfigEntry<bool> config; private static readonly List<ConfigVar<bool>> convars = new List<ConfigVar<bool>>(); private static IEnumerable<BaseConVar> convarsHooked { [ConVarProvider] get { return (IEnumerable<BaseConVar>)convars; } } internal ConfigHookAttribute(string section, string name, bool defaultValue, string description, Type typeFrom, string methodFrom) : base(typeFrom, methodFrom) { config = MakeConfig(section, name, defaultValue, description); } internal ConfigHookAttribute(string section, string name, bool defaultValue, string description, Type typeFrom, string methodFrom, params Type[] parameters) : base(typeFrom, methodFrom, parameters) { config = MakeConfig(section, name, defaultValue, description); } private static ConfigEntry<bool> MakeConfig(string section, string name, bool defaultValue, string description) { foreach (ConfigVar<bool> convar in convars) { if (convar.configEntry != null) { ConfigDefinition definition = ((ConfigEntryBase)convar.configEntry).Definition; if (definition.Key == name && definition.Section == section) { return convar.configEntry; } } } ConfigVar<bool> configVar = new ConfigVar<bool>(section, name, defaultValue, description); convars.Add(configVar); return configVar.configEntry; } protected override void Hook(MethodInfo from, MethodInfo member) { if (config == null) { log.error("null config for hook: " + from.Name); base.Hook(from, member); } else { config.HookConfig(from, member); } } } [MeansImplicitUse] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] internal class HookAttribute : Attribute { private readonly Type typeFrom; private readonly string methodFrom; private readonly Type[] parameters; protected MethodInfo from { get { if ((object)typeFrom != null) { if (parameters != null) { return HookManager.GetMethod(typeFrom, methodFrom, parameters); } return HookManager.GetMethod(typeFrom, methodFrom); } return null; } } internal HookAttribute(Type typeFrom, string methodFrom) { this.typeFrom = typeFrom; this.methodFrom = methodFrom; } internal HookAttribute(Type typeFrom, string methodFrom, params Type[] parameters) { this.typeFrom = typeFrom; this.methodFrom = methodFrom; this.parameters = parameters; } internal HookAttribute() { } internal static void ScanAndApply() { ScanAndApply((from a in Assembly.GetExecutingAssembly().GetTypes() where a.GetCustomAttribute<HookAttribute>() != null select a).ToArray()); } internal static void ScanAndApply(params Type[] types) { for (int i = 0; i < types.Length; i++) { MethodInfo[] methods = types[i].GetMethods(BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { foreach (HookAttribute customAttribute in methodInfo.GetCustomAttributes<HookAttribute>(inherit: false)) { MethodInfo methodInfo2 = null; try { methodInfo2 = customAttribute.from; if (methodInfo2 == null && methodInfo.GetParameters().Length == 0) { methodInfo.Invoke(null, null); } else { customAttribute.Hook(methodInfo2, methodInfo); } } catch (Exception e) { e.LogHookError(methodInfo2, methodInfo); } } } } } protected virtual void Hook(MethodInfo from, MethodInfo member) { IDetour obj = HookManager.ManualDetour(from, member); if (obj != null) { obj.Apply(); } } } internal static class HookManager { internal delegate bool ConfigEnabled<T>(T configValue); private class HookedConfig<T> { private readonly ConfigEnabled<T> enabled; private readonly IDetour detour; internal HookedConfig(ConfigEntry<T> configEntry, ConfigEnabled<T> enabled, IDetour detour) { this.enabled = enabled; this.detour = detour; configEntry.SettingChanged += ConfigChanged; ConfigChanged(configEntry, null); } private void ConfigChanged(object sender, EventArgs args) { if (enabled(((ConfigEntry<T>)sender).Value)) { if (!detour.IsApplied) { detour.Apply(); } } else if (detour.IsApplied) { detour.Undo(); } } } internal const BindingFlags allFlags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; private static readonly ConfigEnabled<bool> boolConfigEnabled = BoolEnabled; private static ILHookConfig ilHookConfig = new ILHookConfig { ManualApply = true }; private static HookConfig onHookConfig = new HookConfig { ManualApply = true }; internal static void Hook(Type typeFrom, string fromMethod, Manipulator ilHook) { Hook(GetMethod(typeFrom, fromMethod), ilHook); } internal static void Hook(Delegate fromMethod, Manipulator ilHook) { Hook(fromMethod.Method, ilHook); } internal static void Hook(MethodBase fromMethod, Manipulator ilHook) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) try { new ILHook(fromMethod, ilHook, ref ilHookConfig).Apply(); } catch (Exception e) { e.LogHookError(fromMethod, ((Delegate)(object)ilHook).Method); } } internal static void Hook(Type typeFrom, string fromMethod, Delegate onHook) { Hook(GetMethod(typeFrom, fromMethod), onHook.Method, onHook.Target); } internal static void Hook(Delegate fromMethod, Delegate onHook) { Hook(fromMethod.Method, onHook.Method, onHook.Target); } internal static void Hook(MethodBase fromMethod, Delegate onHook) { Hook(fromMethod, onHook.Method, onHook.Target); } internal static void Hook(MethodBase fromMethod, MethodInfo onHook, object target = null) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) try { new Hook(fromMethod, onHook, target, ref onHookConfig).Apply(); } catch (Exception e) { e.LogHookError(fromMethod, onHook); } } internal static void HookConfig(this ConfigEntry<bool> configEntry, Type typeFrom, string fromMethod, Delegate hook) { configEntry.HookConfig(boolConfigEnabled, GetMethod(typeFrom, fromMethod), hook.Method, hook.Target); } internal static void HookConfig(this ConfigEntry<bool> configEntry, MethodBase fromMethod, Delegate hook) { configEntry.HookConfig(boolConfigEnabled, fromMethod, hook.Method, hook.Target); } internal static void HookConfig(this ConfigEntry<bool> configEntry, MethodBase fromMethod, MethodInfo hook) { configEntry.HookConfig(boolConfigEnabled, fromMethod, hook); } internal static void HookConfig<T>(this ConfigEntry<T> configEntry, ConfigEnabled<T> enabled, Type typeFrom, string fromMethod, Delegate hook) { configEntry.HookConfig(enabled, GetMethod(typeFrom, fromMethod), hook.Method, hook.Target); } internal static void HookConfig<T>(this ConfigEntry<T> configEntry, ConfigEnabled<T> enabled, MethodBase fromMethod, Delegate hook) { configEntry.HookConfig(enabled, fromMethod, hook.Method, hook.Target); } internal static void HookConfig<T>(this ConfigEntry<T> configEntry, ConfigEnabled<T> enabled, MethodBase fromMethod, MethodInfo hook, object target = null) { try { new HookedConfig<T>(configEntry, enabled, ManualDetour(fromMethod, hook, target)); } catch (Exception e) { e.LogHookError(fromMethod, hook); } } internal static IDetour ManualDetour(Type typeFrom, string fromMethod, Delegate hook) { return ManualDetour(GetMethod(typeFrom, fromMethod), hook.Method, hook.Target); } internal static IDetour ManualDetour(MethodBase fromMethod, Delegate hook) { return ManualDetour(fromMethod, hook.Method, hook.Target); } internal static IDetour ManualDetour(MethodBase fromMethod, MethodInfo hook, object target = null) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown try { ParameterInfo[] parameters = hook.GetParameters(); if (parameters.Length == 1 && parameters[0].ParameterType == typeof(ILContext)) { return (IDetour)new ILHook(fromMethod, (Manipulator)hook.CreateDelegate(typeof(Manipulator)), ref ilHookConfig); } return (IDetour)new Hook(fromMethod, hook, target, ref onHookConfig); } catch (Exception e) { e.LogHookError(fromMethod, hook); return null; } } internal static MethodInfo GetMethod(Type typeFrom, string methodName) { if (typeFrom == null || methodName == null) { log.error($"Null argument in GetMethod: type={typeFrom}, name={methodName}"); return null; } MethodInfo[] array = (from a in typeFrom.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) where a.Name == methodName select a).ToArray(); switch (array.Length) { case 1: return array[0]; case 0: log.error($"Failed to find method: {typeFrom}::{methodName}"); return null; default: { string text = $"{array.Length} ambiguous matches found for: {typeFrom}::{methodName}, may be incorrect"; MethodInfo[] array2 = array; for (int i = 0; i < array2.Length; i++) { text = text + "\n" + array2[i]; } log.warning(text); return array[0]; } } } internal static MethodInfo GetMethod(Type typeFrom, string methodName, params Type[] parameters) { if (typeFrom == null || methodName == null) { log.error($"Null argument in GetMethod: type={typeFrom}, name={methodName}"); return null; } MethodInfo? method = typeFrom.GetMethod(methodName, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, null, parameters, null); if (method == null) { log.error($"Failed to find method: {typeFrom}::{methodName}_{parameters.Length}"); } return method; } internal static void SetPriority(string[] beforeIL = null, string[] beforeOn = null, string[] afterIL = null, string[] afterOn = null) { ilHookConfig.Before = beforeIL; onHookConfig.Before = beforeOn; ilHookConfig.After = afterIL; onHookConfig.After = afterOn; } internal static void LogHookError(this Exception e, MethodBase fromMethod, MethodInfo hook) { log.error((fromMethod == null) ? $"null from-method for hook: {hook.Name}\n{e}" : $"Failed to hook: {fromMethod.DeclaringType}::{fromMethod.Name} - {hook.Name}\n{e}"); } private static bool BoolEnabled(bool configValue) { return configValue; } } internal static class log { private static readonly ManualLogSource logger = Logger.CreateLogSource(Assembly.GetExecutingAssembly().GetName().Name); internal static void info(object data) { logger.LogInfo(data); } internal static void message(object data) { logger.LogMessage(data); } internal static void warning(object data) { logger.LogWarning(data); } internal static void error(object data) { logger.LogError(data); } internal static void fatal(object data) { logger.LogFatal(data); } internal static void LogError(this ILCursor c, object data) { logger.LogError((object)$"ILCursor failure, skipping: {data}\n{c}"); } internal static void LogErrorCaller(this ILCursor c, object data) { logger.LogError((object)$"ILCursor failed in {new StackFrame(1).GetMethod().Name}, skipping: {data}\n{c}"); } } internal static class RiskofOptions { internal const string RooGuid = "com.rune580.riskofoptions"; internal static bool enabled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); internal static void SetSprite(Sprite sprite) { ModSettingsManager.SetModIcon(sprite); } internal static void SetSpriteDefaultIcon() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) try { string fullName = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)).FullName; Texture2D val = new Texture2D(256, 256); if (ImageConversion.LoadImage(val, File.ReadAllBytes(Path.Combine(fullName, "icon.png")))) { ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f))); } else { log.error("Failed to load icon.png"); } } catch (Exception ex) { log.error("Failed to load icon.png\n" + ex); } } internal static void AddOption(ConfigEntryBase entry) { AddOption(entry, string.Empty, string.Empty); } internal static void AddOption(ConfigEntryBase entry, string categoryName = "", string name = "", bool restartRequired = false) { //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Expected O, but got Unknown //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Expected O, but got Unknown //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Expected O, but got Unknown //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Expected O, but got Unknown //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) Type settingType = entry.SettingType; object obj; if (!(settingType == typeof(float))) { obj = ((!(settingType == typeof(string))) ? ((!(settingType == typeof(bool))) ? ((!(settingType == typeof(int))) ? ((!(settingType == typeof(Color))) ? ((!(settingType == typeof(KeyboardShortcut))) ? ((object)((!settingType.IsEnum) ? ((ChoiceOption)null) : new ChoiceOption(entry, new ChoiceConfig()))) : ((object)new KeyBindOption((ConfigEntry<KeyboardShortcut>)(object)entry, new KeyBindConfig()))) : ((object)new ColorOption((ConfigEntry<Color>)(object)entry, new ColorOptionConfig()))) : ((object)new IntFieldOption((ConfigEntry<int>)(object)entry, new IntFieldConfig()))) : ((object)new CheckBoxOption((ConfigEntry<bool>)(object)entry, new CheckBoxConfig()))) : ((object)new StringInputFieldOption((ConfigEntry<string>)(object)entry, new InputFieldConfig { submitOn = (SubmitEnum)6, lineType = (LineType)0 }))); } else if (entry.Description.AcceptableValues is AcceptableValueRange<float>) { obj = (object)new SliderOption((ConfigEntry<float>)(object)entry, new SliderConfig { min = ((AcceptableValueRange<float>)(object)entry.Description.AcceptableValues).MinValue, max = ((AcceptableValueRange<float>)(object)entry.Description.AcceptableValues).MaxValue, FormatString = "{0:f2}", description = entry.DescWithDefault("{0:f2}") }); } else { ConfigEntry<float> obj2 = (ConfigEntry<float>)(object)entry; FloatFieldConfig val = new FloatFieldConfig(); ((NumericFieldConfig<float>)val).FormatString = "{0:f2}"; ((BaseOptionConfig)val).description = entry.DescWithDefault("{0:f2}"); obj = (object)new FloatFieldOption(obj2, val); } BaseOption val2 = (BaseOption)obj; if (val2 == null) { return; } BaseOptionConfig config = val2.GetConfig(); config.category = categoryName; config.name = name; config.restartRequired = restartRequired; if (config.description == "") { config.description = entry.DescWithDefault(); } try { ModSettingsManager.AddOption(val2); } catch (Exception arg) { log.error($"AddOption {entry.Definition} failed\n{arg}"); } } internal static void AddOption(ConfigEntry<float> entry, float min, float max, string format = "{0:f2}", string categoryName = "") { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new SliderOption(entry, new SliderConfig { min = min, max = max, FormatString = format, category = categoryName, description = ((ConfigEntryBase)(object)entry).DescWithDefault(format) })); } internal static void AddIntSlider(ConfigEntry<int> entry, int min, int max, string categoryName = "") { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new IntSliderOption(entry, new IntSliderConfig { min = min, max = max, category = categoryName, description = ((ConfigEntryBase)(object)entry).DescWithDefault() })); } private static string DescWithDefault(this ConfigEntryBase entry, string format = "{0}") { return string.Format("{1}\n[Default: " + format + "]", entry.DefaultValue, entry.Description.Description); } } internal class TextHud { private static readonly Queue<TextHud> hudsToUpdate; internal bool resetOnTargetChanged = true; internal TextAlignmentOptions alignment = (TextAlignmentOptions)257; internal readonly ConfigEntry<bool> toggleEntry; private readonly ConfigEntry<int> fontsizeEntry; private readonly ConfigEntry<Vector2> positionEntry; private readonly string hudName; private GameObject objhud; private HGTextMeshProUGUI textMesh; private string textToUpdate; internal static HUD hud { get { if (HUD.instancesList.Count <= 0) { return null; } return HUD.instancesList[0]; } } internal bool enabled { get { if (toggleEntry == null) { return true; } return toggleEntry.Value; } } internal int fontSize { get { if (fontsizeEntry == null) { return -1; } return fontsizeEntry.Value; } } internal Vector2 position { get { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (positionEntry == null) { return new Vector2(1776.5f, 173f); } return positionEntry.Value; } } static TextHud() { hudsToUpdate = new Queue<TextHud>(); RoR2Application.onLateUpdate += LateUpdate; } private TextHud(ConfigFile configFile, string name, Vector2? defaultPosition, bool? defaultToggle, int? defaultFontSize) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) hudName = name; if (defaultPosition.HasValue) { positionEntry = configFile.Bind<Vector2>(name, "Position", defaultPosition.Value, "Position of " + name + ", starting from bottom left corner"); } if (defaultToggle.HasValue) { toggleEntry = configFile.Bind<bool>(name, "Toggle", defaultToggle.Value, "Toggles " + name); } if (defaultFontSize.HasValue) { fontsizeEntry = configFile.Bind<int>(name, "Font size", defaultFontSize.Value, "Font size of " + name); } DoHooks(); } internal TextHud(ConfigFile configFile, string name) : this(configFile, name, null, null, null) { } internal TextHud(ConfigFile configFile, string name, Vector2 defaultPosition) : this(configFile, name, defaultPosition, null, null) { }//IL_0003: Unknown result type (might be due to invalid IL or missing references) internal TextHud(ConfigFile configFile, string name, Vector2 defaultPosition, bool defaultToggle) : this(configFile, name, defaultPosition, defaultToggle, null) { }//IL_0003: Unknown result type (might be due to invalid IL or missing references) internal TextHud(ConfigFile configFile, string name, Vector2 defaultPosition, int defaultFontSize) : this(configFile, name, defaultPosition, null, defaultFontSize) { }//IL_0003: Unknown result type (might be due to invalid IL or missing references) internal TextHud(ConfigFile configFile, string name, Vector2 defaultPosition, bool defaultToggle, int defaultFontSize) : this(configFile, name, (Vector2?)defaultPosition, (bool?)defaultToggle, (int?)defaultFontSize) { }//IL_0003: Unknown result type (might be due to invalid IL or missing references) internal void UpdateText(string text) { if (!hudsToUpdate.Contains(this)) { hudsToUpdate.Enqueue(this); } textToUpdate = text; } internal void ClearText() { if (Object.op_Implicit((Object)(object)objhud) && !string.IsNullOrEmpty(((TMP_Text)textMesh).text)) { UpdateText(string.Empty); } } private static void LateUpdate() { while (hudsToUpdate.Count > 0) { TextHud textHud = hudsToUpdate.Dequeue(); if (textHud.enabled) { if ((Object)(object)textHud.objhud == (Object)null) { textHud.InitHud(); } ((TMP_Text)textHud.textMesh).SetText(textHud.textToUpdate, true); } textHud.textToUpdate = null; } } internal void DestroyHUD() { Object.Destroy((Object)(object)objhud); } private void InitHud() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0036: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) objhud = new GameObject(hudName); RectTransform val = objhud.AddComponent<RectTransform>(); if (Object.op_Implicit((Object)(object)hud)) { SetTransform(val, hud); } val.sizeDelta = Vector2.zero; val.pivot = new Vector2(0.5f, 0.5f); val.anchoredPosition = position; textMesh = objhud.AddComponent<HGTextMeshProUGUI>(); ((TMP_Text)textMesh).fontSizeMin = 6f; if (fontSize >= 0) { ((TMP_Text)textMesh).fontSize = fontSize; } ((TMP_Text)textMesh).outlineColor = Color32.op_Implicit(Color.black); ((TMP_Text)textMesh).enableWordWrapping = false; ((TMP_Text)textMesh).alignment = alignment; } private void SetTransform(RectTransform textRect, HUD hud) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0025: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_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_005c: 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_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_0071: 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_007a: Unknown result type (might be due to invalid IL or missing references) RectTransform val = (RectTransform)hud.mainUIPanel.transform; ((Transform)textRect).SetParent(hud.mainUIPanel.transform, false); textRect.anchoredPosition3D = new Vector3(position.x, position.y, 0f - val.anchoredPosition3D.z); Vector2 anchorMax = (textRect.anchorMin = -val.anchorMin / (val.anchorMax - val.anchorMin)); textRect.anchorMax = anchorMax; } private void DoHooks() { HUD.onHudTargetChangedGlobal += Reset_OnHudTargetChanged; if (toggleEntry != null) { toggleEntry.SettingChanged += Toggle_Changed; } if (positionEntry != null) { positionEntry.SettingChanged += Position_Changed; } if (fontsizeEntry != null) { fontsizeEntry.SettingChanged += FontSize_Changed; } } private void Reset_OnHudTargetChanged(HUD obj) { if (Object.op_Implicit((Object)(object)objhud)) { if (!Object.op_Implicit((Object)(object)objhud.transform.parent)) { Transform transform = objhud.transform; SetTransform((RectTransform)(object)((transform is RectTransform) ? transform : null), hud); } if (resetOnTargetChanged) { ClearText(); } } } private void Toggle_Changed(object sender, EventArgs e) { if (Object.op_Implicit((Object)(object)objhud) && !enabled) { Object.Destroy((Object)(object)objhud); } } private void Position_Changed(object sender, EventArgs e) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)objhud)) { objhud.GetComponent<RectTransform>().anchoredPosition = position; } } private void FontSize_Changed(object sender, EventArgs e) { if (Object.op_Implicit((Object)(object)objhud) && fontSize > 0) { ((TMP_Text)textMesh).fontSize = fontSize; } } internal void AddRoOVector2Option() { AddRoOVector2Option(hudName); } internal void AddRoOVector2Option(string category) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 //IL_0049: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) if (RiskofOptions.enabled) { new Vector2ScreenOption(positionEntry, hudName + " text", category, new Vector2ScreenOption.DotInfo(((int)alignment == 257) ? new Vector2(0f, 1f) : new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), new Vector2(0.5f, 0.5f), Vector2.op_Implicit(Vector3.zero)), toggleEntry, fontsizeEntry); } } } } namespace Dolso.RoO { internal class RooSliderInput2 : MonoBehaviour { internal UnityEvent<float> onValueChanged = new UnityEvent<float>(); internal string formatString = "F0"; private Slider slider; private TMP_InputField inputField; private float _value; internal float value { get { return _value; } set { if (_value != value) { _value = value; onValueChanged.Invoke(_value); } UpdateControls(); } } private void Awake() { slider = ((Component)this).GetComponentInChildren<Slider>(); inputField = ((Component)this).GetComponentInChildren<TMP_InputField>(); ((UnityEvent<float>)(object)slider.onValueChanged).AddListener((UnityAction<float>)SliderChanged); ((UnityEvent<string>)(object)inputField.onEndEdit).AddListener((UnityAction<string>)OnTextEdited); ((UnityEvent<string>)(object)inputField.onSubmit).AddListener((UnityAction<string>)OnTextEdited); } internal void Setup(float min, float max) { slider.minValue = min; slider.maxValue = max; } internal void SetWholeNumbers(bool wholeNumbers) { slider.wholeNumbers = wholeNumbers; } private void UpdateControls() { if (formatString.StartsWith("F")) { slider.value = value; inputField.text = value.ToString(formatString, CultureInfo.InvariantCulture); } else { int num = (int)value; slider.value = num; inputField.text = num.ToString(formatString, CultureInfo.InvariantCulture); } } private void SliderChanged(float newValue) { value = newValue; } private void OnTextEdited(string newText) { if (float.TryParse(newText, out var result)) { value = Mathf.Clamp(result, slider.minValue, slider.maxValue); } else { value = _value; } } } internal class Vector2ScreenBehaviour : MonoBehaviour { private static Sprite checkOn; private static Sprite checkOff; private RooSliderInput2 sliderX; private RooSliderInput2 sliderY; private RooSliderInput2 sliderSize; private ChildLocator childLocator; private RectTransform positionDot; private RectTransform positionRect; private Vector2ScreenOption option; private Image checkBox; private bool boxState; private ref readonly Vector2ScreenOption.DotInfo dotinfo => ref option.dotInfo; private ConfigEntry<Vector2> positionEntry => option.positionEntry; private ConfigEntry<bool> toggleEntry => option.toggleEntry; private ConfigEntry<int> fontSizeEntry => option.fontSizeEntry; private ConfigEntry<float> scaleEntry => option.scaleEntry; internal static void LoadImages(AsyncOperationHandle<GameObject> handle) { CarouselController component = handle.Result.GetComponent<CarouselController>(); checkOn = component.choices[1].customSprite; checkOff = component.choices[0].customSprite; } internal void SetStartingValues(Vector2ScreenOption option) { //IL_0013: 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_003f: 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_006b: 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_0097: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Expected O, but got Unknown //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) this.option = option; positionDot.anchorMin = dotinfo.dotAnchor; positionDot.anchorMax = dotinfo.dotAnchor; positionDot.pivot = dotinfo.dotAnchor; positionRect.anchorMin = dotinfo.rectAnchor; positionRect.anchorMax = dotinfo.rectAnchor; positionRect.pivot = dotinfo.rectPivot; positionRect.sizeDelta = dotinfo.rectSize; Vector2 val = CalcMinMax(1920f, 0); sliderX = BuildSlider("PositionX", val.x, val.y); sliderX.formatString = "F0"; sliderX.onValueChanged.AddListener((UnityAction<float>)XChanged); Vector2 val2 = CalcMinMax(1080f, 1); sliderY = BuildSlider("PositionY", val2.x, val2.y); sliderY.formatString = "F0"; sliderY.onValueChanged.AddListener((UnityAction<float>)YChanged); sliderX.value = positionEntry.Value.x; sliderY.value = positionEntry.Value.y; if (toggleEntry != null) { boxState = toggleEntry.Value; ((UnityEvent)((Button)((Component)childLocator.FindChild("Toggle")).GetComponent<HGButton>()).onClick).AddListener(new UnityAction(ToggleChanged)); checkBox = ((Component)childLocator.FindChild("ToggleBox")).GetComponent<Image>(); checkBox.sprite = (boxState ? checkOn : checkOff); } else { ((Component)childLocator.FindChild("ToggleParent")).gameObject.SetActive(false); ((Component)childLocator.FindChild("ToggleText")).gameObject.SetActive(false); RectTransform component = ((Component)childLocator.FindChild("Size")).GetComponent<RectTransform>(); component.anchoredPosition += new Vector2(0f, 66f); } if (fontSizeEntry != null) { sliderSize = BuildSlider("Size", 5f, option.maxScale); sliderSize.formatString = "0"; sliderSize.onValueChanged.AddListener((UnityAction<float>)FontSizeChanged); sliderSize.value = fontSizeEntry.Value; } else if (scaleEntry != null) { sliderSize = BuildSlider("Size", 0f, option.maxScale); sliderSize.formatString = "F1"; sliderSize.onValueChanged.AddListener((UnityAction<float>)ScaleChanged); sliderSize.SetWholeNumbers(wholeNumbers: false); sliderSize.value = scaleEntry.Value; } else { ((Component)childLocator.FindChild("Size")).gameObject.SetActive(false); SetSize(option.maxScale * Vector2.one); } } private void Awake() { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected O, but got Unknown childLocator = ((Component)this).GetComponent<ChildLocator>(); positionDot = ((Component)childLocator.FindChild("PositionDot")).GetComponent<RectTransform>(); positionRect = ((Component)childLocator.FindChild("PositionRect")).GetComponent<RectTransform>(); ((UnityEvent)((Button)((Component)childLocator.FindChild("Apply")).GetComponent<HGButton>()).onClick).AddListener(new UnityAction(Apply)); ((UnityEvent)((Button)((Component)childLocator.FindChild("Cancel")).GetComponent<HGButton>()).onClick).AddListener(new UnityAction(Close)); ((UnityEvent)((Button)((Component)childLocator.FindChild("Default")).GetComponent<HGButton>()).onClick).AddListener(new UnityAction(SetToDefault)); ((Component)this).GetComponent<RooEscapeRouter>().escapePressed.AddListener(new UnityAction(Close)); } private RooSliderInput2 BuildSlider(string childName, float min, float max) { RooSliderInput2 rooSliderInput = ((Component)childLocator.FindChild(childName)).gameObject.AddComponent<RooSliderInput2>(); rooSliderInput.Setup(min, max); return rooSliderInput; } private Vector2 CalcMinMax(float length, int index) { //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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) Vector2 val = dotinfo.rectSize; float num = 0f - ((Vector2)(ref val))[index]; val = dotinfo.dotAnchor; float num2 = ((Vector2)(ref val))[index]; val = dotinfo.rectPivot; float num3 = num * (num2 - ((Vector2)(ref val))[index]); float num4 = 0f - length; val = dotinfo.rectAnchor; float num5 = num4 * ((Vector2)(ref val))[index] + num3; val = dotinfo.rectAnchor; float num6 = length * (1f - ((Vector2)(ref val))[index]) + num3; return new Vector2(num5, num6); } private void XChanged(float newValue) { //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_001a: Unknown result type (might be due to invalid IL or missing references) Vector2 anchoredPosition = positionRect.anchoredPosition; anchoredPosition.x = newValue; positionRect.anchoredPosition = anchoredPosition; } private void YChanged(float newValue) { //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_001a: Unknown result type (might be due to invalid IL or missing references) Vector2 anchoredPosition = positionRect.anchoredPosition; anchoredPosition.y = newValue; positionRect.anchoredPosition = anchoredPosition; } private void ToggleChanged() { boxState = !boxState; checkBox.sprite = (boxState ? checkOn : checkOff); } private void FontSizeChanged(float newValue) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetSize(newValue * Vector2.one); } private void ScaleChanged(float newValue) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) SetSize(newValue * dotinfo.rectSize); } private void SetSize(Vector2 size) { //IL_0031: 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_0020: Unknown result type (might be due to invalid IL or missing references) if (((Vector2)(ref size)).sqrMagnitude < 16f) { positionDot.sizeDelta = ((Vector2)(ref size)).normalized * 4f; } else { positionDot.sizeDelta = size; } } private void SetToDefault() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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) Vector2 val = (Vector2)((ConfigEntryBase)positionEntry).DefaultValue; sliderX.value = val.x; sliderY.value = val.y; if (toggleEntry != null) { boxState = (bool)((ConfigEntryBase)toggleEntry).DefaultValue; checkBox.sprite = (boxState ? checkOn : checkOff); } if (fontSizeEntry != null) { sliderSize.value = (int)((ConfigEntryBase)fontSizeEntry).DefaultValue; } else if (scaleEntry != null) { sliderSize.value = (float)((ConfigEntryBase)scaleEntry).DefaultValue; } } private void Apply() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) positionEntry.Value = new Vector2((float)Math.Round(sliderX.value, 2), (float)Math.Round(sliderY.value, 2)); if (toggleEntry != null) { toggleEntry.Value = boxState; } if (fontSizeEntry != null) { fontSizeEntry.Value = Mathf.RoundToInt(sliderSize.value); } else if (scaleEntry != null) { scaleEntry.Value = sliderSize.value; } Close(); } private void Close() { Object.DestroyImmediate((Object)(object)((Component)this).gameObject); } } internal class Vector2ScreenOption { internal readonly struct DotInfo { internal readonly Vector2 dotAnchor; internal readonly Vector2 rectAnchor; internal readonly Vector2 rectPivot; internal readonly Vector2 rectSize; internal DotInfo(Vector2 dotAnchor, Vector2 rectAnchor, Vector2 rectPivot, Vector2 rectSize) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) this.dotAnchor = dotAnchor; this.rectAnchor = rectAnchor; this.rectPivot = rectPivot; this.rectSize = rectSize; } } private static GameObject prefab; internal readonly ConfigEntry<Vector2> positionEntry; internal readonly ConfigEntry<bool> toggleEntry; internal readonly ConfigEntry<int> fontSizeEntry; internal readonly ConfigEntry<float> scaleEntry; internal readonly DotInfo dotInfo; internal readonly float maxScale; internal Vector2ScreenOption(ConfigEntry<Vector2> positionEntry, DotInfo dotInfo, float dotSize = 16f) : this(positionEntry, ((ConfigEntryBase)positionEntry).Definition.Key, ((ConfigEntryBase)positionEntry).Definition.Section, dotInfo, null, null, null, dotSize) { } internal Vector2ScreenOption(ConfigEntry<Vector2> positionEntry, string name, string category, DotInfo dotInfo, float dotSize = 16f) : this(positionEntry, name, category, dotInfo, null, null, null, dotSize) { } internal Vector2ScreenOption(ConfigEntry<Vector2> positionEntry, DotInfo dotInfo, ConfigEntry<float> scaleEntry, float maxScale = 3f) : this(positionEntry, ((ConfigEntryBase)positionEntry).Definition.Key, ((ConfigEntryBase)positionEntry).Definition.Section, dotInfo, null, null, scaleEntry, maxScale) { } internal Vector2ScreenOption(ConfigEntry<Vector2> positionEntry, string name, string category, DotInfo dotInfo, ConfigEntry<float> scaleEntry, float maxScale = 3f) : this(positionEntry, name, category, dotInfo, null, null, scaleEntry, maxScale) { } internal Vector2ScreenOption(ConfigEntry<Vector2> positionEntry, string name, string category, DotInfo dotInfo, ConfigEntry<bool> toggleEntry = null, ConfigEntry<int> fontSizeEntry = null) : this(positionEntry, name, category, dotInfo, toggleEntry, fontSizeEntry, null, (fontSizeEntry == null) ? 16 : 36) { } private Vector2ScreenOption(ConfigEntry<Vector2> positionEntry, string name, string category, DotInfo dotInfo, ConfigEntry<bool> toggleEntry, ConfigEntry<int> fontSizeEntry, ConfigEntry<float> scaleEntry, float maxScale) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown this.positionEntry = positionEntry; this.dotInfo = dotInfo; this.maxScale = maxScale; this.toggleEntry = toggleEntry; this.fontSizeEntry = fontSizeEntry; this.scaleEntry = scaleEntry; ModSettingsManager.AddOption((BaseOption)new GenericButtonOption(name, category, "Position of " + name, "Open", new UnityAction(CreateOptionWindow))); EnsureAssets(); } internal static void LoadAssets(string assetFolder) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) AsyncOperationHandle<GameObject> val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/SettingsEntryButton, Bool.prefab"); val.Completed += Vector2ScreenBehaviour.LoadImages; if (!Path.IsPathRooted(assetFolder)) { assetFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), assetFolder, "dolso"); } AssetBundle obj = AssetBundle.LoadFromFile(assetFolder); prefab = obj.LoadAsset<GameObject>("TextHud Screen"); obj.Unload(false); } private static void EnsureAssets() { if (!Object.op_Implicit((Object)(object)prefab)) { string text = Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dolso", SearchOption.AllDirectories).FirstOrDefault(); if (text != null) { LoadAssets(text); } else { log.warning("failed to find dolso assetbundle"); } } } private void CreateOptionWindow() { Object.Instantiate<GameObject>(prefab).AddComponent<Vector2ScreenBehaviour>().SetStartingValues(this); } } } namespace ESF { internal class CameraModeESF : CameraModePlayerBasic { internal static readonly CameraModeESF playerCamera = new CameraModeESF { isSpectatorMode = false }; internal static readonly CameraModeESF spectatorCamera = new CameraModeESF { isSpectatorMode = true }; public override void ApplyLookInputInternal(object rawInstanceData, in CameraModeContext context, in ApplyLookInputArgs input) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) ESFMotor eSFMotor = default(ESFMotor); if (!context.targetInfo.isViewerControlled || !Object.op_Implicit((Object)(object)context.targetInfo.target) || !context.targetInfo.target.TryGetComponent<ESFMotor>(ref eSFMotor)) { ((CameraModePlayerBasic)this).ApplyLookInputInternal(rawInstanceData, ref context, ref input); } else { eSFMotor.AccumulateMouseInput(input.lookInput); } } public override void UpdateInternal(object rawInstanceData, in CameraModeContext context, out UpdateResult result) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) result = default(UpdateResult); CameraRigController cameraRigController = context.cameraInfo.cameraRigController; InstanceData val = (InstanceData)rawInstanceData; CameraTargetParams targetParams = context.targetInfo.targetParams; Quaternion val2 = context.cameraInfo.previousCameraState.rotation; Vector3 position = context.cameraInfo.previousCameraState.position; CharacterCameraParamsData basic = CharacterCameraParamsData.basic; basic.fov = BlendableFloat.op_Implicit(val.neutralFov); float num; bool flag; if (Object.op_Implicit((Object)(object)targetParams)) { CharacterCameraParamsData.Blend(ref targetParams.currentCameraParamsData, ref basic, 1f); num = basic.fov.value; flag = targetParams.currentCameraParamsData.isFirstPerson.value; } else { num = context.cameraInfo.baseFov; flag = false; } val.neutralFov = Mathf.SmoothDamp(val.neutralFov, num, ref val.neutralFovVelocity, 0.2f, float.PositiveInfinity, Time.deltaTime); Vector3 val3 = CalculateRotatedPivotPosition(in context, flag); GameObject target = context.targetInfo.target; if (Object.op_Implicit((Object)(object)target)) { val2 = target.transform.rotation; if (!flag && !Config.tpCameraRoll) { val2 = Quaternion.LookRotation(val2 * Vector3.forward, Vector3.up); } if (!flag) { Vector3 val4 = val2 * basic.idealLocalCameraPos.value; float magnitude = ((Vector3)(ref val4)).magnitude; float num2 = (1f + Mathf.Clamp(val.pitchYaw.pitch, -90f, 90f) / -90f) * 0.5f; magnitude *= Mathf.Sqrt(1f - num2); if (magnitude < 0.25f) { magnitude = 0.25f; } float num3 = cameraRigController.Raycast(new Ray(val3, val4), magnitude, basic.wallCushion.value - 0.01f); if (val.currentCameraDistance >= num3) { val.currentCameraDistance = num3; val.cameraDistanceVelocity = 0f; } else { val.currentCameraDistance = Mathf.SmoothDamp(val.currentCameraDistance, num3, ref val.cameraDistanceVelocity, 0.2f); } position = val3 + ((Vector3)(ref val4)).normalized * val.currentCameraDistance; } else { position = val3; } } result.cameraState.position = position; result.cameraState.rotation = val2; result.cameraState.fov = num; result.showSprintParticles = false; result.firstPersonTarget = null; result.showDisabledSkillsParticles = context.targetInfo.skillsAreDisabled; result.showSecondaryElectricityParticles = context.targetInfo.showSecondaryElectricity; ((CameraModePlayerBasic)this).UpdateCrosshair(rawInstanceData, ref context, ref result.cameraState, ref val3, ref result.crosshairWorldPosition); } private static Vector3 CalculateRotatedPivotPosition(in CameraModeContext context, bool firstPerson) { //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_0114: 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_00b6: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: 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_00ce: Unknown result type (might be due to invalid IL or missing references) CameraRigController cameraRigController = context.cameraInfo.cameraRigController; CameraTargetParams targetParams = context.targetInfo.targetParams; Vector3 result = context.cameraInfo.previousCameraState.position; if (Object.op_Implicit((Object)(object)targetParams)) { Vector3 position = ((Component)targetParams).transform.position; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(0f, targetParams.currentCameraParamsData.pivotVerticalOffset.value, 0f); if (!firstPerson && (bool)Config.tpCameraRoll && Object.op_Implicit((Object)(object)context.targetInfo.target)) { val = context.targetInfo.target.transform.rotation * val; } Vector3 val2 = (Object.op_Implicit((Object)(object)targetParams.cameraPivotTransform) ? targetParams.cameraPivotTransform.position : position) + val; if (targetParams.dontRaycastToPivot) { result = val2; } else { Vector3 val3 = val2 - position; float magnitude = ((Vector3)(ref val3)).magnitude; Ray val4 = default(Ray); ((Ray)(ref val4))..ctor(position, val3); float num = cameraRigController.Raycast(val4, magnitude, targetParams.currentCameraParamsData.wallCushion.value); result = ((Ray)(ref val4)).GetPoint(num); } } return result; } public override void CollectLookInputInternal(object rawInstanceData, in CameraModeContext context, out CollectLookInputResult output) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) ((CameraModePlayerBasic)this).CollectLookInputInternal(rawInstanceData, ref context, ref output); if (context.targetInfo.isSprinting && CameraRigController.enableSprintSensitivitySlowdown.value) { ref Vector2 lookInput = ref output.lookInput; lookInput *= 2f; } } } internal static class Config { internal static readonly ConfigVar<bool> swapYawRoll = new ConfigVar<bool>("Camera", "Swap Yaw and Roll", defaultValue: false, "If enabled, horizontal mouse will apply yaw, and strafe keys will roll"); internal static readonly ConfigVar<bool> scopeToggle = new ConfigVar<bool>("Camera", "Scope Toggle", defaultValue: true, "If scope should be a toggle instead of a hold"); internal static readonly ConfigVar<bool> tpCameraRoll = new ConfigVar<bool>("Camera", "Third Person Camera Roll", defaultValue: false, "If the third person camera should be affected by roll"); internal static void DoConfig(ConfigFile configFile) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) configFile.Bind<string>("", "Version", "1", ""); ESFController.textHud = new TextHud(configFile, "ESF Text", new Vector2(600f, 500f), defaultToggle: true, 16); ESFController.oobText = new TextHud(configFile, "Out of Bounds", new Vector2(960f, 720f), defaultToggle: true, 64) { alignment = (TextAlignmentOptions)514 }; if (RiskofOptions.enabled) { DoRiskOfOptions(); } } private static void DoRiskOfOptions() { Vector2ScreenOption.LoadAssets("Assets"); ESFController.textHud.AddRoOVector2Option(); ESFController.oobText.AddRoOVector2Option(); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void ReloadConfig(ConCommandArgs args) { Utilities.configFile.Reload(); Debug.Log((object)"Reloaded ESF config"); } } internal class Content : IContentPackProvider { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static BankCallback <>9__9_0; internal void <LoadSoundbankAsync>b__9_0(uint id, IntPtr ptr, AKRESULT akResult, object cookie) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 //IL_000e: Unknown result type (might be due to invalid IL or missing references) if ((int)akResult != 1) { log.error(string.Format("Error loading bank: {0}, Error code: {1}", "ESFSoundbank.bnk", akResult)); } } } private static AssetBundle assetBundle; internal static ContentPack contentPack; public string identifier => "dolso.ESF"; private static string directory => Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Assets"); public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { AssetBundleCreateRequest assetBundleRequest = AssetBundle.LoadFromFileAsync(Path.Combine(directory, "esfassets")); yield return LoadAsync((AsyncOperation)(object)assetBundleRequest, args); assetBundle = assetBundleRequest.assetBundle; AssetBundleRequest serializableContentPack = assetBundle.LoadAssetAsync<SerializableContentPack>("ESF ContentPack"); yield return LoadAsync((AsyncOperation)(object)serializableContentPack, args); contentPack = ((SerializableContentPack)serializableContentPack.asset).CreateContentPack(); LoadSoundbankAsync(); yield return DoBody(); yield return DoNoseguns(); yield return DoVelocityBomb(); if (RiskofOptions.enabled) { yield return DoRiskOfOptions(); } static IEnumerator LoadAsync(AsyncOperation request, LoadStaticContentAsyncArgs args) { while (!request.isDone) { args.ReportProgress(request.progress); yield return null; } } } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { yield break; } private static void LoadSoundbankAsync() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Invalid comparison between Unknown and I4 //IL_0043: 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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown AKRESULT val = AkSoundEngine.AddBasePath(directory); if ((int)val == 1) { object obj = <>c.<>9__9_0; if (obj == null) { BankCallback val2 = delegate(uint id, IntPtr ptr, AKRESULT akResult, object cookie) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 //IL_000e: Unknown result type (might be due to invalid IL or missing references) if ((int)akResult != 1) { log.error(string.Format("Error loading bank: {0}, Error code: {1}", "ESFSoundbank.bnk", akResult)); } }; <>c.<>9__9_0 = val2; obj = (object)val2; } AkBankManager.LoadBankAsync("ESFSoundbank.bnk", (BankCallback)obj); } else { log.error($"Error adding base path: {directory}, Error code: {val}"); } } private static IEnumerator DoBody() { AsyncOperationHandle<GameObject> effect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/StandardCrosshair.prefab"); AsyncOperationHandle<Shader> cloudshader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGIntersectionCloudRemap.shader"); AssetBundleRequest matphase = assetBundle.LoadAssetAsync<Material>("matPhaseJump-Stubbed"); yield return effect; yield return cloudshader; yield return matphase; contentPack.bodyPrefabs.Find("ESFBody").GetComponent<CharacterBody>()._defaultCrosshairPrefab = effect.Result; ((Material)matphase.asset).shader = cloudshader.Result; } private static IEnumerator DoNoseguns() { AsyncOperationHandle<GameObject> explosion = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/OmniExplosionVFXQuick.prefab"); AsyncOperationHandle<GameObject> muzzle = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/Muzzleflash1.prefab"); AsyncOperationHandle<GameObject> tracer = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/TracerCommandoDefault.prefab"); AsyncOperationHandle<GameObject> hiteffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/HitsparkBandit.prefab"); yield return explosion; yield return muzzle; yield return tracer; yield return hiteffect; Banshee.blastEffectPrefab = explosion.Result; Banshee.tracerPrefab = Utilities.CreatePrefab(tracer.Result, "ESF Tracer"); Banshee.tracerPrefab.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)1; EntityStateConfiguration stateConfig = contentPack.entityStateConfigurations.Find("ESF.EntityStates.AirHammer"); stateConfig.ModifyStateConfig("muzzleFlashPrefab", muzzle.Result); stateConfig.ModifyStateConfig("tracerEffectPrefab", Banshee.tracerPrefab); AirHammer.blastEffectPrefab = Utilities.CreatePrefab(explosion.Result, "AirHammerExplosion"); AirHammer.blastEffectPrefab.GetComponent<EffectComponent>().soundName = "dolso_esf_airhammer_explosion"; ScytheLaserFire.hitEffectPrefab = Utilities.CreatePrefab(hiteffect.Result, "Saron HitEffect"); ParticleSystemRenderer component = ((Component)ScytheLaserFire.hitEffectPrefab.transform.Find("Particles/HitFlash")).GetComponent<ParticleSystemRenderer>(); ColorOverLifetimeModule colorOverLifetime = ((Component)component).GetComponent<ParticleSystem>().colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = new MinMaxGradient(new Color(161f, 0f, 143f), new Color(114f, 0f, 200f)); ((Renderer)component).material = new Material(((Renderer)component).material); ((Renderer)component).material.SetFloat("_Boost", 1f); ((Renderer)component).material.SetFloat("_AlphaBoost", 1f); ScytheLaserFire.tracerPrefab = contentPack.effectDefs.Find("TracerScythe").prefab; Material val = new Material(((Renderer)tracer.Result.GetComponent<LineRenderer>()).material); ((Renderer)ScytheLaserFire.tracerPrefab.GetComponent<LineRenderer>()).material = val; val.EnableKeyword("_DisableRemapOn"); contentPack.effectDefs.Add((EffectDef[])(object)new EffectDef[3] { new EffectDef(Banshee.tracerPrefab), new EffectDef(AirHammer.blastEffectPrefab), new EffectDef(ScytheLaserFire.hitEffectPrefab) }); } private static IEnumerator DoVelocityBomb() { AsyncOperationHandle<GameObject> effect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/FallBoots/BootShockwave.prefab"); yield return effect; GameObject val = Utilities.CreatePrefab(effect.Result, "VelocityBombShockwave"); SizeOverLifetimeModule sizeOverLifetime = ((Component)val.transform.Find("Sphere")).GetComponent<ParticleSystem>().sizeOverLifetime; MinMaxCurve size = ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size; ((MinMaxCurve)(ref size)).curve.keys = (Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 0f), new Keyframe(0.006f, 1f) }; ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size = size; contentPack.projectilePrefabs.Find("VelocityBomb").GetComponent<ProjectileExplosion>().explosionEffect = val; contentPack.effectDefs.Add((EffectDef[])(object)new EffectDef[1] { new EffectDef(val) }); } private static IEnumerator DoRiskOfOptions() { AssetBundleRequest sprite = assetBundle.LoadAssetAsync<Sprite>("ESFIcon"); yield return sprite; Object asset = sprite.asset; RiskofOptions.SetSprite((Sprite)(object)((asset is Sprite) ? asset : null)); } } [CreateAssetMenu(menuName = "Dolso/ESF/FuelSkillDef")] internal class FuelSkillDef : SkillDef { public class InstanceData : BaseSkillInstanceData { public ESFFuel esfFuel; } [Flags] public enum FuelProviderType { None = 0, Main = 3, ForBonusOnly = 0xC, Base = 1, CapacityAllStock = 2, CapacityBonusOnly = 4, IgnoreFuelUsage = 8 } [Header("Fuel")] public float activationCost; public float thresholdMult; public FuelProviderType fuelType; public override BaseSkillInstanceData OnAssigned(GenericSkill skillSlot) { return (BaseSkillInstanceData)(object)new InstanceData { esfFuel = ((Component)skillSlot).GetComponent<ESFFuel>() }; } public override bool IsReady(GenericSkill skillSlot) { if (((SkillDef)this).IsReady(skillSlot)) { if ((fuelType & FuelProviderType.IgnoreFuelUsage) <= FuelProviderType.None) { return ((InstanceData)(object)skillSlot.skillInstanceData).esfFuel.fuelCurrent >= thresholdMult * activationCost; } return true; } return false; } public override void OnExecute([NotNull] GenericSkill skillSlot) { ((SkillDef)this).OnExecute(skillSlot); if ((fuelType & FuelProviderType.IgnoreFuelUsage) == 0) { ((InstanceData)(object)skillSlot.skillInstanceData).esfFuel.TryConsumeFuel(activationCost); } } } internal static class Hooks { [Hook(typeof(MapZone), "TeleportBody")] private static void DelayTeleportion_IL_MapZone_TeleportBody(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction a) => ILPatternMatchingExt.MatchCallOrCallvirt(a, typeof(Physics), "GetIgnoreLayerCollision") })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<bool, MapZone, CharacterBody, bool>>((Func<bool, MapZone, CharacterBody, bool>)delegate(bool ignore, MapZone mapZone, CharacterBody body) { //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) if (ignore) { return true; } ESFController eSFController = default(ESFController); return body.bodyIndex == Plugin.bodyIndex && ((Component)body).TryGetComponent<ESFController>(ref eSFController) && !eSFController.ShouldOobTeleport(mapZone); }); } else { val.LogErrorCaller("GetIgnoreLayerCollision"); } } [Hook(typeof(GenericSkill), "CanApplyAmmoPack")] private static bool Bandolier_On_GenericSkill_CanApplyAmmoPack(Func<GenericSkill, bool> orig, GenericSkill self) { if (self.skillInstanceData is FuelSkillDef.InstanceData instanceData) { instanceData.esfFuel.RefillFuel(); return false; } return orig(self); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("dolso.ESF", "ESF", "1.2.1")] public class Plugin : BaseUnityPlugin { public const string ModGuid = "dolso.ESF"; public const string Version = "1.2.1"; public static BodyIndex bodyIndex { get; private set; } private void Awake() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown Utilities.Awake((BaseUnityPlugin)(object)this); ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)SetBodyIndex); Config.DoConfig(((BaseUnityPlugin)this).Config); HookAttribute.ScanAndApply(typeof(Hooks)); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(CollectContentPack); Language.collectLanguageRootFolders += CollectLanguageFolder; LoadBurst(); } private void LoadBurst() { string location = Assembly.GetExecutingAssembly().Location; location = location.Insert(location.Length - 4, ".Bursted"); if (!File.Exists(location)) { log.error("Missing " + Path.GetFileName(location)); } else if (!BurstRuntime.LoadAdditionalLibrary(location)) { log.error("Failed to load bursted assembly"); } } private static void CollectContentPack(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new Content()); } private void CollectLanguageFolder(List<string> list) { list.Add(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "Language")); } private static void SetBodyIndex() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) bodyIndex = BodyCatalog.FindBodyIndex("ESFBody"); } internal static ProcChainMask RollBleedMask(float bleedChance, CharacterMaster master) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) ProcChainMask result = default(ProcChainMask); if (!Util.CheckRoll(bleedChance, master)) { ((ProcChainMask)(ref result)).AddProc((ProcType)5); } return result; } } } namespace ESF.EntityStates { internal class Afterburn : BaseSkillState { public static string soundLoopBegin; public static string soundLoopStop; [SerializeField] public float burnDuration; private ESFController esf; public override void OnEnter() { ((BaseState)this).OnEnter(); esf = ((EntityState)this).gameObject.GetComponent<ESFController>(); esf.motor.boosting = true; if (NetworkServer.active && ((EntityState)this).characterBody.inventory.GetItemCount(Items.IncreasePrimaryDamage) > 0) { ((EntityState)this).characterBody.AddIncreasePrimaryDamageStack(); } AkSoundEngine.PostEvent(esf.boostSound, ((EntityState)this).gameObject); } public override void OnExit() { esf.motor.boosting = false; AkSoundEngine.PostEvent(esf.boostSoundStop, ((EntityState)this).gameObject); ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { ESFFuel esfFuel = ((FuelSkillDef.InstanceData)(object)((BaseSkillState)this).activatorSkillSlot.skillInstanceData).esfFuel; if (!((BaseSkillState)this).IsKeyDownAuthority() || ((EntityState)this).characterBody.HasBuff(Buffs.DisableAllSkills.buffIndex) || !esfFuel.TryConsumeFuel(esfFuel.baseRechargeTime / burnDuration * Time.deltaTime)) { ((EntityState)this).outer.SetNextStateToMain(); } } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } internal class AimBomb : BaseSkillState { [BurstCompile] private struct CalcPathJob : IJob { private readonly float3 v0; private readonly float3 x0; private readonly float m; private readonly float dt; private NativeArray<float3> pathPositions; internal CalcPathJob(Vector3 initialPosition, Vector3 velocity, float antiGravCoef, NativeArray<Vector3> pathPositions) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) x0 = float3.op_Implicit(initialPosition); v0 = float3.op_Implicit(velocity); m = antiGravCoef; dt = Time.fixedDeltaTime; this.pathPositions = pathPositions.Reinterpret<float3>(); } public void Execute() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) float3 val = v0; float3 zero = float3.zero; float3 val2 = float3.op_Implicit(dt * Physics.gravity); float y = Physics.gravity.y; pathPositions[0] = x0; for (int i = 1; i < pathPositions.Length; i++) { if (val.y < 0f) { zero.y = dt * m * math.max(y, val.y); val += val2 - zero; } else { val += val2; } pathPositions[i] = pathPositions[i - 1] + val * dt; } } } private static readonly ConfigVar<float> bombDaamge = new ConfigVar<float>("bomb", "damage", 22f); public static string bombBayString; [SerializeField] public GameObject projectilePrefab; [SerializeField] public float rearmTime; [SerializeField] public float antiGravCoef; [SerializeField] public static GameObject lineRendererPrefab; private LineRenderer arcLineRenderer; private Transform bombBay; private NativeArray<Vector3> arcPathPositions; private JobHandle arcHandle; public override void OnEnter() { ((BaseState)this).OnEnter(); if (((EntityState)this).isAuthority) { RoR2Application.onLateUpdate += LateUpdate; arcLineRenderer = Object.Instantiate<GameObject>(lineRendererPrefab).GetComponent<LineRenderer>(); bombBay = ((Component)((EntityState)this).modelLocator.modelTransform).GetComponent<ChildLocator>().FindChild(bombBayString); } } public override void OnExit() { if (((EntityState)this).isAuthority) { RoR2Application.onLateUpdate -= LateUpdate; EntityState.Destroy((Object)(object)arcLineRenderer); ((JobHandle)(ref arcHandle)).Complete(); if (arcPathPositions.IsCreated) { arcPathPositions.Dispose(); } } ((EntityState)this).OnExit(); } public override void Update() { //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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).Update(); if (((EntityState)this).isAuthority) { arcPathPositions = new NativeArray<Vector3>(arcLineRenderer.positionCount, (Allocator)3, (NativeArrayOptions)1); arcHandle = IJobExtensions.Schedule<CalcPathJob>(new CalcPathJob(bombBay.position, ((EntityState)this).rigidbody.velocity - ((EntityState)this).transform.up, antiGravCoef, arcPathPositions), default(JobHandle)); } } private void LateUpdate() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) if (arcPathPositions.IsCreated) { ((JobHandle)(ref arcHandle)).Complete(); arcLineRenderer.SetPositions(arcPathPositions); arcPathPositions.Dispose(); } } public override void FixedUpdate() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority()) { ((BaseSkillState)this).activatorSkillSlot.DeductStock(2); ProjectileManager.instance.FireProjectile(new FireProjectileInfo { projectilePrefab = projectilePrefab, position = bombBay.position, rotation = bombBay.rotation, owner = ((EntityState)this).gameObject, damage = ((BaseState)this).damageStat * (float)bombDaamge, force = 100f, crit = ((BaseState)this).RollCrit() }); ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } internal class AirHammer : GenericBulletBaseState { private static readonly ConfigVar<float> bleedChance = new ConfigVar<float>("airham", "bleedChance", 60f); internal static GameObject blastEffectPrefab; [SerializeField] public float blastRadius; private BlastAttack blastAttack; public override void OnEnter() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown ESFController component = ((EntityState)this).gameObject.GetComponent<ESFController>(); base.muzzleName = component.muzzleName; if (((EntityState)this).isAuthority) { blastAttack = new BlastAttack { baseForce = base.force, radius = blastRadius, attacker = ((EntityState)this).gameObject, teamIndex = ((EntityState)this).teamComponent.teamIndex, procCoefficient = 1f, damageColorIndex = (DamageColorIndex)0, falloffModel = (FalloffModel)1, damageType = DamageTypeCombo.GenericPrimary, attackerFiltering = (AttackerFiltering)2 }; } ((GenericBulletBaseState)this).OnEnter(); } public override void ModifyBullet(BulletAttack bulletAttack) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) bulletAttack.hitCallback = new HitCallback(HitCallback); bulletAttack.damageType = DamageTypeCombo.GenericPrimary; } private bool HitCallback(BulletAttack bulletAttack, ref BulletHit hitInfo) { //IL_0025: 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_0046: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) int num; if (Object.op_Implicit((Object)(object)hitInfo.collider)) { num = ((((1 << ((Component)hitInfo.collider).gameObject.layer) & LayerMask.op_Implicit(bulletAttack.stopperMask)) != 0) ? 1 : 0); if (num != 0) { EffectManager.SpawnEffect(blastEffectPrefab, new EffectData { origin = hitInfo.point, scale = blastRadius }, true); blastAttack.baseDamage = (0.25f + 0.75f * Mathf.Clamp01(Mathf.InverseLerp(25f, 5f, hitInfo.distance))) * bulletAttack.damage; blastAttack.crit = bulletAttack.isCrit; blastAttack.procChainMask = Plugin.RollBleedMask(bleedChance, ((EntityState)this).characterBody.master); blastAttack.position = hitInfo.point; blastAttack.Fire(); } } else { num = 0; } return num == 0; } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } internal class Banshee : BaseSkillState { private static readonly ConfigVar<float> damage = new ConfigVar<float>("banshee", "damage", 0.935f); private static readonly ConfigVar<float> baseAttackInterval = new ConfigVar<float>("banshee", "baseAttackInterval", 0.075f); private static readonly ConfigVar<float> bleedChance = new ConfigVar<float>("banshee", "bleedChance", 60f); private static readonly ConfigVar<float> spread = new ConfigVar<float>("banshee", "spread", 4f); private static readonly ConfigVar<float> blastRadius = new ConfigVar<float>("banshee", "radius", 4f); internal static GameObject blastEffectPrefab; internal static GameObject tracerPrefab; public static string soundLoopBegin; public static string soundLoopStop; private float attackInterval; private float attackTimer; private uint playingID; private BulletAttack bulletAttack; private BlastAttack blastAttack; public override void OnEnter() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_00f8: Expected O, but got Unknown //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0109: 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_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references)