815ad7141e
fixed bugs after relogging/reloading UI when last opened page was WishList or Search removed redundant menu of world epics, removed fashion table (I don't see the point of keeping it since you can preview everything in the turtle shop itself anyway) tooltip source is now more accurate and lighter on performance moved buttons in atlasloot panel in Atlas to save some space
290 lines
8.8 KiB
Lua
290 lines
8.8 KiB
Lua
--File containing functions related to the wish list.
|
|
|
|
local AL = AceLibrary("AceLocale-2.2"):new("AtlasLoot");
|
|
|
|
AtlasLoot_WishList = nil;
|
|
local currentPage = 1;
|
|
|
|
-- 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";
|
|
|
|
--[[
|
|
AtlasLoot_ShowWishList()
|
|
Displays the WishList
|
|
]]
|
|
function AtlasLoot_ShowWishList()
|
|
AtlasLoot_ShowItemsFrame("WishList", "WishListPage"..currentPage, AL["WishList"], AtlasLoot_AnchorPoint);
|
|
CloseDropDownMenus();
|
|
AtlasLootDefaultFrame_SubMenu:Disable()
|
|
AtlasLootDefaultFrame_SelectedTable:Hide()
|
|
AtlasLootQuickLooksButton:Hide()
|
|
AtlasLoot_QuickLooks:Hide()
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_AddToWishlist(itemID, itemTexture, itemName, lootPage, sourcePage)
|
|
Looks for an empty slot in the wishlist and slots the item in
|
|
]]
|
|
function AtlasLoot_AddToWishlist(itemID, itemTexture, itemName, extraText, sourcePage)
|
|
for _, v in ipairs(AtlasLootCharDB["WishList"]) do
|
|
if v[1] == itemID then
|
|
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..AtlasLoot_FixText(itemName)..RED..AL[" already in the WishList!"]);
|
|
return;
|
|
end
|
|
end
|
|
table.insert(AtlasLootCharDB["WishList"], { itemID, itemTexture, itemName, extraText, sourcePage });
|
|
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..AtlasLoot_FixText(itemName)..GREY..AL[" added to the WishList."]);
|
|
AtlasLoot_WishList = AtlasLoot_CategorizeWishList(AtlasLootCharDB["WishList"]);
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_DeleteFromWishList(itemID)
|
|
Deletes the specified items from the wishlist
|
|
]]
|
|
function AtlasLoot_DeleteFromWishList(itemID)
|
|
if itemID and itemID == 0 then return end
|
|
for i, v in ipairs(AtlasLootCharDB["WishList"]) do
|
|
if v[1] == itemID then
|
|
DEFAULT_CHAT_FRAME:AddMessage(RED..AL["AtlasLoot"]..": "..AtlasLoot_FixText(v[3])..GREY..AL[" deleted from the WishList."]);
|
|
table.remove(AtlasLootCharDB["WishList"], i);
|
|
break;
|
|
end
|
|
end
|
|
AtlasLoot_WishList = AtlasLoot_CategorizeWishList(AtlasLootCharDB["WishList"]);
|
|
AtlasLootItemsFrame:Hide();
|
|
AtlasLoot_ShowItemsFrame("WishList", "WishListPage"..currentPage, AL["WishList"], AtlasLoot_AnchorPoint);
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_WishListSort()
|
|
Sorts the Wishlist
|
|
]]
|
|
function AtlasLoot_WishListSort()
|
|
local j = 0;
|
|
local P = 2;
|
|
local temp = {};
|
|
local check = false;
|
|
|
|
while (P < 31) do
|
|
temp = AtlasLootCharDB["WishList"][P];
|
|
j = P;
|
|
check = AtlasLoot_WishListSortCheck(AtlasLootCharDB["WishList"][j - 1], temp);
|
|
while ((j > 1) and check) do
|
|
AtlasLootCharDB["WishList"][j] = AtlasLootCharDB["WishList"][j - 1];
|
|
j = j - 1;
|
|
check = AtlasLoot_WishListSortCheck(AtlasLootCharDB["WishList"][j - 1], temp);
|
|
end
|
|
AtlasLootCharDB["WishList"][j] = temp;
|
|
P = P + 1;
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_WishListSortCheck(temp1, temp2)
|
|
Checks if temp1 > temp2
|
|
Sorts by rarity, then alphabetically.
|
|
]]
|
|
function AtlasLoot_WishListSortCheck(temp1, temp2)
|
|
if (temp1 == nil) then
|
|
return false;
|
|
elseif (temp2 == nil) then
|
|
return false;
|
|
end
|
|
if temp2[1] == 0 then
|
|
return false;
|
|
elseif temp1[1] == 0 then
|
|
return true;
|
|
else
|
|
local prefix1=string.lower(string.sub(temp1[3], 1, 10));
|
|
local prefix2=string.lower(string.sub(temp2[3], 1, 10));
|
|
if prefix1 ~= prefix2 then
|
|
if prefix1 == "|cffff0000" then
|
|
return false;
|
|
elseif (prefix1 == "|cffff8000") and (prefix2 ~= "|cffff0000") then
|
|
return false;
|
|
elseif (prefix1 == "|cffa335ee") then
|
|
if (prefix2 == "|cffff8000") or (prefix2 == "|cffff0000") then
|
|
return true;
|
|
else
|
|
return false;
|
|
end
|
|
elseif (prefix1 == "|cff0070dd") then
|
|
if (prefix2 == "|cffa335ee") or (prefix2 == "|cffff8000") or (prefix2 == "|cffff0000") then
|
|
return true;
|
|
else
|
|
return false;
|
|
end
|
|
elseif (prefix1 == "|cff1eff00") then
|
|
if (prefix2 == "|cffffffff") or (prefix2 == "|cff9d9d9d") then
|
|
return false;
|
|
else
|
|
return true;
|
|
end
|
|
elseif (prefix1 == "|cff9d9d9d") then
|
|
return true;
|
|
elseif (prefix1 == "|cffffffff") and (prefix2~="|cff9d9d9d") then
|
|
return true;
|
|
else
|
|
return false;
|
|
end
|
|
else
|
|
if(temp1[3] > temp2[3]) then
|
|
return true;
|
|
else
|
|
return false;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
local RecursiveSearchZoneName(dataTable, zoneID):
|
|
A recursive function iterate AtlasLoot_HewdropDown table for the zone name
|
|
]]
|
|
local function RecursiveSearchZoneName(dataTable, zoneID)
|
|
if(dataTable[2] == zoneID) then
|
|
return dataTable[1];
|
|
end
|
|
for _, v in pairs(dataTable) do
|
|
if type(v) == "table" then
|
|
local result = RecursiveSearchZoneName(v, zoneID);
|
|
if result then return result end
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_GetWishListSubheading(dataID):
|
|
Iterating through dropdown data tables to search backward for zone name with specified dataID
|
|
]]
|
|
function AtlasLoot_GetWishListSubheading(dataID)
|
|
if not AtlasLoot_HewdropDown or not AtlasLoot_HewdropDown_SubTables then return end
|
|
local zoneID;
|
|
for subKey, subTable in pairs(AtlasLoot_HewdropDown_SubTables) do
|
|
for _, t in ipairs(subTable) do
|
|
if t[2] == dataID then
|
|
zoneID = subKey;
|
|
break;
|
|
end
|
|
end
|
|
if zoneID then break end
|
|
end
|
|
return RecursiveSearchZoneName(AtlasLoot_HewdropDown, zoneID or dataID);
|
|
end
|
|
|
|
function AtlasLoot_GetWishListSubheadingBoss(dataID)
|
|
if not AtlasLoot_TableNamesBoss then
|
|
return
|
|
end
|
|
local zoneID ;
|
|
for i, v in pairs(AtlasLoot_TableNamesBoss) do
|
|
for j,k in pairs(v) do
|
|
if dataID == j then
|
|
zoneID = k[1]
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
--[[for i, v in pairs(AtlasLoot_TableNames) do
|
|
if dataID == i then
|
|
zoneID = v[1]
|
|
break;
|
|
end
|
|
end]]
|
|
return zoneID;
|
|
end
|
|
|
|
function GetLootTableParent(dataID)
|
|
local parentID ;
|
|
for i, v in pairs(AtlasLoot_TableNamesBoss) do
|
|
for j,k in pairs(v) do
|
|
if dataID == j then
|
|
parentID = i
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
return parentID;
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_CategorizeWishList(wlTable):
|
|
Group items with zone/event name etc, and format them by adding subheadings and empty lines
|
|
This function returns a single table with all items, use AtlasLoot_GetWishListPage to split it
|
|
wlTable: is AtlasLootCharDB["WishList"], parameterized for flexible
|
|
]]
|
|
function AtlasLoot_CategorizeWishList(wlTable)
|
|
local subheadings, categories, result = {}, {}, {};
|
|
|
|
for _, v in pairs(wlTable) do
|
|
if v[5] and v[5] ~= "" then
|
|
local dataID = AtlasLoot_Strsplit("|", v[5]);
|
|
-- Build subheading table
|
|
if not subheadings[dataID] then
|
|
subheadings[dataID] = AtlasLoot_GetWishListSubheadingBoss(dataID);
|
|
-- If search failed, replace ID like "Aldor2" to "Aldor1" and try again
|
|
if not subheadings[dataID] and string.find(dataID, "^%a+%d?$") then
|
|
subheadings[dataID] = AtlasLoot_GetWishListSubheading(string.sub(dataID, 1, string.len(dataID) - 1).."1");
|
|
end
|
|
-- If still cant find it, mark it with Unknown
|
|
if not subheadings[dataID] then subheadings[dataID] = AL["Unknown"] end
|
|
end
|
|
-- Build category tables
|
|
if not categories[subheadings[dataID]] then categories[subheadings[dataID]] = {} end
|
|
table.insert(categories[subheadings[dataID]], v);
|
|
end
|
|
end
|
|
|
|
-- Sort and flatten categories
|
|
for k, v in pairs(categories) do
|
|
-- Add a empty line between categories when in a same column
|
|
if table.getn(result) > 1 and (table.getn(result) - math.floor(table.getn(result)/15)*15) > 0 then table.insert(result, { 0, "", "", "" }) end
|
|
-- If a subheading is on the last row of a column, push it to next column
|
|
if ((table.getn(result) + 1) - math.floor((table.getn(result) + 1)/15)*15) == 0 then table.insert(result, { 0, "", "", "" }) end
|
|
-- Subheading
|
|
|
|
-- some debug code that I've used to fix WishList errors before due to people adding drops to AtlasLoot incorrectly.
|
|
local box = k or "Unknown"
|
|
local cat = categories[k][1][5] or "Unknown"
|
|
local parent = GetLootTableParent(AtlasLoot_Strsplit("|", cat)) or "Unknown"
|
|
--print("box: "..box.." - cat: "..cat)
|
|
table.insert(result, { 0, "INV_Box_01", "=q6="..box, "=q0="..parent });
|
|
|
|
--table.insert(result, { 0, "INV_Box_01", "=q6="..k, "=q0="..GetLootTableParent(strsplit("|", categories[k][1][5])) });
|
|
-- Sort first then add items
|
|
table.sort(v, AtlasLoot_WishListSortCheck); -- not works?
|
|
for i = 1, table.getn(v) do table.insert(result, v[i]) end
|
|
end
|
|
collectgarbage();
|
|
return result;
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_GetWishListPage(page):
|
|
Return partial data of WishList table
|
|
page: the page number needed
|
|
]]
|
|
function AtlasLoot_GetWishListPage(page)
|
|
if not AtlasLoot_WishList then AtlasLoot_WishList = AtlasLoot_CategorizeWishList(AtlasLootCharDB["WishList"]) end
|
|
-- Calc for maximal pages
|
|
local pageMax = math.ceil(table.getn(AtlasLoot_WishList) / 30);
|
|
if page < 1 then page = 1 end
|
|
if page > pageMax then page = pageMax end
|
|
currentPage = page;
|
|
|
|
-- Table copy
|
|
local result = {};
|
|
local start = (page - 1) * 30 + 1;
|
|
for i = start, start + 29 do
|
|
if not AtlasLoot_WishList[i] then break end
|
|
table.insert(result, AtlasLoot_WishList[i]);
|
|
end
|
|
return result, pageMax;
|
|
end
|