Files
coa-atlasloot/AtlasLoot/Core/AtlasLoot.lua
T
Szyler 4f590d3ec6 Version: v7.2.5 (#2)
* Fixied spelling

* update moved items and added some missing ones

* Adding AQT and AQR changes

* Adding new AQT sets

* Fixed two items on Relics of Ferocious Vigor set

* Fixed one item on Keepsakes of Endless Machinations set

* Fixed Aera's Poison Gland

* added aqr accessory tokens

--updated token loot table creation function to handle neck/rings

---------

Co-authored-by: Szyler <Szyler@Szyler.com>
Co-authored-by: Anch <adrianpratt.ap@gmail.com>
2023-04-07 03:26:20 -07:00

1120 lines
41 KiB
Lua

--[[
Atlasloot Enhanced
Author Daviesh / Reworked by Deim of PrimalWoW / Reworked again for Ascension
Loot browser associating loot with instance bosses
Can be integrated with Atlas (http://www.atlasmod.com)
Functions:
AtlasLoot_OnEvent(event)
AtlasLoot_ShowMenu()
AtlasLoot_OnVariablesLoaded()
AtlasLoot_SlashCommand(msg)
AtlasLootOptions_Toggle()
AtlasLoot_OnLoad()
AtlasLoot:ShowItemsFrame()
AtlasLoot:NavButton_OnClick()
AtlasLoot:IsLootTableAvailable(dataID)
AtlasLoot:LoadAllModules()
AtlasLoot:ShowQuickLooks(button)
AtlasLoot:RefreshQuickLookButtons()
AtlasLoot:AddTooltip(frameb, tooltiptext)
AtlasLoot:FindId(name, difficulty)
]]
AtlasLoot = LibStub("AceAddon-3.0"):NewAddon("AtlasLoot", "AceEvent-3.0", "AceTimer-3.0")
--Instance required libraries
local BabbleBoss = AtlasLoot_GetLocaleLibBabble("LibBabble-Boss-3.0")
local AL = LibStub("AceLocale-3.0"):GetLocale("AtlasLoot");
--Establish version number and compatible version of Atlas
local VERSION_MAJOR = "5";
local VERSION_MINOR = "11";
local VERSION_BOSSES = "04";
ATLASLOOT_VERSION = "|cffFF8400AtlasLoot Ascension Edition|r";
--Now allows for multiple compatible Atlas versions. Always put the newest first
ATLASLOOT_CURRENT_ATLAS = {"1.17.1", "1.17.0"};
ATLASLOOT_PREVIEW_ATLAS = {"1.17.3", "1.17.2"};
ATLASLOOT_POSITION = AL["Position:"];
ATLASLOOT_DEBUGMESSAGES = false;
--Standard indent to line text up with Atlas text
ATLASLOOT_INDENT = " ";
--Make the Dewdrop menu in the standalone loot browser accessible here
AtlasLoot_Dewdrop = AceLibrary("Dewdrop-2.0");
AtlasLoot_DewdropSubMenu = AceLibrary("Dewdrop-2.0");
AtlasLoot_DewdropExpansionMenu = AceLibrary("Dewdrop-2.0");
--Variable to cap debug spam
ATLASLOOT_DEBUGSHOWN = false;
ATLASLOOT_FILTER_ENABLE = false;
ATLASLOOT_CURRENTTYPE = "Default";
ATLASLOOT_TYPE = {};
ATLASLOOT_BACKENABLED = false;
-- Colours stored for code readability
local GREY = "|cff999999";
local RED = "|cffff0000";
local WHITE = "|cffFFFFFF";
local GREEN = "|cff1eff00";
local PURPLE = "|cff9F3FFF";
local BLUE = "|cff0070dd";
local ORANGE = "|cffFF8400";
--Search panel open and close save variables
--dataID, dataSource, pFrame, tablenumber
SearchPrevData = {"", "", ""};
AtlasLootCharDB = {};
AtlasLoot_TokenData = {};
local AtlasLootDBDefaults = {
profile = {
SavedTooltips = {},
SafeLinks = true,
DefaultTT = true,
LootlinkTT = false,
ItemSyncTT = false,
EquipCompare = false,
Opaque = false,
ItemIDs = false,
ItemSpam = false,
MinimapButton = false,
FuBarAttached = true,
FuBarText = true,
FuBarIcon = true,
LastBoss = "EmptyTable",
AtlasLootVersion = "1",
AtlasNaggedVersion = "",
FuBarPosition = 1,
LoadAllLoDStartup = false,
PartialMatching = true,
LootBrowserStyle = 1,
MinimapButtonAngle = 240,
MinimapButtonRadius = 75,
LootBrowserScale = 1.0,
SearchOn = {
All = true,
},
AtlasType = "Release";
}
}
-- Popup Box for first time users
StaticPopupDialogs["ATLASLOOT_SETUP"] = {
text = AL["Welcome to Atlasloot Enhanced. Please take a moment to set your preferences."],
button1 = AL["Setup"],
OnAccept = function()
AtlasLootOptions_Toggle();
end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1
};
--[[
AtlasLoot_ShowMenu:
Legacy function used in Cosmos integration to open the loot browser
]]
function AtlasLoot_ShowMenu()
AtlasLootDefaultFrame:Show();
end
--[[
AtlasLoot_OnVariablesLoaded:
Invoked by the VARIABLES_LOADED event. Now that we are sure all the assets
the addon needs are in place, we can properly set up the mod
]]
function AtlasLoot:OnEnable()
AtlasLoot.db = LibStub("AceDB-3.0"):New("AtlasLootDB");
AtlasLoot.db:RegisterDefaults(AtlasLootDBDefaults);
if not AtlasLootCharDB then AtlasLootCharDB = {} end
if not AtlasLootCharDB["QuickLooks"] then AtlasLootCharDB["QuickLooks"] = {} end
if not AtlasLootCharDB.SelectedFilter then AtlasLootCharDB.SelectedFilter = 1 end
if not AtlasLootCharDB["SearchResult"] then AtlasLootCharDB["SearchResult"] = {Name = "Search Result" , Type = "Search", Back = true}; end
if not AtlasLootFilterDB then AtlasLootFilterDB = {["FilterLists"] = {{Name = "Default" }}} end;
if AtlasLootFilterDB and not AtlasLootFilterDB["FilterLists"] then AtlasLootFilterDB = {["FilterLists"] = {{Name = "Default" }}} end;
if AtlasLoot_Data then
AtlasLoot_Data["EmptyTable"] = {
Name = AL["Select a Loot Table..."];
{Name = AL["Select a Loot Table..."]};
};
end
if IsAddOnLoaded("Atlas") then
AtlasLoot:LoadMapData();
ATLASLOOT_ATLASLOADED = true;
AtlasLootDefaultFrame_MapButton:Enable();
AtlasLootDefaultFrame_MapSelectButton:Enable();
end
--Add the loot browser to the special frames tables to enable closing wih the ESC key
tinsert(UISpecialFrames, "AtlasLootDefaultFrame");
--Set up options frame
AtlasLootOptions_OnLoad();
AtlasLoot_CreateOptionsInfoTooltips();
--Set visual style for the loot browser
if( AtlasLoot.db.profile.LootBrowserStyle == 1 ) then
AtlasLoot:SetNewStyle("new");
else
AtlasLoot:SetNewStyle("old");
end
--Disable options that don't have the supporting mods
if( not LootLink_SetTooltip and (AtlasLoot.db.profile.LootlinkTT == true)) then
AtlasLoot.db.profile.LootlinkTT = false;
AtlasLoot.db.profile.DefaultTT = true;
end
if( not ItemSync and (AtlasLoot.db.profile.ItemSyncTT == true)) then
AtlasLoot.db.profile.ItemSyncTT = false;
AtlasLoot.db.profile.DefaultTT = true;
end
--If using an opaque items frame, change the alpha value of the backing texture
if (AtlasLoot.db.profile.Opaque) then
AtlasLootItemsFrame_Back:SetTexture(0, 0, 0, 1);
else
AtlasLootItemsFrame_Back:SetTexture(0, 0, 0, 0.65);
end
AtlasLootItemsFrame:Hide();
if((AtlasLootCharDB.AtlasLootVersion == nil) or (tonumber(AtlasLootCharDB.AtlasLootVersion) < 40301)) then
AtlasLootCharDB.AtlasLootVersion = VERSION_MAJOR..VERSION_MINOR..VERSION_BOSSES;
AtlasLootOptions_Init();
end
--Adds an AtlasLoot button to the Feature Frame in Cosmos
if(EarthFeature_AddButton) then
EarthFeature_AddButton(
{
id = string.sub(ATLASLOOT_VERSION, 11, 28);
name = string.sub(ATLASLOOT_VERSION, 11, 28);
subtext = string.sub(ATLASLOOT_VERSION, 30, 39);
tooltip = "";
icon = "Interface\\Icons\\INV_Box_01";
callback = AtlasLoot_ShowMenu;
test = nil;
}
);
--Adds AtlasLoot to old style Cosmos installations
elseif(Cosmos_RegisterButton) then
Cosmos_RegisterButton(
string.sub(ATLASLOOT_VERSION, 11, 28),
string.sub(ATLASLOOT_VERSION, 11, 28),
"",
"Interface\\Icons\\INV_Box_01",
AtlasLoot_ShowMenu
);
end
--Set up the menu in the loot browser
AtlasLoot:DewdropRegister();
AtlasLoot:DewdropExpansionMenuRegister();
--If EquipCompare is available, use it
if((EquipCompare_RegisterTooltip) and (AtlasLoot.db.profile.EquipCompare == true)) then
EquipCompare_RegisterTooltip(AtlasLootTooltip);
end
if (AtlasLoot.db.profile.LoadAllLoDStartup == true) then
AtlasLoot:LoadAllModules();
else
collectgarbage("collect");
end
panel = _G["AtlasLootOptionsFrame"];
panel.name=AL["AtlasLoot"];
InterfaceOptions_AddCategory(panel);
--Filter and wishlist options menus creates as part of the next 2 commands
AtlasLoot_CreateWishlistOptions();
panel = _G["AtlasLootHelpFrame"];
panel.name=AL["Help"];
panel.parent=AL["AtlasLoot"];
InterfaceOptions_AddCategory(panel);
if LibStub:GetLibrary("LibAboutPanel", true) then
LibStub("LibAboutPanel").new(AL["AtlasLoot"], "AtlasLoot");
end
AtlasLoot_UpdateLootBrowserScale();
local playerName = UnitName("player");
-- Is wishlist item disabled on load or not
if AtlasLootWishList["Options"][playerName]["AutoSortWishlist"] then
AtlasLootItemsFrame_Wishlist_UnLock:Disable();
else
AtlasLootItemsFrame_Wishlist_UnLock:Enable();
end
AtlasLoot:LoadItemIDsDatabase();
end
function AtlasLoot_Reset(data)
AtlasLootDefaultFrame:Hide();
if data == "frames" then
AtlasLootDefaultFrame:ClearAllPoints();
AtlasLootDefaultFrame:SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
if AtlasLootFu then
AtlasLootFu.db.profile.minimapPosition = 200;
AtlasLootFu:Hide();
AtlasLootFu:Show();
end
AtlasLoot.db.profile.LootBrowserScale = 1.0;
AtlasLoot_UpdateLootBrowserScale();
elseif data == "quicklooks" then
AtlasLootCharDB["QuickLooks"] = {};
AtlasLoot:RefreshQuickLookButtons();
elseif data == "wishlist" then
AtlasLootWishList = {};
AtlasLoot:WishlistSetup();
AtlasLootCharDB["SearchResult"] = {};
AtlasLootCharDB.LastSearchedText = "";
elseif data == "all" then
AtlasLootDefaultFrame:ClearAllPoints();
AtlasLootDefaultFrame:SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
if AtlasLootFu then
AtlasLootFu.db.profile.minimapPosition = 200;
AtlasLootFu:Hide();
AtlasLootFu:Show();
end
AtlasLoot.db.profile.LootBrowserScale = 1.0;
AtlasLoot_UpdateLootBrowserScale();
AtlasLootCharDB["QuickLooks"] = {};
AtlasLoot:RefreshQuickLookButtons();
AtlasLootCharDB["SearchResult"] = {};
AtlasLootCharDB.LastSearchedText = "";
AtlasLootWishList = {};
AtlasLoot:WishlistSetup();
end
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..RED..AL["Reset complete!"]);
end
--[[
AtlasLoot_SlashCommand(msg):
msg - takes the argument for the /atlasloot command so that the appropriate action can be performed
If someone types /atlasloot, bring up the options box
]]
function AtlasLoot_SlashCommand(msg)
if msg == AL["reset"] then
AtlasLoot_Reset("frames");
elseif msg == AL["options"] then
AtlasLootOptions_Toggle();
else
AtlasLootDefaultFrame:Show();
end
end
--[[
AtlasLootOptions_Toggle:
Toggle on/off the options window
]]
function AtlasLootOptions_Toggle()
if InterfaceOptionsFrame_OpenToCategory then
InterfaceOptionsFrame_OpenToCategory(AL["AtlasLoot"]);
else
InterfaceOptionsFrame_OpenToFrame(AL["AtlasLoot"]);
end
InterfaceOptionsFrame:SetFrameStrata("DIALOG");
if(AtlasLoot.db.profile.DefaultTT == true) then
AtlasLootOptions_DefaultTTToggle();
elseif(AtlasLoot.db.profile.LootlinkTT == true) then
AtlasLootOptions_LootlinkTTToggle();
elseif(AtlasLoot.db.profile.ItemSyncTT == true) then
AtlasLootOptions_ItemSyncTTToggle();
end
end
--[[
AtlasLoot_OnLoad:
Performs inital setup of the mod and registers it for further setup when
the required resources are in place
]]
function AtlasLoot:OnInitialize()
--Enable the use of /al or /atlasloot to open the loot browser
SLASH_ATLASLOOT1 = "/atlasloot";
SLASH_ATLASLOOT2 = "/al";
SlashCmdList["ATLASLOOT"] = function(msg)
AtlasLoot_SlashCommand(msg);
end
--Sets the default loot tables for the current expansion enabled on the server.
local xpaclist = {"CLASSIC", "TBC", "WRATH"};
AtlasLoot_Expac = xpaclist[GetAccountExpansionLevel()+1];
end
function AtlasLoot:CleandataID(newID, listnum)
local cleanlist = { [1] = {"CLASSIC", "TBC", "WRATH"} };
for i = 1, #cleanlist[listnum] do
newID = gsub(newID, cleanlist[listnum][i], "");
end
return newID;
end
--Creates tables for raid tokens from the collections tables
function AtlasLoot:CreateToken(dataID)
local itemType, slotType, itemName, itemType2
--orginal dataID
local orgID = dataID;
--list of item types to find
local names = { {"HEAD", "INVTYPE_HEAD", "Head"}, {"SHOULDER", "INVTYPE_SHOULDER", "Shoulders"}, {"CHEST", "INVTYPE_CHEST", "Chest", "INVTYPE_ROBE"}, {"WRIST", "INVTYPE_WRIST", "Wrists"}, {"HAND", "INVTYPE_HAND", "Hands"}, {"WAIST", "INVTYPE_WAIST", "Waist"}, {"LEGS", "INVTYPE_LEGS", "Legs"}, {"FEET", "INVTYPE_FEET", "Feet"}, {"FINGER", "INVTYPE_FINGER", "Rings"}, {"BACK", "INVTYPE_CLOAK", "Back"}, {"NECK", "INVTYPE_NECK", "Necklace"}};
--finds the item type to create a list of
for a, b in pairs(names) do
dataID = gsub(dataID, b[1], "");
slotType = gsub(orgID, dataID, "");
if slotType == b[1] then
itemType = b[2];
itemType2 = b[4];
itemName = b[3];
break;
end
end
--Creates data set of the item type
if (AtlasLoot_TokenData[orgID] == nil) then
AtlasLoot_TokenData[orgID] = {
Name = itemName;
Type = AtlasLoot_Data[dataID].Type;
Back = true;
NoSubt = true;
[1] = { Name = itemName };
};
end
local count = #AtlasLoot_Data[dataID][1] * #AtlasLoot_Data[dataID];
local function addItem(itemID, v, t)
if itemType == select(9, GetItemInfo(itemID)) or itemType2 == select(9, GetItemInfo(itemID)) then
table.insert(AtlasLoot_TokenData[orgID][1], {#AtlasLoot_TokenData[orgID][1] + 1, v[2], v[3], v[4], t.Name});
end
if count == 1 then
AtlasLoot:ShowItemsFrame(AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[2], AtlasLootItemsFrame.refresh[3]);
end
count = count - 1;
end
--Fills table with items
for n, t in ipairs(AtlasLoot_Data[dataID]) do
for c, v in ipairs(t) do
if type(v) == "table" then
if GetItemInfo(v[2]) then
addItem(v[2], v, t)
else
local item = Item:CreateFromID(v[2]);
item:ContinueOnLoad(function(itemID)
addItem(itemID, v, t)
end)
end
end
end
end
end
--[[
AtlasLoot:ShowItemsFrame(dataID, dataSource, tablenum):
dataID - Name of the loot table
dataSource - Table in the database where the loot table is stored
tablenum - Number of the table with the loot in it
It is the workhorse of the mod and allows the loot tables to be displayed any way anywhere in any mod.
]]
function AtlasLoot:ShowItemsFrame(dataID, dataSource_backup, tablenum)
--Set up local variables needed for GetItemInfo, etc
local itemName, itemLink, itemQuality, itemLevel, itemType, itemSubType, itemCount, itemEquipLoc, itemTexture, itemColor;
local iconFrame, nameFrame, extraFrame, itemButton;
local text, extra;
local isValid, isItem, toShow, IDfound;
local spellName, spellIcon;
SearchPrevData = {dataID, dataSource_backup, tablenum};
--If the loot table name has not been passed, throw up a debugging statement
if dataID == nil then
DEFAULT_CHAT_FRAME:AddMessage("No dataID!");
return;
end
--Hide Advanced search if it is up and reshow Querybutton
AtlasLootDefaultFrame_AdvancedSearchPanel:Hide();
--Ditch the Quicklook selector
AtlasLootQuickLooksButton:Hide();
AtlasLoot:HideFilterCreateButtons();
--Hide Map and reshow lootbackground
AtlasLootDefaultFrame_Map:Hide();
AtlasLootDefaultFrame_LootBackground:Show();
AtlasLootItemsFrame:Show();
-- Hide the Filter Check-Box
AtlasLootFilterCheck:Hide();
-- Hide the map header lable
Atlasloot_HeaderLabel:Hide();
local dataSource = _G[dataSource_backup] or AtlasLoot_Data;
-- Check to see if Atlas is loaded and the table has a map
if dataSource_backup ~= "AtlasLoot_TokenData" and dataSource[dataID].Map and ATLASLOOT_ATLASLOADED then
AtlasLootDefaultFrame_MapButton:Enable();
AtlasLootDefaultFrame_MapSelectButton:Enable();
-- Stops map reseting to default while still in the same raid/instance table
if AtlasLootItemsFrame.refresh == nil or dataID ~= AtlasLootItemsFrame.refresh[1] then
AtlasLoot_MapMenu:Unregister(AtlasLootDefaultFrame_MapSelectButton);
ATLASLOOT_CURRENT_MAP = dataSource[dataID].Map
if AtlasLoot_MultiMapData[ATLASLOOT_CURRENT_MAP] ~= nil then
AtlasLoot:MapMenuRegister(ATLASLOOT_CURRENT_MAP);
end
AtlasLoot:MapSelect(ATLASLOOT_CURRENT_MAP);
end
else
AtlasLootDefaultFrame_MapSelectButton:Disable();
AtlasLootDefaultFrame_MapButton:Disable();
AtlasLootDefaultFrame_MapSelectButton:SetText("No Map");
end
if dataSource_backup == "AtlasLoot_CurrentWishList" then
ATLASLOOT_CURRENT_WISHLIST_NUM = AtlasLoot_CurrentWishList["Show"].ListNum;
else
ATLASLOOT_ITEM_UNLOCK = false;
end
local difType = false;
-- Checks to see if type is the same
if ATLASLOOT_CURRENTTYPE ~= dataSource[dataID].Type then
if dataSource[dataID].Type == "Crafting" or dataSource[dataID].Type == "CraftingNoBF" then
ItemindexID = "Pattern";
elseif (ItemindexID == "Pattern" and dataSource[dataID].Type ~= "Crafting") or (ItemindexID == "Pattern" and dataSource[dataID].Type ~= "CraftingNoBF") then
ItemindexID = 2;
else
ItemindexID = ATLASLOOT_TYPE[dataSource[dataID].Type] or 2;
end
difType = true;
end
-- Saves current types ItemindexID
if dataSource[dataID].Type then
ATLASLOOT_TYPE[dataSource[dataID].Type] = ItemindexID;
end
-- Set current type
ATLASLOOT_CURRENTTYPE = dataSource[dataID].Type or "Default";
-- Loads the difficultys into the scrollFrame
if dataSource[dataID].ListType then
AtlasLoot:ScrollFrameUpdate(nil,dataSource[dataID].ListType);
else
AtlasLoot:ScrollFrameUpdate();
end
-- Finds the tablenumber to set where the difficulty slider should be.
local typeNumber = 1;
local function findTypeNumber()
for i,v in ipairs(AtlasLoot_Difficulty[dataSource[dataID].Type]) do
if v[2] == ItemindexID then
typeNumber = i;
return i;
end
end
end
-- Moves the difficulty scrollslider if the difficulty has changed
if dataSource[dataID].Type and difType and #AtlasLoot_Difficulty[dataSource[dataID].Type] > 5 and findTypeNumber() > 5 then
local min, max = AtlasLootDefaultFrameScrollScrollBar:GetMinMaxValues();
AtlasLootDefaultFrameScrollScrollBar:SetValue(typeNumber * (max / #AtlasLoot_Difficulty[dataSource[dataID].Type]));
end
-- Moves the difficulty scrollslider if wishlist
if dataSource_backup == "AtlasLoot_CurrentWishList" and dataSource[dataID].ListNum > 5 then
local min, max = AtlasLootDefaultFrameScrollScrollBar:GetMinMaxValues();
AtlasLootDefaultFrameScrollScrollBar:SetValue(dataSource[dataID].ListNum * (max / #AtlasLootWishList[dataSource[dataID].ListType][dataSource[dataID].ListNum]));
end
--For stopping the subtable from changing if its a token table
if dataSource[dataID].NoSubt == nil and dataID ~= "FilterList" then
if dataSource[dataID].DisplayName then
AtlasLootDefaultFrame_SubMenuText:SetText(dataSource[dataID].DisplayName);
else
AtlasLootDefaultFrame_SubMenuText:SetText(dataSource[dataID].Name);
end
AtlasLoot:SubTableScrollFrameUpdate(dataID, dataSource_backup, tablenum);
end
--Hide UI objects so that only needed ones are shown
for i = 1, 30, 1 do
_G["AtlasLootItem_"..i.."_Unsafe"]:Hide();
_G["AtlasLootItem_"..i]:Hide();
_G["AtlasLootItem_"..i].itemID = 0;
_G["AtlasLootItem_"..i].spellitemID = 0;
end
-- Sets the main page lable
if dataSource[dataID][tablenum] and dataSource[dataID][tablenum].Name then
AtlasLoot_BossName:SetText(dataSource[dataID][tablenum].Name);
else
AtlasLoot_BossName:SetText("This Is Empty");
return
end
local function getProperItemConditionals(item)
isValid = false;
toShow = true;
isItem = false;
local itemDif = ItemindexID;
if(item ~= nil and item ~= "") then
IDfound = item[2];
isValid = true;
if type(ItemindexID) == "string" then
IDfound = item[2];
toShow = true;
else
if(item[AtlasLoot_Difficulty.MIN_DIF]) then
if item[AtlasLoot_Difficulty.MIN_DIF] > itemDif then
toShow = false;
end
end
IDfound = AtlasLoot:FindId(item[2], min(AtlasLoot_Difficulty:getMaxDifficulty(dataSource[dataID].Type), itemDif),dataSource[dataID].Type) or item[2];
end
if string.sub(IDfound, 1, 1) == "s" then
IDfound = AtlasLoot:FindId(item[2], itemDif, dataSource[dataID].Type) or item[2];
else
isItem = true;
end
if isItem and toShow then
--Sets ItemindexID to normal(2) if it is nil for min/max difficulties.
if not tonumber(itemDif) then itemDif = AtlasLoot_Difficulty.Normal end;
--Checks if an item has a Maximum difficulty, this is to correct some items that have an entry for higher difficulties then they really do
if item[AtlasLoot_Difficulty.MAX_DIF] then
if tonumber(item[AtlasLoot_Difficulty.MAX_DIF]) < itemDif then itemDif = item[AtlasLoot_Difficulty.MAX_DIF] end;
end
--If something was found in itemID database show that if not show default table item
IDfound = AtlasLoot:FindId(item[2], itemDif, dataSource[dataID].Type) or item[2];
if ItemindexID ~= "" and dataID == "SearchResult" then
IDfound = AtlasLoot:FindId(item[9], itemDif, dataSource[dataID].Type) or item[2];
end
end
end
return isValid, isItem, toShow, IDfound
end
-- Create the loottable
if (dataID == "SearchResult") or (dataSource_backup == "AtlasLoot_CurrentWishList") or dataSource[dataID][tablenum] then
--Iterate through each item object and set its properties
for i = 1, 30, 1 do
--Check for a valid object (that it exists, and that it has a name
getProperItemConditionals(dataSource[dataID][tablenum][i]);
if isValid and toShow then
if isItem then
itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType, itemCount, itemEquipLoc, itemTexture = GetItemInfo(IDfound);
--If the client has the name of the item in cache, use that instead.
--This is poor man's localisation, English is replaced be whatever is needed
if(GetItemInfo(IDfound)) then
_, _, _, itemColor = GetItemQualityColor(itemQuality);
text = itemColor..itemName;
elseif dataSource[dataID][tablenum][i][2] ~= IDfound and itemDefaultColour ~= nil and not dataSource[dataID][tablenum][i][4]:match("=q5=") then
--If the item is not in cache, use the saved value and process it
text = (string.sub(dataSource[dataID][tablenum][i][4], 5));
text = itemDefaultColour .. text;
text = AtlasLoot_FixText(text);
else
--If the item is not in cache, use the saved value and process it
text = dataSource[dataID][tablenum][i][4];
text = AtlasLoot_FixText(text);
end
else
spellName, _, spellIcon, _, _, _, _, _, _ = GetSpellInfo(string.sub(IDfound, 2));
if spellName then
text = AtlasLoot_FixText(string.sub(dataSource[dataID][tablenum][i][4], 1, 4)..spellName);
else
text = dataSource[dataID][tablenum][i][4];
text = AtlasLoot_FixText(text);
end
end
--Store data about the state of the items frame to allow minor tweaks or a recall of the current loot page
AtlasLootItemsFrame.refresh = {dataID, dataSource_backup, tablenum};
if dataID ~= "FilterList" then
AtlasLootItemsFrame.refreshFilter = {dataID, dataSource_backup, tablenum};
end
if dataID ~= "FilterList" and dataSource[dataID].Back ~= true then
AtlasLootItemsFrame.refreshOri = {dataID, dataSource_backup, tablenum};
end
--Insert the item description
if dataSource[dataID][tablenum][i][6] and dataSource[dataID][tablenum][i][6] ~= "" then
extra = dataSource[dataID][tablenum][i][6];
elseif dataSource[dataID][tablenum][i][5] then
extra = dataSource[dataID][tablenum][i][5];
else
extra = "";
end
extra = AtlasLoot_FixText(extra);
--Use shortcuts for easier reference to parts of the item button
itemButton = _G["AtlasLootItem_"..dataSource[dataID][tablenum][i][1]];
iconFrame = _G["AtlasLootItem_"..dataSource[dataID][tablenum][i][1].."_Icon"];
nameFrame = _G["AtlasLootItem_"..dataSource[dataID][tablenum][i][1].."_Name"];
extraFrame = _G["AtlasLootItem_"..dataSource[dataID][tablenum][i][1].."_Extra"];
--If there is no data on the texture an item should have, show a big red question mark
if dataSource[dataID][tablenum][i][3] == "Blank" then
iconFrame:SetTexture(nil);
elseif dataSource[dataID][tablenum][i][3] == "?" then
iconFrame:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark");
elseif dataSource[dataID][tablenum][i][3] == "" then
iconFrame:SetTexture(GetItemIcon(IDfound));
elseif (not isItem) and (spellIcon) then
if tonumber(dataSource[dataID][tablenum][i][3]) then
iconFrame:SetTexture(GetItemIcon(tonumber(dataSource[dataID][tablenum][i][3])));
elseif dataSource[dataID][tablenum][i][3] == "" then
iconFrame:SetTexture(spellIcon);
elseif type(dataSource[dataID][tablenum][i][3]) == "string" then
iconFrame:SetTexture("Interface\\Icons\\"..dataSource[dataID][tablenum][i][3]);
else
iconFrame:SetTexture(spellIcon);
end
else
--else show the texture
iconFrame:SetTexture("Interface\\Icons\\"..dataSource[dataID][tablenum][i][3]);
end
itemButton.itemTexture = dataSource[dataID][tablenum][i][3];
if iconFrame:GetTexture() == nil and dataSource[dataID][tablenum][i][3] ~= "Blank" then
iconFrame:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark");
end
itemButton.name = text;
itemButton.extra = extra;
--Highlight items in the wishlist
if IDfound ~= "" and IDfound ~= 0 and dataSource_backup ~= "AtlasLoot_CurrentWishList" and AtlasLootWishList["Options"][UnitName("player")]["Mark"] == true then
local xitemexistwish, itemwishicons = AtlasLoot_WishListCheck(IDfound, true)
if xitemexistwish then
text = itemwishicons.." "..text;
end
end
--Set the name and description of the item
nameFrame:SetText(text);
extraFrame:SetText(extra);
extraFrame:Show();
--For convenience, we store information about the objects in the objects so that it can be easily accessed later
if((string.sub(IDfound, 1, 1) == "s") and (ItemindexID ~= "Pattern") and (tonumber(dataSource[dataID][tablenum][i][3]))) then
IDfound = AtlasLoot:FindId(tonumber(dataSource[dataID][tablenum][i][3]), ItemindexID, dataSource[dataID].Type) or tonumber(dataSource[dataID][tablenum][i][3]);
itemButton.itemID = IDfound;
itemButton.spellitemID = dataSource[dataID][tablenum][i][3];
else
itemButton.itemID = IDfound;
if tonumber(dataSource[dataID][tablenum][i][3]) then
itemButton.spellitemID = dataSource[dataID][tablenum][i][3];
else
itemButton.spellitemID = 0;
end
end
itemButton.iteminfo = {};
if isItem then
itemButton.iteminfo.idcore = IDfound;
itemButton.iteminfo.icontexture = IDfound;
itemButton.storeID = IDfound;
itemButton.dressingroomID = IDfound;
else
itemButton.iteminfo.idcore = IDfound;
itemButton.iteminfo.icontexture = GetItemIcon(IDfound);
itemButton.storeID = IDfound;
itemButton.dressingroomID = IDfound;
end
itemButton.tablenum = tablenum;
itemButton.dataID = dataID;
itemButton.dataSource = dataSource_backup;
itemButton.desc = dataSource[dataID][tablenum][i][5] or nil;
itemButton.price = dataSource[dataID][tablenum][i][6] or nil;
itemButton.droprate = dataSource[dataID][tablenum][i][7] or nil;
if (dataID == "SearchResult" or dataSource_backup == "AtlasLoot_CurrentWishList") and dataSource[dataID][tablenum][i][8] then
itemButton.sourcePage = dataSource[dataID][tablenum][i][8];
elseif dataSource[dataID][tablenum][i][8] ~= nil and dataSource[dataID][tablenum][i][8]:match("=TT=") then
itemButton.sourcePage = string.sub(dataSource[dataID][tablenum][i][8], 5);
elseif dataSource[dataID][tablenum][i][8] ~= nil and dataSource[dataID][tablenum][i][8]:match("=LT=") then
itemButton.sourcePage = dataSource[dataID][tablenum][i][8];
else
itemButton.sourcePage = nil;
end
if dataSource[dataID][tablenum][i][AtlasLoot_Difficulty.DIF_SEARCH] then
itemButton.difficulty = dataSource[dataID][tablenum][i][AtlasLoot_Difficulty.DIF_SEARCH];
else
itemButton.difficulty = ItemindexID;
end
itemButton.i = 1;
itemButton:Show();
if IDfound == 0 then _G["AtlasLootItem_"..i.."_Unsafe"]:Hide(); end
end
end
AtlasLootItemsFrame.refresh = {dataID, dataSource_backup, tablenum};
if dataID ~= "FilterList" then
AtlasLootItemsFrame.refreshFilter = {dataID, dataSource_backup, tablenum};
end
if dataID ~= "FilterList" and dataSource[dataID].Back ~= true and dataID ~= "EmptyTable" then
AtlasLootItemsFrame.refreshOri = {dataID, dataSource_backup, tablenum};
end
if dataSource_backup ~= "AtlasLoot_CurrentWishList" and dataID ~= "FilterList" and dataSource[dataID].Back ~= true and dataID ~= "EmptyTable" then
if not AtlasLoot.db.profile.LastBoss or type(AtlasLoot.db.profile.LastBoss) ~= "table" then AtlasLoot.db.profile.LastBoss = {} end;
AtlasLoot.db.profile.LastBoss[AtlasLoot_Expac] = {dataID, dataSource_backup, tablenum, ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE};
AtlasLoot.db.profile[ATLASLOOT_CURRENTTABLE] = {dataID, dataSource_backup, tablenum, ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE};
end
--This is a valid QuickLook, so show the UI objects
AtlasLootQuickLooksButton:Show();
-- Checks dataID with submenus to stop filter button loading on certain tables
local function filterCheck(find)
local mtype = {"Crafting", "Reputations", "WorldEvents", "PVP", "Collections"}
for m, t in pairs (mtype) do
if AtlasLoot_SubMenus[t..AtlasLoot_Expac] then
for i, v in ipairs (AtlasLoot_SubMenus[t..AtlasLoot_Expac]) do
if find == v[2] then
return true;
end
end
end
end
end
-- Show the Filter Check-Box
if filterCheck(dataID) ~= true then
AtlasLootFilterCheck:Show();
end
--Hide navigation buttons by default, only show what we need
_G["AtlasLootItemsFrame_BACK"]:Hide();
_G["AtlasLootItemsFrame_NEXT"]:Hide();
_G["AtlasLootItemsFrame_PREV"]:Hide();
_G["AtlasLootItemsFrame_Wishlist_Options"]:Hide();
_G["AtlasLootItemsFrame_Wishlist_Share"]:Hide();
_G["AtlasLootItemsFrame_Wishlist_Swap"]:Hide();
_G["AtlasLootItemsFrame_Wishlist_UnLock"]:Hide();
-- Show Wishlist buttons when a wishlist in showing
if dataSource_backup == "AtlasLoot_CurrentWishList" then
_G["AtlasLootItemsFrame_Wishlist_Options"]:Show();
_G["AtlasLootItemsFrame_Wishlist_Share"]:Show();
_G["AtlasLootItemsFrame_Wishlist_Swap"]:Show();
_G["AtlasLootItemsFrame_Wishlist_UnLock"]:Show();
if dataSource[dataID].ListType == "Shared" then
AtlasLootItemsFrame_Wishlist_Swap:SetText("Own");
elseif dataSource[dataID].ListType == "Own" then
AtlasLootItemsFrame_Wishlist_Swap:SetText("Shared");
end
end
local tablebase = {dataID, dataSource_backup};
if dataID == "FilterList" then
tablebase = {AtlasLootItemsFrame.refreshOri[1],AtlasLootItemsFrame.refreshOri[2]};
tablenum = AtlasLootItemsFrame.refreshOri[3];
end
if AtlasLootItemsFrame.refresh and AtlasLootItemsFrame.refreshOri and tablenum ~= #_G[AtlasLootItemsFrame.refreshOri[2]][AtlasLootItemsFrame.refreshOri[1]] and dataSource_backup ~= "AtlasLoot_TokenData" and dataID ~= "SearchResult" or tablenum ~= #_G[AtlasLootItemsFrame.refresh[2]][AtlasLootItemsFrame.refresh[1]] and dataID == "SearchResult" then
_G["AtlasLootItemsFrame_NEXT"]:Show();
_G["AtlasLootItemsFrame_NEXT"].tablenum = tablenum + 1;
_G["AtlasLootItemsFrame_NEXT"].tablebase = tablebase;
end
if tablenum ~= 1 and dataSource_backup ~= "AtlasLoot_TokenData" then
_G["AtlasLootItemsFrame_PREV"]:Show();
_G["AtlasLootItemsFrame_PREV"].tablenum = tablenum - 1;
_G["AtlasLootItemsFrame_PREV"].tablebase = tablebase;
end
if dataSource[dataID].Back or ATLASLOOT_BACKENABLED then
_G["AtlasLootItemsFrame_BACK"]:Show();
elseif dataID ~= "FilterList" then
AtlasLootItemsFrame.refreshBack = {dataID, dataSource_backup, tablenum};
end
end
--Anchor the item frame where it is supposed to be
if ATLASLOOT_FILTER_ENABLE and dataID ~= "FilterList" then
AtlasLoot:HideFilteredItems();
end
if dataID ~= "SearchResult" then
AtlasLoot:QueryLootPage();
end
end
--[[
AtlasLoot:NavButton_OnClick:
Called when <-, -> are pressed and calls up the appropriate loot page
]]
function AtlasLoot:NavButton_OnClick(self)
local tablenum, dataID, dataSource = self.tablenum, self.tablebase[1], self.tablebase[2];
if #_G[dataSource][dataID] > 26 then
local min, max = AtlasLootDefaultFrameSubTableScrollScrollBar:GetMinMaxValues();
AtlasLootDefaultFrameSubTableScrollScrollBar:SetValue(tablenum * (max / #_G[dataSource][dataID]));
end
AtlasLoot:ShowItemsFrame(dataID, dataSource, tablenum);
end
--[[
AtlasLoot:NavButton_OnClick:
Called when 'Back'Button is pressed and calls up the appropriate loot page
]]
function AtlasLoot:BackButton_OnClick()
ATLASLOOT_BACKENABLED = false;
AtlasLoot:ShowItemsFrame(AtlasLootItemsFrame.refreshBack[1], AtlasLootItemsFrame.refreshBack[2], AtlasLootItemsFrame.refreshBack[3]);
end
--[[
AtlasLoot:IsLootTableAvailable(dataID):
Checks if a loot table is in memory and attempts to load the correct LoD module if it isn't
dataID: Loot table dataID
]]
function AtlasLoot:IsLootTableAvailable(dataSource)
local moduleName = nil;
moduleName = AtlasLoot.ModuleName[dataSource];
if IsAddOnLoaded(moduleName) then
return true;
else
LoadAddOn(moduleName);
end
end
-- List of Moduel Names
AtlasLoot.ModuleName = {
["AtlasLootOriginalWoW"] = "AtlasLoot_OriginalWoW";
["AtlasLootBurningCrusade"] = "AtlasLoot_BurningCrusade";
["AtlasLootCrafting"] = "AtlasLoot_Crafting";
["AtlasLootWorldEvents"] = "AtlasLoot_WorldEvents";
["AtlasLootWotLK"] = "AtlasLoot_WrathoftheLichKing";
["AtlasLootVanity"] = "AtlasLoot_Vanity"
}
--[[
AtlasLoot:LoadAllModules()
Used to load all available LoD modules
]]
function AtlasLoot:LoadAllModules()
local orig, bc, wotlk, craft, world, vanity;
orig, _ = LoadAddOn("AtlasLoot_OriginalWoW");
bc, _ = LoadAddOn("AtlasLoot_BurningCrusade");
craft, _ = LoadAddOn("AtlasLoot_Crafting");
world, _ = LoadAddOn("AtlasLoot_WorldEvents");
wotlk, _ = LoadAddOn("AtlasLoot_WrathoftheLichKing");
vanity, _ = LoadAddOn("AtlasLoot_Vanity");
local flag=0;
if not orig then
LoadAddOn("AtlasLoot_OriginalWoW");
flag=1;
end
if not bc then
LoadAddOn("AtlasLoot_BurningCrusade");
flag=1;
end
if not craft then
LoadAddOn("AtlasLoot_Crafting");
flag=1;
end
if not world then
LoadAddOn("AtlasLoot_WorldEvents");
flag=1;
end
if not wotlk then
LoadAddOn("AtlasLoot_WrathoftheLichKing");
flag=1;
end
if not vanity then
LoadAddOn("AtlasLoot_Vanity");
flag=1;
end
if flag == 1 then
if ATLASLOOT_DEBUGMESSAGES then
DEFAULT_CHAT_FRAME:AddMessage(GREEN..AL["AtlasLoot"]..": "..WHITE..AL["All Available Modules Loaded"]);
end
collectgarbage("collect");
end
end
--[[
AtlasLoot:ShowQuickLooks(button)
button: Identity of the button pressed to trigger the function
Shows the GUI for setting Quicklooks
]]
function AtlasLoot:ShowQuickLooks(button)
local dewdrop = AceLibrary("Dewdrop-2.0");
if dewdrop:IsOpen(button) then
dewdrop:Close(1);
else
local setOptions = function()
dewdrop:AddLine(
"text", AL["QuickLook"].." 1",
"tooltipTitle", AL["QuickLook"].." 1",
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 1",
"func", function()
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
AtlasLootCharDB["QuickLooks"][1]={AtlasLoot_CurrentWishList["Show"].ListType, "AtlasLootWishList", AtlasLoot_CurrentWishList["Show"].ListNum, ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G["AtlasLootWishList"][AtlasLoot_CurrentWishList["Show"].ListType][AtlasLoot_CurrentWishList["Show"].ListNum].Name};
else
AtlasLootCharDB["QuickLooks"][1]={AtlasLootItemsFrame.refreshOri[1], AtlasLootItemsFrame.refreshOri[2], AtlasLootItemsFrame.refreshOri[3], ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G[AtlasLootItemsFrame.refreshOri[2]][AtlasLootItemsFrame.refreshOri[1]][AtlasLootItemsFrame.refreshOri[3]].Name};
end
AtlasLoot:RefreshQuickLookButtons();
dewdrop:Close(1);
end
);
dewdrop:AddLine(
"text", AL["QuickLook"].." 2",
"tooltipTitle", AL["QuickLook"].." 2",
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 2",
"func", function()
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
AtlasLootCharDB["QuickLooks"][2]={AtlasLoot_CurrentWishList["Show"].ListType, "AtlasLootWishList", AtlasLoot_CurrentWishList["Show"].ListNum, ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G["AtlasLootWishList"][AtlasLoot_CurrentWishList["Show"].ListType][AtlasLoot_CurrentWishList["Show"].ListNum].Name};
else
AtlasLootCharDB["QuickLooks"][2]={AtlasLootItemsFrame.refreshOri[1], AtlasLootItemsFrame.refreshOri[2], AtlasLootItemsFrame.refreshOri[3], ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G[AtlasLootItemsFrame.refreshOri[2]][AtlasLootItemsFrame.refreshOri[1]][AtlasLootItemsFrame.refreshOri[3]].Name};
end
AtlasLoot:RefreshQuickLookButtons();
dewdrop:Close(1);
end
);
dewdrop:AddLine(
"text", AL["QuickLook"].." 3",
"tooltipTitle", AL["QuickLook"].." 3",
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 3",
"func", function()
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
AtlasLootCharDB["QuickLooks"][3]={AtlasLoot_CurrentWishList["Show"].ListType, "AtlasLootWishList", AtlasLoot_CurrentWishList["Show"].ListNum, ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G["AtlasLootWishList"][AtlasLoot_CurrentWishList["Show"].ListType][AtlasLoot_CurrentWishList["Show"].ListNum].Name};
else
AtlasLootCharDB["QuickLooks"][3]={AtlasLootItemsFrame.refreshOri[1], AtlasLootItemsFrame.refreshOri[2], AtlasLootItemsFrame.refreshOri[3], ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G[AtlasLootItemsFrame.refreshOri[2]][AtlasLootItemsFrame.refreshOri[1]][AtlasLootItemsFrame.refreshOri[3]].Name};
end
AtlasLoot:RefreshQuickLookButtons();
dewdrop:Close(1);
end
);
dewdrop:AddLine(
"text", AL["QuickLook"].." 4",
"tooltipTitle", AL["QuickLook"].." 4",
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 4",
"func", function()
if AtlasLootItemsFrame.refresh[2] == "AtlasLoot_CurrentWishList" then
AtlasLootCharDB["QuickLooks"][4]={AtlasLoot_CurrentWishList["Show"].ListType, "AtlasLootWishList", AtlasLoot_CurrentWishList["Show"].ListNum, ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G["AtlasLootWishList"][AtlasLoot_CurrentWishList["Show"].ListType][AtlasLoot_CurrentWishList["Show"].ListNum].Name};
else
AtlasLootCharDB["QuickLooks"][4]={AtlasLootItemsFrame.refreshOri[1], AtlasLootItemsFrame.refreshOri[2], AtlasLootItemsFrame.refreshOri[3], ATLASLOOT_LASTMODULE, ATLASLOOT_CURRENTTABLE, _G[AtlasLootItemsFrame.refreshOri[2]][AtlasLootItemsFrame.refreshOri[1]][AtlasLootItemsFrame.refreshOri[3]].Name};
end
AtlasLoot:RefreshQuickLookButtons();
dewdrop:Close(1);
end
);
end;
dewdrop:Open(button,
'point', function(parent)
return "BOTTOMLEFT", "BOTTOMRIGHT";
end,
"children", setOptions
);
end
end
--[[
AtlasLoot:RefreshQuickLookButtons()
Enables/disables the quicklook buttons depending on what is assigned
]]
function AtlasLoot:RefreshQuickLookButtons()
local i=1;
while i<5 do
if ((not AtlasLootCharDB["QuickLooks"][i]) or (not AtlasLootCharDB["QuickLooks"][i][1])) or (AtlasLootCharDB["QuickLooks"][i][1]==nil) then
_G["AtlasLootDefaultFrame_Preset"..i]:Disable();
else
_G["AtlasLootDefaultFrame_Preset"..i]:Enable();
end
i=i+1;
end
end
function AtlasLoot:QueryLootPage()
local START = 1;
local MAX_BUTTONS = 30;
local COUNTED = 0;
local REFRESHED = false;
local function queryNextItem(pos)
if pos > MAX_BUTTONS then return end;
local button = _G["AtlasLootItem_"..pos];
local queryitem = button.itemID;
if (queryitem) and (queryitem ~= nil) and (queryitem ~= "") and (queryitem ~= 0) and (string.sub(queryitem, 1, 1) ~= "s") then
local item = Item:CreateFromID(queryitem);
if not (item:GetInfo()) then
item:ContinueOnLoad(function(itemId)
COUNTED = COUNTED + 1;
if not REFRESHED and (COUNTED == MAX_BUTTONS) then
REFRESHED = true;
AtlasLoot:ShowItemsFrame(AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[2], AtlasLootItemsFrame.refresh[3]);
end
end)
else
COUNTED = COUNTED + 1;
end
else
COUNTED = COUNTED + 1;
end
queryNextItem(pos + 1);
end
queryNextItem(START);
end
--[[
AtlasLoot:AddTooltip(frameb, tooltiptext)
Adds explanatory tooltips to UI objects.
]]
function AtlasLoot:AddTooltip(frameb, tooltiptext)
if not tooltiptext or not frameb then return end
local frame = _G[frameb]
frame:SetScript("OnEnter", function()
GameTooltip:SetOwner(frame, "ANCHOR_RIGHT")
GameTooltip:SetText(tooltiptext)
GameTooltip:Show()
end)
frame:SetScript("OnLeave", function() GameTooltip:Hide() end)
end
--[[
AtlasLoot:FindId(id, difficulty)
Finds the Ids of other difficulties based on the normal id of the item and the difficulty parameter given.
On the form of {ID, {normal, heroic, mythic, mythic1, mythic2, ... ,mythicN}}
]]
function AtlasLoot:FindId(id, difficulty, type)
if not ItemIDsDatabase[id] then return nil, false end
if difficulty == 5 and (type == "BCRaid" or type == "ClassicRaid") then
return ItemIDsDatabase[id]["MythicRaid"], true
else
return ItemIDsDatabase[id][difficulty], true
end
end
-- Loads the Item Variations into a table from the data content folder
function AtlasLoot:LoadItemIDsDatabase()
local content = C_ContentLoader:Load("ItemVariationData")
content:SetParser(function(index, data)
-- run for each item in the data
if index ~= 0 and data.Normal ~= 0 and not ItemIDsDatabase[data.Normal] then
ItemIDsDatabase[data.Normal] = {}
ItemIDsDatabase[data.Normal]["MythicRaid"] = tonumber("13"..data.Normal);
table.insert(ItemIDsDatabase[data.Normal],data.Bloodforged);
table.insert(ItemIDsDatabase[data.Normal],data.Normal);
if data.Heroic ~= 0 then table.insert(ItemIDsDatabase[data.Normal],data.Heroic) end
for _,v in ipairs(data["Mythic"]) do
if v ~= 0 then
table.insert(ItemIDsDatabase[data.Normal],v)
end
end
end
end)
-- This will run over time (usually about 30s for a file this size), but will maintain playable fps while running.
content:ParseAsync()
end