2010-11-08 14:28:59 +01:00
QuestHelper_File [ " collect_equip.lua " ] = " 4.0.1.$svnversion$ "
2010-10-24 23:17:33 +02:00
QuestHelper_Loadtime [ " collect_equip.lua " ] = GetTime ( )
local debug_output = false
if QuestHelper_File [ " collect_equip.lua " ] == " Development Version " then debug_output = true end
local GetItemType
local Notifier
local GetSpecBolus
local Patterns
local QHCI
-- why does this need to exist
local invloc_lookup_proto = {
INVTYPE_HEAD = { " HeadSlot " } ,
INVTYPE_NECK = { " NeckSlot " } ,
INVTYPE_SHOULDER = { " ShoulderSlot " } ,
INVTYPE_CHEST = { " ChestSlot " } ,
INVTYPE_ROBE = { " ChestSlot " } ,
INVTYPE_WAIST = { " WaistSlot " } ,
INVTYPE_LEGS = { " LegsSlot " } ,
INVTYPE_FEET = { " FeetSlot " } ,
INVTYPE_WRIST = { " WristSlot " } ,
INVTYPE_HAND = { " HandsSlot " } ,
INVTYPE_FINGER = { " Finger0Slot " , " Finger1Slot " } ,
INVTYPE_TRINKET = { " Trinket0Slot " , " Trinket1Slot " } ,
INVTYPE_CLOAK = { " BackSlot " } ,
INVTYPE_WEAPON = { " MainHandSlot " , " SecondaryHandSlot " } ,
INVTYPE_SHIELD = { " SecondaryHandSlot " } ,
INVTYPE_2HWEAPON = { " MainHandSlot " } ,
INVTYPE_WEAPONMAINHAND = { " MainHandSlot " } ,
INVTYPE_WEAPONOFFHAND = { " SecondaryHandSlot " } ,
INVTYPE_HOLDABLE = { " RangedSlot " } ,
INVTYPE_RANGED = { " RangedSlot " } ,
INVTYPE_THROWN = { " RangedSlot " } ,
INVTYPE_RANGEDRIGHT = { " RangedSlot " } ,
INVTYPE_RELIC = { " RangedSlot " } ,
}
local invloc_lookup = { }
for k , v in pairs ( invloc_lookup_proto ) do
local temp = { }
for _ , tv in pairs ( v ) do
table.insert ( temp , ( GetInventorySlotInfo ( tv ) ) )
end
invloc_lookup [ k ] = temp
end
local function Recheck ( item , location , competing )
2011-01-22 21:38:50 +01:00
local replaced_item = nil
2010-10-24 23:17:33 +02:00
local confused = false
for i , v in pairs ( invloc_lookup [ location ] ) do
if competing [ i ] then
local ilink = GetInventoryItemLink ( " player " , v )
if ilink then
local itype = GetItemType ( ilink )
local eqtext = nil
if itype == item then
2011-01-22 21:38:50 +01:00
replaced_item = competing [ i ]
2010-10-24 23:17:33 +02:00
elseif itype == competing [ i ] then
else
confused = true
end
end
end
end
if confused then
if debug_output then QuestHelper : TextOut ( string.format ( " Confused about %s " , GetItemInfo ( item ) ) ) end
return
end
if not QHCI [ item ] then QHCI [ item ] = { } end
2011-01-22 21:38:50 +01:00
if replaced_item then
2010-10-24 23:17:33 +02:00
if debug_output then QuestHelper : TextOut ( string.format ( " Equipped %s over %s " , GetItemInfo ( item ) , GetItemInfo ( replaced ) ) ) end
2011-01-23 21:41:55 +01:00
if not QHCI [ item ] . equip_yes then QHCI [ item ] . equip_yes = { } end
2011-01-22 21:38:50 +01:00
table.insert ( QHCI [ item ] . equip_yes , { replaced = replaced_item , spec = GetSpecBolus ( ) } )
2010-10-24 23:17:33 +02:00
else
for _ , v in pairs ( competing ) do
if debug_output then QuestHelper : TextOut ( string.format ( " Did not equip %s over %s " , GetItemInfo ( item ) , GetItemInfo ( v ) ) ) end
2011-01-22 21:38:50 +01:00
if not QHCI [ item ] . equip_no then QHCI [ item ] . equip_no = { } end
table.insert ( QHCI [ item ] . equip_no , { item = v , spec = GetSpecBolus ( ) } )
2010-10-24 23:17:33 +02:00
end
end
end
local function Looted ( message )
item = string.match ( message , Patterns.LOOT_ITEM_PUSHED_SELF )
if not item then item = string.match ( message , Patterns.LOOT_ITEM_SELF ) end
if not item then return end
local item = GetItemType ( message , true )
local name , _ , quality , ilvl , min , itype , isubtype , _ , equiploc , _ = GetItemInfo ( item )
if name and IsEquippableItem ( item ) and min <= UnitLevel ( " player " ) and invloc_lookup [ equiploc ] then -- The level comparison may be redundant
local competing = { }
local nonempty = false
for i , v in pairs ( invloc_lookup [ equiploc ] ) do
local litem = GetInventoryItemLink ( " player " , v )
if litem then litem = GetItemType ( litem ) end
if litem and litem ~= item then competing [ i ] = litem nonempty = true end
end
if not nonempty then return end -- congratulations you are better than nothing, we do not care
Notifier ( GetTime ( ) + 5 * 60 , function ( ) Recheck ( item , equiploc , competing ) end )
end
end
function QH_Collect_Equip_Init ( QHCData , API )
if not QHCData.item then QHCData.item = { } end
QHCI = QHCData.item
Patterns = API.Patterns
QuestHelper : Assert ( Patterns )
API.Patterns_Register ( " LOOT_ITEM_PUSHED_SELF " , " |c.*|r " )
API.Patterns_Register ( " LOOT_ITEM_SELF " , " |c.*|r " )
QH_Event ( " CHAT_MSG_LOOT " , Looted )
GetItemType = API.Utility_GetItemType
Notifier = API.Utility_Notifier
GetSpecBolus = API.Utility_GetSpecBolus
QuestHelper : Assert ( GetItemType )
QuestHelper : Assert ( Notifier )
QuestHelper : Assert ( GetSpecBolus )
end