private static void PatchHotkeyBar(ref HotkeyBar __instance, ref Player player) { if (!player || player.IsDead()) { return; } if (!Main.showDurabilityColor.Value) { return; } foreach (ItemDrop.ItemData itemData in __instance.m_items) { HotkeyBar.ElementData element = __instance.m_elements[itemData.m_gridPos.x]; if (element.m_icon.transform.localScale == Vector3.one) { element.m_icon.transform.localScale *= Mathf.Max(Main.iconScaleSize.Value, 0.1f); } if (itemData.m_shared.m_useDurability) { if (itemData.m_durability <= 0f) // Item has no durability, original code should do this { //element.m_durability.SetValue(1f); //element.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f)); } else // Item has durability left { Patches.DurabilityBar.UpdateColor(element, itemData.GetDurabilityPercentage()); } } } }
public static void UpdateColor(HotkeyBar.ElementData element, float durability) { element.m_durability.SetValue(durability); // Might be to update items colorbar? This is from original code. element.m_durability.ResetColor(); // Between 1f - 0f switch (durability) { case float n when(n >= 0.75f): // Color green element.m_durability.SetColor(activeColor[0]); break; case float n when(n >= 0.50f): // Color yellow element.m_durability.SetColor(activeColor[1]); break; case float n when(n >= 0.25f): // Color Orange element.m_durability.SetColor(activeColor[2]); break; case float n when(n >= 0f): // Color Red element.m_durability.SetColor(activeColor[3]); break; } }
public static void Postfix(HotkeyBar __instance) { foreach (var itemData in __instance.m_items) { var elementIndex = itemData.m_gridPos.x; if (elementIndex >= 0 && elementIndex < __instance.m_elements.Count) { HotkeyBar.ElementData element = __instance.m_elements[elementIndex]; if (itemData.HasMagicEffect(MagicEffectType.Indestructible)) { element.m_durability.gameObject.SetActive(false); } } } }
// Token: 0x060004F3 RID: 1267 RVA: 0x00028F64 File Offset: 0x00027164 private void UpdateIcons(Player player) { if (!player || player.IsDead()) { foreach (HotkeyBar.ElementData elementData in this.m_elements) { UnityEngine.Object.Destroy(elementData.m_go); } this.m_elements.Clear(); return; } player.GetInventory().GetBoundItems(this.m_items); this.m_items.Sort((ItemDrop.ItemData x, ItemDrop.ItemData y) => x.m_gridPos.x.CompareTo(y.m_gridPos.x)); int num = 0; foreach (ItemDrop.ItemData itemData in this.m_items) { if (itemData.m_gridPos.x + 1 > num) { num = itemData.m_gridPos.x + 1; } } if (this.m_elements.Count != num) { foreach (HotkeyBar.ElementData elementData2 in this.m_elements) { UnityEngine.Object.Destroy(elementData2.m_go); } this.m_elements.Clear(); for (int i = 0; i < num; i++) { HotkeyBar.ElementData elementData3 = new HotkeyBar.ElementData(); elementData3.m_go = UnityEngine.Object.Instantiate <GameObject>(this.m_elementPrefab, base.transform); elementData3.m_go.transform.localPosition = new Vector3((float)i * this.m_elementSpace, 0f, 0f); elementData3.m_go.transform.Find("binding").GetComponent <Text>().text = (i + 1).ToString(); elementData3.m_icon = elementData3.m_go.transform.transform.Find("icon").GetComponent <Image>(); elementData3.m_durability = elementData3.m_go.transform.Find("durability").GetComponent <GuiBar>(); elementData3.m_amount = elementData3.m_go.transform.Find("amount").GetComponent <Text>(); elementData3.m_equiped = elementData3.m_go.transform.Find("equiped").gameObject; elementData3.m_queued = elementData3.m_go.transform.Find("queued").gameObject; elementData3.m_selection = elementData3.m_go.transform.Find("selected").gameObject; this.m_elements.Add(elementData3); } } foreach (HotkeyBar.ElementData elementData4 in this.m_elements) { elementData4.m_used = false; } bool flag = ZInput.IsGamepadActive(); for (int j = 0; j < this.m_items.Count; j++) { ItemDrop.ItemData itemData2 = this.m_items[j]; HotkeyBar.ElementData elementData5 = this.m_elements[itemData2.m_gridPos.x]; elementData5.m_used = true; elementData5.m_icon.gameObject.SetActive(true); elementData5.m_icon.sprite = itemData2.GetIcon(); elementData5.m_durability.gameObject.SetActive(itemData2.m_shared.m_useDurability); if (itemData2.m_shared.m_useDurability) { if (itemData2.m_durability <= 0f) { elementData5.m_durability.SetValue(1f); elementData5.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f)); } else { elementData5.m_durability.SetValue(itemData2.GetDurabilityPercentage()); elementData5.m_durability.ResetColor(); } } elementData5.m_equiped.SetActive(itemData2.m_equiped); elementData5.m_queued.SetActive(player.IsItemQueued(itemData2)); if (itemData2.m_shared.m_maxStackSize > 1) { elementData5.m_amount.gameObject.SetActive(true); elementData5.m_amount.text = itemData2.m_stack.ToString() + "/" + itemData2.m_shared.m_maxStackSize.ToString(); } else { elementData5.m_amount.gameObject.SetActive(false); } } for (int k = 0; k < this.m_elements.Count; k++) { HotkeyBar.ElementData elementData6 = this.m_elements[k]; elementData6.m_selection.SetActive(flag && k == this.m_selected); if (!elementData6.m_used) { elementData6.m_icon.gameObject.SetActive(false); elementData6.m_durability.gameObject.SetActive(false); elementData6.m_equiped.SetActive(false); elementData6.m_queued.SetActive(false); elementData6.m_amount.gameObject.SetActive(false); } } }
public static bool Prefix(HotkeyBar __instance, Player player) { if (__instance.name != "QuickSlotsHotkeyBar") { return(true); } if (player == null || player.IsDead()) { foreach (var element in __instance.m_elements) { Object.Destroy(element.m_go); } __instance.m_elements.Clear(); } else { player.GetQuickSlotInventory().GetBoundItems(__instance.m_items); __instance.m_items.Sort((x, y) => x.m_gridPos.x.CompareTo(y.m_gridPos.x)); const int showElementCount = EquipmentAndQuickSlots.QuickSlotCount; if (__instance.m_elements.Count != showElementCount) { foreach (var element in __instance.m_elements) { Object.Destroy(element.m_go); } __instance.m_elements.Clear(); for (var index = 0; index < showElementCount; ++index) { var elementData = new HotkeyBar.ElementData() { m_go = Object.Instantiate(__instance.m_elementPrefab, __instance.transform) }; elementData.m_go.transform.localPosition = new Vector3(index * __instance.m_elementSpace, 0.0f, 0.0f); elementData.m_icon = elementData.m_go.transform.transform.Find("icon").GetComponent <Image>(); elementData.m_durability = elementData.m_go.transform.Find("durability").GetComponent <GuiBar>(); elementData.m_amount = elementData.m_go.transform.Find("amount").GetComponent <Text>(); elementData.m_equiped = elementData.m_go.transform.Find("equiped").gameObject; elementData.m_queued = elementData.m_go.transform.Find("queued").gameObject; elementData.m_selection = elementData.m_go.transform.Find("selected").gameObject; var bindingText = elementData.m_go.transform.Find("binding").GetComponent <Text>(); bindingText.enabled = true; bindingText.horizontalOverflow = HorizontalWrapMode.Overflow; bindingText.text = EquipmentAndQuickSlots.GetBindingLabel(index); __instance.m_elements.Add(elementData); } } foreach (var element in __instance.m_elements) { element.m_used = false; } var isGamepadActive = ZInput.IsGamepadActive(); foreach (var itemData in __instance.m_items) { var element = __instance.m_elements[itemData.m_gridPos.x]; element.m_used = true; element.m_icon.gameObject.SetActive(true); element.m_icon.sprite = itemData.GetIcon(); element.m_durability.gameObject.SetActive(itemData.m_shared.m_useDurability); if (itemData.m_shared.m_useDurability) { if (itemData.m_durability <= 0.0) { element.m_durability.SetValue(1f); element.m_durability.SetColor((double)Mathf.Sin(Time.time * 10f) > 0.0 ? Color.red : new Color(0.0f, 0.0f, 0.0f, 0.0f)); } else { element.m_durability.SetValue(itemData.GetDurabilityPercentage()); element.m_durability.ResetColor(); } } element.m_equiped.SetActive(itemData.m_equiped); element.m_queued.SetActive(player.IsItemQueued(itemData)); if (itemData.m_shared.m_maxStackSize > 1) { element.m_amount.gameObject.SetActive(true); element.m_amount.text = itemData.m_stack.ToString() + "/" + itemData.m_shared.m_maxStackSize.ToString(); } else { element.m_amount.gameObject.SetActive(false); } } for (var index = 0; index < __instance.m_elements.Count; ++index) { var element = __instance.m_elements[index]; element.m_selection.SetActive(isGamepadActive && index == __instance.m_selected); if (!element.m_used) { element.m_icon.gameObject.SetActive(false); element.m_durability.gameObject.SetActive(false); element.m_equiped.SetActive(false); element.m_queued.SetActive(false); element.m_amount.gameObject.SetActive(false); } } } return(false); }
private static void DisplayAmmoCountsUnderBowHotbarIcon(HotkeyBar __instance, Player player) { GameObject ammoCounter = GameObject.Find(hudObjectName); // Find the bow in the hotbar ItemDrop.ItemData bow = null; foreach (ItemDrop.ItemData item in __instance.m_items) { if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Bow) { if (bow == null || player.IsItemEquiped(item)) { bow = item; } } } // If there is no bow or it is not equipped, remove the text element if (bow == null || (Configuration.Current.Hud.displayBowAmmoCounts == 1 && !player.IsItemEquiped(bow))) { if (ammoCounter != null) { GameObject.Destroy(ammoCounter); ammoCounter = null; } return; } // Make sure we have a valid index if (__instance.m_elements.Count >= bow.m_gridPos.x && bow.m_gridPos.x >= 0) { // Create a new text element to display the ammo counts HotkeyBar.ElementData element = __instance.m_elements[bow.m_gridPos.x]; if (ammoCounter == null) { ammoCounter = GameObject.Instantiate(element.m_amount.gameObject, element.m_amount.gameObject.transform.parent, false); ammoCounter.name = hudObjectName; ammoCounter.SetActive(true); Vector3 offset = element.m_amount.gameObject.transform.position - element.m_icon.transform.position; ammoCounter.transform.Translate(offset); Text ammoText = ammoCounter.GetComponentInChildren <Text>(); ammoText.fontSize -= 2; } // Attach it to the hotbar icon ammoCounter.gameObject.transform.SetParent(element.m_amount.gameObject.transform.parent, false); // Find the active ammo being used for thebow ItemDrop.ItemData ammoItem = player.m_ammoItem; if (ammoItem == null) { ammoItem = player.GetInventory().GetAmmoItem(bow.m_shared.m_ammoType); } // Calculate totals to display for current ammo type and all types int currentAmmo = 0; int totalAmmo = 0; var inventoryItems = player.GetInventory().GetAllItems(); foreach (ItemDrop.ItemData inventoryItem in inventoryItems) { if (inventoryItem.m_shared.m_ammoType == bow.m_shared.m_ammoType && (inventoryItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Ammo || inventoryItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Consumable)) { totalAmmo += inventoryItem.m_stack; if (inventoryItem.m_shared.m_name == ammoItem.m_shared.m_name) { currentAmmo += inventoryItem.m_stack; } } } // Change the visual display text for the UI Text ammoCounterText = ammoCounter.GetComponentInChildren <Text>(); if (totalAmmo == 0) { ammoCounterText.text = noAmmoDisplay; } else { ammoCounterText.text = ammoItem.m_shared.m_name.Split('_').Last() + " " + currentAmmo + "/" + totalAmmo; } } }
public static bool Prefix(HotkeyBar __instance, Player player, List <HotkeyBar.ElementData> ___m_elements, List <ItemDrop.ItemData> ___m_items, int ___m_selected) { if (!EquipmentAndQuickSlots.QuickSlotsEnabled.Value) { return(true); } if (player == null || player.IsDead()) { foreach (HotkeyBar.ElementData element in ___m_elements) { UnityEngine.Object.Destroy((UnityEngine.Object)element.m_go); } ___m_elements.Clear(); } else { player.GetInventory().GetBoundItems(___m_items); ___m_items.Sort((Comparison <ItemDrop.ItemData>)((a, b) => a.m_gridPos.y == b.m_gridPos.y ? a.m_gridPos.x.CompareTo(b.m_gridPos.x) : a.m_gridPos.y.CompareTo(b.m_gridPos.y))); int num = player.GetInventory().m_width + EquipmentAndQuickSlots.QuickUseSlotCount; if (___m_elements.Count != num) { foreach (HotkeyBar.ElementData element in ___m_elements) { UnityEngine.Object.Destroy((UnityEngine.Object)element.m_go); } ___m_elements.Clear(); for (int index = 0; index < num; ++index) { var parent = __instance.transform; if (index >= 8) { parent = __instance.transform.parent.Find("healthpanel"); } HotkeyBar.ElementData elementData = new HotkeyBar.ElementData() { m_go = UnityEngine.Object.Instantiate <GameObject>(__instance.m_elementPrefab, parent) }; if (index < 8) { elementData.m_go.transform.localPosition = new Vector3(index * __instance.m_elementSpace, 0.0f, 0.0f); elementData.m_go.transform.Find("binding").GetComponent <Text>().text = (index + 1).ToString(); } else { var offset = new Vector2(100, -150); var quickSlotIndex = index - 8; elementData.m_go.transform.localPosition = new Vector3(offset.x, offset.y - quickSlotIndex * __instance.m_elementSpace, 0.0f); elementData.m_go.transform.localEulerAngles = new Vector3(0, 0, -90); string label = EquipmentAndQuickSlots.GetBindingLabel(quickSlotIndex); var bindingText = elementData.m_go.transform.Find("binding").GetComponent <Text>(); bindingText.text = label; bindingText.horizontalOverflow = HorizontalWrapMode.Overflow; } elementData.m_icon = elementData.m_go.transform.transform.Find("icon").GetComponent <Image>(); elementData.m_durability = elementData.m_go.transform.Find("durability").GetComponent <GuiBar>(); elementData.m_amount = elementData.m_go.transform.Find("amount").GetComponent <Text>(); elementData.m_equiped = elementData.m_go.transform.Find("equiped").gameObject; elementData.m_queued = elementData.m_go.transform.Find("queued").gameObject; elementData.m_selection = elementData.m_go.transform.Find("selected").gameObject; ___m_elements.Add(elementData); } } foreach (HotkeyBar.ElementData element in ___m_elements) { element.m_used = false; } bool isGamepadActive = ZInput.IsGamepadActive(); for (int index = 0; index < ___m_items.Count; ++index) { ItemDrop.ItemData itemData = ___m_items[index]; HotkeyBar.ElementData element = GetElementForItem(___m_elements, itemData); element.m_used = true; element.m_icon.gameObject.SetActive(true); element.m_icon.sprite = itemData.GetIcon(); element.m_durability.gameObject.SetActive(itemData.m_shared.m_useDurability); if (itemData.m_shared.m_useDurability) { if (itemData.m_durability <= 0.0f) { element.m_durability.SetValue(1.0f); element.m_durability.SetColor(Mathf.Sin(Time.time * 10.0f) > 0.0f ? Color.red : new Color(0.0f, 0.0f, 0.0f, 0.0f)); } else { element.m_durability.SetValue(itemData.GetDurabilityPercentage()); element.m_durability.ResetColor(); } } element.m_equiped.SetActive(itemData.m_equiped); element.m_queued.SetActive(player.IsItemQueued(itemData)); if (itemData.m_shared.m_maxStackSize > 1) { element.m_amount.gameObject.SetActive(true); element.m_amount.text = $"{itemData.m_stack}/{itemData.m_shared.m_maxStackSize}"; } else { element.m_amount.gameObject.SetActive(false); } } for (int index = 0; index < ___m_elements.Count; ++index) { HotkeyBar.ElementData element = ___m_elements[index]; element.m_selection.SetActive(isGamepadActive && index == ___m_selected); if (!element.m_used) { element.m_icon.gameObject.SetActive(false); element.m_durability.gameObject.SetActive(false); element.m_equiped.SetActive(false); element.m_queued.SetActive(false); element.m_amount.gameObject.SetActive(false); } } } return(false); }