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.

114 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