Files
coa-atlasloot/AtlasLoot/Core/LootButtons.lua
T

374 lines
19 KiB
Lua

local AL = LibStub("AceLocale-3.0"):GetLocale("AtlasLoot");
local GREY = "|cff999999";
local RED = "|cffff0000";
local WHITE = "|cffFFFFFF";
local GREEN = "|cff1eff00";
local PURPLE = "|cff9F3FFF";
local BLUE = "|cff0070dd";
local ORANGE = "|cffFF8400";
local DEFAULT = "|cffFFd200";
local ParseTooltip_Enabled = false;
local AtlasLootScanTooltip = CreateFrame("GAMETOOLTIP","AtlasLootScanTooltip",nil,"GameTooltipTemplate");
AtlasLootScanTooltip:SetOwner(UIParent, "ANCHOR_NONE");
function AtlasLoot_GetEnchantLink(enchantID)
if not enchantID then return end
local EnchantLink = nil
AtlasLootScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
AtlasLootScanTooltip:ClearLines();
AtlasLootScanTooltip:SetHyperlink("enchant:"..enchantID);
AtlasLootScanTooltip:Show()
local tooltipline = getglobal("AtlasLootScanTooltipTextLeft1")
local text = tooltipline:GetText()
if text and string.find(text, ":") then
EnchantLink = "|cffffd000|Henchant:"..enchantID.."|h["..text.."]|h|r"
else
EnchantLink = GetSpellLink(enchantID)
end
AtlasLootScanTooltip:Hide()
return EnchantLink
end
--------------------------------------------------------------------------------
-- Item OnEnter
-- Called when a loot item is moused over
--------------------------------------------------------------------------------
function AtlasLootItem_OnEnter()
local isItem;
AtlasLootTooltip:ClearLines();
for i=1, 30, 1 do
if (getglobal("AtlasLootTooltipTextRight"..i) ~= nil) then
getglobal("AtlasLootTooltipTextRight"..i):SetText("");
end
end
if this.itemID and (this.itemID ~= 0) then
if string.sub(this.itemID, 1, 1) == "s" then
isItem = false;
else
isItem = true;
end
if isItem then
local color = strsub(getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), 3, 10);
local name = strsub(getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), 11);
if(this.itemID ~= 0 and this.itemID ~= "" and this.itemID ~= nil and AtlasLootDKPValues and AtlasLootClassPriority) then
Identifier = "Item"..this.itemID;
DKP = AtlasLootDKPValues[Identifier];
priority = AtlasLootClassPriority[Identifier];
else
DKP = nil;
priority = nil;
end
--Lootlink tooltips
if( AtlasLoot.db.profile.LootlinkTT ) then
--If we have seen the item, use the game tooltip to minimise same name item problems
if(GetItemInfo(this.itemID) ~= nil) then
getglobal(this:GetName().."_Unsafe"):Hide();
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
AtlasLootTooltip:SetHyperlink("item:"..this.itemID..":0:0:0");
if ( AtlasLoot.db.profile.ItemIDs ) then
AtlasLootTooltip:AddLine(BLUE..AL["ItemID:"].." "..this.itemID, nil, nil, nil, 1);
end
if( this.droprate ~= nil) then
AtlasLootTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0);
end
if( DKP ~= nil and DKP ~= "" ) then
AtlasLootTooltip:AddLine(RED..DKP.." "..AL["DKP"], 1, 1, 0, 1);
end
if( priority ~= nil and priority ~= "" ) then
AtlasLootTooltip:AddLine(GREEN..AL["Priority:"].." "..priority, 1, 1, 0, 1);
end
AtlasLootTooltip:Show();
if((AtlasLoot.db.profile.EquipCompare and ((not EquipCompare_RegisterTooltip) or (not EquipCompare_Enabled)))) or IsShiftKeyDown() then
AtlasLootItem_ShowCompareItem(); --- CALL MISSING METHOD TO SHOW 2 TOOLTIPS (Item Compare)
end
if (LootLink_AddItem) then
LootLink_AddItem(name, this.itemID..":0:0:0", color);
end
else
getglobal(this:GetName().."_Unsafe"):Show();
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
if (LootLink_Database and LootLink_Database[this.itemID]) then
LootLink_SetTooltip(AtlasLootTooltip, LootLink_Database[this.itemID][1], 1);
else
LootLink_SetTooltip(AtlasLootTooltip,strsub(getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), 11), 1);
end
if ( AtlasLoot.db.profile.ItemIDs ) then
AtlasLootTooltip:AddLine(BLUE..AL["ItemID:"].." "..this.itemID, nil, nil, nil, 1);
end
if( this.droprate ~= nil) then
AtlasLootTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0, 1);
end
if( DKP ~= nil and DKP ~= "" ) then
AtlasLootTooltip:AddLine(RED..DKP.." "..AL["DKP"], 1, 1, 0);
end
if( priority ~= nil and priority ~= "" ) then
AtlasLootTooltip:AddLine(GREEN..AL["Priority:"].." "..priority, 1, 1, 0);
end
AtlasLootTooltip:AddLine(" ");
AtlasLootTooltip:AddLine(AL["You can right-click to attempt to query the server. You may be disconnected."], nil, nil, nil, 1);
AtlasLootTooltip:Show();
end
--Item Sync tooltips
elseif( AtlasLoot.db.profile.ItemSyncTT ) then
if(GetItemInfo(this.itemID) ~= nil) then
getglobal(this:GetName().."_Unsafe"):Hide();
end
ItemSync:ButtonEnter();
if ( AtlasLoot.db.profile.ItemIDs ) then
GameTooltip:AddLine(BLUE..AL["ItemID:"].." "..this.itemID, nil, nil, nil, 1);
end
if( this.droprate ~= nil) then
GameTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0);
end
if( DKP ~= nil and DKP ~= "" ) then
GameTooltip:AddLine(RED..DKP.." "..AL["DKP"], 1, 1, 0);
end
if( priority ~= nil and priority ~= "" ) then
GameTooltip:AddLine(GREEN..AL["Priority:"].." "..priority, 1, 1, 0);
end
GameTooltip:Show();
if((AtlasLoot.db.profile.EquipCompare and ((not EquipCompare_RegisterTooltip) or (not EquipCompare_Enabled)))) or IsShiftKeyDown() then
GameTooltip_ShowCompareItem(); --- CALL MISSING METHOD TO SHOW 2 TOOLTIPS (Item Compare)
end
--Default game tooltips
else
if(this.itemID ~= nil) then
if(GetItemInfo(this.itemID) ~= nil) then
getglobal(this:GetName().."_Unsafe"):Hide();
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
AtlasLootTooltip:SetHyperlink("item:"..this.itemID..":0:0:0");
if ( AtlasLoot.db.profile.ItemIDs ) then
AtlasLootTooltip:AddLine(BLUE..AL["ItemID:"].." "..this.itemID, nil, nil, nil, 1);
end
if( this.droprate ~= nil) then
AtlasLootTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0);
end
if( DKP ~= nil and DKP ~= "" ) then
AtlasLootTooltip:AddLine(RED..DKP.." "..AL["DKP"], 1, 1, 0);
end
if( priority ~= nil and priority ~= "" ) then
AtlasLootTooltip:AddLine(GREEN..AL["Priority:"].." "..priority, 1, 1, 0);
end
AtlasLootTooltip:Show();
if((AtlasLoot.db.profile.EquipCompare and ((not EquipCompare_RegisterTooltip) or (not EquipCompare_Enabled)))) or IsShiftKeyDown() then
AtlasLootItem_ShowCompareItem(); --- CALL MISSING METHOD TO SHOW 2 TOOLTIPS (Item Compare)
end
else
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
AtlasLootTooltip:ClearLines();
AtlasLootTooltip:AddLine(RED..AL["Item Unavailable"], nil, nil, nil, 1);
AtlasLootTooltip:AddLine(BLUE..AL["ItemID:"].." "..this.itemID, nil, nil, nil, 1);
AtlasLootTooltip:AddLine(AL["This item is unsafe. To view this item without the risk of disconnection, you need to have first seen it in the game world. This is a restriction enforced by Blizzard since Patch 1.10."], nil, nil, nil, 1);
AtlasLootTooltip:AddLine(" ");
AtlasLootTooltip:AddLine(AL["You can right-click to attempt to query the server. You may be disconnected."], nil, nil, nil, 1);
AtlasLootTooltip:Show();
end
end
end
else
spellID = string.sub(this.itemID, 2);
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
AtlasLootTooltip:ClearLines();
AtlasLootTooltip:SetHyperlink(AtlasLoot_GetEnchantLink(spellID));
AtlasLootTooltip:Show();
if(this.spellitemID and ((AtlasLoot.db.profile.EquipCompare and ((not EquipCompare_RegisterTooltip) or (not EquipCompare_Enabled))) or IsShiftKeyDown())) then
AtlasLootItem_ShowCompareItem(); --- 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 AtlasLootItem_OnLeave()
--Hide the necessary tooltips
if( AtlasLoot.db.profile.LootlinkTT ) then
AtlasLootTooltip:Hide();
elseif( AtlasLoot.db.profile.ItemSyncTT ) then
if(GameTooltip:IsVisible()) then
GameTooltip:Hide();
end
else
if(this.itemID ~= nil) then
AtlasLootTooltip:Hide();
GameTooltip:Hide();
end
end
if ( ShoppingTooltip2:IsVisible() or ShoppingTooltip1.IsVisible) then
ShoppingTooltip2:Hide();
ShoppingTooltip1:Hide();
end
end
--------------------------------------------------------------------------------
-- Item OnClick
-- Called when a loot item is clicked on
--------------------------------------------------------------------------------
function AtlasLootItem_OnClick(arg1)
local isItem;
local color = strsub(getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), 1, 10);
local id = this:GetID();
local name = strsub(getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), 11);
if string.sub(this.itemID, 1, 1) == "s" then
isItem = false;
else
isItem = true;
end
if isItem then
local iteminfo = GetItemInfo(this.itemID);
local itemIDBloody = 6000000+(this.itemID);
local itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType, itemCount, itemEquipLoc, itemTexture = GetItemInfo(this.itemID);
local itemNameB, itemLinkB, itemQualityB, itemLevelB, itemMinLevelB, itemTypeB, itemSubTypeB, itemCountB, itemEquipLocB, itemTextureB = GetItemInfo(itemIDBloody);
--If shift-clicked, link in the chat window
if(arg1=="RightButton" and not iteminfo and this.itemID ~= 0) then
AtlasLootTooltip:SetHyperlink("item:"..this.itemID..":0:0:0:0:0:0:0");
if not AtlasLoot.db.profile.ItemSpam then
DEFAULT_CHAT_FRAME:AddMessage(AL["Server queried for "]..color.."["..name.."]".."|r"..AL[". Right click on any other item to refresh the loot page."]);
end
elseif(arg1=="RightButton" and iteminfo) then
if not AtlasLoot.db.profile.ItemSpam then
DEFAULT_CHAT_FRAME:AddMessage(itemLink..AL[" is safe."]);
if(itemLinkB) then
DEFAULT_CHAT_FRAME:AddMessage(itemLinkB..AL[" is safe."]);
end
end
elseif(IsShiftKeyDown() and iteminfo and (AtlasLoot.db.profile.SafeLinks or AtlasLoot.db.profile.AllLinks)) then
ChatEdit_InsertLink(itemLink);
elseif(IsShiftKeyDown() and AtlasLoot.db.profile.AllLinks) then
ChatEdit_InsertLink(color.."|Hitem:"..this.itemID..":0:0:0:0:0:0:0|h["..name.."]|h|r");
elseif(ChatFrameEditBox and ChatFrameEditBox:IsVisible() and IsShiftKeyDown()) then
ChatFrameEditBox:Insert(name); -- <-- this line just inserts plain text, does not need any adjustment
--If control-clicked, use the dressing room
elseif(IsControlKeyDown() and iteminfo) then
DressUpItemLink(itemLink);
elseif(IsAltKeyDown() and (this.itemID ~= 0)) then
if AtlasLootItemsFrame.refresh[1] == "WishList" then
AtlasLoot_DeleteFromWishList(this.itemID);
elseif AtlasLootItemsFrame.refresh[1] == "SearchResult" then
if this.difficulty then
AtlasLoot:GetOriginalDataFromSearchResult(this.itemID);
end
else
if this.difficulty then
AtlasLoot_ShowWishListDropDown(this.itemID, this.itemTexture, getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), AtlasLoot_BossName:GetText(), AtlasLootItemsFrame.refreshOri[1].."|"..AtlasLootItemsFrame.refreshOri[2], this, nil, this.difficulty);
else
AtlasLoot_ShowWishListDropDown(this.itemID, this.itemTexture, getglobal("AtlasLootItem_"..this:GetID().."_Name"):GetText(), AtlasLoot_BossName:GetText(), AtlasLootItemsFrame.refreshOri[1].."|"..AtlasLootItemsFrame.refreshOri[2], this);
end
end
elseif((AtlasLootItemsFrame.refresh[1] == "SearchResult" or AtlasLootItemsFrame.refresh[1] == "WishList") and this.sourcePage) then
local dataID, dataSource = strsplit("|", this.sourcePage);
if(dataID and dataSource and AtlasLoot_IsLootTableAvailable(dataID)) then
AtlasLoot_ShowItemsFrame(dataID, dataSource, AtlasLoot_TableNames[dataID][1], AtlasLootItemsFrame.refresh[4]);
end
elseif (arg1=="LeftButton") and this.sourcePage ~= nil then
--Holds AtlasLoot_Lastboss so back button works
if AtlasLoot_Data[this.sourcePage] == nil then
Atlasloot_CreateToken(this.sourcePage)
end
AtlasLoot_ShowItemsFrame(this.sourcePage, "",this.sourcePage, pFrame,1);
end
else
if IsShiftKeyDown() then
spellID = string.sub(this.itemID, 2);
ChatEdit_InsertLink(AtlasLoot_GetEnchantLink(spellID));
elseif(IsAltKeyDown() and (this.itemID ~= 0)) then
if AtlasLootItemsFrame.refresh[1] == "WishList" then
AtlasLoot_DeleteFromWishList(this.itemID);
else
spellName, _, _, _, _, _, _, _, _ = GetSpellInfo(string.sub(this.itemID, 2));
--spellIcon = GetItemIcon(this.dressingroomID);
AtlasLoot_ShowWishListDropDown(this.itemID, this.dressingroomID, "=ds="..spellName, "=ds="..AtlasLootItemsFrame.refresh[3], AtlasLootItemsFrame.refreshOri[1].."|"..AtlasLootItemsFrame.refreshOri[2],this);
end
elseif(IsControlKeyDown()) then
DressUpItemLink("item:"..this.dressingroomID..":0:0:0:0:0:0:0");
elseif((AtlasLootItemsFrame.refresh[1] == "SearchResult" or AtlasLootItemsFrame.refresh[1] == "WishList") and this.sourcePage) then
local dataID, dataSource = strsplit("|", this.sourcePage);
if(dataID and dataSource and AtlasLoot_IsLootTableAvailable(dataID)) then
AtlasLoot_ShowItemsFrame(dataID, dataSource, AtlasLootItemsFrame.refresh[3], AtlasLootItemsFrame.refresh[4]);
end
end
end
end
-------
-- Missing GameToolTip method
-- Enables item comparing. I've ripped this method directly from GameTooltip.lua and modified to work with AtlasLootTooltip /siena
-------
function AtlasLootItem_ShowCompareItem()
local shift = 1;
local item,link = nil,nil
if this.spellitemID and this.spellitemID ~= "" and this.spellitemID ~= 0 then
item = AtlasLootTooltip:GetSpell()
_,link = GetItemInfo(this.spellitemID)
else
item,link = AtlasLootTooltip:GetItem();
end
if ( not link ) then
return
end
ShoppingTooltip1:SetOwner(AtlasLootTooltip, "ANCHOR_NONE");
ShoppingTooltip2:SetOwner(AtlasLootTooltip, "ANCHOR_NONE");
ShoppingTooltip3:SetOwner(AtlasLootTooltip, "ANCHOR_NONE");
local item1 = nil;
local item2 = nil;
local item3 = nil;
local side = "left";
if ( ShoppingTooltip1:SetHyperlinkCompareItem(link, 1, 1, AtlasLootTooltip) ) then
item1 = true;
end
if ( ShoppingTooltip2:SetHyperlinkCompareItem(link, 2, 1, AtlasLootTooltip) ) then
item2 = true;
end
if ( ShoppingTooltip3:SetHyperlinkCompareItem(link, 3, 1, AtlasLootTooltip) ) 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, AtlasLootTooltip);
elseif not item2 then
item2, item3 = true, nil;
ShoppingTooltip2:SetHyperlinkCompareItem(link, 3, 1, AtlasLootTooltip);
end
end
if item2 and not item1 then
item1, item2 = true, nil;
ShoppingTooltip1:SetHyperlinkCompareItem(link, 2, 1, AtlasLootTooltip);
end
local left, right, anchor1, anchor2 = AtlasLootTooltip:GetLeft(), AtlasLootTooltip: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, AtlasLootTooltip, 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