297 lines
11 KiB
Lua
297 lines
11 KiB
Lua
--[[
|
|
File containing all the Atlas replacement functions and the External API
|
|
]]
|
|
|
|
local AL = LibStub("AceLocale-3.0"):GetLocale("AtlasLoot");
|
|
|
|
-- 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";
|
|
|
|
--Establish number of boss lines in the Atlas frame for scrolling
|
|
local ATLAS_LOOT_BOSS_LINES = 24;
|
|
|
|
--[[
|
|
AtlasLoot_Atlas_OnShow:
|
|
Hooks Atlas_OnShow() to add extra setup routines that AtlasLoot needs for
|
|
integration purposes.
|
|
]]
|
|
function AtlasLoot_Atlas_OnShow()
|
|
Atlas_Refresh();
|
|
|
|
--We don't want Atlas and the Loot Browser open at the same time, so the Loot Browser is close
|
|
if AtlasLootDefaultFrame then
|
|
AtlasLootDefaultFrame:Hide();
|
|
end
|
|
--Call the Atlas function
|
|
Hooked_Atlas_OnShow();
|
|
--If we were looking at a loot table earlier in the session, it is still
|
|
--saved on the item frame, so restore it in Atlas
|
|
if AtlasLootItemsFrame.activeBoss ~= nil then
|
|
AtlasLootItemsFrame:Show();
|
|
else
|
|
--If no loot table is selected, set up icons next to boss names
|
|
for i=1,ATLAS_CUR_LINES do
|
|
if (getglobal("AtlasEntry"..i.."_Selected") and getglobal("AtlasEntry"..i.."_Selected"):IsVisible()) then
|
|
getglobal("AtlasEntry"..i.."_Loot"):Show();
|
|
getglobal("AtlasEntry"..i.."_Selected"):Hide();
|
|
end
|
|
end
|
|
end
|
|
--Consult the saved variable table to see whether to show the bottom panel
|
|
if AtlasLoot.db.profile.HidePanel == true then
|
|
AtlasLootPanel:Hide();
|
|
else
|
|
AtlasLootPanel:Show();
|
|
end
|
|
pFrame = AtlasFrame;
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_Refresh:
|
|
Replacement for Atlas_Refresh, required as the template for the boss buttons in Atlas is insufficient
|
|
Called whenever the state of Atlas changes
|
|
]]
|
|
function AtlasLoot_Refresh()
|
|
--Reset which loot page is 'current'
|
|
AtlasLootItemsFrame.activeBoss = nil;
|
|
|
|
--Get map selection info from Atlas
|
|
local zoneID = ATLAS_DROPDOWNS[AtlasOptions.AtlasType][AtlasOptions.AtlasZone];
|
|
local data = AtlasMaps;
|
|
local base = {};
|
|
|
|
--Get boss name information
|
|
for k,v in pairs(data[zoneID]) do
|
|
base[k] = v;
|
|
end
|
|
|
|
--Display the newly selected texture
|
|
AtlasMap:ClearAllPoints();
|
|
AtlasMap:SetWidth(512);
|
|
AtlasMap:SetHeight(512);
|
|
AtlasMap:SetPoint("TOPLEFT", "AtlasFrame", "TOPLEFT", 18, -84);
|
|
local builtIn = AtlasMap:SetTexture("Interface\\AddOns\\Atlas\\Images\\Maps\\"..zoneID);
|
|
|
|
--If texture was not found in the core Atlas mod, check plugins
|
|
if ( not builtIn ) then
|
|
for k,v in pairs(ATLAS_PLUGINS) do
|
|
if ( AtlasMap:SetTexture("Interface\\AddOns\\"..v.."\\Images\\"..zoneID) ) then
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
|
|
--Setup info panel above boss listing
|
|
local tName = base.ZoneName[1];
|
|
if ( AtlasOptions.AtlasAcronyms and base.Acronym ~= nil) then
|
|
local _RED = "|cffcc6666";
|
|
tName = tName.._RED.." ["..base.Acronym.."]";
|
|
end
|
|
AtlasText_ZoneName_Text:SetText(tName);
|
|
|
|
local tLoc = "";
|
|
local tLR = "";
|
|
local tML = "";
|
|
local tPL = "";
|
|
if ( base.Location ) then
|
|
tLoc = ATLAS_STRING_LOCATION..": "..base.Location[1];
|
|
end
|
|
if ( base.LevelRange ) then
|
|
tLR = ATLAS_STRING_LEVELRANGE..": "..base.LevelRange;
|
|
end
|
|
if ( base.MinLevel ) then
|
|
tML = ATLAS_STRING_MINLEVEL..": "..base.MinLevel;
|
|
end
|
|
if ( base.PlayerLimit ) then
|
|
tPL = ATLAS_STRING_PLAYERLIMIT..": "..base.PlayerLimit;
|
|
end
|
|
AtlasText_Location_Text:SetText(tLoc);
|
|
AtlasText_LevelRange_Text:SetText(tLR);
|
|
AtlasText_MinLevel_Text:SetText(tML);
|
|
AtlasText_PlayerLimit_Text:SetText(tPL);
|
|
|
|
Atlastextbase = base;
|
|
--Get the size of the Atlas text to append stuff to the bottom. Looks for empty lines
|
|
--[[
|
|
local i = 1;
|
|
local j = 2;
|
|
while ( (Atlastextbase[i] ~= nil and Atlastextbase[i]~="") or (Atlastextbase[j] ~= nil and Atlastextbase[j]~="")) do
|
|
i = i + 1;
|
|
j = i + 1;
|
|
end
|
|
--Allow AtlasLoot to append any extra 'boss' entries needed to a map
|
|
if AtlasLoot_ExtraText[zoneID] ~= nil then
|
|
--Workaround for Old Hillsbrad, we don't want the Trash Mobs stuck under the 'flavour' NPCS
|
|
if zoneID == "CoTOldHillsbrad" then
|
|
Atlastextbase[22][1] = GREY..ATLASLOOT_INDENT..AL["Trash Mobs"];
|
|
else
|
|
for k,v in ipairs(AtlasLoot_ExtraText[zoneID]) do
|
|
j = i + 1;
|
|
--If the line after the empty line is not empty itself, all text below this point is shuffled down to make room
|
|
if Atlastextbase[i]~=nil and Atlastextbase[i]~="" then
|
|
Atlastextbase[j] = Atlastextbase[i];
|
|
end
|
|
Atlastextbase[i]={v, nil, nil};
|
|
i = i + 1;
|
|
end
|
|
Atlastextbase[i]={"", nil, nil};
|
|
end
|
|
end
|
|
]]--
|
|
if AtlasLoot_ExtraText[zoneID] and #Atlastextbase and #Atlastextbase > 0 then
|
|
local numContent = #Atlastextbase
|
|
-- add the extra lines
|
|
for i = 1,#AtlasLoot_ExtraText[zoneID]+1 do
|
|
Atlastextbase[numContent+i] = {"", nil, nil}
|
|
end
|
|
for k,v in ipairs(AtlasLoot_ExtraText[zoneID]) do
|
|
numContent = numContent + 1
|
|
Atlastextbase[numContent] = {v, nil, nil}
|
|
end
|
|
Atlastextbase[numContent+2]={"", nil, nil}
|
|
end
|
|
|
|
|
|
|
|
--Hide any Atlas objects lurking around that have now been replaced
|
|
for i=1,ATLAS_CUR_LINES do
|
|
if ( getglobal("AtlasEntry"..i) ) then
|
|
getglobal("AtlasEntry"..i):Hide();
|
|
end
|
|
end
|
|
|
|
ATLAS_DATA = Atlastextbase;
|
|
ATLAS_SEARCH_METHOD = data.Search;
|
|
--Deal with Atlas's search function
|
|
if ( data.Search == nil ) then
|
|
ATLAS_SEARCH_METHOD = AtlasSimpleSearch;
|
|
end
|
|
|
|
if ( data.Search ~= false ) then
|
|
AtlasSearchEditBox:Show();
|
|
AtlasNoSearch:Hide();
|
|
else
|
|
AtlasSearchEditBox:Hide();
|
|
AtlasNoSearch:Show();
|
|
ATLAS_SEARCH_METHOD = nil;
|
|
end
|
|
|
|
--populate the scroll frame entries list, the update func will do the rest
|
|
Atlas_Search("");
|
|
AtlasSearchEditBox:SetText("");
|
|
AtlasSearchEditBox:ClearFocus();
|
|
|
|
--create and align any new entry buttons that we need
|
|
for i=1,ATLAS_CUR_LINES do
|
|
local f;
|
|
if (not getglobal("AtlasBossLine"..i)) then
|
|
f = CreateFrame("Button", "AtlasBossLine"..i, AtlasFrame, "AtlasLootNewBossLineTemplate");
|
|
f:SetFrameStrata("HIGH");
|
|
if i==1 then
|
|
f:SetPoint("TOPLEFT", "AtlasScrollBar", "TOPLEFT", 16, -3);
|
|
else
|
|
f:SetPoint("TOPLEFT", "AtlasBossLine"..(i-1), "BOTTOMLEFT");
|
|
end
|
|
else
|
|
getglobal("AtlasBossLine"..i.."_Loot"):Hide();
|
|
getglobal("AtlasBossLine"..i.."_Selected"):Hide();
|
|
end
|
|
end
|
|
|
|
--Hide the loot frame now that a pristine Atlas instance is created
|
|
AtlasLootItemsFrame:Hide();
|
|
Atlas_Search("");
|
|
--Make sure the scroll bar is correctly offset
|
|
AtlasLoot_AtlasScrollBar_Update();
|
|
|
|
--see if we should display the entrance/instance button or not, and decide what it should say
|
|
local matchFound = {nil};
|
|
local sayEntrance = nil;
|
|
for k,v in pairs(Atlas_EntToInstMatches) do
|
|
if ( k == zoneID ) then
|
|
matchFound = v;
|
|
sayEntrance = false;
|
|
end
|
|
end
|
|
if ( not matchFound[1] ) then
|
|
for k,v in pairs(Atlas_InstToEntMatches) do
|
|
if ( k == zoneID ) then
|
|
matchFound = v;
|
|
sayEntrance = true;
|
|
end
|
|
end
|
|
end
|
|
|
|
--set the button's text, populate the dropdown menu, and show or hide the button
|
|
if ( matchFound[1] ~= nil ) then
|
|
ATLAS_INST_ENT_DROPDOWN = {};
|
|
for k,v in pairs(matchFound) do
|
|
table.insert(ATLAS_INST_ENT_DROPDOWN, v);
|
|
end
|
|
table.sort(ATLAS_INST_ENT_DROPDOWN, AtlasSwitchDD_Sort);
|
|
if ( sayEntrance ) then
|
|
AtlasSwitchButton:SetText(ATLAS_ENTRANCE_BUTTON);
|
|
else
|
|
AtlasSwitchButton:SetText(ATLAS_INSTANCE_BUTTON);
|
|
end
|
|
AtlasSwitchButton:Show();
|
|
UIDropDownMenu_Initialize(AtlasSwitchDD, AtlasSwitchDD_OnLoad);
|
|
else
|
|
AtlasSwitchButton:Hide();
|
|
end
|
|
|
|
if ( TitanPanelButton_UpdateButton ) then
|
|
TitanPanelButton_UpdateButton("Atlas");
|
|
end
|
|
end
|
|
|
|
|
|
--[[
|
|
AtlasLoot_AtlasScrollBar_Update:
|
|
Hooks the Atlas scroll frame.
|
|
Required as the Atlas function cannot deal with the AtlasLoot button template or the added Atlasloot entries
|
|
]]
|
|
function AtlasLoot_AtlasScrollBar_Update()
|
|
local line, lineplusoffset;
|
|
if (getglobal("AtlasBossLine1_Text") ~= nil) then
|
|
local zoneID = ATLAS_DROPDOWNS[AtlasOptions.AtlasType][AtlasOptions.AtlasZone];
|
|
--Update the contents of the Atlas scroll frame
|
|
FauxScrollFrame_Update(AtlasScrollBar,ATLAS_CUR_LINES,ATLAS_LOOT_BOSS_LINES,15);
|
|
--Make note of how far in the scroll frame we are
|
|
for line=1,ATLAS_NUM_LINES do
|
|
lineplusoffset = line + FauxScrollFrame_GetOffset(AtlasScrollBar);
|
|
if ( lineplusoffset <= ATLAS_CUR_LINES ) then
|
|
getglobal("AtlasBossLine"..line.."_Text"):SetText(ATLAS_SCROLL_LIST[lineplusoffset]);
|
|
if AtlasLootItemsFrame.activeBoss == lineplusoffset then
|
|
getglobal("AtlasBossLine"..line.."_Loot"):Hide();
|
|
getglobal("AtlasBossLine"..line.."_Selected"):Show();
|
|
elseif (AtlasLootBossButtons[zoneID]~=nil and AtlasLootBossButtons[zoneID][lineplusoffset] ~= nil and AtlasLootBossButtons[zoneID][lineplusoffset] ~= "") then
|
|
getglobal("AtlasBossLine"..line.."_Loot"):Show();
|
|
getglobal("AtlasBossLine"..line.."_Selected"):Hide();
|
|
elseif (AtlasLootWBBossButtons[zoneID]~=nil and AtlasLootWBBossButtons[zoneID][lineplusoffset] ~= nil and AtlasLootWBBossButtons[zoneID][lineplusoffset] ~= "") then
|
|
getglobal("AtlasBossLine"..line.."_Loot"):Show();
|
|
getglobal("AtlasBossLine"..line.."_Selected"):Hide();
|
|
elseif (AtlasLootBattlegrounds[zoneID]~=nil and AtlasLootBattlegrounds[zoneID][lineplusoffset] ~= nil and AtlasLootBattlegrounds[zoneID][lineplusoffset] ~= "") then
|
|
getglobal("AtlasBossLine"..line.."_Loot"):Show();
|
|
getglobal("AtlasBossLine"..line.."_Selected"):Hide();
|
|
else
|
|
getglobal("AtlasBossLine"..line.."_Loot"):Hide();
|
|
getglobal("AtlasBossLine"..line.."_Selected"):Hide();
|
|
end
|
|
getglobal("AtlasBossLine"..line).idnum = lineplusoffset;
|
|
getglobal("AtlasBossLine"..line):Show();
|
|
elseif ( getglobal("AtlasBossLine"..line) ) then
|
|
--Hide lines that are not needed
|
|
getglobal("AtlasBossLine"..line):Hide();
|
|
end
|
|
end
|
|
else
|
|
Hooked_AtlasScrollBar_Update();
|
|
end
|
|
end |