You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.1 KiB
113 lines
3.1 KiB
local GlobalAddonName, ExRT = ...
|
|
|
|
local module = ExRT:New("LootLink",ExRT.L.LootLink,not ExRT.isClassic)
|
|
local ELib,L = ExRT.lib,ExRT.L
|
|
|
|
local VMRT = nil
|
|
|
|
local GetItemInfo, GetItemInfoInstant = C_Item and C_Item.GetItemInfo or GetItemInfo, C_Item and C_Item.GetItemInfoInstant or GetItemInfoInstant
|
|
|
|
|
|
module.db.cache = {}
|
|
|
|
function module.main:ADDON_LOADED()
|
|
VMRT = _G.VMRT
|
|
VMRT.LootLink = VMRT.LootLink or {}
|
|
|
|
if VMRT.LootLink.enabled then
|
|
module:Enable()
|
|
end
|
|
module:RegisterSlash()
|
|
end
|
|
|
|
local bannedItems = {
|
|
["124442"] = true, --Chaos Crystal
|
|
}
|
|
|
|
if ExRT.isClassic then
|
|
function module.options:Load()
|
|
self:CreateTilte()
|
|
|
|
self.enableChk = ELib:Check(self,L.LootLinkEnable,VMRT.LootLink.enabled):Point(10,-30):AddColorState():OnClick(function(self)
|
|
if self:GetChecked() then
|
|
VMRT.LootLink.enabled = true
|
|
module:Enable()
|
|
else
|
|
VMRT.LootLink.enabled = nil
|
|
module:Disable()
|
|
end
|
|
end)
|
|
|
|
self.ilvlChk = ELib:Check(self,SHOW_ITEM_LEVEL,VMRT.LootLink.ilvl):Point(10,-55):OnClick(function(self)
|
|
if self:GetChecked() then
|
|
VMRT.LootLink.ilvl = true
|
|
else
|
|
VMRT.LootLink.ilvl = nil
|
|
end
|
|
end)
|
|
|
|
self.shtml1 = ELib:Text(self,L.LootLinkSlashHelp,12):Size(650,0):Point("TOP",0,-95):Top()
|
|
end
|
|
end
|
|
|
|
function module:Enable()
|
|
if ExRT.isClassic then
|
|
module:RegisterEvents('LOOT_OPENED')
|
|
end
|
|
end
|
|
function module:Disable()
|
|
module:UnregisterEvents('LOOT_OPENED')
|
|
end
|
|
|
|
local function LootLink(linkAnyway)
|
|
local lootMethod = GetLootMethod()
|
|
local _,zoneType,difficulty,_,_,_,_,mapID = GetInstanceInfo()
|
|
if (lootMethod == "personalloot" or difficulty == 7 or difficulty == 17) and not linkAnyway then
|
|
return
|
|
end
|
|
local isFutureRaid = zoneType == 'raid' and (mapID or 0) > 1450
|
|
if ExRT.isClassic and zoneType == "raid" then
|
|
isFutureRaid = true
|
|
end
|
|
if linkAnyway then
|
|
isFutureRaid = false
|
|
end
|
|
local count = GetNumLootItems()
|
|
local cache = {}
|
|
local numLink = 0
|
|
local chat_type, playerName = ExRT.F.chatType()
|
|
for i=1,count do
|
|
local sourceGUID = GetLootSourceInfo(i)
|
|
if sourceGUID and (not module.db.cache[sourceGUID] or linkAnyway) then
|
|
local mobID = ExRT.F.GUIDtoID(sourceGUID)
|
|
if (linkAnyway or isFutureRaid) then
|
|
local itemLink = GetLootSlotLink(i)
|
|
local _,_,_,_,quality = GetLootSlotInfo(i)
|
|
if itemLink and (not isFutureRaid or (quality and quality >= 4)) then
|
|
local itemID = itemLink:match("item:(%d+)")
|
|
if not itemID or not bannedItems[itemID] then
|
|
numLink = numLink + 1
|
|
local _, _, _, iLevel = GetItemInfo(itemLink)
|
|
iLevel = VMRT.LootLink.ilvl and iLevel or nil
|
|
SendChatMessage(numLink..": "..itemLink..(iLevel and (" ("..iLevel..")") or ""),chat_type,nil,playerName)
|
|
end
|
|
end
|
|
end
|
|
cache[sourceGUID] = true
|
|
end
|
|
end
|
|
for GUID,_ in pairs(cache) do
|
|
module.db.cache[GUID] = true
|
|
end
|
|
end
|
|
|
|
function module.main:LOOT_OPENED()
|
|
LootLink()
|
|
end
|
|
function module:slash(arg)
|
|
if arg == "loot" then
|
|
LootLink(true)
|
|
elseif arg == "help" then
|
|
print("|cff00ff00/rt loot|r - link items from lootwindow to chat")
|
|
end
|
|
end
|
|
|