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.
294 lines
9.4 KiB
294 lines
9.4 KiB
|
|
-- module independent variables --
|
|
----------------------------------
|
|
local addon, ns = ...
|
|
local C, L, I = ns.LC.color, ns.L, ns.I
|
|
if ns.client_version<6 then return end
|
|
|
|
|
|
-- module own local variables and local cached functions --
|
|
-----------------------------------------------------------
|
|
local name = "Wardrobe"; -- WARDROBE L["ModDesc-Wardrobe"]
|
|
local ldbName, ttName, ttColumns, tt, module = name, name.."TT", 4
|
|
local illusions,weapons = {0,0},{};
|
|
local ctForm = C("green","%d")..C("gray","/")..C("dkyellow","%d");
|
|
local pForm = C("ltgrey","%.1f");
|
|
local session = nil;
|
|
local brokerValues = {
|
|
["_none"] = NONE.."/"..HIDE,
|
|
p = "<"..STATUS_TEXT_PERCENT..">".." "..L["+<Collected in this session>"],
|
|
ct = L["<Collected>/<Total>"].." "..L["+<Collected in this session>"],
|
|
s = L["+<Collected in this session>"]
|
|
}
|
|
|
|
|
|
-- register icon names and default files --
|
|
-------------------------------------------
|
|
I[name] = {iconfile="INTERFACE\\ICONS\\trade_archaeology",coords={0.05,0.95,0.05,0.95}}; --IconName::Archaeology--
|
|
|
|
|
|
-- some local functions --
|
|
--------------------------
|
|
|
|
local function addToBroker(tb,color,o,collected,total,sess)
|
|
local res,sess = "",(sess<collected and " +"..(collected-sess) or "");
|
|
if ns.profile[name]["broker"..o]=="p" then
|
|
res = ("%.1f%%"):format(collected/total*100)..sess;
|
|
elseif ns.profile[name]["broker"..o]=="ct" then
|
|
res = ("%d/%d"):format(collected,total)..sess;
|
|
elseif ns.profile[name]["broker"..o]=="s" then
|
|
res = strtrim(sess);
|
|
end
|
|
if res~="" then
|
|
table.insert(tb,C(color,L["WardrobeBroker"..o].." "..res));
|
|
end
|
|
end
|
|
|
|
local function updateBroker()
|
|
local tmp,obj = {},ns.LDB:GetDataObjectByName(module.ldbName);
|
|
|
|
if ns.profile[name].brokerSets~="_none" then
|
|
local collected,total = C_TransmogSets.GetBaseSetsCounts();
|
|
addToBroker(tmp,"violet","Sets",collected,total,session.misc.sets);
|
|
end
|
|
|
|
if ns.profile[name].brokerArmor~="_none" then
|
|
local collected,total,sess = 0,0,0;
|
|
|
|
for k, v in pairs(TRANSMOG_SLOTS) do
|
|
if v.armorCategoryID then
|
|
collected = collected + (C_TransmogCollection.GetCategoryCollectedCount(v.armorCategoryID) or 0);
|
|
total = total + (C_TransmogCollection.GetCategoryTotal(v.armorCategoryID) or 0);
|
|
sess = sess + (session.armor[v.slot or v.location.slotID] or 0);
|
|
end
|
|
end
|
|
addToBroker(tmp,"dkyellow","Armor",collected,total,sess);
|
|
end
|
|
|
|
if ns.profile[name].brokerWeapons~="_none" then
|
|
local collected,total,sess,ids = 0,0,0,{}
|
|
for categoryID = FIRST_TRANSMOG_COLLECTION_WEAPON_TYPE, LAST_TRANSMOG_COLLECTION_WEAPON_TYPE do
|
|
local name, isWeapon = C_TransmogCollection.GetCategoryInfo(categoryID);
|
|
if name and isWeapon then
|
|
collected = collected + (C_TransmogCollection.GetCategoryCollectedCount(categoryID) or 0);
|
|
total = total + (C_TransmogCollection.GetCategoryTotal(categoryID) or 0);
|
|
sess = sess + (session.weapons[name] or 0);
|
|
end
|
|
end
|
|
addToBroker(tmp,"orange","Weapons",collected,total,sess);
|
|
end
|
|
|
|
if ns.profile[name].brokerIllusions~="_none" then
|
|
local illusions = C_TransmogCollection.GetIllusions();
|
|
local collected,total,sum = 0,#illusions,"";
|
|
for i=1, total do
|
|
if illusions[i].isCollected then
|
|
collected=collected+1;
|
|
end
|
|
end
|
|
addToBroker(tmp,"ltblue","Illusions",collected,total,session.misc.illusions);
|
|
end
|
|
|
|
obj.text = #tmp>0 and table.concat(tmp,", ") or WARDROBE;
|
|
end
|
|
|
|
local function resetSessionCounter(x)
|
|
if not session then
|
|
session = {};
|
|
end
|
|
session.armor = {};
|
|
for k, v in pairs(TRANSMOG_SLOTS) do
|
|
if v.armorCategoryID then
|
|
local collected = C_TransmogCollection.GetCategoryCollectedCount(v.armorCategoryID);
|
|
session.armor[v.slot or v.location.slotID] = collected;
|
|
end
|
|
end
|
|
|
|
session.weapons = {};
|
|
for categoryID = FIRST_TRANSMOG_COLLECTION_WEAPON_TYPE, LAST_TRANSMOG_COLLECTION_WEAPON_TYPE do
|
|
local name, isWeapon, _, canMainHand, canOffHand = C_TransmogCollection.GetCategoryInfo(categoryID);
|
|
if name and isWeapon then
|
|
session.weapons[name] = C_TransmogCollection.GetCategoryCollectedCount(categoryID);
|
|
end
|
|
end
|
|
|
|
local count,total = 0,C_TransmogCollection.GetIllusions();
|
|
for i=1, #total do
|
|
if total[i].isCollected then
|
|
count=count+1;
|
|
end
|
|
end
|
|
session.misc = {
|
|
illusions = count,
|
|
sets = (C_TransmogSets.GetBaseSetsCounts())
|
|
}
|
|
if x then
|
|
updateBroker();
|
|
end
|
|
end
|
|
|
|
local function sortWeapons(a,b)
|
|
return a[2]<b[2];
|
|
end
|
|
|
|
local function updateData()
|
|
end
|
|
|
|
local function addLine(color,name,collected,total,session)
|
|
tt:AddLine( C(color,name), ctForm:format(collected,total), pForm:format(collected/total*100), session<collected and C("ltgreen","+"..(collected-session)) or "");
|
|
end
|
|
|
|
local function createTooltip(tt)
|
|
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",WARDROBE));
|
|
|
|
updateData();
|
|
|
|
-- armor
|
|
local collected,total,sess,lines = 0,0,0,{};
|
|
for k, v in pairs(TRANSMOG_SLOTS) do
|
|
if v.armorCategoryID then
|
|
local slot,c,t,s = v.slot or v.location.slotID;
|
|
c = C_TransmogCollection.GetCategoryCollectedCount(v.armorCategoryID) or 0;
|
|
t = C_TransmogCollection.GetCategoryTotal(v.armorCategoryID) or 0;
|
|
s = session.armor[slot] or 0;
|
|
collected,total,sess = collected+c,total+t,sess+s;
|
|
tinsert(lines,{"ltyellow",_G[v.slot or v.location:GetSlotName()],c,t,s});
|
|
end
|
|
end
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
addLine("ltblue",ARMOR,collected,total,sess);
|
|
tt:AddSeparator();
|
|
for i=1,#lines do
|
|
addLine(unpack(lines[i]));
|
|
end
|
|
|
|
-- weapons
|
|
local collected,total,sess,lines = 0,0,0,{};
|
|
for categoryID = FIRST_TRANSMOG_COLLECTION_WEAPON_TYPE, LAST_TRANSMOG_COLLECTION_WEAPON_TYPE do
|
|
local n, isWeapon = C_TransmogCollection.GetCategoryInfo(categoryID);
|
|
if n and isWeapon then
|
|
local c,t,s;
|
|
c = C_TransmogCollection.GetCategoryCollectedCount(categoryID) or 0;
|
|
t = C_TransmogCollection.GetCategoryTotal(categoryID) or 0;
|
|
s = session.weapons[n] or 0
|
|
collected,total,sess = collected+c,total+t,sess+s;
|
|
tinsert(lines,{"ltyellow",n,c,t,s});
|
|
end
|
|
end
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
addLine("ltblue",HEIRLOOMS_CATEGORY_WEAPON,collected,total,sess);
|
|
tt:AddSeparator();
|
|
table.sort(lines,sortWeapons);
|
|
for _,v in pairs(lines)do
|
|
addLine(unpack(v));
|
|
end
|
|
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
tt:AddLine(C("ltblue",CALENDAR_TYPE_OTHER));
|
|
tt:AddSeparator();
|
|
|
|
-- illusions
|
|
local illusions = C_TransmogCollection.GetIllusions();
|
|
local collected,total = 0,#illusions;
|
|
for i=1, total do
|
|
if illusions[i].isCollected then
|
|
collected=collected+1;
|
|
end
|
|
end
|
|
addLine("ltyellow",WEAPON_ENCHANTMENT,collected,total,session.misc.illusions);
|
|
|
|
-- sets
|
|
local collected,total = C_TransmogSets.GetBaseSetsCounts();
|
|
addLine("ltyellow",WARDROBE_SETS,collected,total,session.misc.sets);
|
|
|
|
if ns.profile.GeneralOptions.showHints and false then
|
|
tt:AddSeparator(4,0,0,0,0)
|
|
ns.ClickOpts.ttAddHints(tt,name);
|
|
end
|
|
ns.roundupTooltip(tt);
|
|
end
|
|
|
|
|
|
-- module variables for registration --
|
|
---------------------------------------
|
|
module = {
|
|
events = {
|
|
"PLAYER_LOGIN",
|
|
"BAG_UPDATE_DELAYED"
|
|
},
|
|
config_defaults = {
|
|
enabled = false,
|
|
brokerSets = "_none",
|
|
brokerWeapons = "_none",
|
|
brokerArmor = "_none",
|
|
brokerIllusions = "_none"
|
|
},
|
|
clickOptionsRename = {
|
|
["menu"] = "9_open_menu"
|
|
},
|
|
clickOptions = {
|
|
--["wardrobe"] = {"Wardrobe","call",""}, -- problematically. colectionframe will be tained on open...
|
|
["menu"] = "OptionMenuCustom"
|
|
}
|
|
}
|
|
|
|
ns.ClickOpts.addDefaults(module,{
|
|
-- wardrobe = "_LEFT",
|
|
menu = "_RIGHT"
|
|
});
|
|
|
|
function module.options()
|
|
return {
|
|
broker = {
|
|
brokerSets = { type="select", order=10, width="double", name=WARDROBE_SETS, desc=L["WardrobeSetsDesc"], values=brokerValues },
|
|
brokerArmor = { type="select", order=11, width="double", name=AUCTION_CATEGORY_ARMOR, desc=L["WardrobeArmorDesc"], values=brokerValues },
|
|
brokerWeapons = { type="select", order=12, width="double", name=AUCTION_CATEGORY_WEAPONS, desc=L["WardrobeWeaponsDesc"], values=brokerValues },
|
|
brokerIllusions = { type="select", order=13, width="double", name=L["Illusions"], desc=L["WardrobeIllusionsDesc"], values=brokerValues },
|
|
}
|
|
}
|
|
end
|
|
|
|
function module.OptionMenu(self,button,modName)
|
|
if (tt~=nil) and (tt:IsShown()) then ns.hideTooltip(tt); end
|
|
ns.EasyMenu:InitializeMenu();
|
|
ns.EasyMenu:AddConfig(name);
|
|
ns.EasyMenu:AddEntry({separator=true});
|
|
ns.EasyMenu:AddEntry({ label = C("yellow",L["Reset session earn/loss counter"]), func=resetSessionCounter, keepShown=false });
|
|
ns.EasyMenu:ShowMenu(self);
|
|
end
|
|
|
|
-- function module.init() end
|
|
|
|
function module.onevent(self,event,...)
|
|
if event=="BE_UPDATE_CFG" and ... and (...):find("^ClickOpt") then
|
|
ns.ClickOpts.update(name);
|
|
elseif ns.eventPlayerEnteredWorld then
|
|
if not session then
|
|
resetSessionCounter();
|
|
end
|
|
updateBroker();
|
|
end
|
|
end
|
|
|
|
-- function module.optionspanel(panel) end
|
|
-- function module.onmousewheel(self,direction) end
|
|
-- function module.ontooltip(tt) end
|
|
|
|
function module.onenter(self)
|
|
if (ns.tooltipChkOnShowModifier(false)) then return; end
|
|
tt = ns.acquireTooltip({ttName, ttColumns, "LEFT", "RIGHT", "RIGHT", "RIGHT","RIGHT"},{true},{self});
|
|
createTooltip(tt);
|
|
end
|
|
|
|
-- function module.onleave(self) end
|
|
-- function module.onclick(self,button) end
|
|
-- function module.ondblclick(self,button) end
|
|
|
|
|
|
-- final module registration --
|
|
-------------------------------
|
|
ns.modules[name] = module;
|
|
|
|
|