Esempio n. 1
0
        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());
                    }
                }
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
            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);
                        }
                    }
                }
            }
Esempio n. 4
0
    // 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);
            }
        }
    }
Esempio n. 5
0
            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);
            }
Esempio n. 6
0
        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;
                }
            }
        }
Esempio n. 7
0
        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);
        }