Quantcast WoWInterface - View Single Post - Equipment Manager and Legion legendaries
View Single Post
12-04-16, 01:26 AM   #1
p3lim
A Pyroguard Emberseer
 
p3lim's Avatar
AddOn Author - Click to view addons
Join Date: Feb 2007
Posts: 1,623
Equipment Manager and Legion legendaries

Legion legendaries are unique-equipped up to two at the same time, but the UseEquipmentSet API is stupid, it will fail should you try to swap to a different legendary without unequipping a previous one first (fails with the "Too many legendaries equipped" error).

Here is a dirty fix to the EquipmentManager_EquipSet function:
Lua Code:
  1. function EquipmentManager_EquipSet(name)
  2.     if(EquipmentSetContainsLockedItems(name) or UnitCastingInfo('player')) then
  3.         UIErrorsFrame:AddMessage(ERR_CLIENT_LOCKED_OUT, 1, 0.1, 0.1, 1)
  4.         return
  5.     end
  6.  
  7.     -- BUG: legion legendaries will halt the set equipping if the user is swapping
  8.     -- different slotted legendaries beyond the 1/2 equipped limit
  9.     local locations = GetEquipmentSetLocations(name)
  10.     for inventoryID = 1, 17 do
  11.         local itemLink = GetInventoryItemLink('player', inventoryID)
  12.         if(itemLink) then
  13.             local rarity = GetInventoryItemQuality('player', inventoryID)
  14.             if(rarity == 5) then
  15.                 -- legendary item found, manually replace it with the item from the new set
  16.                 local action = EquipmentManager_EquipItemByLocation(locations[inventoryID], inventoryID)
  17.                 if(action) then
  18.                     EquipmentManager_RunAction(action)
  19.                 end
  20.             end
  21.         end
  22.     end
  23.  
  24.     UseEquipmentSet(name)
  25. end

Non-blocking version:
Lua Code:
  1. function EquipmentManager_EquipSet(name)
  2.     if(EquipmentSetContainsLockedItems(name) or UnitCastingInfo('player')) then
  3.         UIErrorsFrame:AddMessage(ERR_CLIENT_LOCKED_OUT, 1, 0.1, 0.1, 1)
  4.         return
  5.     end
  6.  
  7.     -- BUG: legion legendaries will halt the set equipping if the user is swapping
  8.     -- different slotted legendaries beyond the 1/2 equipped limit
  9.     local locations = GetEquipmentSetLocations(name)
  10.     for inventoryID = 1, 17 do
  11.         local itemLink = GetInventoryItemLink('player', inventoryID)
  12.         if(itemLink) then
  13.             local rarity = GetInventoryItemQuality('player', inventoryID)
  14.             if(rarity == 5) then
  15.                 -- legendary item found, manually replace it with the item from the new set
  16.                 local action = EquipmentManager_EquipItemByLocation(locations[inventoryID], inventoryID)
  17.                 if(action) then
  18.                     EquipmentManager_RunAction(action)
  19.                     locations[inventoryID] = nil
  20.                 end
  21.             end
  22.         end
  23.     end
  24.  
  25.     -- Equip remaining items through _RunAction to avoid blocking from UseEquipmentSet
  26.     for inventoryID, location in next, locations do
  27.         local action = EquipmentManager_EquipItemByLocation(location, inventoryID)
  28.         if(action) then
  29.             EquipmentManager_RunAction(action)
  30.         end
  31.     end
  32. end

Last edited by p3lim : 12-04-16 at 01:29 AM.