From 754c3be5e45b73e7a1074d8f2ddcf438cf5dff8c Mon Sep 17 00:00:00 2001 From: jneb802 <73610029+jneb802@users.noreply.github.com> Date: Thu, 15 Oct 2026 09:28:46 -0700 Subject: [PATCH 1/4] Fix Server Guide overlap with crafting filters --- Source/ServerGuide/GuideWindow.cs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Source/ServerGuide/GuideWindow.cs b/Source/ServerGuide/GuideWindow.cs index ced15a1..b956a96 100644 --- a/Source/ServerGuide/GuideWindow.cs +++ b/Source/ServerGuide/GuideWindow.cs @@ -10,6 +10,8 @@ internal sealed class GuideWindow : MonoBehaviour { internal static GuideReader? Reader { get; private set; } private Sprite _icon = null!; + private RectTransform _buttonRect = null!; + private RectTransform _repairRect = null!; internal static void Create(InventoryGui inventory) { @@ -46,7 +48,9 @@ internal static void Create(InventoryGui inventory) rect.pivot = repairRect.pivot; rect.sizeDelta = repairRect.sizeDelta; rect.localScale = repairRect.localScale; - rect.anchoredPosition = repairRect.anchoredPosition + Vector2.down * (repairRect.rect.height + 12f); + window._buttonRect = rect; + window._repairRect = repairRect; + window.PositionButton(); Image frame = iconObject.GetComponent(); Image sourceFrame = source.GetComponent(); frame.sprite = sourceFrame.sprite; @@ -79,6 +83,25 @@ internal static void Create(InventoryGui inventory) tooltip.m_text = "Server Guide"; } + private void LateUpdate() + { + if (_buttonRect != null && _buttonRect.gameObject.activeInHierarchy) + PositionButton(); + } + + private void PositionButton() + { + if (_repairRect == null) return; + // Dverger Automation creates and repositions its button after inventory initialization. + // Keep the guide above that button, leaving the crafting filters below Repair clear. + RectTransform anchor = _repairRect.parent.Find("DA_CraftFromStorageToggle") as RectTransform + ?? _repairRect; + _buttonRect.anchorMin = anchor.anchorMin; + _buttonRect.anchorMax = anchor.anchorMax; + _buttonRect.pivot = anchor.pivot; + _buttonRect.anchoredPosition = anchor.anchoredPosition + Vector2.up * (anchor.rect.height + 12f); + } + internal static void Open(InventoryGui inventory) { if (Reader == null || Player.m_localPlayer == null) return; From 91aa2aa633f46516cdb2fb8ace889191a9a1031f Mon Sep 17 00:00:00 2001 From: jneb802 <73610029+jneb802@users.noreply.github.com> Date: Thu, 15 Oct 2026 09:43:09 -0700 Subject: [PATCH 2/4] Place Server Guide flush above automation button --- Source/ServerGuide/GuideWindow.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/ServerGuide/GuideWindow.cs b/Source/ServerGuide/GuideWindow.cs index b956a96..13f7df9 100644 --- a/Source/ServerGuide/GuideWindow.cs +++ b/Source/ServerGuide/GuideWindow.cs @@ -93,13 +93,13 @@ private void PositionButton() { if (_repairRect == null) return; // Dverger Automation creates and repositions its button after inventory initialization. - // Keep the guide above that button, leaving the crafting filters below Repair clear. + // Keep the guide flush above that button, leaving the crafting filters below Repair clear. RectTransform anchor = _repairRect.parent.Find("DA_CraftFromStorageToggle") as RectTransform ?? _repairRect; _buttonRect.anchorMin = anchor.anchorMin; _buttonRect.anchorMax = anchor.anchorMax; _buttonRect.pivot = anchor.pivot; - _buttonRect.anchoredPosition = anchor.anchoredPosition + Vector2.up * (anchor.rect.height + 12f); + _buttonRect.anchoredPosition = anchor.anchoredPosition + Vector2.up * anchor.rect.height; } internal static void Open(InventoryGui inventory) From 57e0aa4f9e67958ff1c345c43b7cfbfb4df14e17 Mon Sep 17 00:00:00 2001 From: jneb802 <73610029+jneb802@users.noreply.github.com> Date: Thu, 15 Oct 2026 11:01:17 -0700 Subject: [PATCH 3/4] Match Server Guide backing panel and button spacing --- Source/ServerGuide/GuideWindow.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Source/ServerGuide/GuideWindow.cs b/Source/ServerGuide/GuideWindow.cs index 13f7df9..d949274 100644 --- a/Source/ServerGuide/GuideWindow.cs +++ b/Source/ServerGuide/GuideWindow.cs @@ -12,6 +12,8 @@ internal sealed class GuideWindow : MonoBehaviour private Sprite _icon = null!; private RectTransform _buttonRect = null!; private RectTransform _repairRect = null!; + private RectTransform _backdropRect = null!; + private RectTransform _repairPanelRect = null!; internal static void Create(InventoryGui inventory) { @@ -38,6 +40,13 @@ internal static void Create(InventoryGui inventory) Button source = inventory.m_repairButton; RectTransform repairRect = (RectTransform)source.transform; + window._repairPanelRect = (RectTransform)inventory.m_repairPanel; + window._backdropRect = Instantiate(window._repairPanelRect, window._repairPanelRect.parent, false); + window._backdropRect.name = "ServerGuideBackdrop"; + window._backdropRect.gameObject.SetActive(true); + window._backdropRect.SetSiblingIndex(window._repairPanelRect.GetSiblingIndex()); + foreach (Graphic graphic in window._backdropRect.GetComponentsInChildren(true)) + graphic.raycastTarget = false; // Copy the repair button's appearance without its repair action or gamepad shortcut. GameObject iconObject = new GameObject("ServerGuideIcon", typeof(RectTransform), typeof(Image), typeof(Button), typeof(UITooltip)); RectTransform rect = (RectTransform)iconObject.transform; @@ -93,13 +102,18 @@ private void PositionButton() { if (_repairRect == null) return; // Dverger Automation creates and repositions its button after inventory initialization. - // Keep the guide flush above that button, leaving the crafting filters below Repair clear. + // Repeat its spacing above Repair so all three backing panels form the same column. RectTransform anchor = _repairRect.parent.Find("DA_CraftFromStorageToggle") as RectTransform ?? _repairRect; _buttonRect.anchorMin = anchor.anchorMin; _buttonRect.anchorMax = anchor.anchorMax; _buttonRect.pivot = anchor.pivot; - _buttonRect.anchoredPosition = anchor.anchoredPosition + Vector2.up * anchor.rect.height; + float spacing = anchor == _repairRect + ? _repairPanelRect.rect.height + : anchor.anchoredPosition.y - _repairRect.anchoredPosition.y; + _buttonRect.anchoredPosition = anchor.anchoredPosition + Vector2.up * spacing; + _backdropRect.anchoredPosition = _repairPanelRect.anchoredPosition + + (_buttonRect.anchoredPosition - _repairRect.anchoredPosition); } internal static void Open(InventoryGui inventory) From d079e8d326ad1d2be5461e56f53e653ac43f7467 Mon Sep 17 00:00:00 2001 From: jneb802 <73610029+jneb802@users.noreply.github.com> Date: Thu, 15 Oct 2026 12:18:00 -0700 Subject: [PATCH 4/4] Attach Server Guide to upper navigation panel --- Source/ServerGuide/GuideWindow.cs | 54 ++++++++----------------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/Source/ServerGuide/GuideWindow.cs b/Source/ServerGuide/GuideWindow.cs index d949274..4ea3578 100644 --- a/Source/ServerGuide/GuideWindow.cs +++ b/Source/ServerGuide/GuideWindow.cs @@ -10,10 +10,6 @@ internal sealed class GuideWindow : MonoBehaviour { internal static GuideReader? Reader { get; private set; } private Sprite _icon = null!; - private RectTransform _buttonRect = null!; - private RectTransform _repairRect = null!; - private RectTransform _backdropRect = null!; - private RectTransform _repairPanelRect = null!; internal static void Create(InventoryGui inventory) { @@ -40,26 +36,26 @@ internal static void Create(InventoryGui inventory) Button source = inventory.m_repairButton; RectTransform repairRect = (RectTransform)source.transform; - window._repairPanelRect = (RectTransform)inventory.m_repairPanel; - window._backdropRect = Instantiate(window._repairPanelRect, window._repairPanelRect.parent, false); - window._backdropRect.name = "ServerGuideBackdrop"; - window._backdropRect.gameObject.SetActive(true); - window._backdropRect.SetSiblingIndex(window._repairPanelRect.GetSiblingIndex()); - foreach (Graphic graphic in window._backdropRect.GetComponentsInChildren(true)) + // Attach to the screen-navigation panel, away from crafting and mod filters. + RectTransform backdrop = Instantiate((RectTransform)inventory.m_repairPanel, inventory.m_infoPanel, false); + backdrop.name = "ServerGuideBackdrop"; + backdrop.anchorMin = backdrop.anchorMax = new Vector2(0f, 0.5f); + backdrop.pivot = new Vector2(1f, 0.5f); + // Repair's wide backing normally extends behind the crafting panel. + backdrop.sizeDelta = Vector2.one * ((RectTransform)inventory.m_repairPanel).rect.height; + backdrop.anchoredPosition = Vector2.zero; + backdrop.gameObject.SetActive(true); + foreach (Graphic graphic in backdrop.GetComponentsInChildren(true)) graphic.raycastTarget = false; // Copy the repair button's appearance without its repair action or gamepad shortcut. GameObject iconObject = new GameObject("ServerGuideIcon", typeof(RectTransform), typeof(Image), typeof(Button), typeof(UITooltip)); RectTransform rect = (RectTransform)iconObject.transform; - rect.SetParent(repairRect.parent, false); + rect.SetParent(backdrop, false); iconObject.layer = source.gameObject.layer; - rect.anchorMin = repairRect.anchorMin; - rect.anchorMax = repairRect.anchorMax; - rect.pivot = repairRect.pivot; + rect.anchorMin = rect.anchorMax = rect.pivot = new Vector2(0.5f, 0.5f); + rect.anchoredPosition = Vector2.zero; rect.sizeDelta = repairRect.sizeDelta; rect.localScale = repairRect.localScale; - window._buttonRect = rect; - window._repairRect = repairRect; - window.PositionButton(); Image frame = iconObject.GetComponent(); Image sourceFrame = source.GetComponent(); frame.sprite = sourceFrame.sprite; @@ -92,30 +88,6 @@ internal static void Create(InventoryGui inventory) tooltip.m_text = "Server Guide"; } - private void LateUpdate() - { - if (_buttonRect != null && _buttonRect.gameObject.activeInHierarchy) - PositionButton(); - } - - private void PositionButton() - { - if (_repairRect == null) return; - // Dverger Automation creates and repositions its button after inventory initialization. - // Repeat its spacing above Repair so all three backing panels form the same column. - RectTransform anchor = _repairRect.parent.Find("DA_CraftFromStorageToggle") as RectTransform - ?? _repairRect; - _buttonRect.anchorMin = anchor.anchorMin; - _buttonRect.anchorMax = anchor.anchorMax; - _buttonRect.pivot = anchor.pivot; - float spacing = anchor == _repairRect - ? _repairPanelRect.rect.height - : anchor.anchoredPosition.y - _repairRect.anchoredPosition.y; - _buttonRect.anchoredPosition = anchor.anchoredPosition + Vector2.up * spacing; - _backdropRect.anchoredPosition = _repairPanelRect.anchoredPosition - + (_buttonRect.anchoredPosition - _repairRect.anchoredPosition); - } - internal static void Open(InventoryGui inventory) { if (Reader == null || Player.m_localPlayer == null) return;