Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of RiskUI v1.5.2
RiskUI.dll
Decompiled a week agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HG.Reflection; using HarmonyLib; using JetBrains.Annotations; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.UI; using SimpleJSON; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; using Zio; using ZioConfigFile; using ZioRiskOfOptions; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace MaterialHud; public class BepinScaleController : MonoBehaviour { public string Category; public string Key; public string Description; private ZioConfigEntry<float> _configValue; private void Awake() { _configValue = ConfigHelper.Bind(Category, Key, 100f, Description, null, 300f); ((ZioConfigEntryBase)_configValue).SettingChanged += SettingChanged; } private void OnEnable() { SettingChanged(null, null, arg3: false); } private void OnDestroy() { ((ZioConfigEntryBase)_configValue).SettingChanged -= SettingChanged; } private void SettingChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { //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_0034: Unknown result type (might be due to invalid IL or missing references) float num = _configValue.Value / 100f; Vector3 localScale = ((Component)this).transform.localScale; localScale.y = num; localScale.x = num; ((Component)this).transform.localScale = localScale; } } public class BepinVerticalSpacing : MonoBehaviour { private ZioConfigEntry<float> configEntry; public string desc; public string key; private GridLayoutGroup target; public float Value { get { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return target.spacing.y; } set { //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 spacing = target.spacing; spacing.y = value; target.spacing = spacing; } } private void Awake() { target = ((Component)this).GetComponent<GridLayoutGroup>(); configEntry = ConfigHelper.Bind("Repositioning", key, Value, desc, null, 200f); ((ZioConfigEntryBase)configEntry).SettingChanged += SettingChanged; } private void OnEnable() { SettingChanged(null, null, arg3: false); } private void OnDestroy() { ((ZioConfigEntryBase)configEntry).SettingChanged -= SettingChanged; } private void SettingChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { Value = configEntry.Value; } } public class CloneFillValue : MonoBehaviour { public Image from; private Image _to; private void Awake() { _to = ((Component)this).GetComponent<Image>(); } private void Update() { _to.fillAmount = from.fillAmount; } } public class AddressablePrefabLoader : MonoBehaviour { public string Address; public bool defaultActiveState = true; private void OnValidate() { Awake(); } private void Awake() { //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) Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)Address).WaitForCompletion(), ((Component)this).transform).SetActive(defaultActiveState); } } public class CombatHealthBarLoader : MonoBehaviour { public CombatHealthBarViewer viewer; private static GameObject HealthBar => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/CombatHealthbar.prefab").WaitForCompletion(); public void Start() { viewer.healthBarPrefab = HealthBar; } } public class FieldLoader : MonoBehaviour { public string addressablePath; public string targetFieldName; public MonoBehaviour target; private static readonly MethodInfo LoadAsset = typeof(Addressables).GetMethod("LoadAssetAsync", new Type[1] { typeof(string) }); public void Start() { FieldInfo field = ((object)target).GetType().GetField(targetFieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(field == null)) { object obj = LoadAsset.MakeGenericMethod(field.FieldType).Invoke(null, new object[1] { addressablePath }); object value = obj.GetType().GetMethod("WaitForCompletion", BindingFlags.Instance | BindingFlags.Public).Invoke(obj, null); field.SetValue(target, value); } } } public class NotificationAreaLoader : MonoBehaviour { public NotificationUIController controller; private static GameObject genericNotificationPrefab => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/NotificationPanel2.prefab").WaitForCompletion(); private static GameObject genericTransformationNotificationPrefab => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/GenericTransformationNotificationPanel.prefab").WaitForCompletion(); private static GameObject contagiousVoidTransformationNotificationPrefab => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/UI/VoidTransformationNotificationPanel.prefab").WaitForCompletion(); private static GameObject cloverVoidTransformationNotificationPrefab => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/CloverVoid/CloverVoidTransformationNotificationPanel.prefab").WaitForCompletion(); private static GameObject regeneratingScrapRegenTransformationNotificationPrefab => Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapRegenTransformationNotificationPanel.prefab").WaitForCompletion(); private static GameObject lowerPricedChestsRegenTransformationNotificationPanel => Addressables.LoadAssetAsync<GameObject>((object)"Assets/RoR2/DLC2/Items/LowerPricedChests/LowerPricedChestsRegenTransformationNotificationPanel.prefab").WaitForCompletion(); private static GameObject droneRepairNotificationPanel => Addressables.LoadAssetAsync<GameObject>((object)"Assets/RoR2/DLC3/UI/NotificationPanels/DroneRepairNotificationPanel.prefab").WaitForCompletion(); public void Start() { NotificationUIController val = controller; if (val.genericNotificationPrefab == null) { val.genericNotificationPrefab = genericNotificationPrefab; } val = controller; if (val.genericTransformationNotificationPrefab == null) { val.genericTransformationNotificationPrefab = genericTransformationNotificationPrefab; } val = controller; if (val.contagiousVoidTransformationNotificationPrefab == null) { val.contagiousVoidTransformationNotificationPrefab = contagiousVoidTransformationNotificationPrefab; } val = controller; if (val.cloverVoidTransformationNotificationPrefab == null) { val.cloverVoidTransformationNotificationPrefab = cloverVoidTransformationNotificationPrefab; } val = controller; if (val.regeneratingScrapRegenTransformationNotificationPrefab == null) { val.regeneratingScrapRegenTransformationNotificationPrefab = regeneratingScrapRegenTransformationNotificationPrefab; } val = controller; if (val.LowerPricedChestsRegenTransformationNotificationPrefab == null) { val.LowerPricedChestsRegenTransformationNotificationPrefab = lowerPricedChestsRegenTransformationNotificationPanel; } val = controller; if (val.droneRepairNotificationPrefab == null) { val.droneRepairNotificationPrefab = droneRepairNotificationPanel; } } } public class HideIfFirst : MonoBehaviour { public GameObject target; public int position; private void Awake() { target.SetActive(((Component)this).transform.GetSiblingIndex() != position); } } public class BepinConfigParentManager : MonoBehaviour, IConfigHandler { public Transform[] choices; public string category; public string key; public string description; private ZioConfigEntry<int> _configEntry; public void Awake() { Startup(); ((ZioConfigEntryBase)_configEntry).SettingChanged += ConfigUpdated; } private void OnEnable() { ConfigUpdated(null, null, arg3: false); } public void OnDestroy() { ((ZioConfigEntryBase)_configEntry).SettingChanged -= ConfigUpdated; } private void ConfigUpdated(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { int num = Math.Min(choices.Length - 1, _configEntry.Value); ((Component)this).transform.SetParent(choices[num], false); } public void Startup() { _configEntry = ConfigHelper.Bind(category, key, 0, description, null, choices.Length - 1); } } public class DifficultyTextController : MonoBehaviour, IConfigHandler { public TextMeshProUGUI text; public string[] segmentTokens; public Image ringImage; public Image ringBehind; public RedToColorRemapperIndividual textRecolorer; public RedToColorRemapperIndividual ringRecolorer; public RedToColorRemapperIndividual ringBehindRecolorer; public RedToColorRemapperIndividual timerTextRecolorer; public RedToColorRemapperIndividual timerCentiTextRecolorer; public TextMeshProUGUI monsterLevel; public float levelsPerSegment = 3f; private int _previousSegment = -1; private ZioConfigEntry<bool> _textRecolor; private ZioConfigEntry<bool> _ringLowerRecolor; private ZioConfigEntry<bool> _ringRecolor; private ZioConfigEntry<bool> _timerRecolor; private ZioConfigEntry<bool> _timerCentiRecolor; private ZioConfigEntry<bool> _monsterLevelEnabled; public static readonly Color[] DifficultyColors = (Color[])(object)new Color[9] { new Color(0.28627452f, 0.9490196f, 0.8509804f), new Color(0.2627451f, 83f / 85f, 38f / 85f), new Color(1f, 0.8862745f, 0.4f), new Color(1f, 0.6627451f, 0.2627451f), new Color(1f, 0.4862745f, 12f / 85f), new Color(1f, 0.4f, 0.2627451f), new Color(1f, 0.2627451f, 12f / 85f), new Color(1f, 0.101960786f, 0.101960786f), new Color(0.827451f, 0f, 0f) }; private void Awake() { Startup(); ((ZioConfigEntryBase)_textRecolor).SettingChanged += TextColorerChanged; ((ZioConfigEntryBase)_ringLowerRecolor).SettingChanged += RingLowerColorerChanged; ((ZioConfigEntryBase)_ringRecolor).SettingChanged += RingColorerChanged; ((ZioConfigEntryBase)_timerRecolor).SettingChanged += TimerColorerChanged; ((ZioConfigEntryBase)_timerCentiRecolor).SettingChanged += CentiColorerChanged; ((ZioConfigEntryBase)_monsterLevelEnabled).SettingChanged += MonsterLevelChanged; TextColorerChanged(null, null, arg3: false); RingLowerColorerChanged(null, null, arg3: false); RingColorerChanged(null, null, arg3: false); TimerColorerChanged(null, null, arg3: false); CentiColorerChanged(null, null, arg3: false); MonsterLevelChanged(null, null, arg3: false); } private void MonsterLevelChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((Component)monsterLevel).gameObject.SetActive(_monsterLevelEnabled.Value); } private void OnDestroy() { ((ZioConfigEntryBase)_textRecolor).SettingChanged -= TextColorerChanged; ((ZioConfigEntryBase)_ringLowerRecolor).SettingChanged -= RingLowerColorerChanged; ((ZioConfigEntryBase)_ringRecolor).SettingChanged -= RingColorerChanged; ((ZioConfigEntryBase)_timerRecolor).SettingChanged -= TimerColorerChanged; ((ZioConfigEntryBase)_timerCentiRecolor).SettingChanged -= CentiColorerChanged; } private void RingColorerChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((Behaviour)ringRecolorer).enabled = !_ringRecolor.Value; UpdateColors(); } private void RingLowerColorerChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((Behaviour)ringBehindRecolorer).enabled = !_ringLowerRecolor.Value; UpdateColors(); } private void TextColorerChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((Behaviour)textRecolorer).enabled = !_textRecolor.Value; UpdateColors(); } private void CentiColorerChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((Behaviour)timerCentiTextRecolorer).enabled = !_timerCentiRecolor.Value; UpdateColors(); } private void TimerColorerChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((Behaviour)timerTextRecolorer).enabled = !_timerRecolor.Value; UpdateColors(); } public void Update() { if (Object.op_Implicit((Object)(object)Run.instance)) { float num = Run.instance.ambientLevel - 1f; float num2 = num / levelsPerSegment; int num3 = Mathf.FloorToInt(num2); float fillAmount = num2 - (float)num3; if (num3 >= segmentTokens.Length) { fillAmount = 1f; } if (_monsterLevelEnabled.Value) { ((TMP_Text)monsterLevel).text = Language.GetStringFormatted("AMBIENT_LEVEL_DISPLAY_FORMAT", new object[1] { num + 1f }); } int num4 = Math.Min(segmentTokens.Length - 1, num3); if (num4 != _previousSegment) { ((TMP_Text)text).text = Language.GetString(segmentTokens[num4]).ToUpper(); _previousSegment = num4; UpdateColors(); } ringImage.fillAmount = fillAmount; } } private void UpdateColors() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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_0043: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_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) if (Object.op_Implicit((Object)(object)Run.instance)) { int num = Math.Max(0, _previousSegment); Color color = DifficultyColors[num]; if (_ringRecolor.Value) { ((Graphic)(Image)ringRecolorer.target).color = color; } if (_ringLowerRecolor.Value) { ((Graphic)(Image)ringBehindRecolorer.target).color = color; } if (_textRecolor.Value) { ((Graphic)(TextMeshProUGUI)textRecolorer.target).color = color; } if (_timerRecolor.Value) { ((Graphic)(TextMeshProUGUI)timerTextRecolorer.target).color = color; } if (_timerCentiRecolor.Value) { ((Graphic)(TextMeshProUGUI)timerCentiTextRecolorer.target).color = color; } } } public void Startup() { _textRecolor = ConfigHelper.Bind("General", "Difficulty Text Colored Per Difficulty", defaultValue: false, "Should the difficulty text be recolored based on current difficulty."); _ringLowerRecolor = ConfigHelper.Bind("General", "Difficulty Lower Ring Colored Per Difficulty", defaultValue: false, "Should the difficulty lower ring be recolored based on current difficulty."); _ringRecolor = ConfigHelper.Bind("General", "Difficulty Upper Ring Colored Per Difficulty", defaultValue: false, "Should the difficulty upper ring be recolored based on current difficulty."); _timerRecolor = ConfigHelper.Bind("General", "Timer Text Colored Per Difficulty", defaultValue: false, "Should the timer text be recolored based on current difficulty."); _timerCentiRecolor = ConfigHelper.Bind("General", "Centisecond Timer Text Colored Per Difficulty", defaultValue: false, "Should the timer centisecond text be recolored based on current difficulty."); _monsterLevelEnabled = ConfigHelper.Bind("General", "Monster Level Text Enable", defaultValue: false, "Should the monster level text be displayed."); } } public class HealthbarRecolor : MonoBehaviour, IConfigHandler { public class HealthBarConfig { private static readonly Type StyleType = typeof(HealthBarStyle); public HealthBarStyle style; private readonly FieldInfo _fieldInfo; private ZioConfigEntry<Color> _configValue; private bool rainbow; public Color Color { get { //IL_0016: Unknown result type (might be due to invalid IL or missing references) return ((BarStyle)_fieldInfo.GetValue(style)).baseColor; } set { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) BarStyle val = (BarStyle)_fieldInfo.GetValue(style); val.baseColor = value; _fieldInfo.SetValue(style, val); } } public HealthBarConfig(string category, string key, string desc, string field, HealthBarStyle styleIn, bool b) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) style = styleIn; _fieldInfo = StyleType.GetField(field, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _configValue = ConfigHelper.Bind<Color>(category, key, Color, desc); if (b) { ((ZioConfigEntryBase)_configValue).SettingChanged += ConfigChanged; } } public void Destroy() { ((ZioConfigEntryBase)_configValue).SettingChanged -= ConfigChanged; } public void ConfigChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { //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_0022: Unknown result type (might be due to invalid IL or missing references) rainbow = _configValue.Value == Color.clear; Color = _configValue.Value; } public void Update(Color color) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) if (rainbow) { Color = color; } } } public string whichBar = "Player HealthBar"; public HealthBar healthBar; private readonly Dictionary<string, HealthBarConfig> entries = new Dictionary<string, HealthBarConfig>(); public void Awake() { Startup(b: true); OnEnable(); } private void OnEnable() { foreach (KeyValuePair<string, HealthBarConfig> entry in entries) { entry.Value.ConfigChanged(null, null, arg3: false); } } private void SetupConfig(string key, string desc, HealthBarStyle style, string field, bool b) { string key2 = "Recoloring " + whichBar + key; HealthBarConfig value = new HealthBarConfig("Recoloring " + whichBar, key, desc, field, style, b); entries[key2] = value; } private void OnDestroy() { foreach (KeyValuePair<string, HealthBarConfig> entry in entries) { entry.Value.Destroy(); } } private void Update() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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) Color color = Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f); foreach (KeyValuePair<string, HealthBarConfig> entry in entries) { entry.Value.Update(color); } } public void Startup(bool b) { HealthBarStyle style = healthBar.style; SetupConfig("Trailing Under", "When hurt the bit that is slow to catch up.", style, "trailingUnderHealthBarStyle", b); SetupConfig("Instant Health", "From medkits, etc.", style, "instantHealthBarStyle", b); SetupConfig("Trailing Over", "The general color of the healthbar.", style, "trailingOverHealthBarStyle", b); SetupConfig("Shield", "Shield", style, "shieldBarStyle", b); SetupConfig("Curse", "Curse refers to having Shaped glass / anything that temporarily lowers max HP & normally leaves you w/ the white outlined section.", style, "curseBarStyle", b); SetupConfig("Barrier", "Barrier", style, "barrierBarStyle", b); SetupConfig("Flash", "?", style, "flashBarStyle", b); SetupConfig("Cull", "Cull refers to things like guillotine / freeze, and is only seen when an allied minion (turret / zoea / drone, etc..) is hit by a Glacial Elite's death effect radius. Cull can't be applied to players however.", style, "cullBarStyle", b); SetupConfig("Low Health Over", "Color for delicate watches and things like that.", style, "lowHealthOverStyle", b); SetupConfig("Low Health Under", "?", style, "lowHealthUnderStyle", b); SetupConfig("Magnetic", "A unused??? healthbar style.", style, "magneticStyle", b); SetupConfig("OSP", "One shot protection color.", style, "ospStyle", b); } public void Startup() { Startup(b: false); } } public class HideFromBepinConfig : MonoBehaviour, IConfigHandler { public GameObject target; public string configName; public string configDesc; public string configCategory; public bool defaultValue; private ZioConfigEntry<bool> _configEntry; public void Awake() { Startup(); ((ZioConfigEntryBase)_configEntry).SettingChanged += SettingChanged; SettingChanged(); } public void OnDestroy() { ((ZioConfigEntryBase)_configEntry).SettingChanged -= SettingChanged; } private void SettingChanged(ZioConfigEntryBase config, object oldValue, bool ignoreSave) { SettingChanged(); } private void SettingChanged() { target.SetActive(_configEntry.Value); } public void Startup() { _configEntry = ConfigHelper.Bind(configCategory, configName, defaultValue, configDesc); } } public interface IConfigHandler { void Startup(); } public class RedToColorRemapperIndividual : MonoBehaviour, IConfigHandler { public string configKey; public string configDesc; private Color defaultColor; private ZioConfigEntry<Color> _configEntry; public MonoBehaviour target; private bool _rainbow; public void Startup() { //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_0019: Unknown result type (might be due to invalid IL or missing references) defaultColor = GetColor(); _configEntry = ConfigHelper.Bind<Color>("Recoloring", configKey, defaultColor, configDesc); } public void Awake() { Startup(); ((ZioConfigEntryBase)_configEntry).SettingChanged += UpdateColor; } private void OnEnable() { UpdateColor(); } private void OnDestroy() { ((ZioConfigEntryBase)_configEntry).SettingChanged -= UpdateColor; } private void UpdateColor(ZioConfigEntryBase config, object oldValue, bool ignoreSave) { UpdateColor(); } private void SetColor(Color color) { //IL_0027: 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_0041: 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) MonoBehaviour val = target; TextMeshProUGUI val2 = (TextMeshProUGUI)(object)((val is TextMeshProUGUI) ? val : null); if (val2 == null) { Image val3 = (Image)(object)((val is Image) ? val : null); if (val3 == null) { HealthBar val4 = (HealthBar)(object)((val is HealthBar) ? val : null); if (val4 != null) { val4.style.trailingOverHealthBarStyle.baseColor = color; } } else { ((Graphic)val3).color = color; } } else { ((Graphic)val2).color = color; } } private Color GetColor() { //IL_0028: 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_0040: 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) MonoBehaviour val = target; TextMeshProUGUI val2 = (TextMeshProUGUI)(object)((val is TextMeshProUGUI) ? val : null); if (val2 == null) { Image val3 = (Image)(object)((val is Image) ? val : null); if (val3 == null) { return ((HealthBar)(((val is HealthBar) ? val : null)?)).style.trailingOverHealthBarStyle.baseColor ?? Color.black; } return ((Graphic)val3).color; } return ((Graphic)val2).color; } private void UpdateColor() { //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_0026: Unknown result type (might be due to invalid IL or missing references) if (_configEntry.Value == Color.clear) { _rainbow = true; } else { SetColor(_configEntry.Value); } } private void Update() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (_rainbow) { SetColor(Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f)); } } } public class TextSizeBepin : MonoBehaviour, IConfigHandler { public string Key; public string Description; public TextMeshProUGUI Target; private ZioConfigEntry<float> _configEntry; public void Awake() { Startup(); ((ZioConfigEntryBase)_configEntry).SettingChanged += SettingChanged; } private void OnEnable() { SettingChanged(null, null, arg3: false); } private void OnDestroy() { ((ZioConfigEntryBase)_configEntry).SettingChanged -= SettingChanged; } private void SettingChanged(ZioConfigEntryBase zioConfigEntryBase, object o, bool arg3) { ((TMP_Text)Target).fontSize = _configEntry.Value; } public void Startup() { _configEntry = ConfigHelper.Bind("Rescaling", Key, ((TMP_Text)Target).fontSize, Description, null, 100f); } } public class MaterialEquipmentIcon : MonoBehaviour { public EquipmentIcon icon; public Image onCooldown; public Image mask; public TextMeshProUGUI stockText; public GameObject keyText; public void Update() { //IL_006f: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //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_00a1: 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) if (!icon.hasEquipment) { ((Component)((TMP_Text)stockText).transform.parent).gameObject.SetActive(false); mask.fillAmount = 0f; ((Behaviour)onCooldown).enabled = false; return; } EquipmentState val = (icon.displayAlternateEquipment ? icon.targetInventory.alternateEquipmentState : icon.targetInventory.currentEquipmentState); FixedTimeStamp now = FixedTimeStamp.now; FixedTimeStamp chargeFinishTime = val.chargeFinishTime; ((Behaviour)onCooldown).enabled = ((DisplayData)(ref icon.currentDisplayData)).showCooldown; float num = Mathf.Max(0f, chargeFinishTime - now); if (float.IsPositiveInfinity(num)) { num = 0f; } float cooldown = val.equipmentDef.cooldown; cooldown *= icon.targetInventory.CalculateEquipmentCooldownScale(); mask.fillAmount = num / cooldown; ((Component)((TMP_Text)stockText).transform.parent).gameObject.SetActive(icon.currentDisplayData.maxStock > 1); } } [RequireComponent(typeof(RectTransform))] public class MaterialItemIcon : MonoBehaviour { public InspectPanelLocator inspectPanelLocator; public UserProfile userProfile; public RawImage glowImage; public RawImage image; public TextMeshProUGUI stackText; public TooltipProvider tooltipProvider; public ItemIndex itemIndex; public int itemCount; public Action OnItemClicked; public RectTransform rectTransform { get; set; } public InspectPanelController inspectPanel { get { if (Object.op_Implicit((Object)(object)inspectPanelLocator)) { return inspectPanelLocator.InspectPanel; } return null; } } public void Awake() { CacheRectTransform(); inspectPanelLocator = ((Component)this).GetComponent<InspectPanelLocator>(); userProfile = ((Component)this).GetComponentInParent<HUD>().localUserViewer.userProfile; } public void CacheRectTransform() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown if (rectTransform == null) { rectTransform = (RectTransform)((Component)this).transform; } } public void SetItemIndex(ItemIndex newItemIndex, int newItemCount) { //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_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0177: 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_00ed: 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_010a: Unknown result type (might be due to invalid IL or missing references) if (itemIndex == newItemIndex && itemCount == newItemCount) { return; } itemIndex = newItemIndex; itemCount = newItemCount; string titleToken = ""; string bodyToken = ""; Color val = Color.white; Color bodyColor = default(Color); ((Color)(ref bodyColor))..ctor(0.6f, 0.6f, 0.6f, 1f); ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex); if ((Object)(object)itemDef != (Object)null) { image.texture = itemDef.pickupIconTexture; if (itemCount > 1) { ((TMP_Text)stackText).text = "x" + itemCount; ((Behaviour)stackText).enabled = true; } else { ((TMP_Text)stackText).text = ""; ((Behaviour)stackText).enabled = false; } titleToken = itemDef.nameToken; bodyToken = itemDef.pickupToken; val = Color32.op_Implicit(ColorCatalog.GetColor(Object.op_Implicit((Object)(object)itemDef._itemTierDef) ? itemDef._itemTierDef.darkColorIndex : itemDef.darkColorIndex)); } if (Object.op_Implicit((Object)(object)glowImage)) { ((Graphic)glowImage).color = new Color(val.r, val.g, val.b, 0.75f); } if (Object.op_Implicit((Object)(object)tooltipProvider)) { tooltipProvider.titleToken = titleToken; tooltipProvider.bodyToken = bodyToken; tooltipProvider.titleColor = val; tooltipProvider.bodyColor = bodyColor; } } public void ItemClicked() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!userProfile.useInspectFeature) { return; } ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex); if ((Object)(object)itemDef != (Object)null) { if (Object.op_Implicit((Object)(object)inspectPanel)) { inspectPanel.Show(InspectInfo.op_Implicit(itemDef), false, (UserProfile)null); } OnItemClicked?.Invoke(); } } } public class MaterialSkillIcon : MonoBehaviour { public Image onCooldown; public SkillIcon icon; public Image mask; public TextMeshProUGUI stockText; private void Update() { if (Object.op_Implicit((Object)(object)icon.targetSkill)) { float cooldownRemaining = icon.targetSkill.cooldownRemaining; float num = icon.targetSkill.CalculateFinalRechargeInterval(); bool flag = num >= float.Epsilon; mask.fillAmount = (flag ? (cooldownRemaining / num) : 0f); ((Behaviour)onCooldown).enabled = flag && icon.targetSkill.stock <= 0 && mask.fillAmount > float.Epsilon; if (icon.targetSkill.maxStock > 1) { ((Component)((TMP_Text)stockText).transform.parent).gameObject.SetActive(true); } else { ((Component)((TMP_Text)stockText).transform.parent).gameObject.SetActive(false); } } } } public static class ConfigHelper { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action<ZioConfigEntryBase, object, bool> <>9__8_0; public static UnityAction <>9__10_0; public static UnityAction <>9__10_1; internal void <get_SelectedProfile>b__8_0(ZioConfigEntryBase _, object profile, bool _) { SelectedProfile = (int)profile; } internal void <MakeSelectedProfileOptions>b__10_0() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown configFiles.Add(new ZioConfigFile(whichFile.FileSystem, UPath.op_Implicit($"{UPathExtensions.GetDirectory(whichFile.FilePath)}/RiskUI/{default(Guid)}"), true, whichFile.OwnerMetadata)); option.max = configFiles.Count - 1; } internal void <MakeSelectedProfileOptions>b__10_1() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) whichFile.FileSystem.DeleteFile(configFiles[SelectedProfile].FilePath); configFiles.RemoveAt(SelectedProfile); option.max = configFiles.Count - 1; } } public static Dictionary<string, ZioConfigEntryBase> Entries = new Dictionary<string, ZioConfigEntryBase>(); private static ZioConfigEntry<int> _selectedProfile; private static IntSliderConfig option; public static ZioConfigFile whichFile => RiskUIPlugin.ConfigFile; public static List<ZioConfigFile> configFiles => RiskUIPlugin.ConfigFiles; public static int SelectedProfile { get { if (_selectedProfile != null) { return _selectedProfile.Value; } _selectedProfile = whichFile.Bind<int>("Profiles", "Selected Profile", 0, "Currently selected profile."); ((ZioConfigEntryBase)_selectedProfile).SettingChanged += delegate(ZioConfigEntryBase _, object profile, bool _) { SelectedProfile = (int)profile; }; if (RiskUIPlugin.RiskOfOptionsEnabled) { MakeSelectedProfileOptions(); } return _selectedProfile.Value; } set { _selectedProfile.Value = value; foreach (KeyValuePair<ConfigDefinition, ZioConfigEntryBase> item in whichFile) { if (!(item.Key == ((ZioConfigEntryBase)_selectedProfile).Definition)) { ApplyConfigProfile(item.Value); } } } } private static void MakeSelectedProfileOptions() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown option = new IntSliderConfig { max = configFiles.Count - 1 }; ModSettingsManager.AddOption((BaseOption)new ZioIntSliderOption(_selectedProfile, option)); object obj = <>c.<>9__10_0; if (obj == null) { UnityAction val = delegate { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown configFiles.Add(new ZioConfigFile(whichFile.FileSystem, UPath.op_Implicit($"{UPathExtensions.GetDirectory(whichFile.FilePath)}/RiskUI/{default(Guid)}"), true, whichFile.OwnerMetadata)); option.max = configFiles.Count - 1; }; <>c.<>9__10_0 = val; obj = (object)val; } ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Add Profile", "Profiles", (UnityAction)obj)); object obj2 = <>c.<>9__10_1; if (obj2 == null) { UnityAction val2 = delegate { //IL_0019: Unknown result type (might be due to invalid IL or missing references) whichFile.FileSystem.DeleteFile(configFiles[SelectedProfile].FilePath); configFiles.RemoveAt(SelectedProfile); option.max = configFiles.Count - 1; }; <>c.<>9__10_1 = val2; obj2 = (object)val2; } ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Delete Profile", "Profiles", (UnityAction)obj2)); } public static ZioConfigEntry<T> Bind<T>(string category, string key, T defaultValue, string desc, [CanBeNull] Action<ZioConfigEntry<T>> firstSetupCallback = null, object riskOfOptionsExtra = null) { string key2 = category + key; if (!Entries.ContainsKey(key2)) { ZioConfigEntry<T> val = RiskUIPlugin.ConfigFile.Bind<T>(category, key, defaultValue, desc); ((ZioConfigEntryBase)val).SettingChanged += UpdateSelectedProfile; foreach (ZioConfigFile configFile in RiskUIPlugin.ConfigFiles) { configFile.Bind<T>(category, key, defaultValue, desc); } ApplyConfigProfile((ZioConfigEntryBase)(object)val); if (RiskUIPlugin.RiskOfOptionsEnabled) { FillRiskOfOptions<T>(val, riskOfOptionsExtra); } Entries.Add(key2, (ZioConfigEntryBase)(object)val); firstSetupCallback?.Invoke(val); } return (ZioConfigEntry<T>)(object)Entries[key2]; } private static void UpdateSelectedProfile(ZioConfigEntryBase arg1, object arg2, bool arg3) { configFiles[SelectedProfile][arg1.Definition].BoxedValue = arg1.BoxedValue; } private static void ApplyConfigProfile(ZioConfigEntryBase configEntry) { if (RiskUIPlugin.NeverBeforeInitialized) { UpdateSelectedProfile(configEntry, null, arg3: false); } else { configEntry.BoxedValue = configFiles[SelectedProfile][configEntry.Definition].BoxedValue; } } private static void FillRiskOfOptions<T>(ZioConfigEntry<T> configEntry, object riskOfOptionsExtra = null) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //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_0081: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown if (!(configEntry is ZioConfigEntry<string> val)) { if (!(configEntry is ZioConfigEntry<bool> val2)) { if (!(configEntry is ZioConfigEntry<int> val3)) { if (!(configEntry is ZioConfigEntry<float> val4)) { if (configEntry is ZioConfigEntry<Color> val5) { ModSettingsManager.AddOption((BaseOption)new ZioColorOption(val5)); } } else { ModSettingsManager.AddOption((BaseOption)new ZioSliderOption(val4, new SliderConfig { max = (float)riskOfOptionsExtra })); } } else { ModSettingsManager.AddOption((BaseOption)new ZioIntSliderOption(val3, new IntSliderConfig { max = (int)riskOfOptionsExtra })); } } else { ModSettingsManager.AddOption((BaseOption)new ZioCheckBoxOption(val2)); } } else { ModSettingsManager.AddOption((BaseOption)new ZioStringInputFieldOption(val)); } } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [HarmonyPatch] public static class NewHarmonyPatches { [HarmonyILManipulator] [HarmonyPatch(typeof(CameraRigController), "UpdateHUD")] public static void ReplaceHUD(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num = default(int); MethodReference val2 = default(MethodReference); if (val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val2), (Instruction x) => ILPatternMatchingExt.MatchStsfld(x, typeof(CameraRigController), "HudPrefab") })) { val.Emit(OpCodes.Call, (MethodBase)AccessTools.Method(typeof(RiskUIPlugin), "CreateHud", (Type[])null, (Type[])null)); val.RemoveRange(2); if (val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(CameraRigController), "HudPrefab") })) { val.Emit(OpCodes.Call, (MethodBase)AccessTools.Method(typeof(RiskUIPlugin), "CreateHud", (Type[])null, (Type[])null)); val.Remove(); } else { Log.Error("CameraRigController.UpdateHUD # 2"); } } else { Log.Error("CameraRigController.UpdateHUD # 1"); } } [HarmonyILManipulator] [HarmonyPatch(typeof(HealthBar), "UpdateBarInfos")] public static void FixInfusionColor(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(HealthBar), "voidPanelColor") })) { val.Remove(); val.EmitDelegate<Func<Color>>((Func<Color>)delegate { //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_000c: 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_0038: Unknown result type (might be due to invalid IL or missing references) Color value3 = RiskUIPlugin.VoidColor.Value; return (value3 == Color.clear) ? Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f) : value3; }); } else { Log.Error("HealthBar.UpdateBarInfos # 1"); } if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(HealthBar), "infusionPanelColor") })) { val.Remove(); val.EmitDelegate<Func<Color>>((Func<Color>)delegate { //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_000c: 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_0038: Unknown result type (might be due to invalid IL or missing references) Color value2 = RiskUIPlugin.InfusionColor.Value; return (value2 == Color.clear) ? Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f) : value2; }); } else { Log.Error("HealthBar.UpdateBarInfos # 2"); } if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(HealthBar), "voidShieldsColor") })) { val.Remove(); val.EmitDelegate<Func<Color>>((Func<Color>)delegate { //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_000c: 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_0038: Unknown result type (might be due to invalid IL or missing references) Color value = RiskUIPlugin.VoidShieldColor.Value; return (value == Color.clear) ? Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f) : value; }); } else { Log.Error("HealthBar.UpdateBarInfos # 3"); } } [HarmonyPrefix] [HarmonyPatch(typeof(Run), "InstantiateUi")] public static bool OverwriteTracker(Run __instance, Transform uiRoot, ref GameObject __result) { if (!Object.op_Implicit((Object)(object)uiRoot)) { return true; } string nameToken = __instance.nameToken; if (nameToken == "ECLIPSE_GAMEMODE_NAME" || nameToken == "GAMEMODE_CLASSIC_RUN_NAME") { __result = Object.Instantiate<GameObject>(RiskUIPlugin.CreateClassicRunHud(), uiRoot); __instance.uiInstances.Add(__result); return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(DifficultyDef), "GetIconSprite")] public static bool SwapIcon(DifficultyDef __instance, ref Sprite __result) { if (__instance.nameToken == null || !RiskUIPlugin.DifficultyIconMap.ContainsKey(__instance.nameToken)) { return true; } __result = RiskUIPlugin.DifficultyIconMap[__instance.nameToken]; return false; } [HarmonyILManipulator] [HarmonyPatch(typeof(AllyCardManager), "Awake")] public static void ReplaceAllyCards(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "Prefabs/UI/AllyCard") })) { val.RemoveRange(2); val.Emit(OpCodes.Call, (MethodBase)AccessTools.Method(typeof(RiskUIPlugin), "CreateAllyCard", (Type[])null, (Type[])null)); } else { Log.Error("AllyCardManager.Awake"); } } [HarmonyPostfix] [HarmonyPatch(typeof(EnemyInfoPanel), "Init")] public static void ChangeMonsterInventory() { EnemyInfoPanel.panelPrefab = RiskUIPlugin.EnemyInfoPanel; } [HarmonyPostfix] [HarmonyPatch(typeof(HUD), "DeactivateScoreboard")] public static void Unselect(HUD __instance) { ScoreboardController val = default(ScoreboardController); if (Object.op_Implicit((Object)(object)__instance.scoreboardPanel) && __instance.scoreboardPanel.TryGetComponent<ScoreboardController>(ref val) && Object.op_Implicit((Object)(object)val.eventSystem)) { ((EventSystem)val.eventSystem).SetSelectedGameObject((GameObject)null); val.eventSystem.currentSelectedButton = null; } } } internal static class Utils { public static T TryAddComponent<T>(this GameObject go) where T : Component { T result = default(T); if (go.TryGetComponent<T>(ref result)) { return result; } return go.AddComponent<T>(); } public static void RemoveComponent<T>(this GameObject go) where T : Component { T val = default(T); if (go.TryGetComponent<T>(ref val)) { Object.Destroy((Object)(object)val); } } public static void RemoveComponents<T>(this GameObject go) where T : Component { T[] components = go.GetComponents<T>(); for (int i = 0; i < components.Length; i++) { Object.Destroy((Object)(object)components[i]); } } public static T GetCopyOf<T>(this Component comp, T other) where T : Component { Type type = ((object)comp).GetType(); if (type != ((object)other).GetType()) { return default(T); } BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo[] properties = type.GetProperties(bindingAttr); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.CanWrite) { try { propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null); } catch { } } } FieldInfo[] fields = type.GetFields(bindingAttr); foreach (FieldInfo fieldInfo in fields) { fieldInfo.SetValue(comp, fieldInfo.GetValue(other)); } return (T)(object)((comp is T) ? comp : null); } public static T GetCopyOf<T>(this ScriptableObject comp, T other) where T : ScriptableObject { Type type = ((object)comp).GetType(); if (type != ((object)other).GetType()) { return default(T); } BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo[] properties = type.GetProperties(bindingAttr); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.CanWrite) { try { propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null); } catch { } } } FieldInfo[] fields = type.GetFields(bindingAttr); foreach (FieldInfo fieldInfo in fields) { fieldInfo.SetValue(comp, fieldInfo.GetValue(other)); } return (T)(object)((comp is T) ? comp : null); } public static T AddComponentCopy<T>(this GameObject go, T toAdd) where T : Component { return ((Component)(object)go.AddComponent<T>()).GetCopyOf(toAdd); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("bubbet.riskui", "Risk UI", "1.5.2")] public class RiskUIPlugin : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static UnityAction <>9__26_0; public static UnityAction <>9__26_1; internal void <MakeRiskofOptions>b__26_0() { Application.OpenURL("https://github.com/Bubbet/Risk-Of-Rain-Mods/issues/new"); } internal void <MakeRiskofOptions>b__26_1() { Application.OpenURL("https://ko-fi.com/bubbet"); } } public static GameObject _newHud; public static GameObject _newClassicRunHud; public static GameObject _newSimulacrumHud; public static GameObject _allyCard; public static GameObject BaseWaveUI; public static GameObject EnemyInfoPanel; public static readonly Dictionary<string, Sprite> DifficultyIconMap = new Dictionary<string, Sprite>(); public static ZioConfigEntry<Color> VoidColor; public static ZioConfigEntry<Color> InfusionColor; public static ZioConfigEntry<Color> VoidShieldColor; public static ZioConfigFile ConfigFile; private string description; private Sprite icon; public static ZioConfigEntry<bool> Enabled; private Harmony harm; private PatchClassProcessor patcher; public static readonly List<ZioConfigFile> ConfigFiles = new List<ZioConfigFile>(); public static bool NeverBeforeInitialized; public static bool RiskOfOptionsEnabled => Chainloader.PluginInfos.ContainsKey("bubbet.zioriskofoptions"); public void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); LoadAssets(); harm = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); patcher = new PatchClassProcessor(harm, typeof(NewHarmonyPatches)); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad)); } private void LoadAssets() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); try { JSONNode val = JSON.Parse(File.OpenText(Path.Combine(directoryName, "manifest.json")).ReadToEnd()); description = ((object)val["description"]).ToString(); byte[] array = File.ReadAllBytes(Path.Combine(directoryName, "icon.png")); Texture2D val2 = new Texture2D(256, 256); ImageConversion.LoadImage(val2, array); icon = Sprite.Create(val2, new Rect(0f, 0f, 256f, 256f), new Vector2(0.5f, 0.5f)); } catch { } AssetBundle val3 = AssetBundle.LoadFromFile(Path.Combine(directoryName, "riskui")); _newHud = val3.LoadAsset<GameObject>("RiskUI"); _newClassicRunHud = val3.LoadAsset<GameObject>("MaterialClassicRunInfoHudPanel"); _newSimulacrumHud = val3.LoadAsset<GameObject>("MaterialSimulacrum"); _allyCard = val3.LoadAsset<GameObject>("MaterialAllyCard"); BaseWaveUI = val3.LoadAsset<GameObject>("MaterialDefaultWaveUI"); EnemyInfoPanel = val3.LoadAsset<GameObject>("MaterialMonsterItemInventory"); CreateIconMap(val3); } private void CreateIconMap(AssetBundle assetBundle) { DifficultyIconMap["SUNNY_NAME"] = assetBundle.LoadAsset<Sprite>("Sunny (More Difficulties)"); DifficultyIconMap["RAINSOON_NAME"] = assetBundle.LoadAsset<Sprite>("ThunderStorm (More Difficulties)"); DifficultyIconMap["HIFU_DIFFICULTY_NAME"] = assetBundle.LoadAsset<Sprite>("Inferno (Inferno)"); DifficultyIconMap["DIFFICULTY_CONFIGURABLEDIFFICULTYMOD_NAME"] = assetBundle.LoadAsset<Sprite>("Pluviculture (ConfigurableDifficulty)"); DifficultyIconMap["Mico27_DIFFICULTY_TROPICALSTORM_NAME"] = assetBundle.LoadAsset<Sprite>("Tropical Storm (Tropical Storm)"); DifficultyIconMap["GROOVYDIFFICULTY_4_NAME"] = assetBundle.LoadAsset<Sprite>("Deluge (UntitledDifficultyMod)"); DifficultyIconMap["CALYPSO_NAME"] = assetBundle.LoadAsset<Sprite>("Calypso (More Difficulties)"); DifficultyIconMap["GROOVYDIFFICULTY_5_NAME"] = assetBundle.LoadAsset<Sprite>("Charybdis (UntitledDifficultyMod)"); DifficultyIconMap["TEMPEST_NAME"] = assetBundle.LoadAsset<Sprite>("Tempest (More Difficulties)"); DifficultyIconMap["SCYLLA_NAME"] = assetBundle.LoadAsset<Sprite>("Armageddon (More Difficulties)"); DifficultyIconMap["DIFFICULTY_EASY_NAME"] = assetBundle.LoadAsset<Sprite>("Drizzle"); DifficultyIconMap["DIFFICULTY_NORMAL_NAME"] = assetBundle.LoadAsset<Sprite>("Rainstorm"); DifficultyIconMap["DIFFICULTY_HARD_NAME"] = assetBundle.LoadAsset<Sprite>("Monsoon"); } private void OnLoad() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0025: 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_003d: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown ConfigFile = new ZioConfigFile(RoR2Application.cloudStorage, UPath.op_Implicit("/RiskUI.cfg"), true, (BaseUnityPlugin)(object)this); foreach (UPath item in FileSystemExtensions.EnumeratePaths((IFileSystem)(object)RoR2Application.cloudStorage, new UPath("/RiskUI/"))) { ConfigFiles.Add(new ZioConfigFile(RoR2Application.cloudStorage, item, true, (BaseUnityPlugin)(object)this)); } if (ConfigFiles.Count < 1) { NeverBeforeInitialized = true; ConfigFiles.Add(new ZioConfigFile(RoR2Application.cloudStorage, UPath.op_Implicit($"/RiskUI/{default(Guid)}"), true, (BaseUnityPlugin)(object)this)); } Enabled = ConfigHelper.Bind("General", "Enabled", defaultValue: true, "Should the hud be replaced. Only updates on hud awake, so stage change and starting new runs."); ((ZioConfigEntryBase)Enabled).SettingChanged += EnabledChanged; EnabledChanged(); VoidColor = ConfigHelper.Bind<Color>("Recoloring Player HealthBar", "Void Color", Color32.op_Implicit(new Color32((byte)181, (byte)100, (byte)189, byte.MaxValue)), "Color of void, Void Fiends health bar."); InfusionColor = ConfigHelper.Bind<Color>("Recoloring Player HealthBar", "Infusion Color", Color32.op_Implicit(new Color32((byte)221, (byte)44, (byte)38, byte.MaxValue)), "Color of infusion."); VoidShieldColor = ConfigHelper.Bind<Color>("Recoloring Player HealthBar", "Void Shield Color", Color32.op_Implicit(new Color32((byte)229, (byte)127, (byte)240, byte.MaxValue)), "Color of void shield."); if (RiskOfOptionsEnabled) { MakeRiskofOptions(); } IConfigHandler[] componentsInChildren = _newHud.GetComponentsInChildren<IConfigHandler>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].Startup(); } } private void EnabledChanged() { if (Enabled.Value) { patcher.Patch(); } else { harm.UnpatchSelf(); } } private void EnabledChanged(ZioConfigEntryBase arg1, object arg2, bool arg3) { EnabledChanged(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private void MakeRiskofOptions() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)icon)) { ModSettingsManager.SetModIcon(icon); } if (description != null) { ModSettingsManager.SetModDescription(description); } object obj = <>c.<>9__26_0; if (obj == null) { UnityAction val = delegate { Application.OpenURL("https://github.com/Bubbet/Risk-Of-Rain-Mods/issues/new"); }; <>c.<>9__26_0 = val; obj = (object)val; } ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Report An Issue", "General", "If you find a bug in the mod, reporting an issue is the best way to ensure it gets fixed.", "Open Link", (UnityAction)obj)); object obj2 = <>c.<>9__26_1; if (obj2 == null) { UnityAction val2 = delegate { Application.OpenURL("https://ko-fi.com/bubbet"); }; <>c.<>9__26_1 = val2; obj2 = (object)val2; } ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Donate to Bubbet", "General", "Donate to the programmer of RiskUI.", "Open Link", (UnityAction)obj2)); } public static GameObject CreateHud() { return _newHud; } public static GameObject CreateClassicRunHud() { return _newClassicRunHud; } public static GameObject CreateSimulcrum() { return _newSimulacrumHud; } public static GameObject CreateAllyCard() { return _allyCard; } }