Beispiel #1
0
        static bool GatherableInteraction_CharSpellTakeItem_Pre(GatherableInteraction __instance)
        {
            #region quit
            if (!__instance.m_validItem.TryAssign(out var item))
            {
                return(true);
            }
            #endregion

            item.ReduceDurability(_gatheringDurabilityCost.Value.x + (_gatheringDurabilityCost.Value.y - 5) / 100f * item.MaxDurability);
            return(true);
        }
Beispiel #2
0
        static bool GatherableInteraction_GetValidItem_Pre(GatherableInteraction __instance, ref Item __result, Character _character)
        {
            #region quit
            if (!_moreGatheringTools || !__instance.Gatherable.RequiredItem.TryAssign(out var requiredItem) ||
                requiredItem.ItemID != "Mining Pick".ItemID() && requiredItem.ItemID != "Fishing Harpoon".ItemID())
            {
                return(true);
            }
            #endregion

            // Cache
            Weapon.WeaponType requiredType   = requiredItem.ItemID == "Fishing Harpoon".ItemID() ? Weapon.WeaponType.Spear_2H : Weapon.WeaponType.Mace_2H;
            List <Item>       potentialTools = new List <Item>();

            // Search bag & pouch
            List <ItemContainer> containers = new List <ItemContainer>();
            if (_character.Inventory.EquippedBag.TryAssign(out var bag))
            {
                containers.Add(bag.m_container);
            }
            if (_character.Inventory.Pouch.TryAssign(out var pouch))
            {
                containers.Add(pouch);
            }

            foreach (var container in containers)
            {
                if (potentialTools.IsEmpty())
                {
                    foreach (var item in container.GetContainedItems())
                    {
                        if (item.TryAs(out Weapon weapon) && weapon.Type == requiredType && weapon.DurabilityRatio > 0)
                        {
                            potentialTools.Add(item);
                        }
                    }
                }
            }

            // Search equipment
            if (potentialTools.IsEmpty() &&
                _character.Inventory.Equipment.m_equipmentSlots[(int)EquipmentSlot.EquipmentSlotIDs.RightHand].EquippedItem.TryAs(out Weapon mainWeapon) &&
                mainWeapon.Type == requiredType && mainWeapon.DurabilityRatio > 0)
            {
                potentialTools.Add(mainWeapon);
            }

            // Choose tool
            Item chosenTool = null;
            if (potentialTools.IsNotEmpty())
            {
                int minValue = potentialTools.Min(tool => tool.RawCurrentValue);
                chosenTool = potentialTools.First(tool => tool.RawCurrentValue == minValue);
            }

            // Finalize
            __instance.m_validItem       = chosenTool;
            __instance.m_isCurrentWeapon = chosenTool != null && chosenTool.IsEquipped;
            __result = chosenTool;
            return(false);
        }