Files
AtlasLoot/Core/WishList.lua
T
Lexie c20b44e6e0 1.1.0 Update
# Atlasloot v1.1.0

• Added recommended levels to dungeons
• Atlasloot attempts to opens at the last page you were on
• WSG Landing page and overhaul
• AB Landing Page
• Core fixes
• Fixed some bugs that were breaking the Search function
• **3,167 drop rates updated**
• Checked drop rates for all World Bosses and Rare Spawns
• Gardening
• Sorted the reputation list A-Z
• Added faction colours to the reputation list
• Added and fixed MANY missing drops, items, recipies, etc.
• Reworked Silvermoon and Revantusk pages
• Update announce code using LFT as well as SendAddonMessage

-- 1.17.0 Patch --

• Lower Karazhan Halls
• Emerald Sanctum
• Gilneas City
• Rare Spawns
• Enchants
• First Aid
• Tailoring
• Leatherworking
• Mining
• _Some_ of Blacksmithing

# THERE IS STILL A LOT MORE 1.17.0 THINGS THAT NEED TO BE ADDED
2023-10-29 07:12:47 +11:00

297 lines
8.8 KiB
Lua

--[[
File containing functions related to the wish list.
Functions:
AtlasLoot_ShowWishList()
AtlasLoot_AddToWishlist(itemID, itemTexture, itemName, lootPage, sourcePage)
AtlasLoot_DeleteFromWishList(itemID)
AtlasLoot_WishListSort()
AtlasLoot_WishListSortCheck(temp1, temp2)
local RecursiveSearchZoneName(dataTable, zoneID)
AtlasLoot_GetWishListSubheading(dataID)
AtlasLoot_CategorizeWishList(wlTable)
AtlasLoot_GetWishListPage(page)
]]
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"], pFrame);
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, lootPage, 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, lootPage, 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"], pFrame);
end
--[[
AtlasLoot_WishListSort()
Sorts the Wishlist
]]
function AtlasLoot_WishListSort()
j=0;
P=2;
temp={};
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
prefix1=string.lower(string.sub(temp1[3], 1, 10));
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_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 = 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 = 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"
print("box: "..box.." - cat: "..cat)
table.insert(result, { 0, "INV_Box_01", "=q6="..box, "=q0="..GetLootTableParent(strsplit("|", cat)) });]]--
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