You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
434 lines
16 KiB
434 lines
16 KiB
|
|
-- module independent variables --
|
|
----------------------------------
|
|
local addon, ns = ...
|
|
local C, L, I = ns.LC.color, ns.L, ns.I
|
|
if ns.client_version<5 then return end
|
|
|
|
|
|
-- module own local variables and local cached functions --
|
|
-----------------------------------------------------------
|
|
local name1 = "Raids" -- RAIDS L["ModDesc-Raids"]
|
|
local name2 = "Dungeons" -- DUNGEONS L["ModDesc-Dungeons"]
|
|
local ttName1, ttName2, ttColumns, tt1, tt2, createTooltip, module1, module2 = name1.."TT", name2.."TT", 5
|
|
local fState,symbol,renameIt = C("ltgray"," (%d/%d)"),"|Tinterface\\buttons\\UI-%sButton-Up:0|t ",{};
|
|
local instanceName, instanceID, instanceReset, instanceDifficulty, locked, extended, instanceIDMostSig, isRaid, maxPlayers, difficultyName, numEncounters, encounterProgress=1,2,3,4,5,6,7,8,9,10,11,12; -- GetSavedInstanceInfo
|
|
local activeRaids,PL_collected,PEW_collected,activeEncounter = {},true,true;
|
|
local BossKillQueryUpdate,UpdateInstaceInfoLock = false,{};
|
|
local hide = {
|
|
[322] = true, -- pandaria world bosses // no raid
|
|
[557] = true, -- draenor world bosses // no raid
|
|
[822] = true, -- legion world bosses // no raid
|
|
[959] = true, -- legion invasionpoints (argus) // no raid
|
|
[1028] = true, -- bfa world bosses // no raid
|
|
[1192] = true, -- shadowlands world bosses // no raid
|
|
[1205] = true, -- dragonflight world bosses // no raid
|
|
}
|
|
-- some entries have not exact matching names between encounter journal and raidinfo frame
|
|
local rename_il,rename_ej,ignore_ej = {},{},{};
|
|
local diffModeShort = {
|
|
[RAID_DIFFICULTY_10PLAYER] = "10n",
|
|
[RAID_DIFFICULTY_20PLAYER] = "20n",
|
|
[RAID_DIFFICULTY_25PLAYER] = "25n",
|
|
[RAID_DIFFICULTY_40PLAYER] = "40n",
|
|
[RAID_DIFFICULTY3] = "10hc",
|
|
[RAID_DIFFICULTY4] = "25hc",
|
|
};
|
|
local renameManually = {}
|
|
if LOCALE_enUS or LOCALE_enGB then
|
|
renameManually["Ahn'Qiraj Temple"] = "Temple of Ahn'Qiraj";
|
|
end
|
|
|
|
|
|
-- register icon names and default files --
|
|
-------------------------------------------
|
|
I[name1] = {iconfile="interface\\minimap\\raid", coords={0.25,0.75,0.25,0.75}};
|
|
I[name2] = {iconfile="interface\\minimap\\dungeon", coords={0.25,0.75,0.25,0.75}};
|
|
|
|
|
|
-- some local functions --
|
|
--------------------------
|
|
local function RequestRaidInfoUpdate()
|
|
if BossKillQueryUpdate then
|
|
RequestRaidInfo();
|
|
end
|
|
end
|
|
|
|
local function updateInstances(name,mode)
|
|
if EncounterJournal and EncounterJournal:IsShown() then return end -- prevent use of EJ_SelectTier while EncounterJournal is shown
|
|
local currentTime,num = time(),GetNumSavedInstances();
|
|
for i=1, num do
|
|
local data = {GetSavedInstanceInfo(i)};
|
|
if data[isRaid]==mode and data[instanceReset]>0 then
|
|
local name = data[instanceName];
|
|
if rename_il[name] then
|
|
name = rename_il[name];
|
|
elseif renameManually[name] then
|
|
name = renameManually[name];
|
|
end
|
|
if activeRaids[name]==nil then
|
|
activeRaids[name] = {new=true};
|
|
end
|
|
activeRaids[name][data[difficultyName]] = {data[instanceReset],currentTime,data[encounterProgress],data[numEncounters]};
|
|
end
|
|
end
|
|
for i=1, (NUM_LE_EXPANSION_LEVELS+1) do
|
|
EJ_SelectTier(i);
|
|
local index, instance_id, instance_name, _ = 1;
|
|
instance_id, instance_name = EJ_GetInstanceByIndex(index, mode);
|
|
while instance_id~=nil do
|
|
if rename_ej[instance_name] then
|
|
instance_name = rename_ej[instance_name];
|
|
end
|
|
if activeRaids[instance_name] then
|
|
if ns.toon[name]==nil then
|
|
ns.toon[name]={};
|
|
end
|
|
ns.toon[name][instance_id] = activeRaids[instance_name];
|
|
end
|
|
index = index + 1;
|
|
instance_id, instance_name = EJ_GetInstanceByIndex(index, mode);
|
|
end
|
|
end
|
|
UpdateInstaceInfoLock[name] = nil;
|
|
end
|
|
|
|
local function createTooltip2(self,instance)
|
|
local id,name,label = unpack(instance);
|
|
local t = time();
|
|
|
|
GameTooltip:SetOwner(self,"ANCHOR_NONE");
|
|
GameTooltip:SetPoint(ns.GetTipAnchor(self,"horizontal",tt1 or tt2));
|
|
GameTooltip:SetFrameLevel(self:GetFrameLevel()+1);
|
|
|
|
GameTooltip:ClearLines();
|
|
|
|
GameTooltip:AddLine(label);
|
|
GameTooltip:AddLine(C("gray",ns.realm));
|
|
GameTooltip:AddLine(" ");
|
|
|
|
for i,toonNameRealm,toonName,toonRealm,toonData,isCurrent in ns.pairsToons(name,{currentFirst=true,forceSameRealm=true}) do
|
|
if toonName then
|
|
local diffState = {};
|
|
if toonData[name] and toonData[name][id] then
|
|
if toonData[name][id].new then
|
|
for diffName, data in ns.pairsByKeys(toonData[name][id]) do
|
|
if type(data)=="table" and (data[1]+data[2])>t then
|
|
local diff,state = C("ltgray",diffName)..", ",C("orange",L["In progress"]);
|
|
if data[3]==data[4] then
|
|
state = C("green",L["Cleared"]);
|
|
else
|
|
state = state..fState:format(data[3],data[4]);
|
|
end
|
|
tinsert(diffState,diff..state);
|
|
end
|
|
end
|
|
elseif (toonData[name][id][1]+toonData[name][id][2])>t and toonData[name][id][5] and toonData[name][id][5]~="" then
|
|
local diff,state = C("ltgray",toonData[name][id][5])..", ", C("orange",L["In progress"]);
|
|
if toonData[name][id][3]==toonData[name][id][4] then
|
|
state = C("green",L["Cleared"]);
|
|
else
|
|
state = state..fState:format(toonData[name][id][3],toonData[name][id][4]);
|
|
end
|
|
tinsert(diffState,diff..state);
|
|
end
|
|
end
|
|
local factionSymbol = "";
|
|
if toonData.faction and toonData.faction~="Neutral" then
|
|
factionSymbol = " |TInterface\\PVPFrame\\PVP-Currency-"..toonData.faction..":16:16:0:-1:16:16:0:16:0:16|t";
|
|
end
|
|
GameTooltip:AddDoubleLine(C(toonData.class,ns.scm(toonName))..factionSymbol,#diffState==0 and C("gray",L["Free"]) or table.concat(diffState,"\n"));
|
|
end
|
|
end
|
|
GameTooltip:Show();
|
|
end
|
|
|
|
local function toggleExpansion(self,data)
|
|
ns.profile[data.name]['showExpansion'..data.expansion] = not ns.profile[data.name]['showExpansion'..data.expansion];
|
|
createTooltip(data.name==name1 and tt1 or tt2,data.name,data.mode); -- force update tooltip?
|
|
end
|
|
|
|
function createTooltip(tt,name,mode)
|
|
local ttName = name==name1 and ttName1 or ttName2;
|
|
if not (tt and tt.key and tt.key==ttName) then return end -- don't override other LibQTip tooltips...
|
|
|
|
if tt.lines~=nil then tt:Clear(); end
|
|
|
|
tt:AddHeader(C("dkyellow",name==name1 and RAIDS or DUNGEONS));
|
|
|
|
updateInstances(name,mode);
|
|
|
|
-- create instance list
|
|
local exp_start, exp_stop, exp_direction = 1, (NUM_LE_EXPANSION_LEVELS+1), 1;
|
|
if ns.profile[name].invertExpansionOrder then
|
|
exp_start, exp_stop, exp_direction = (NUM_LE_EXPANSION_LEVELS+1), 1, -1;
|
|
end
|
|
for i=exp_start, exp_stop, exp_direction do
|
|
local hColor,sState,_status_,_mode_ = "gray","Plus","","";
|
|
if ns.profile[name]['showExpansion'..i]==nil then
|
|
ns.profile[name]['showExpansion'..i] = true;
|
|
end
|
|
if ns.profile[name]['showExpansion'..i] then
|
|
hColor,sState,_status_,_mode_ = "ltblue","Minus",C("ltblue",STATUS),C("ltblue",MODE);
|
|
end
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
local l=tt:AddLine(symbol:format(sState)..C(hColor,_G['EXPANSION_NAME'..(i-1)]),_status_,_mode_);
|
|
tt:SetLineScript(l,"OnMouseUp",toggleExpansion, {name=name,mode=mode,expansion=i});
|
|
|
|
if ns.profile[name]['showExpansion'..i] then
|
|
tt:AddSeparator();
|
|
EJ_SelectTier(i);
|
|
local index, instance_id, instance_name, _ = 1;
|
|
instance_id, instance_name = EJ_GetInstanceByIndex(index, mode);
|
|
while instance_id~=nil do
|
|
if not hide[instance_id] then
|
|
local status,diff,encounter,id = {},{},"","";
|
|
if ignore_ej[instance_name] then
|
|
status = false;
|
|
elseif rename_ej[instance_name] then
|
|
instance_name = rename_ej[instance_name];
|
|
end
|
|
if status then
|
|
if activeRaids[instance_name] then
|
|
for diffName, data in ns.pairsByKeys(activeRaids[instance_name])do
|
|
if type(data)=="table" then
|
|
local s,d = C("orange",L["In progress"]),C("ltgray",diffName);
|
|
if data[3]==data[4] then
|
|
s = C("green",L["Cleared"]);
|
|
else
|
|
s = s .. fState:format(data[3],data[4]);
|
|
end
|
|
tinsert(status,s);
|
|
tinsert(diff,d);
|
|
end
|
|
end
|
|
end
|
|
if ns.profile[name].showID then
|
|
id = C("gray"," ("..instance_id..")");
|
|
end
|
|
local l=tt:AddLine(
|
|
C("ltyellow"," "..instance_name)..id,
|
|
#status==0 and C("gray",L["Free"]) or table.concat(status,"\n"),
|
|
#diff==0 and "" or table.concat(diff,"\n")
|
|
);
|
|
|
|
tt:SetLineScript(l,"OnEnter",createTooltip2,{instance_id,name,instance_name});
|
|
tt:SetLineScript(l,"OnLeave",GameTooltip_Hide);
|
|
|
|
if ns.toon[name]==nil then
|
|
ns.toon[name]={};
|
|
end
|
|
ns.toon[name][instance_id] = activeRaids[instance_name];
|
|
end
|
|
end
|
|
index = index + 1;
|
|
instance_id, instance_name = EJ_GetInstanceByIndex(index, mode);
|
|
end
|
|
end
|
|
end
|
|
|
|
--if ns.profile.GeneralOptions.showHints then
|
|
-- tt:AddSeparator(4,0,0,0,0)
|
|
-- ns.ClickOpts.ttAddHints(tt,name);
|
|
--end
|
|
ns.roundupTooltip(tt);
|
|
end
|
|
|
|
local function OnEvent(self,event,...)
|
|
if event=="PLAYER_LOGIN" then
|
|
for _,v in ipairs(renameIt)do
|
|
local B,A = (EJ_GetInstanceInfo(v[3]));
|
|
if v[2]>0 then
|
|
local res = ns.ScanTT.query({type="link",link="instancelock:0:"..v[2]},true);
|
|
if res and res.lines and res.lines[1] then
|
|
local name = {strsplit('"',res.lines[1])};
|
|
if name[2] then
|
|
A = name[2];
|
|
end
|
|
end
|
|
end
|
|
if A and B and A~=B then
|
|
if v[1]=="IL" then
|
|
rename_il[A] = B;
|
|
elseif v[1]=="EJ" then
|
|
rename_ej[B] = A;
|
|
elseif v[1]=="XX" then
|
|
ignore_ej[B] = true;
|
|
end
|
|
end
|
|
end
|
|
wipe(renameIt);
|
|
|
|
RequestRaidInfo(); -- trigger UPDATE_INSTANCE_INFO
|
|
elseif event=="BOSS_KILL" then
|
|
local encounterID, name = ...;
|
|
BossKillQueryUpdate=true;
|
|
C_Timer.After(0.14,RequestRaidInfoUpdate);
|
|
elseif event=="UPDATE_INSTANCE_INFO" then
|
|
local mode,name = false,name2;
|
|
if self==module1.eventFrame then
|
|
mode,name = true,name1;
|
|
end
|
|
BossKillQueryUpdate=false;
|
|
if not UpdateInstaceInfoLock[name] then
|
|
UpdateInstaceInfoLock[name] = true;
|
|
C_Timer.After(0.3, function()
|
|
updateInstances(name,mode);
|
|
end);
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- module functions and variables --
|
|
------------------------------------
|
|
module1 = {
|
|
events = {
|
|
"PLAYER_LOGIN",
|
|
"UPDATE_INSTANCE_INFO",
|
|
"BOSS_KILL"
|
|
},
|
|
config_defaults = {
|
|
enabled = false,
|
|
invertExpansionOrder = true,
|
|
showID = false
|
|
}
|
|
}
|
|
|
|
module2 = {
|
|
events = {
|
|
"PLAYER_LOGIN",
|
|
"UPDATE_INSTANCE_INFO",
|
|
"BOSS_KILL"
|
|
},
|
|
config_defaults = {
|
|
enabled = false,
|
|
invertExpansionOrder = true,
|
|
showID = false,
|
|
showCharsFrom = true,
|
|
showAllFactions = true,
|
|
}
|
|
}
|
|
|
|
function module1.options()
|
|
return {
|
|
broker = nil,
|
|
tooltip = {
|
|
invertExpansionOrder={ type="toggle", order=1, width="double", name=L["Invert expansion order"], desc=L["Invert order by exspansion in tooltip"] },
|
|
tooltip2header = { type="header", order=2, name=L["Tooltip2"]},
|
|
showCharsFrom = 2,
|
|
showAllFactions = 3,
|
|
},
|
|
misc = nil,
|
|
}
|
|
end
|
|
|
|
function module2.options()
|
|
return {
|
|
broker = nil,
|
|
tooltip = {
|
|
invertExpansionOrder={ type="toggle", order=1, width="double", name=L["Invert expansion order"], desc=L["Invert order by exspansion in tooltip"] },
|
|
tooltip2header = { type="header", order=2, name=L["Tooltip2"]},
|
|
showCharsFrom = 2,
|
|
showAllFactions = 3,
|
|
},
|
|
misc = nil,
|
|
}
|
|
end
|
|
|
|
function module1.init() -- raids
|
|
-- {<target>,<raidinfo>,<encounterjournalid>}
|
|
-- IL = InstanceLock, EJ = EncounterJournal, XX = No ID, list without Free/InProgress/Cleared-info
|
|
-- classic
|
|
table.insert(renameIt,{"IL", 409, 741}); -- molten core
|
|
table.insert(renameIt,{"IL", 531, 744}); -- temple of ahn'qiraj
|
|
-- bc
|
|
table.insert(renameIt,{"IL", 548, 748}); -- serpentshrine cavern
|
|
table.insert(renameIt,{"IL", 550, 749}); -- tempest keep
|
|
table.insert(renameIt,{"IL", 564, 751}); -- black temple
|
|
table.insert(renameIt,{"IL", 580, 752}); -- sunwell
|
|
-- woltk
|
|
table.insert(renameIt,{"IL", 615, 755}); -- obsidian sanctum
|
|
table.insert(renameIt,{"IL", 724, 761}); -- rubin sanctum
|
|
table.insert(renameIt,{"IL", 631, 758}); -- Icecrown Citadel
|
|
-- mop
|
|
table.insert(renameIt,{"EJ", 996, 320}); -- Terrace of Endless Spring
|
|
table.insert(renameIt,{"IL", 1136, 369}); -- siege of orgrimmar
|
|
-- wod
|
|
table.insert(renameIt,{"EJ", 1205, 457}); -- Blackrock Foundry
|
|
table.insert(renameIt,{"IL", 1228, 477}); -- Highmaul
|
|
-- legion
|
|
table.insert(renameIt,{"EJ", 1530, 786}); -- The Nighthold
|
|
table.insert(renameIt,{"IL", 1676, 875, all=0}); -- Tomb of Sargeras
|
|
end
|
|
|
|
function module2.init() -- dungeons
|
|
table.insert(renameIt,{"IL", 1688, 63}); -- Deadmines
|
|
table.insert(renameIt,{"IL", 938, 184}); -- End Time
|
|
table.insert(renameIt,{"IL", 939, 185}); -- Well of Eternity
|
|
table.insert(renameIt,{"IL", 940, 186}); -- Hour of Twilight
|
|
table.insert(renameIt,{"IL", 429, 230}); -- Dire Maul
|
|
table.insert(renameIt,{"XX", 0, 237}); -- The Temple of Atal'hakkar
|
|
table.insert(renameIt,{"XX", 0, 238}); -- The Stockade (or maybe Stormwind Stockade)
|
|
table.insert(renameIt,{"IL", 558, 247}); -- Auchenai Crypts
|
|
--table.insert(renameIt,{"IL", , 248}); --
|
|
table.insert(renameIt,{"IL", 585, 249}); -- Magisters' Terrace
|
|
table.insert(renameIt,{"IL", 557, 250}); -- Mana-Tombs
|
|
--table.insert(renameIt,{"IL", , 251}); --
|
|
table.insert(renameIt,{"IL", 556, 252}); -- Sethekk Halls
|
|
table.insert(renameIt,{"IL", 555, 253}); -- Shadow Labyrinth
|
|
table.insert(renameIt,{"IL", 552, 254}); -- The Arcatraz
|
|
--table.insert(renameIt,{"IL", , 255}); -- The Black Morass
|
|
table.insert(renameIt,{"IL", 542, 256}); -- The Blood Furnace
|
|
table.insert(renameIt,{"IL", 553, 257}); -- The Botanica
|
|
table.insert(renameIt,{"IL", 554, 258}); -- The Mechanar
|
|
table.insert(renameIt,{"IL", 540, 259}); -- The Shattered Halls
|
|
table.insert(renameIt,{"IL", 547, 260}); -- The Slave Pens
|
|
table.insert(renameIt,{"IL", 545, 261}); -- The Steamvault
|
|
table.insert(renameIt,{"IL", 546, 262}); -- The Underbog
|
|
table.insert(renameIt,{"IL", 619, 271}); -- Ahn'kahet: The Old Kingdom
|
|
table.insert(renameIt,{"IL", 600, 273}); -- Drak'Tharon Keep
|
|
table.insert(renameIt,{"IL", 595, 279}); -- The Culling of Stratholme
|
|
table.insert(renameIt,{"IL", 632, 280}); -- The Forge of Souls
|
|
table.insert(renameIt,{"IL", 576, 281}); -- The Nexus
|
|
table.insert(renameIt,{"IL", 578, 282}); -- The Oculus
|
|
--table.insert(renameIt,{"IL", , 283}); --
|
|
table.insert(renameIt,{"IL", 961, 302}); -- Stormstout Brewery
|
|
table.insert(renameIt,{"IL", 962, 303}); -- Gate of the Setting Sun
|
|
table.insert(renameIt,{"IL", 1001, 311}); -- Scarlet Halls
|
|
table.insert(renameIt,{"IL", 1004, 316}); -- Scarlet Monastery
|
|
table.insert(renameIt,{"IL", 1009, 330, all=0}); -- Heart of Fear
|
|
table.insert(renameIt,{"IL", 1195, 558}); -- Iron Docks
|
|
table.insert(renameIt,{"IL", 1492, 727}); -- Maw of Souls
|
|
table.insert(renameIt,{"IL", 1544, 777}); -- Assault on Violet Hold
|
|
end
|
|
|
|
module1.onevent = OnEvent;
|
|
module2.onevent = OnEvent;
|
|
|
|
-- function module1.optionspanel(panel) end
|
|
-- function module1.onmousewheel(self,direction) end
|
|
-- function module1.ontooltip(tooltip) end
|
|
|
|
function module1.onenter(self)
|
|
if (ns.tooltipChkOnShowModifier(false)) then return; end
|
|
tt1 = ns.acquireTooltip({ttName1, ttColumns, "LEFT", "LEFT", "LEFT", "LEFT", "LEFT"},{false},{self});
|
|
createTooltip(tt1,name1,true); -- raids
|
|
end
|
|
|
|
function module2.onenter(self)
|
|
if (ns.tooltipChkOnShowModifier(false)) then return; end
|
|
tt2 = ns.acquireTooltip({ttName2, ttColumns, "LEFT", "LEFT", "LEFT", "LEFT", "LEFT"},{false},{self});
|
|
createTooltip(tt2,name2,false); -- dungeons
|
|
end
|
|
|
|
-- function module.onleave(self) end
|
|
-- function module.onclick(self,button) end
|
|
-- function module.ondblclick(self,button) end
|
|
|
|
|
|
-- final module registration --
|
|
-------------------------------
|
|
ns.modules[name1] = module1;
|
|
ns.modules[name2] = module2;
|
|
|
|
|