311 lines
9.1 KiB
Lua
311 lines
9.1 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"])
|
|
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"])
|
|
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)
|
|
if not dataID then return end
|
|
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
|
|
|
|
local function GetWishListSubheadingDungeon(dataID)
|
|
if not AtlasLoot_TableNames 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 = i
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
return zoneID
|
|
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 = strfind(v[5], "^(.+)|.+")
|
|
-- Build subheading table
|
|
if not subheadings[dataID] then
|
|
if AtlasLootCharDB.WishlistGroupedByDungeon then
|
|
subheadings[dataID] = GetWishListSubheadingDungeon(dataID)
|
|
else
|
|
subheadings[dataID] = AtlasLoot_GetWishListSubheadingBoss(dataID)
|
|
end
|
|
-- 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"
|
|
_, _, cat = strfind(cat, "^(.+)|.+")
|
|
local parent = GetLootTableParent(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
|