Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ForgeControl v0.1.0
despr0grammer.ForgeControl.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.Reflection; using System.Runtime.CompilerServices; using System.Text; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.EventSystems; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace despr0grammer.ForgeControl { internal enum EndReason { Done, Broke, NoIdols, TooMany, Cancelled, CouldNotStart, NoProgress, Missing, Error } internal sealed class Attempt { internal ItemData Item; internal int Quality; internal Vector2i Pos; internal string Name; internal bool Tweaked; internal SharedData Idol; internal float OldUpgradeChance; internal float OldBreakChance; } internal static class Chain { private const float DelayBetweenAttempts = 0.9f; private static UpgradeAction _action; private static FailureMode _failure; private static bool _upgrader; private static string _name; private static string _displayName; private static Vector2i _pos; private static int _startQuality; private static int _lastQuality; private static int _target; private static int _remaining; private static int _attempts; private static int _spent; private static int _held; private static bool _broke; private static bool _noProgress; private static bool _pending; private static EndReason _pressFailure = EndReason.CouldNotStart; private static float _nextAt; private static bool _reported; internal static bool Active { get; private set; } internal static bool Bypass { get; private set; } internal static void Start(InventoryGui gui, PromptInfo info, UpgradeAction action, FailureMode failure, int levels) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) if (Active || (Object)(object)gui == (Object)null || info == null || info.Item == null) { return; } _action = action; _failure = failure; _upgrader = info.Upgrader; _name = info.Item.m_shared.m_name; _displayName = info.ItemName; _pos = info.Item.m_gridPos; _startQuality = info.Quality; _lastQuality = info.Quality; _target = info.Quality + levels; _remaining = levels; _attempts = 0; _spent = 0; _held = 0; _broke = false; _noProgress = false; _pending = false; _nextAt = 0f; Active = true; try { if (!Press(gui)) { End(_pressFailure); } } catch (Exception e) { Fail("starting the attempts", e); } } internal static void Tick() { if (!Active) { return; } try { InventoryGui instance = InventoryGui.instance; Player localPlayer = Player.m_localPlayer; if ((Object)(object)instance == (Object)null || !InventoryGui.IsVisible() || (Object)(object)localPlayer == (Object)null || ((Character)localPlayer).IsDead() || ForgeHud.IsOpen) { End(FinishedOr(EndReason.Cancelled)); } else { if (GameAccess.CraftTimer(instance) >= 0f) { return; } if (_pending) { End(EndReason.Cancelled); } else if (!(Time.time < _nextAt)) { Step step = UpgradePlan.Next(_action, _lastQuality, _target, _attempts, Plugin.MaxAttempts.Value, _remaining, _broke, _upgrader, CanPayNext(instance, localPlayer), _noProgress); if (step != Step.Continue) { End(ReasonOf(step)); } else if (!Press(instance)) { End(_pressFailure); } } } } catch (Exception e) { Fail("running the attempts", e); } } internal static void OnUserCancel() { if (Active) { End(EndReason.Cancelled); } } internal static void OnHidden() { if (Active) { End(FinishedOr(EndReason.Cancelled)); } } internal static Attempt BeforeAttempt(InventoryGui gui) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) if (!Active) { return null; } Recipe val = GameAccess.CraftingRecipe(gui); ItemData val2 = GameAccess.CraftingItem(gui); if ((Object)(object)val == (Object)null || val2 == null || val2.m_shared == null) { return null; } Attempt attempt = new Attempt { Item = val2, Quality = val2.m_quality, Pos = val2.m_gridPos, Name = val2.m_shared.m_name }; Player localPlayer = Player.m_localPlayer; CraftingStation val3 = (((Object)(object)localPlayer != (Object)null) ? localPlayer.GetCurrentCraftingStation() : null); if ((Object)(object)val3 == (Object)null || !val3.m_upgrader) { return attempt; } SharedData val4 = Prompt.FindIdol(val); if (val4 == null) { return attempt; } float? num = null; float? num2 = null; switch (_action) { case UpgradeAction.Upgrade: if (_failure == FailureMode.Downgrade) { num2 = -1f; } break; case UpgradeAction.Guaranteed: num = 2f; break; case UpgradeAction.Downgrade: num = -1f; num2 = -1f; break; case UpgradeAction.Break: num = -1f; num2 = 2f; break; } if (num.HasValue || num2.HasValue) { attempt.Idol = val4; attempt.OldUpgradeChance = val4.m_upgradeChance; attempt.OldBreakChance = val4.m_breakChance; attempt.Tweaked = true; if (num.HasValue) { val4.m_upgradeChance = num.Value; } if (num2.HasValue) { val4.m_breakChance = num2.Value; } } return attempt; } internal static void AfterAttempt(Attempt attempt, Exception exception) { if (attempt == null) { return; } if (attempt.Tweaked && attempt.Idol != null) { attempt.Idol.m_upgradeChance = attempt.OldUpgradeChance; attempt.Idol.m_breakChance = attempt.OldBreakChance; } Player localPlayer = Player.m_localPlayer; ItemData val = (((Object)(object)localPlayer != (Object)null) ? ((Humanoid)localPlayer).GetInventory().GetItemAt(attempt.Pos.x, attempt.Pos.y) : null); bool flag = val != null && val.m_shared != null && val.m_shared.m_name == attempt.Name; if (flag && val.m_quality < 1) { val.m_quality = 1; val.m_durability = val.GetMaxDurability(); TryRefreshPanel(); } if (exception == null && Active) { _pending = false; _nextAt = Time.time + 0.9f; Outcome outcome = UpgradePlan.Classify(flag, attempt.Quality, flag ? val.m_quality : 0, val == attempt.Item); _lastQuality = (flag ? val.m_quality : 0); switch (outcome) { case Outcome.NoChange: _noProgress = true; return; case Outcome.Broke: _broke = true; break; case Outcome.Downgraded: _remaining--; break; case Outcome.Held: _held++; break; } _attempts++; _spent++; } } private static bool Press(InventoryGui gui) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) _pressFailure = EndReason.CouldNotStart; if (!GameAccess.Reselect(gui, _pos, _name)) { return false; } Player localPlayer = Player.m_localPlayer; Recipe val = GameAccess.SelectedRecipe(gui); ItemData val2 = GameAccess.SelectedItem(gui); if ((Object)(object)localPlayer != (Object)null && (Object)(object)val != (Object)null && val2 != null && !HaveMaterials(localPlayer, val, val2)) { _pressFailure = EndReason.Missing; return false; } Bypass = true; try { GameAccess.PressCraft(gui); } catch { if (GameAccess.CraftTimer(gui) >= 0f) { GameAccess.StopCraft(gui); } throw; } finally { Bypass = false; } if (GameAccess.CraftTimer(gui) < 0f) { return false; } _pending = true; return true; } private static bool HaveMaterials(Player player, Recipe recipe, ItemData item) { if (!Prompt.FreeCrafting(player)) { return player.HaveRequirements(recipe, false, item.m_quality + 1, 1); } return true; } private static bool CanPayNext(InventoryGui gui, Player player) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (_broke || !GameAccess.Reselect(gui, _pos, _name)) { return true; } Recipe val = GameAccess.SelectedRecipe(gui); ItemData val2 = GameAccess.SelectedItem(gui); if (!((Object)(object)val == (Object)null) && val2 != null) { return HaveMaterials(player, val, val2); } return true; } private static EndReason FinishedOr(EndReason otherwise) { if (_pending) { return otherwise; } Step step = UpgradePlan.Next(_action, _lastQuality, _target, _attempts, Plugin.MaxAttempts.Value, _remaining, _broke, needsIdols: false, idolsLeft: true, _noProgress); if (step != Step.Done && step != Step.Broke) { return otherwise; } return ReasonOf(step); } private static void TryRefreshPanel() { try { InventoryGui instance = InventoryGui.instance; if ((Object)(object)instance != (Object)null) { GameAccess.RefreshPanel(instance); } } catch (Exception ex) { Plugin.Log.LogWarning((object)("Could not refresh the crafting list: " + ex.Message)); } } private static EndReason ReasonOf(Step step) { return step switch { Step.Broke => EndReason.Broke, Step.NoIdols => EndReason.NoIdols, Step.TooManyAttempts => EndReason.TooMany, Step.NoProgress => EndReason.NoProgress, _ => EndReason.Done, }; } private static string ReasonText(EndReason reason) { return reason switch { EndReason.Broke => Text.ReasonBroke, EndReason.NoIdols => Text.ReasonNoIdols, EndReason.TooMany => Text.ReasonTooMany(Plugin.MaxAttempts.Value), EndReason.Cancelled => Text.ReasonCancelled, EndReason.CouldNotStart => Text.ReasonCouldNotStart, EndReason.NoProgress => Text.ReasonNoProgress, EndReason.Missing => Text.ReasonMissing, EndReason.Error => Text.ReasonError, _ => Text.ReasonDone, }; } private static void End(EndReason reason) { if (!Active) { return; } Active = false; _pending = false; try { string reason2 = ReasonText(reason) + ((_held > 0) ? (" " + Text.ReasonHeld) : string.Empty); string text = Text.Summary(_displayName, _startQuality, _lastQuality, _attempts, _spent, _upgrader, reason2); Plugin.Log.LogInfo((object)text); Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer != (Object)null) { ((Character)localPlayer).Message((MessageType)1, text, 0, (Sprite)null, false); } } catch (Exception ex) { Plugin.Log.LogWarning((object)("Could not report the result: " + ex.Message)); } } private static void Fail(string what, Exception e) { if (!_reported) { _reported = true; Plugin.Log.LogError((object)$"Error while {what} (further errors are not logged): {e}"); } End(EndReason.Error); } } internal static class ForgeHud { private static int _blockUntilFrame = -1; private static EventSystem _eventSystem; private static bool _eventSystemSwitchedOff; private static Action _pendingStart; internal static bool Available { get; set; } internal static bool IsOpen { get; private set; } internal static ForgeHudWindow Window { get; set; } internal static bool Blocking { get { if (!IsOpen) { return Time.frameCount <= _blockUntilFrame; } return true; } } internal static bool Open(PromptInfo info) { if (!Available || (Object)(object)Window == (Object)null || IsOpen) { return false; } IsOpen = true; try { Window.OnOpened(info); ((Behaviour)Window).enabled = true; SwitchEventSystem(on: false); return true; } catch (Exception arg) { Plugin.Log.LogError((object)$"The window could not open: {arg}"); Close(); return false; } } internal static void Close() { if (IsOpen) { IsOpen = false; _blockUntilFrame = Time.frameCount + 1; if ((Object)(object)Window != (Object)null) { ((Behaviour)Window).enabled = false; } SwitchEventSystem(on: true); } } internal static void Request(PromptInfo info, UpgradeAction action, int levels, FailureMode failure) { if (Plugin.RememberChoices.Value && action == UpgradeAction.Upgrade && info.Upgrader) { Plugin.DefaultLevels.Value = levels; Plugin.OnFailure.Value = failure; } Close(); _pendingStart = delegate { Chain.Start(InventoryGui.instance, info, action, failure, levels); }; } internal static void Pump() { if (_pendingStart != null) { Action pendingStart = _pendingStart; _pendingStart = null; pendingStart(); } if (!IsOpen && _eventSystemSwitchedOff) { SwitchEventSystem(on: true); } } internal static void DropPending() { _pendingStart = null; } private static void SwitchEventSystem(bool on) { try { if (!on) { EventSystem current = EventSystem.current; if ((Object)(object)current != (Object)null && ((Behaviour)current).enabled) { _eventSystem = current; ((Behaviour)current).enabled = false; _eventSystemSwitchedOff = true; } } else if (_eventSystemSwitchedOff) { _eventSystemSwitchedOff = false; if ((Object)(object)_eventSystem != (Object)null) { ((Behaviour)_eventSystem).enabled = true; } _eventSystem = null; } } catch (Exception ex) { Plugin.Log.LogWarning((object)("Could not switch the UI event system: " + ex.Message)); } } } internal sealed class ForgeHudWindow : MonoBehaviour { private const float Width = 660f; private const float HeightUpgrader = 640f; private const float GuaranteedBlock = 70f; private const float HeightRegular = 410f; private const float RefreshSeconds = 0.5f; private PromptInfo _info; private int _levels = 1; private FailureMode _failure; private float _refreshAt; private int _openedFrame; private void Awake() { ((Behaviour)this).enabled = false; } internal void OnOpened(PromptInfo info) { _info = info; _levels = UpgradePlan.ClampLevels(Plugin.DefaultLevels.Value, info.MaxLevels); _failure = Plugin.OnFailure.Value; _refreshAt = Time.unscaledTime + 0.5f; _openedFrame = Time.frameCount; } private void Update() { if (!ForgeHud.IsOpen) { return; } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null || ((Character)localPlayer).IsDead() || ((Character)localPlayer).IsTeleporting() || !InventoryGui.IsVisible() || Menu.IsVisible() || Console.IsVisible() || Input.GetKeyDown((KeyCode)27) || ZInput.GetButtonDown("Inventory") || ZInput.GetButtonDown("JoyButtonB")) { ForgeHud.Close(); } else if ((Input.GetKeyDown((KeyCode)13) || Input.GetKeyDown((KeyCode)271)) && Time.frameCount > _openedFrame + 1) { if (CanUpgrade()) { ForgeHud.Request(_info, UpgradeAction.Upgrade, _levels, _failure); } } else if (Time.unscaledTime >= _refreshAt) { _refreshAt = Time.unscaledTime + 0.5f; Prompt.Refresh(_info); } } private bool CanUpgrade() { return _info.CanAfford; } private void OnGUI() { if (!ForgeHud.IsOpen || _info == null) { return; } try { Draw(); } catch (ExitGUIException) { throw; } catch (Exception arg) { Plugin.Log.LogError((object)$"The window failed and was closed: {arg}"); ForgeHud.Close(); } } private void Draw() { //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_0138: 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) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) HudStyle.Ensure(); GUI.depth = -100; GUISkin skin = GUI.skin; GUI.skin = HudStyle.Skin; float num = Mathf.Clamp((float)Screen.height / 1080f, 0.75f, 3f) * Plugin.HudScale.Value; GUI.matrix = Matrix4x4.Scale(new Vector3(num, num, 1f)); _ = (float)Screen.width / num; float num2 = (float)Screen.height / num; float num3 = ((!_info.Upgrader) ? 410f : (640f + (Plugin.AllowGuaranteed.Value ? 70f : 0f))); num = Mathf.Min(new float[3] { num, ((float)Screen.height - 20f) / num3, ((float)Screen.width - 20f) / 660f }); GUI.matrix = Matrix4x4.Scale(new Vector3(num, num, 1f)); float num4 = (float)Screen.width / num; num2 = (float)Screen.height / num; GUI.BeginGroup(new Rect((num4 - 660f) / 2f, Mathf.Max(10f, (num2 - num3) / 2f), 660f, num3)); try { DrawContents(num3); } finally { GUI.EndGroup(); GUI.matrix = Matrix4x4.identity; GUI.skin = skin; } } private void DrawContents(float height) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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_0097: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: 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_0246: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) HudStyle.Frame(new Rect(0f, 0f, 660f, height)); HudStyle.DrawTitle(new Rect(70f, 18f, 520f, 50f), Text.Title); HudStyle.Divider(60f, 600f, 74f); if (GUI.Button(new Rect(594f, 24f, 38f, 34f), "X", HudStyle.Button)) { ForgeHud.Close(); return; } float num = 94f; HudStyle.SlotIcon(new Rect(36f, num, 64f, 64f), _info.Icon); HudStyle.Shadowed(new Rect(114f, num - 2f, 510f, 30f), _info.ItemName, HudStyle.Heading); HudStyle.Shadowed(new Rect(114f, num + 28f, 510f, 26f), Text.QualityLine(_info.Quality, _info.Quality + _levels), HudStyle.Notice); HudStyle.Shadowed(new Rect(114f, num + 52f, 510f, 22f), Text.StationLine(_info.StationName), HudStyle.Small); num += 86f; HudStyle.Shadowed(new Rect(36f, num, 230f, 36f), Text.LevelsLabel, HudStyle.Label); if (GUI.Button(new Rect(270f, num, 40f, 36f), "-", HudStyle.Button)) { _levels = UpgradePlan.ClampLevels(_levels - 1, _info.MaxLevels); } HudStyle.Shadowed(new Rect(316f, num, 60f, 36f), _levels.ToString(), HudStyle.Center); if (GUI.Button(new Rect(382f, num, 40f, 36f), "+", HudStyle.Button)) { _levels = UpgradePlan.ClampLevels(_levels + 1, _info.MaxLevels); } if (GUI.Button(new Rect(432f, num, 90f, 36f), Text.MaxButton, HudStyle.Button)) { int wanted = ((_info.Upgrader && _info.IdolCount > 0) ? _info.IdolCount : _info.MaxLevels); _levels = UpgradePlan.ClampLevels(wanted, _info.MaxLevels); } num += 52f; if (_info.Upgrader) { num = DrawUpgraderSection(num); } else { HudStyle.Shadowed(new Rect(36f, num, 588f, 64f), Text.ExplainRegular(_info.MaxQuality), HudStyle.Wrap); } if (!ForgeHud.IsOpen) { return; } float num2 = height - 92f; bool flag = CanUpgrade(); bool enabled = GUI.enabled; GUI.enabled = enabled && flag; if (GUI.Button(new Rect(100f, num2, 220f, 44f), Text.Confirm, HudStyle.Button)) { ForgeHud.Request(_info, UpgradeAction.Upgrade, _levels, _failure); GUI.enabled = enabled; return; } GUI.enabled = enabled; if (GUI.Button(new Rect(340f, num2, 220f, 44f), Text.Cancel, HudStyle.Button)) { ForgeHud.Close(); } else { HudStyle.Shadowed(new Rect(32f, height - 36f, 596f, 26f), Text.Footer, HudStyle.Small); } } private float DrawUpgraderSection(float y) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: 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) //IL_00e6: 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_0138: 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_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) int num = UpgradePlan.Percent(_info.UpChance); HudStyle.Shadowed(new Rect(36f, y, 588f, 28f), Text.Odds(num, 100 - num), HudStyle.Notice); y += 28f; string text = (_info.Free ? Text.IdolsFree : ((_info.IdolCount == 0 && _info.CanAfford) ? Text.IdolsFromChests(_info.IdolName) : Text.Idols(_info.IdolCount, _info.IdolName))); Color contentColor = GUI.contentColor; GUI.contentColor = (Color)(_info.CanAfford ? HudStyle.Body : new Color(1f, 0.45f, 0.35f, 1f)); HudStyle.Shadowed(new Rect(36f, y, 588f, 28f), text, HudStyle.Plain); GUI.contentColor = contentColor; y += 34f; HudStyle.Shadowed(new Rect(36f, y, 120f, 36f), Text.FailLabel, HudStyle.Label); if (GUI.Button(new Rect(160f, y, 230f, 36f), Text.FailBreak, (_failure == FailureMode.Break) ? HudStyle.TabOn : HudStyle.Button)) { _failure = FailureMode.Break; } if (GUI.Button(new Rect(400f, y, 226f, 36f), Text.FailDown, (_failure == FailureMode.Downgrade) ? HudStyle.TabOn : HudStyle.Button)) { _failure = FailureMode.Downgrade; } y += 48f; int target = _info.Quality + _levels; string text2 = ((_failure == FailureMode.Break) ? Text.ExplainBreak(target) : Text.ExplainDown(target, Plugin.MaxAttempts.Value)); HudStyle.Shadowed(new Rect(36f, y, 588f, 64f), text2, HudStyle.Wrap); y += 74f; if (Plugin.AllowGuaranteed.Value) { bool enabled = GUI.enabled; GUI.enabled = enabled && _info.CanAfford; if (GUI.Button(new Rect(36f, y, 588f, 40f), Text.Guaranteed(_levels), HudStyle.TabOn)) { GUI.enabled = enabled; ForgeHud.Request(_info, UpgradeAction.Guaranteed, _levels, _failure); return y; } GUI.enabled = enabled; HudStyle.Shadowed(new Rect(36f, y + 44f, 588f, 22f), Text.GuaranteedNote, HudStyle.Small); y += 70f; } HudStyle.Divider(60f, 600f, y); y += 14f; HudStyle.Shadowed(new Rect(36f, y, 588f, 28f), Text.DirectLabel, HudStyle.Notice); y += 34f; bool enabled2 = GUI.enabled; bool canAfford = _info.CanAfford; GUI.enabled = enabled2 && canAfford && _info.Quality > 1; if (GUI.Button(new Rect(36f, y, 280f, 36f), Text.DirectDown, HudStyle.Button)) { GUI.enabled = enabled2; ForgeHud.Request(_info, UpgradeAction.Downgrade, 1, _failure); return y; } GUI.enabled = enabled2 && canAfford; if (GUI.Button(new Rect(330f, y, 296f, 36f), Text.DirectBreak, HudStyle.Button)) { GUI.enabled = enabled2; ForgeHud.Request(_info, UpgradeAction.Break, 1, _failure); return y; } GUI.enabled = enabled2; y += 44f; string text3 = (string.IsNullOrEmpty(_info.RefundText) ? Text.RefundNothing : Text.Refund(_info.RefundText)); if (text3.Length > 84) { text3 = text3.Substring(0, 81) + "..."; } HudStyle.Shadowed(new Rect(36f, y, 588f, 22f), text3, HudStyle.Small); return y + 28f; } } internal static class GameAccess { private static readonly FieldInfo CraftRecipeField = AccessTools.Field(typeof(InventoryGui), "m_craftRecipe"); private static readonly FieldInfo CraftUpgradeItemField = AccessTools.Field(typeof(InventoryGui), "m_craftUpgradeItem"); private static readonly FieldInfo CraftTimerField = AccessTools.Field(typeof(InventoryGui), "m_craftTimer"); private static readonly FieldInfo SelectedRecipeField = AccessTools.Field(typeof(InventoryGui), "m_selectedRecipe"); private static readonly FieldInfo AvailableRecipesField = AccessTools.Field(typeof(InventoryGui), "m_availableRecipes"); private static readonly MethodInfo OnCraftPressedMethod = AccessTools.Method(typeof(InventoryGui), "OnCraftPressed", (Type[])null, (Type[])null); private static readonly MethodInfo UpdateCraftingPanelMethod = AccessTools.Method(typeof(InventoryGui), "UpdateCraftingPanel", new Type[1] { typeof(bool) }, (Type[])null); private static readonly MethodInfo SetRecipeMethod = AccessTools.Method(typeof(InventoryGui), "SetRecipe", new Type[2] { typeof(int), typeof(bool) }, (Type[])null); private static readonly Type PairType = typeof(InventoryGui).GetNestedType("RecipeDataPair", BindingFlags.Public | BindingFlags.NonPublic); private static readonly PropertyInfo PairRecipe = PairType?.GetProperty("Recipe"); private static readonly PropertyInfo PairItem = PairType?.GetProperty("ItemData"); internal static bool Ready { get { if (CraftRecipeField != null && CraftRecipeField.FieldType == typeof(Recipe) && CraftUpgradeItemField != null && CraftUpgradeItemField.FieldType == typeof(ItemData) && CraftTimerField != null && CraftTimerField.FieldType == typeof(float) && SelectedRecipeField != null && PairType != null && SelectedRecipeField.FieldType == PairType && AvailableRecipesField != null && typeof(IList).IsAssignableFrom(AvailableRecipesField.FieldType) && OnCraftPressedMethod != null && OnCraftPressedMethod.GetParameters().Length == 0 && SetRecipeMethod != null && UpdateCraftingPanelMethod != null && PairRecipe != null && PairRecipe.PropertyType == typeof(Recipe) && PairItem != null) { return PairItem.PropertyType == typeof(ItemData); } return false; } } internal static Recipe CraftingRecipe(InventoryGui gui) { object? value = CraftRecipeField.GetValue(gui); return (Recipe)((value is Recipe) ? value : null); } internal static ItemData CraftingItem(InventoryGui gui) { object? value = CraftUpgradeItemField.GetValue(gui); return (ItemData)((value is ItemData) ? value : null); } internal static float CraftTimer(InventoryGui gui) { return (float)CraftTimerField.GetValue(gui); } internal static Recipe SelectedRecipe(InventoryGui gui) { object value = SelectedRecipeField.GetValue(gui); if (value == null) { return null; } object? value2 = PairRecipe.GetValue(value, null); return (Recipe)((value2 is Recipe) ? value2 : null); } internal static ItemData SelectedItem(InventoryGui gui) { object value = SelectedRecipeField.GetValue(gui); if (value == null) { return null; } object? value2 = PairItem.GetValue(value, null); return (ItemData)((value2 is ItemData) ? value2 : null); } internal static bool Reselect(InventoryGui gui, Vector2i pos, string sharedName) { //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) if (!(AvailableRecipesField.GetValue(gui) is IList list)) { return false; } for (int i = 0; i < list.Count; i++) { object? value = PairItem.GetValue(list[i], null); ItemData val = (ItemData)((value is ItemData) ? value : null); if (val != null && val.m_shared != null && val.m_gridPos == pos && val.m_shared.m_name == sharedName) { SetRecipeMethod.Invoke(gui, new object[2] { i, false }); return true; } } return false; } internal static void PressCraft(InventoryGui gui) { OnCraftPressedMethod.Invoke(gui, null); } internal static void StopCraft(InventoryGui gui) { CraftTimerField.SetValue(gui, -1f); } internal static void RefreshPanel(InventoryGui gui) { UpdateCraftingPanelMethod.Invoke(gui, new object[1] { false }); } } internal static class HudStyle { internal static readonly Color Gold = new Color(1f, 0.72f, 0.36f, 1f); internal static readonly Color GoldBright = new Color(1f, 0.84f, 0.35f, 1f); internal static readonly Color Body = new Color(0.93f, 0.89f, 0.8f, 1f); internal static readonly Color Dim = new Color(0.72f, 0.64f, 0.52f, 1f); internal static readonly Color Orange = new Color(1f, 0.65f, 0.16f, 1f); internal static GUIStyle Label; internal static GUIStyle Notice; internal static GUIStyle Small; internal static GUIStyle Heading; internal static GUIStyle Title; internal static GUIStyle TitleFallback; internal static GUIStyle Center; internal static GUIStyle Wrap; internal static GUIStyle Plain; internal static GUIStyle PlainRight; internal static GUIStyle PlainSmall; internal static GUIStyle Button; internal static GUIStyle TabOn; internal static GUIStyle Slot; internal static GUIStyle SlotOn; internal static GUIStyle Field; internal static GUIStyle Row; internal static GUISkin Skin; private static Texture2D _wood; private static Texture2D _stud; private static Texture2D _lock; private static Font _body; private static Font _title; private static bool _ready; private static readonly Dictionary<Sprite, Rect> IconRects = new Dictionary<Sprite, Rect>(); private static readonly Dictionary<string, bool> TitleFits = new Dictionary<string, bool>(); internal static Texture2D LockIcon { get { //IL_0026: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_lock != (Object)null)) { return _lock = Load("lock", new Color(0.9f, 0.7f, 0.3f, 1f)); } return _lock; } } internal static void Ensure() { if (!_ready) { _ready = true; try { Build(); } catch (Exception arg) { Plugin.Log.LogError((object)$"Could not build the HUD's Valheim look; using plain styles. {arg}"); } FillMissing(); } } private static void FillMissing() { //IL_0013: 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_004d: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) Label = (GUIStyle)(((object)Label) ?? ((object)new GUIStyle(GUI.skin.label))); Notice = (GUIStyle)(((object)Notice) ?? ((object)new GUIStyle(GUI.skin.label))); Small = (GUIStyle)(((object)Small) ?? ((object)new GUIStyle(GUI.skin.label))); Heading = (GUIStyle)(((object)Heading) ?? ((object)new GUIStyle(GUI.skin.label))); Title = (GUIStyle)(((object)Title) ?? ((object)new GUIStyle(GUI.skin.label) { alignment = (TextAnchor)4, fontSize = 28 })); TitleFallback = TitleFallback ?? Title; Center = (GUIStyle)(((object)Center) ?? ((object)new GUIStyle(GUI.skin.label) { alignment = (TextAnchor)4 })); Wrap = (GUIStyle)(((object)Wrap) ?? ((object)new GUIStyle(GUI.skin.label) { wordWrap = true })); Plain = (GUIStyle)(((object)Plain) ?? ((object)new GUIStyle(GUI.skin.label))); PlainRight = (GUIStyle)(((object)PlainRight) ?? ((object)new GUIStyle(GUI.skin.label) { alignment = (TextAnchor)5 })); PlainSmall = (GUIStyle)(((object)PlainSmall) ?? ((object)new GUIStyle(GUI.skin.label) { fontSize = 14 })); Button = (GUIStyle)(((object)Button) ?? ((object)new GUIStyle(GUI.skin.button))); TabOn = (GUIStyle)(((object)TabOn) ?? ((object)new GUIStyle(GUI.skin.button) { fontStyle = (FontStyle)1 })); Slot = (GUIStyle)(((object)Slot) ?? ((object)new GUIStyle(GUI.skin.box))); SlotOn = (GUIStyle)(((object)SlotOn) ?? ((object)new GUIStyle(GUI.skin.box))); Field = (GUIStyle)(((object)Field) ?? ((object)new GUIStyle(GUI.skin.textField))); Row = (GUIStyle)(((object)Row) ?? ((object)new GUIStyle(GUI.skin.button))); Skin = (((Object)(object)Skin != (Object)null) ? Skin : GUI.skin); } private static void Build() { //IL_001e: 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_0066: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: 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_011f: 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_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Expected O, but got Unknown //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Expected O, but got Unknown //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Expected O, but got Unknown //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Expected O, but got Unknown //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Expected O, but got Unknown //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Expected O, but got Unknown //IL_03c0: Expected O, but got Unknown //IL_03e3: Unknown result type (might be due to invalid IL or missing references) //IL_03f7: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Expected O, but got Unknown //IL_0424: Unknown result type (might be due to invalid IL or missing references) //IL_0444: Unknown result type (might be due to invalid IL or missing references) //IL_0477: Unknown result type (might be due to invalid IL or missing references) //IL_04cc: Unknown result type (might be due to invalid IL or missing references) //IL_04e3: Unknown result type (might be due to invalid IL or missing references) //IL_04ed: Expected O, but got Unknown //IL_04f8: Unknown result type (might be due to invalid IL or missing references) //IL_0502: Expected O, but got Unknown //IL_050c: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0516: Unknown result type (might be due to invalid IL or missing references) //IL_0520: Expected O, but got Unknown //IL_0525: Expected O, but got Unknown //IL_0553: Unknown result type (might be due to invalid IL or missing references) //IL_0580: Unknown result type (might be due to invalid IL or missing references) FindFonts(); _wood = Load("wood", new Color(0.42f, 0.29f, 0.19f, 1f)); _stud = Load("stud", new Color(0.5f, 0.36f, 0.24f, 1f)); Label = Make(GUI.skin.label, _body, 16, Body, (TextAnchor)3); Notice = Make(GUI.skin.label, _body, 16, Gold, (TextAnchor)3); Small = Make(GUI.skin.label, _body, 13, Dim, (TextAnchor)3); Heading = Make(GUI.skin.label, _body, 20, Gold, (TextAnchor)3); Title = Make(GUI.skin.label, ((Object)(object)_title != (Object)null) ? _title : _body, 30, Gold, (TextAnchor)4); TitleFallback = Make(GUI.skin.label, _body, 28, Gold, (TextAnchor)4); Center = Make(GUI.skin.label, _body, 16, Body, (TextAnchor)4); Plain = Make(GUI.skin.label, _body, 16, Color.white, (TextAnchor)3); PlainRight = Make(GUI.skin.label, _body, 16, Color.white, (TextAnchor)5); PlainSmall = Make(GUI.skin.label, _body, 14, Color.white, (TextAnchor)3); Wrap = Make(GUI.skin.label, _body, 16, Body, (TextAnchor)0); Wrap.wordWrap = true; Button = Make(GUI.skin.button, _body, 16, Body, (TextAnchor)4); Button.normal.background = Load("button", new Color(0.2f, 0.19f, 0.18f, 1f)); Button.hover.background = Load("button_hover", new Color(0.3f, 0.28f, 0.24f, 1f)); Button.active.background = Load("button_active", new Color(0.12f, 0.11f, 0.1f, 1f)); Button.focused.background = Button.normal.background; Button.hover.textColor = GoldBright; Button.active.textColor = Gold; Button.border = new RectOffset(12, 12, 12, 12); Button.padding = new RectOffset(10, 10, 4, 4); TabOn = new GUIStyle(Button); TabOn.normal.background = Button.hover.background; TabOn.normal.textColor = GoldBright; TabOn.focused.background = Button.hover.background; TabOn.focused.textColor = GoldBright; Slot = new GUIStyle(GUI.skin.box) { border = new RectOffset(14, 14, 14, 14), margin = new RectOffset(0, 0, 0, 0), padding = new RectOffset(0, 0, 0, 0) }; Slot.normal.background = Load("slot", new Color(0.28f, 0.19f, 0.12f, 0.9f)); SlotOn = new GUIStyle(Slot); SlotOn.normal.background = Load("slot_selected", new Color(0.4f, 0.28f, 0.15f, 0.95f)); Field = Make(GUI.skin.textField, _body, 16, Body, (TextAnchor)3); Field.normal.background = Load("field", new Color(0.13f, 0.09f, 0.07f, 1f)); Field.focused.background = Field.normal.background; Field.hover.background = Field.normal.background; Field.focused.textColor = GoldBright; Field.border = new RectOffset(14, 14, 14, 14); Field.padding = new RectOffset(10, 10, 4, 4); Row = new GUIStyle(GUI.skin.button) { border = new RectOffset(0, 0, 0, 0) }; Row.normal.background = null; Row.hover.background = Flat(new Color(1f, 0.85f, 0.5f, 0.1f)); Row.active.background = Flat(new Color(1f, 0.85f, 0.5f, 0.2f)); Row.focused.background = null; BuildSkin(); } internal static void Fill(Rect rect, Color color) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Invalid comparison between Unknown and I4 //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_0019: Unknown result type (might be due to invalid IL or missing references) if ((int)Event.current.type == 7) { Color color2 = GUI.color; GUI.color = color; GUI.DrawTexture(rect, (Texture)(object)Texture2D.whiteTexture); GUI.color = color2; } } internal static void Border(Rect rect, Color color, float thickness = 2f) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) Fill(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, ((Rect)(ref rect)).width, thickness), color); Fill(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).yMax - thickness, ((Rect)(ref rect)).width, thickness), color); Fill(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, thickness, ((Rect)(ref rect)).height), color); Fill(new Rect(((Rect)(ref rect)).xMax - thickness, ((Rect)(ref rect)).y, thickness, ((Rect)(ref rect)).height), color); } internal static void Frame(Rect rect) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Invalid comparison between Unknown and I4 //IL_0029: 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_001b: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_009a: 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_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) if ((int)Event.current.type == 7) { if ((Object)(object)_wood != (Object)null) { GUI.DrawTexture(rect, (Texture)(object)_wood, (ScaleMode)0); } else { Fill(rect, new Color(0.42f, 0.29f, 0.19f, 1f)); } Border(rect, new Color(0.05f, 0.03f, 0.02f, 1f), 3f); Border(Inset(rect, 3f), new Color(0.23f, 0.15f, 0.09f, 1f), 7f); Border(Inset(rect, 10f), new Color(0.59f, 0.42f, 0.27f, 1f), 1f); Border(Inset(rect, 11f), new Color(0.13f, 0.09f, 0.055f, 1f), 1f); DrawStud(((Rect)(ref rect)).x + 11f, ((Rect)(ref rect)).y + 11f); DrawStud(((Rect)(ref rect)).xMax - 11f, ((Rect)(ref rect)).y + 11f); DrawStud(((Rect)(ref rect)).x + 11f, ((Rect)(ref rect)).yMax - 11f); DrawStud(((Rect)(ref rect)).xMax - 11f, ((Rect)(ref rect)).yMax - 11f); } } internal static void Divider(float left, float right, float y) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Invalid comparison between Unknown and I4 //IL_005e: 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_007f: 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_00a0: 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_00c7: 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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0106: 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_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) if ((int)Event.current.type == 7) { float num = (left + right) / 2f; Color color = default(Color); ((Color)(ref color))..ctor(0.1f, 0.055f, 0.03f, 1f); Color color2 = default(Color); ((Color)(ref color2))..ctor(0.72f, 0.53f, 0.29f, 1f); Fill(new Rect(left, y, num - 14f - left, 3f), color); Fill(new Rect(left, y - 1f, num - 14f - left, 1f), color2); Fill(new Rect(num + 14f, y, right - num - 14f, 3f), color); Fill(new Rect(num + 14f, y - 1f, right - num - 14f, 1f), color2); Matrix4x4 matrix = GUI.matrix; GUIUtility.RotateAroundPivot(45f, new Vector2(num, y + 1f)); Fill(new Rect(num - 5f, y - 4f, 10f, 10f), color); Fill(new Rect(num - 4f, y - 3f, 8f, 8f), color2); GUI.matrix = matrix; } } internal static void Shadowed(Rect rect, string text, GUIStyle style) { //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_001a: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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) Color contentColor = GUI.contentColor; GUI.contentColor = new Color(0f, 0f, 0f, 0.75f * contentColor.a); GUI.Label(new Rect(((Rect)(ref rect)).x + 1f, ((Rect)(ref rect)).y + 1.5f, ((Rect)(ref rect)).width, ((Rect)(ref rect)).height), text, style); GUI.contentColor = contentColor; GUI.Label(rect, text, style); } internal static void DrawTitle(Rect rect, string text) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) if (!TitleFits.TryGetValue(text, out var value)) { value = (Object)(object)_title != (Object)null; int num = 0; while (value && num < text.Length) { value = text[num] == ' ' || _title.HasCharacter(text[num]); num++; } TitleFits[text] = value; } Shadowed(rect, text, value ? Title : TitleFallback); } internal static void SlotIcon(Rect rect, Sprite sprite) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) GUI.Box(rect, GUIContent.none, Slot); Icon(new Rect(((Rect)(ref rect)).x + 3f, ((Rect)(ref rect)).y + 3f, ((Rect)(ref rect)).width - 6f, ((Rect)(ref rect)).height - 6f), sprite); } internal static void Icon(Rect rect, Sprite sprite) { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Invalid comparison between Unknown and I4 //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_007e: 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) if ((Object)(object)sprite == (Object)null || (Object)(object)sprite.texture == (Object)null || (int)Event.current.type != 7) { return; } if (!IconRects.TryGetValue(sprite, out var value)) { try { Rect textureRect = sprite.textureRect; Texture2D texture = sprite.texture; value = new Rect(((Rect)(ref textureRect)).x / (float)((Texture)texture).width, ((Rect)(ref textureRect)).y / (float)((Texture)texture).height, ((Rect)(ref textureRect)).width / (float)((Texture)texture).width, ((Rect)(ref textureRect)).height / (float)((Texture)texture).height); } catch (Exception) { value = Rect.zero; } IconRects[sprite] = value; } if (((Rect)(ref value)).width > 0f) { GUI.DrawTextureWithTexCoords(rect, (Texture)(object)sprite.texture, value); } } internal static Color WithAlpha(Color color, float alpha) { //IL_0000: 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_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) return new Color(color.r, color.g, color.b, alpha); } private static Rect Inset(Rect rect, float by) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) return new Rect(((Rect)(ref rect)).x + by, ((Rect)(ref rect)).y + by, ((Rect)(ref rect)).width - 2f * by, ((Rect)(ref rect)).height - 2f * by); } private static void DrawStud(float x, float y) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_stud != (Object)null) { GUI.DrawTexture(new Rect(x - 8f, y - 8f, 16f, 16f), (Texture)(object)_stud); } } private static GUIStyle Make(GUIStyle basis, Font font, int size, Color color, TextAnchor anchor) { //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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0049: 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_0055: 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_0062: Expected O, but got Unknown GUIStyle val = new GUIStyle(basis) { font = font, fontSize = size, alignment = anchor, wordWrap = false, clipping = (TextClipping)1, richText = false }; val.normal.textColor = color; val.hover.textColor = color; val.active.textColor = color; val.focused.textColor = color; return val; } private static void BuildSkin() { //IL_0034: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown Skin = Object.Instantiate<GUISkin>(GUI.skin); ((Object)Skin).hideFlags = (HideFlags)61; Texture2D texture = Load("scroll_track", new Color(0.1f, 0.07f, 0.05f, 0.8f)); Texture2D texture2 = Load("scroll_thumb", new Color(0.6f, 0.43f, 0.21f, 1f)); Skin.verticalScrollbar = Bar(Skin.verticalScrollbar, texture, new RectOffset(5, 5, 5, 5)); Skin.verticalScrollbarThumb = Bar(Skin.verticalScrollbarThumb, texture2, new RectOffset(5, 5, 6, 6)); Skin.horizontalScrollbar = Bar(Skin.horizontalScrollbar, texture, new RectOffset(5, 5, 5, 5)); Skin.horizontalScrollbarThumb = Bar(Skin.horizontalScrollbarThumb, texture2, new RectOffset(6, 6, 5, 5)); Skin.verticalScrollbarUpButton = Hidden(Skin.verticalScrollbarUpButton); Skin.verticalScrollbarDownButton = Hidden(Skin.verticalScrollbarDownButton); Skin.horizontalScrollbarLeftButton = Hidden(Skin.horizontalScrollbarLeftButton); Skin.horizontalScrollbarRightButton = Hidden(Skin.horizontalScrollbarRightButton); } private static GUIStyle Bar(GUIStyle basis, Texture2D texture, RectOffset border) { //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_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //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_002b: Expected O, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_003a: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown GUIStyle val = new GUIStyle(basis) { border = border, margin = new RectOffset(0, 0, 0, 0), padding = new RectOffset(0, 0, 0, 0), overflow = new RectOffset(0, 0, 0, 0) }; val.normal.background = texture; val.hover.background = texture; val.active.background = texture; val.focused.background = texture; return val; } private static GUIStyle Hidden(GUIStyle basis) { //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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown GUIStyle val = new GUIStyle(basis) { fixedWidth = 0f, fixedHeight = 0f }; val.normal.background = null; val.hover.background = null; val.active.background = null; val.focused.background = null; return val; } private static Texture2D Flat(Color color) { //IL_0004: 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_0011: 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: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown Texture2D val = new Texture2D(1, 1, (TextureFormat)4, false) { hideFlags = (HideFlags)61 }; val.SetPixel(0, 0, color); val.Apply(); return val; } private static Texture2D Load(string name, Color fallback) { //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_0021: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) try { if (HudTextures.Base64.TryGetValue(name, out var value)) { Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false) { hideFlags = (HideFlags)61 }; if (ImageConversion.LoadImage(val, Convert.FromBase64String(value))) { ((Texture)val).filterMode = (FilterMode)1; ((Texture)val).wrapMode = (TextureWrapMode)1; return val; } Object.Destroy((Object)(object)val); } } catch (Exception ex) { Plugin.Log.LogWarning((object)("HUD texture '" + name + "' could not be decoded (" + ex.Message + "); using a flat colour.")); } return Flat(fallback); } private static void FindFonts() { try { Font[] array = Resources.FindObjectsOfTypeAll<Font>(); StringBuilder stringBuilder = new StringBuilder(); Font[] array2 = array; foreach (Font val in array2) { if ((Object)(object)val != (Object)null) { stringBuilder.Append(((Object)val).name).Append(val.dynamic ? string.Empty : " (static)").Append("; "); } } _body = Pick(array, "AveriaSerif", "Regular", null) ?? Pick(array, "AveriaSerif", null, null); _title = Pick(array, null, null, "Norse") ?? Pick(array, "Norse", null, null); Plugin.Log.LogInfo((object)string.Format("HUD fonts: text = {0}, title = {1} (fonts in the game: {2})", ((Object)(object)_body != (Object)null) ? ((Object)_body).name : "default", ((Object)(object)_title != (Object)null) ? ((Object)_title).name : "default", stringBuilder)); } catch (Exception ex) { Plugin.Log.LogWarning((object)("Could not look for the game's fonts (" + ex.Message + "); the HUD uses the default font.")); } } private static Font Pick(Font[] fonts, string contains, string and, string exact) { foreach (Font val in fonts) { if ((Object)(object)val == (Object)null || !val.dynamic) { continue; } string name = ((Object)val).name; bool num; if (exact == null) { if (name.IndexOf(contains, StringComparison.OrdinalIgnoreCase) < 0) { continue; } if (and == null) { goto IL_0053; } num = name.IndexOf(and, StringComparison.OrdinalIgnoreCase) >= 0; } else { num = string.Equals(name, exact, StringComparison.OrdinalIgnoreCase); } if (!num) { continue; } goto IL_0053; IL_0053: if (val.HasCharacter('A') && val.HasCharacter('a')) { return val; } } return null; } } internal static class HudTextures { internal static readonly Dictionary<string, string> Base64 = new Dictionary<string, string> { { "wood", "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" + "pVr1nIbkHPpxkqP/2Q==" }, { "slot", "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFbklEQVR42u3bTYwcxRUH8P97Vf2xM97ZZXcx/hAoBB+CfOBmICCNgYsVCcilSYADOfiAhJBz" + "TJClZiS0KMqRA4RTolwijziQ2BJCRHJHAoEREcEwQTmADCJGOOxnz85OT9V7HMZjLQu2wwExO64n9aFVfej3q9dddahncPWgLMvMwYMHudPpKHZA5Dn4MJrm" + "8K/OoShwxXemKw1mGUy7DT+61zzn33Ven6bpDRnHxNN+gzCH/rHnXulvy0GAb4e4HADpcFCfuO8n80mjca8larKhHxFoQaGeroL3wwSxQkvxek5E3uwONv/+" + "/KmzHwFADnALkKsCbH3wgdsPHFPgaByZ/aTknYjzIh5jmfxwwkDEkTEREUzl/ap4edn03dMv/+vcyvaK/gbAKPlHDx1obDC/AMbPCLRebla+7PaT/sBFoso0" + "LJCxC4USEUlijaulcTVdi4WZZlW1w0KPv/TWf97bjkDbMY49eNvM+aXqzwS9u3LyvwvL3cZGv4oBgOjS1zHWoaoEALE1bmG2tlafiusiWKqn0S/++NrZs3kO" + "brWGVc5bfhasCkzZ9Pe1xN7pnL/w2YXVuV5VRYZJjCFhImGCjvtlzPB9nRfz+Zfrc+VG1Usi05itpy8uPnHffKsFHU24GSafmXa74/2/f3qUDB9dXu+tfvLF" + "6jwUZJmVCWAiYiLspMswq2FC2RukcWzKPXP1hvTkpn988OnJPAcXBZRGEr955O5Z6+QkGLNvf/jZ7Fq3nzKTYkes/FdZ6FVBzHr7rfvP15K45r1/ZLH95pks" + "y4zNm03TKgrHA3eYrdn/5Vqv2+1VibVGMCFBBDjn+YvlbnrLvoSdp58DOJMBsJ3dhQ4f4iYT++W1bsrMMESKSQpjZKXs1ZzXdSY69OSRI8lD7XbfttuQJ48c" + "SYC1WwbOu26vqllDQsBEARBYq4G3varSWhpdX6+V+wF8ZIdbxKWE2C5UTsR5NRcBJi5UlPqVx640rovV3SMApLFVAJ4ufTOEiQRgBQ1LWy2r+9o+YFy3t99X" + "iAw3S4xrPAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAC4FgA2K0eAXjMYBBBY+BJA33oHUMlERDxhJ0S3" + "NVQYJii0LwNbAgDnOfjFk+9siOrHccS2lkSVep24I3MKILLWp0lCIlia6m9+PKyA081h6SudgZK9rjHVEyjRZM08vBeeqSebScSRgt5/+m/v9PIczK3isABA" + "pPSqF1ldmKm7ehpXXienChSANSx75qdLEbXeySki6OnTTWagJVmWmVb79U8E+Kthmr3xhpll1ck4OUoABk5479z0Wn0qTp3o+wmvvqoKKorCGwDodDrIc7Ap" + "f/xPX7l76ml8fWS5XFrr1YkAZtqRieNi8jfM7ypv3jO34QVG2T/+zIl3/wsMO0Z4S5Wg9adixar5tfeysne+wQdunLtgrfEDJ6w76JNQVRr44TJ30+6ZlQP7" + "5ktR3UXAU8/+5a33siwzo6Yp+nqnaGba7bY//su7DqrKH4wxe6vKleeX1qdW1nu1/sBZ8UrjvH0iQCNrfaOebO6dmy7rtTgVryKK44sn3ngpbzZtqyjcZU+I" + "jxDyh5sLA18tGuZ7mMl4L/2NzYFW3o/tz0EBWGbUkghRZGIRNSL6gSqOL7bfeLfZbNpiS/KXPSK/ta/utw/dcReD7wfRIWbMM1FdVXU8e4OIVLUS1SUVPatE" + "r0SfR6daReHyPOdWqyX/d/O0Xhwbtc7kjzXT/sDvY1ftBls3Om8/Xht7YQtbGm/PtdpF+W0T+p0jyzKTZZnZaatAnud8YvjeV5yorwC3Lay69mn1FQAAAABJ" + "RU5ErkJggg==" }, { "slot_selected", "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" }, { "field", "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" + "64vuA2Z9/nea2gqVAAAAAElFTkSuQmCC" }, { "stud", "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADYElEQVR42lWTbWhbZRTH/+e5N7nJvclNlixpU/bSGLuNqXtR55zKilLZJgN1kEz30YFjguDL" + "nIqwLML0w2CK+sUNfAFRTBibSL/4RYpYhKll0HV9mdLarm9Jk9zb9Ca3997n8UPpaM+ncw7/c/jDOT9gTRSzWWlt3X/lZGzwysnY2n6xuF5Dq4nI5xkVCrz4" + "fjYRi/lPt2zncGXRykAAuqrMhTWl3/Xsz4+8d/WWECAiiHsLVoevFY4dEoK+Hhovp24MT+Nu2YTHORJRDbsybdjblXIjIf/Zox+UPi1msyxXKnn3LP1UyD5b" + "OveiOPxwp0hFgk5HJOjt6IjyBzbF+JaY5rXrAWdvOuF9e/ao+PlC9jwA5PPdMgmArn30QsxtsaGvev9O3Lwzx5NRVdrdlUJEC0BiBNOyMTxRxlTZFLqquGde" + "fsK3Ka4d7Hn3x98YAUJjwddGJyvJm3fmvGRUlU48tw+nTvRg3+4M/D4JqXgYB/d0Ip3aQBXDYn0D47Ac71w+D8a+fPURn9Wyn79xe1oQQLu6Unjq0R1o2S7u" + "T3cgHgtjqWmDMcKD6SR0VWEDY7NiwWwdeDxwfAu7r3Onblj21rsVk3RNYVFNwT8TMwgG/Jgt12EYFnyyBMfl0DUFG6Mq1cwmamZTVQP+7bIeBiarYJ7HITGC" + "LDEMDk9gZr4Gw1iC7TiQJQmcr9xOYgxcCHAOEhIxNrHcskJB33wyqolFa1kYDRs+WcLMXBWO60KWGDgXYIzQtB1UTQthVUEkpNiO406x3NulZkhV+h7KtNGy" + "6/GR/8rwOIcaUEBE4BxgjKD4JIxOLqDeaPGuzXHE9MDovyOhYQaAiMmf7NnW7qXiYUyVTfHH4CTqjSYYY/DJDLbj4q+RaYxNLYARuUf2ZygcDFw8dfmyQ8Vi" + "VsrlSt71D7NvGo3mpYs/9HsVw4KuKmxjVCWJMVRNS9QbLUFE7uvHHvPv7Exc/dMt5YButu6Vey8cP182lvJ9A+MYGJtFdbEpOBfQVYW2bY7j0P4M0u3R4q35" + "2um3Lv1SWw+TEEREovfjl55hJN4p160DlboV4UIgogVabRu022rQ91nPme+/WdGvAEVr0fw13y0/XehzAeD3L17ZKjx3u+r3iaZtzzz5xndDALgQggDCKo3/" + "A61Ag9Hsr3ASAAAAAElFTkSuQmCC" }, { "lock", "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" +