From 9bb2f67cbb4ae63ab46ffe3001e0cf66aa935c1b Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Tue, 15 Oct 2013 01:26:26 +0000 Subject: [PATCH] Add new script condition HasEquippedItem(itemId). This is a generic condition that can test whether a particular itemId is currently equipped. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1060 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleCondition.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ OvaleEquipement.lua | 23 +++++++++++++++++++++-- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/OvaleCondition.lua b/OvaleCondition.lua index c94eae6..4822348 100644 --- a/OvaleCondition.lua +++ b/OvaleCondition.lua @@ -1706,6 +1706,52 @@ OvaleCondition.conditions.glyph = function(condition) return TestBoolean(OvaleSpellBook:IsActiveGlyph(condition[1]), condition[2]) end +--- Test if the player has a particular item equipped. +-- @name HasEquippedItem +-- @paramsig boolean +-- @param item Item to be checked whether it is equipped. +-- @param yesno Optional. If yes, then return true if the item is equipped. If no, then return true if it isn't equipped. +-- Default is yes. +-- Valid values: yes, no. +-- @param ilevel Optional. Checks the item level of the equipped item. If not specified, then any item level is valid. +-- Defaults to not specified. +-- Valid values: ilevel=N, where N is any number. +-- @param slot Optional. Sets the inventory slot to check. If not specified, then all slots are checked. +-- Defaults to not specified. +-- Valid values: slot=SLOTNAME, where SLOTNAME is a valid slot name, e.g., HandSlot. + +OvaleCondition.conditions.hasequippeditem = function(condition) + local itemId, yesno = condition[1], condition[2] + local ilevel, slot = condition.ilevel, condition.slot + local slotId + if type(itemId) == "number" then + slotId = OvaleEquipement:HasEquippedItem(itemId, slot) + if slotId then + if ilevel then + if ilevel == OvaleEquipement:GetEquippedItemLevel(slotId) then + return TestBoolean(true, yesno) + end + else + return TestBoolean(true, yesno) + end + end + elseif OvaleData.itemList[itemId] then + for _, v in pairs(OvaleData.itemList[itemId]) do + slotId = OvaleEquipement:HasEquippedItem(v, slot) + if slotId then + if ilevel then + if ilevel == OvaleEquipement:GetEquippedItemLevel(slotId) then + return TestBoolean(true, yesno) + end + else + return TestBoolean(true, yesno) + end + end + end + end + return TestBoolean(false, yesno) +end + --- Test if the player has full control, i.e., isn't feared, charmed, etc. -- @name HasFullControl -- @paramsig boolean diff --git a/OvaleEquipement.lua b/OvaleEquipement.lua index a79a42a..07e7856 100644 --- a/OvaleEquipement.lua +++ b/OvaleEquipement.lua @@ -1391,6 +1391,25 @@ function OvaleEquipement:GetEquippedItemLevel(slotId) return self_equippedItemLevels[slotId] end +function OvaleEquipement:HasEquippedItem(itemId, slotId) + if slotId and type(slotId) ~= "number" then + if not OVALE_SLOTNAME[slotId] then return nil end + slotId = API_GetInventorySlotInfo(slotId) + end + if slotId then + if self_equippedItems[slotId] == itemId then + return slotId + end + else + for slotId, equippedItemId in pairs(self_equippedItems) do + if equippedItemId == itemId then + return slotId + end + end + end + return nil +end + function OvaleEquipement:HasMainHandWeapon() return self_mainHandItemType == "INVTYPE_WEAPON" or self_mainHandItemType == "INVTYPE_WEAPONMAINHAND" @@ -1407,8 +1426,8 @@ function OvaleEquipement:HasShield() end function OvaleEquipement:HasTrinket(itemId) - return self:GetEquippedItem(INVSLOT_TRINKET1) == itemId - or self:GetEquippedItem(INVSLOT_TRINKET2) == itemId + return self:HasEquippedItem(itemId, INVSLOT_TRINKET1) + or self:HasEquippedItem(itemId, INVSLOT_TRINKET2) end function OvaleEquipement:HasTwoHandedWeapon() -- 1.7.9.5