Files
coa-atlasloot/AtlasLoot/Core/LootButtons.lua
T
Anch 64df5f1f90 update to release 7.3.15 (#10)
* update to release 7.3.1

* minor tweaks

- tweaked the drop location text to display a bit more cleanly
- added boss sigils to bc raid tables
- added right click context menu to boss name list so you can open db to that boss (only has raids atm)
- the All dungeon items list now wont precache past the normal loot

* fixs and text display change

- updated old locations to have new display
- frame now sits on top when selected
- fixed some incorrect ids

* favorites button change/loot table updates

- Changed how favorites buttons are saved you now alt right click them to save
- Added missing new t0 sets to classic dungeon sets
- Added missing new trash loot weapons to Black temple

* minor changes/fixs

- fixed t3 incorrect itemids
- added heroic bloodforged

* merg from main repo

* bug fix and item removals

- some quest tooltip was showing up incorrect
- removed depreciated high risk patterns

* swapped to using ItemButtonTemplate for popup window buttons

* added all the new heirloom items

* all the changes from main git up to 7.3.9

* update to version 7.3.15

* Revert "Merge branch 'main' into anch-main"

This reverts commit 8db63dc268f910dcc1df31d50072735263eeda58, reversing
changes made to f536a382a8fce401e0d8dcfaae8eb0a2c61f1e08.
2024-07-15 06:57:34 -07:00

605 lines
26 KiB
Lua

local AL = LibStub("AceLocale-3.0"):GetLocale("AtlasLoot")
local WHITE = "|cffFFFFFF"
local GREEN = "|cff1eff00"
local BLUE = "|cff0070dd"
local ORANGE = "|cffFF8400"
local GOLD = "|cffffcc00"
local LIGHTBLUE = "|cFFADD8E6"
local ORANGE2 = "|cFFFFA500"
local AtlasLootScanTooltip = CreateFrame("GAMETOOLTIP","AtlasLootScanTooltip",nil,"GameTooltipTemplate")
AtlasLootScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
local playerName = UnitName("player")
local realmName = GetRealmName()
local playerFaction = UnitFactionGroup("player")
--Set Tooltip for extra crafting data
function AtlasLoot:SetCraftingTooltip(data)
local craftingData = data.craftingData
if not craftingData then return end
--extra information on where to find the recipe
if (self.db.profile.recipeExtraInfoSwitch and IsControlKeyDown()) or (not self.db.profile.recipeExtraInfoSwitch) then
GameTooltip:AddLine(" ")
for _,v in pairs(craftingData) do
local line1 = v[1]
local line2 = v[2]
if v.fac then line1 = v.fac[1]..line1 end
if v.cords and v.cords[1] ~= 0 and v.cords[2] ~= 0 then
if line2 then
line2 = WHITE..line2..WHITE.." ("..GOLD..v.cords[1]..WHITE..", "..GOLD..v.cords[2]..WHITE..")"
else
line2 = WHITE.." ("..GOLD..v.cords[1]..WHITE..", "..GOLD..v.cords[2]..WHITE..")"
end
end
GameTooltip:AddDoubleLine(line1, line2)
end
else
GameTooltip:AddLine(" ")
GameTooltip:AddLine(WHITE..AL["Hold CTRL for source"])
end
end
--Set quest tooltip info
function AtlasLoot:SetQuestTooltip(data)
if not data.quest then return end
for _,v in ipairs(data.quest) do
local quest = AtlasLoot_CraftingData["QuestList"][v]
local text = data.quest.text or ""
GameTooltip:AddDoubleLine(quest[1], WHITE..text)
GameTooltip:AddDoubleLine(quest[5][1]..quest[2], WHITE.." ("..GOLD..quest[3]..WHITE..", "..GOLD..quest[4]..WHITE..")")
end
end
--Set droprate tooltip
function AtlasLoot:SetDroprateTooltip(data)
if not data.droprate then return end
if type(data.droprate) == "table" then
if not data.droprate[ItemindexID] then return end
local dropIndex = ItemindexID
if ItemindexID == 5 then
dropIndex = 4
elseif ItemindexID == 4 then
dropIndex = 5
end
if data.droprate[dropIndex] then
GameTooltip:AddLine(AL["Drop Rate: "]..data.droprate[dropIndex], 1, 1, 0)
end
else
GameTooltip:AddLine(AL["Drop Rate: "]..data.droprate, 1, 1, 0)
end
end
--Set extra info tooltip
function AtlasLoot:SetExtraTooltip(data)
if not data.extraInfo then return end
GameTooltip:AddLine(AL["Extra Info: "]..data.extraInfo, 1, 1, 0)
end
--------------------------------------------------------------------------------
-- Item OnEnter
-- Called when a loot item is moused over
--------------------------------------------------------------------------------
function AtlasLoot:ItemOnEnter(data)
GameTooltip:ClearLines()
local spellID = data.spellID
local itemID = data.itemID
if itemID or spellID then
if not spellID then
--Default game tooltips
if itemID then
if GetItemInfo(itemID) then
GameTooltip:SetOwner(data, "ANCHOR_RIGHT", -(data:GetWidth() / 2), 24)
GameTooltip:SetHyperlink("item:"..itemID..":0:0:0")
if ( self.db.profile.ItemIDs ) then
GameTooltip:AddLine(BLUE..AL["ItemID:"].." "..itemID, nil, nil, nil, 1)
end
self:SetQuestTooltip(data)
self:SetExtraTooltip(data)
self:SetDroprateTooltip(data)
self:SetCraftingTooltip(data)
GameTooltip:Show()
if self.db.profile.EquipCompare or IsShiftKeyDown() then
self:ShowCompareItem(data) --- CALL MISSING METHOD TO SHOW 2 TOOLTIPS (Item Compare)
end
end
end
else
GameTooltip:SetOwner(data, "ANCHOR_RIGHT", -(data:GetWidth() / 2), 24)
GameTooltip:ClearLines()
GameTooltip:SetHyperlink(self:GetEnchantLink(spellID))
self:SetCraftingTooltip(data)
local showOwn
--adds tooltip showing if you know a recipe and it is one of your chars trade skills
if data.hasTrade then
if CA_IsSpellKnown(spellID) then
showOwn = "|cff1EFF00You know this Recipe"
else
showOwn = " |cffFF3F40You don't know this Recipe"
end
end
--gets a list of characters with this recipe known
local text = self:GetKnownRecipes(spellID)
local hasSpace
if (text or showOwn) and not hasSpace then
GameTooltip:AddLine(" ")
hasSpace = true
end
if showOwn then GameTooltip:AddLine(showOwn) end
if text then
text = BLUE.."Recipe known by: "..WHITE..text
GameTooltip:AddLine(text)
end
GameTooltip:Show()
if self.db.profile.EquipCompare or IsShiftKeyDown() then
self:ShowCompareItem(data) --- CALL MISSING METHOD TO SHOW 2 TOOLTIPS (Item Compare)
end
end
end
end
--------------------------------------------------------------------------------
-- Item OnLeave
-- Called when the mouse cursor leaves a loot item
--------------------------------------------------------------------------------
function AtlasLoot:ItemOnLeave(frame)
--Hide the necessary tooltips
if( self.db.profile.LootlinkTT ) then
GameTooltip:Hide()
elseif( self.db.profile.ItemSyncTT ) then
if(GameTooltip:IsVisible()) then
GameTooltip:Hide()
end
else
GameTooltip:Hide()
end
if ( ShoppingTooltip2:IsVisible() or ShoppingTooltip1.IsVisible) then
ShoppingTooltip2:Hide()
ShoppingTooltip1:Hide()
end
if AtlasLoot_PopupFrame and AtlasLoot_PopupFrame:IsVisible() then AtlasLoot_PopupFrame:Hide() end
end
--------------------------------------------------------------------------------
-- Item OnClick
-- Called when a loot item is clicked on
--------------------------------------------------------------------------------
function AtlasLoot:ItemOnClick(item, button)
self.Dewdrop:Close()
local name = strsub(_G["AtlasLootItem_"..item:GetID().."_Name"]:GetText(), 11)
local spellID = item.spellID
local itemID = item.itemID
local dataID, dataSource, dataPage
if not spellID and itemID then
local itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType, itemCount, itemEquipLoc, itemTexture = GetItemInfo(itemID)
--If shift-clicked, link in the chat window
if button=="RightButton" and self.itemUnlock then
--move wishlist item down
self:MoveWishlistItem("Down",item.number)
elseif IsAltKeyDown() and button=="LeftButton" and self.itemUnlock then
--add custom wishlist header
StaticPopup_Show("ATLASLOOT_ADD_CUSTOMHEADER")
StaticPopupDialogs.ATLASLOOT_ADD_CUSTOMHEADER.num = item.number
elseif (button=="LeftButton") and self.itemUnlock then
--move wishlist item up
self:MoveWishlistItem("Up",item.number)
elseif(button=="RightButton" and itemID and IsAltKeyDown() and AtlasLootItemsFrame.refresh[2] ~= "AtlasLoot_CurrentWishList") then
local wList = AtlasLootWishList["Options"][playerName]["DefaultWishList"]
--add to defauly wishlist
self:WishListAddDropClick(wList[1], wList[3], item)
elseif(button=="RightButton" and itemID) then
--item context menu
if AtlasLoot_PopupFrame and AtlasLoot_PopupFrame:IsVisible() then
self:ItemContextMenu(item, "item")
else
self:ItemContextMenu(item, "item")
end
elseif IsShiftKeyDown() and itemName then
--insert to chat link
ChatEdit_InsertLink(itemLink)
elseif(ChatFrame1EditBox and ChatFrame1EditBox:IsVisible() and IsShiftKeyDown()) then
ChatFrame1EditBox:Insert(name) -- <-- this line just inserts plain text, does not need any adjustment
--If control-clicked, use the dressing room
elseif(IsControlKeyDown() and itemName) then
--view item in dressing room
DressUpItemLink(itemLink)
elseif IsAltKeyDown() then
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
self:DeleteFromWishList(item.number)
end
elseif item.sourcePage and item.sourcePage[2] == "Source" then
dataID, dataSource, dataPage = unpack(item.sourcePage[1])
if dataID and dataID ~= "" and dataSource then
self.backEnabled = true
self:ShowItemsFrame(dataID, dataSource, dataPage or 1)
end
elseif item.sourcePage and item.sourcePage[2] == "Token" then
--Create token table if there isnt one
if AtlasLoot_TokenData[item.sourcePage[1]] == nil then
self:CreateToken(item.sourcePage[1])
end
dataID, dataSource, dataPage = item.sourcePage[1], "AtlasLoot_TokenData", 1
--Show token table
self:ShowItemsFrame(dataID, dataSource, dataPage or 1)
elseif button == "LeftButton" and itemID and AtlasLoot_ExtraData[itemID] then
self:PopoupItemFrame(item, _G["AtlasLoot_ExtraData"][itemID] )
AtlasLoot_PopupFrame:Show()
elseif button == "LeftButton" and item.contentsPreview then
self:PopoupItemFrame(item, item.contentsPreview )
AtlasLoot_PopupFrame:Show()
end
else
local recipeData = self:GetRecipeData(spellID, "spell")
if IsShiftKeyDown() then
ChatEdit_InsertLink(self:GetEnchantLink(spellID))
elseif button=="RightButton" then
self:ItemContextMenu(item, "spell", recipeData)
elseif IsAltKeyDown() then
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
self:DeleteFromWishList(item.number)
end
elseif(IsControlKeyDown()) then
DressUpItemLink("item:"..item.dressingroomID..":0:0:0:0:0:0:0")
elseif item.sourcePage and item.sourcePage[2] == "Source" then
dataID, dataSource, dataPage = unpack(item.sourcePage[1])
if dataID and dataID ~= "" and dataSource then
self.backEnabled = true
self:ShowItemsFrame(dataID, dataSource, dataPage or 1)
end
elseif item.sourcePage and item.sourcePage[2] == "Token" then
--Create token table if there isnt one
if AtlasLoot_TokenData[item.sourcePage[1]] == nil then
self:CreateToken(item.sourcePage[1])
end
dataID, dataSource, dataPage = item.sourcePage[1], "AtlasLoot_TokenData", 1
--Show token table
self:ShowItemsFrame(dataID, dataSource, dataPage or 1)
elseif button == "LeftButton" and recipeData then
self:PopoupItemFrame(item, recipeData)
AtlasLoot_PopupFrame:Show()
end
end
end
-------
-- Missing GameToolTip method
-- Enables item comparing. I've ripped self method directly from GameTooltip.lua and modified to work with GameTooltip /siena
-------
function AtlasLoot:ShowCompareItem(data)
local link
if data.spellID then
link = Item:CreateFromID(data.itemID):GetLink()
else
_,link = GameTooltip:GetItem()
end
if ( not link ) then
return
end
ShoppingTooltip1:SetOwner(GameTooltip, "ANCHOR_NONE")
ShoppingTooltip2:SetOwner(GameTooltip, "ANCHOR_NONE")
ShoppingTooltip3:SetOwner(GameTooltip, "ANCHOR_NONE")
local item1 = nil
local item2 = nil
local item3 = nil
if ( ShoppingTooltip1:SetHyperlinkCompareItem(link, 1, 1, GameTooltip) ) then
item1 = true
end
if ( ShoppingTooltip2:SetHyperlinkCompareItem(link, 2, 1, GameTooltip) ) then
item2 = true
end
if ( ShoppingTooltip3:SetHyperlinkCompareItem(link, 3, 1, GameTooltip) ) then
item3 = true
end
if not item1 and not item2 and not item3 then
return
end
if item3 then
if not item1 then
item1, item3 = true, nil
ShoppingTooltip1:SetHyperlinkCompareItem(link, 3, 1, GameTooltip)
elseif not item2 then
item2, item3 = true, nil
ShoppingTooltip2:SetHyperlinkCompareItem(link, 3, 1, GameTooltip)
end
end
if item2 and not item1 then
item1, item2 = true, nil
ShoppingTooltip1:SetHyperlinkCompareItem(link, 2, 1, GameTooltip)
end
local left, right, anchor1, anchor2 = GameTooltip:GetLeft(), GameTooltip:GetRight(), "TOPLEFT", "TOPRIGHT"
if not left or not right then return end
if (GetScreenWidth() - right) < left then anchor1, anchor2 = anchor2, anchor1 end
if item1 then
ShoppingTooltip1:ClearAllPoints()
ShoppingTooltip1:SetPoint(anchor1, GameTooltip, anchor2, 0, -10)
ShoppingTooltip1:Show()
if item2 then
ShoppingTooltip2:ClearAllPoints()
ShoppingTooltip2:SetPoint(anchor1, ShoppingTooltip1, anchor2)
ShoppingTooltip2:Show()
end
if item3 then
ShoppingTooltip3:ClearAllPoints()
ShoppingTooltip3:SetPoint(anchor1, ShoppingTooltip2, anchor2)
ShoppingTooltip3:Show()
end
end
end
local zoneList
--Creates a zone list for use in adding vendor and mob drop waypoints to tomtom
function AtlasLoot:AddWayPoint(waypoint)
if not zoneList then
zoneList = {}
for continentN , _ in ipairs{GetMapContinents()} do
for zoneNum, zoneName in ipairs{GetMapZones(continentN)} do
zoneList[zoneName:lower()] = {continentN, zoneNum, zoneName:lower()}
end
end
end
local zoneName = waypoint[1]:lower()
--Adds a waypoint to tomtom
if zoneList[zoneName] then
TomTom:AddZWaypoint(zoneList[zoneName][1], zoneList[zoneName][2], tonumber(waypoint[2]), tonumber(waypoint[3]), waypoint[4])
end
end
function AtlasLoot:ItemContextMenu(data, Type, recipeData)
local craftingData = data.craftingData
local itemID = data.itemID
local linkID = itemID
if Type == "spell" then
linkID = data.spellID
end
if self.Dewdrop:IsOpen(data) then self.Dewdrop:Close() return end
self.Dewdrop:Register(data,
'point', function(parent)
return "TOP", "BOTTOM"
end,
'children', function(level, value)
if level == 1 then
self.Dewdrop:AddLine(
'text', AL["Links"],
'notCheckable', true,
'isTitle', true,
'textHeight', 13,
'textWidth', 13
)
self.Dewdrop:AddLine(
'text', ORANGE..AL["Open AscensionDB To Entry"],
'func', function() self:OpenDBURL(linkID,Type) end,
'textHeight', 12,
'textWidth', 12,
'notCheckable', true,
'closeWhenClicked', true
)
self.Dewdrop:AddLine(
"text", GREEN..AL["Guild"],
"func", function() self:Chatlink(linkID,"GUILD",Type) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
self.Dewdrop:AddLine(
"text", LIGHTBLUE..AL["Party"],
"func", function() self:Chatlink(linkID,"PARTY",Type) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
self.Dewdrop:AddLine(
"text", ORANGE2..AL["Raid"],
"func", function() self:Chatlink(linkID,"RAID",Type) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
if AuctionFrame and AuctionFrame:IsVisible() then
self:AddDividerLine(35)
self.Dewdrop:AddLine(
'text', AL["Auction House Search"],
'notCheckable', true,
'isTitle', true,
'textHeight', 13,
'textWidth', 13
)
if recipeData then
self.Dewdrop:AddLine(
"text", AL["Created Item"],
"func", function() self:SearchAuctionHouse(self:GetItemInfo(recipeData[1][1])) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
if recipeData.Recipe then
self.Dewdrop:AddLine(
"text", AL["Recipe"],
"func", function() self:SearchAuctionHouse(self:GetItemInfo(recipeData.Recipe)) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
end
else
self.Dewdrop:AddLine(
"text", AL["Item"],
"func", function() self:SearchAuctionHouse(self:GetItemInfo(itemID)) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
end
end
if not AtlasLoot_PopupFrame or AtlasLoot_PopupFrame and not AtlasLoot_PopupFrame:IsVisible() then
self:AddDividerLine(35)
self.Dewdrop:AddLine(
'text', AL["Wishlists"],
'notCheckable', true,
'isTitle', true,
'textHeight', 13,
'textWidth', 13
)
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
self.Dewdrop:AddLine(
"text", AL["Delete"],
"func", function() self:DeleteFromWishList(data.number) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
else
local wList = AtlasLootWishList["Options"][playerName]["DefaultWishList"]
self.Dewdrop:AddLine(
"text", AL["Add To Default"],
"func", function() self:WishListAddDropClick(wList[1], wList[3], data) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
self.Dewdrop:AddLine(
"text", AL["Own Wishlists"],
"tooltipTitle", AL["Own Wishlists"],
"value", "OwnWishlists",
"hasArrow", true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
self.Dewdrop:AddLine(
"text", AL["Shared Wishlists"],
"tooltipTitle", AL["Shared Wishlists"],
"value", "SharedWishlists",
"hasArrow", true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
self.Dewdrop:AddLine(
"text", AL["Add Wishlist"],
"func", function() self:AddWishList() end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
end
if C_VanityCollection.IsCollectionItemOwned(itemID) then
self:AddDividerLine(35)
self.Dewdrop:AddLine(
'text', AL["Vanity Collection"],
'notCheckable', true,
'isTitle', true,
'textHeight', 13,
'textWidth', 13
)
self.Dewdrop:AddLine(
"text", AL["Learn/Recive Vanity Item"],
"func", function() RequestDeliverVanityCollectionItem(itemID) end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
end
if self.TomTomLoaded then
if not self.db.profile.waypointList then self.db.profile.waypointList = {} end
local wayPoint
if (craftingData and self.db.profile.recipeExtraInfoSwitch and IsControlKeyDown()) or (craftingData and not self.db.profile.recipeExtraInfoSwitch) then
GameTooltip:AddLine(" ")
for _,v in pairs(craftingData) do
if v.cords and tonumber(v.cords[1]) ~= 0 and tonumber(v.cords[2]) ~= 0 then
local line1 = v[1]
local line2 = v[2]
if v.fac and (v.fac[2] == playerFaction or v.fac[2] == "Netural") then line1 = v.fac[1]..line1 end
if not wayPoint then wayPoint = {} end
tinsert(wayPoint, { line2, tonumber(v.cords[1]), tonumber(v.cords[2]), line1})
end
end
end
if craftingData and wayPoint then
self:AddDividerLine(35)
self.Dewdrop:AddLine(
'text', AL["Recipe Waypoints"],
'notCheckable', true,
'isTitle', true,
'textHeight', 13,
'textWidth', 13
)
self.Dewdrop:AddLine(
"text", "Add pin to map",
"func", function()
for _,v in pairs(wayPoint) do
self:AddWayPoint(v)
end
end,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"notCheckable", true
)
end
end
end
elseif level == 2 then
if value == "OwnWishlists" then
for i,v in pairs(AtlasLootWishList["Own"]) do
if type(v) == "table" then
self.Dewdrop:AddLine(
"text", v.Name,
"tooltipTitle", v.Name,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"func", function() self:WishListAddDropClick("Own", i, data) end,
"notCheckable", true
)
end
end
elseif value == "SharedWishlists" then
for i,v in pairs(AtlasLootWishList["Shared"]) do
if type(v) == "table" then
self.Dewdrop:AddLine(
"text", v.Name,
"tooltipTitle", v.Name,
'closeWhenClicked', true,
'textHeight', 12,
'textWidth', 12,
"func", function() self:WishListAddDropClick("Shared", i, data) end,
"notCheckable", true
)
end
end
end
end
--Close button
self:CloseDewDrop(true,35)
end,
'dontHook', true
)
self.Dewdrop:Open(data)
end