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.
776 lines
27 KiB
776 lines
27 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 name = "Currency"; -- CURRENCY L["ModDesc-Currency"]
|
|
local ttName,ttColumns,tt,tt2,module = name.."TT",5;
|
|
local currencies,currencySession,faction = {},{},UnitFactionGroup("player");
|
|
local BrokerPlacesMax,createTooltip = 10;
|
|
local Currencies,CovenantCurrencies,covenantID = {},{},0;
|
|
local expantionProfCurrencies,expantionProfWorkorders,profIconReplace = {},{};
|
|
local headers = {
|
|
HIDDEN_CURRENCIES = "Hidden currencies", -- L["Hidden currencies"]
|
|
DUNGEON_AND_RAID = "Dungeon and Raid", -- L["Dungeons and Raids"]
|
|
PLAYER_V_PLAYER = PLAYER_V_PLAYER,
|
|
MISCELLANEOUS = MISCELLANEOUS,
|
|
}
|
|
local countCorrectionList = {
|
|
[1822] = 1, -- Renown; currency value 1 count lower than display for players
|
|
}
|
|
|
|
|
|
-- register icon names and default files --
|
|
-------------------------------------------
|
|
I[name..'_Neutral'] = {iconfile="Interface\\minimap\\tracking\\BattleMaster", coords={0.1,0.9,0.1,0.9}} --IconName::Currency_Neutral--
|
|
I[name..'_Horde'] = {iconfile="Interface\\PVPFrame\\PVP-Currency-Horde", coords={0.1,0.9,0.1,0.9}} --IconName::Currency_Horde--
|
|
I[name..'_Alliance'] = {iconfile="Interface\\PVPFrame\\PVP-Currency-Alliance", coords={0.1,0.9,0.1,0.9}} --IconName::Currency_Alliance--
|
|
|
|
|
|
-- some local functions --
|
|
--------------------------
|
|
local function CountCorrection(id,info)
|
|
local v = countCorrectionList[id];
|
|
if v then
|
|
info.quantity = info.quantity + v;
|
|
if info.maxQuantity>0 then
|
|
info.maxQuantity = info.maxQuantity + v;
|
|
end
|
|
end
|
|
end
|
|
|
|
local function CapColor(colors,str,nonZero,count,mCount,count2,mCount2)
|
|
local col,c = nonZero and colors[1] or "gray",0;
|
|
if nonZero then
|
|
if mCount>0 then
|
|
c = mCount-count;
|
|
end
|
|
if count2 and mCount2 then
|
|
local tmp=mCount2-count2;
|
|
if mCount==0 or tmp<c then
|
|
mCount=mCount2;
|
|
c=tmp;
|
|
end
|
|
end
|
|
if mCount>0 then
|
|
local c2,c3,c4 = .25,.125,.05; -- 25%, 12.5%, 5%
|
|
if mCount<=100 then
|
|
c2,c3,c4 = .3,.2,.1; -- 30%, 20%, 10%
|
|
end
|
|
if c<ceil(mCount*c4) then
|
|
col=colors[4];
|
|
elseif c<ceil(mCount*c3) then
|
|
col=colors[3];
|
|
elseif c<ceil(mCount*c2) then
|
|
col=colors[2];
|
|
end
|
|
end
|
|
end
|
|
return C(col,str);
|
|
end
|
|
|
|
local function resetCurrencySession()
|
|
local _
|
|
for _,id in ipairs(Currencies)do
|
|
if tonumber(id) then
|
|
local currencyInfo = C_CurrencyInfo.GetCurrencyInfo(id);
|
|
CountCorrection(id,currencyInfo);
|
|
currencySession[id] = currencyInfo.quantity;
|
|
end
|
|
end
|
|
end
|
|
|
|
local function validateID(id)
|
|
return tonumber(id) or tostring(id):find("^prof:[kw]:%d*:%d*$");
|
|
end
|
|
|
|
local function GetCurrency(currencyId)
|
|
local profExpTbl,profExpansion,profIndex,currencyInfo,currencyIdStr,_;
|
|
if type(currencyId)=="string" then
|
|
_, profExpTbl, profExpansion, profIndex = strsplit(":",currencyId)
|
|
profExpansion, profIndex = tonumber(profExpansion), tonumber(profIndex);
|
|
end
|
|
if profIndex then
|
|
currencyIdStr = currencyId;
|
|
-- for dragonflight prof currencies
|
|
if profExpTbl=="k" then -- profession knowledge
|
|
currencyId = expantionProfCurrencies[profExpansion][profIndex];
|
|
elseif profExpTbl=="w" then -- workorders
|
|
currencyId = expantionProfWorkorders[profExpansion][profIndex];
|
|
end
|
|
end
|
|
if tonumber(currencyId) then
|
|
currencyInfo = C_CurrencyInfo.GetCurrencyInfo(currencyId);
|
|
if not currencyInfo.iconFileID and profIconReplace[currencyId] then
|
|
local info = C_CurrencyInfo.GetCurrencyInfo(profIconReplace[currencyId]);
|
|
currencyInfo.iconFileID = info.iconFileID;
|
|
end
|
|
end
|
|
return currencyId,currencyInfo,{str=currencyIdStr,tbl=profExpTbl,exp=profExpansion,index=profIndex};
|
|
end
|
|
|
|
local function updateBroker()
|
|
local elems,obj = {},ns.LDB:GetDataObjectByName(module.ldbName)
|
|
if faction~="Neutral" then
|
|
local i = I(name.."_"..faction);
|
|
obj.iconCoords = i.coords or {0,1,0,1};
|
|
obj.icon = i.iconfile;
|
|
end
|
|
for i=1, BrokerPlacesMax do
|
|
local obj,currencyId,currencyInfo,profInfo = ns.profile[name].currenciesInTitle[i];
|
|
if obj and validateID(obj) then
|
|
currencyId,currencyInfo,profInfo = GetCurrency(obj);
|
|
end
|
|
if currencyId and currencyInfo and currencyInfo.discovered then
|
|
CountCorrection(currencyId,currencyInfo);
|
|
local str = ns.FormatLargeNumber(name,currencyInfo.quantity);
|
|
if ns.profile[name].showCapBroker and currencyInfo.maxQuantity>0 then
|
|
str = str.."/"..ns.FormatLargeNumber(name,currencyInfo.maxQuantity);
|
|
end
|
|
if ns.profile[name].showCapColorBroker and (currencyInfo.maxQuantity>0 or currencyInfo.maxWeeklyQuantity>0) then
|
|
local t = {profInfo.tbl=="w" and {"red","orange","yellow","green"} or {"green","yellow","orange","red"},str,currencyInfo.quantity>0,currencyInfo.quantity,currencyInfo.maxQuantity};
|
|
if currencyInfo.maxWeeklyQuantity>0 then
|
|
tinsert(t,currencyInfo.quantityEarnedThisWeek);
|
|
tinsert(t,currencyInfo.maxWeeklyQuantity);
|
|
end
|
|
str = CapColor(unpack(t));
|
|
end
|
|
tinsert(elems, str.."|T"..(currencyInfo.iconFileID or ns.icon_fallback)..":0|t");
|
|
end
|
|
end
|
|
if #elems==0 then
|
|
obj.text = CURRENCY;
|
|
else
|
|
local space = " ";
|
|
if ns.profile[name].spacer>0 then
|
|
space = strrep(" ",ns.profile[name].spacer);
|
|
end
|
|
obj.text = table.concat(elems,space);
|
|
end
|
|
end
|
|
|
|
local function setInTitle(titlePlace, currencyId)
|
|
if currencyId and currencySession[currencyId] then
|
|
ns.profile[name].currenciesInTitle[titlePlace] = currencyId;
|
|
else
|
|
ns.profile[name].currenciesInTitle[titlePlace] = nil;
|
|
end
|
|
updateBroker()
|
|
end
|
|
|
|
local function toggleCurrencyHeader(self,headerString)
|
|
ns.toon[name].headers[headerString] = ns.toon[name].headers[headerString]==nil or nil;
|
|
createTooltip(tt,true);
|
|
end
|
|
|
|
local function tooltip2Show(self,id)
|
|
local pos = {};
|
|
if (not tt2) then
|
|
tt2=GameTooltip;
|
|
end
|
|
tt2:SetOwner(tt,"ANCHOR_NONE");
|
|
tt2:SetPoint(ns.GetTipAnchor(self,"horizontal",tt));
|
|
tt2:ClearLines();
|
|
tt2:SetCurrencyByID(id);
|
|
tt2:Show();
|
|
end
|
|
|
|
local function tooltip2Hide(self)
|
|
if tt2 then
|
|
tt2:Hide();
|
|
end
|
|
end
|
|
|
|
function createTooltip(tt,update)
|
|
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",CURRENCY))
|
|
if ns.profile[name].shortTT == true then
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
local c,l = 3,tt:AddLine(C("ltblue",COMMUNITIES_SETTINGS_NAME_LABEL));
|
|
tt:AddSeparator()
|
|
end
|
|
|
|
local parentIsCollapsed,hiddenSection,empty = false,false,nil;
|
|
for i=1, #Currencies do
|
|
if Currencies[i]=="HIDDEN_CURRENCIES" and not ns.profile[name].showHidden then
|
|
break;
|
|
elseif not validateID(Currencies[i]) then
|
|
if Currencies[i]=="HIDDEN_CURRENCIES" then
|
|
hiddenSection = true;
|
|
end
|
|
if empty==true and not parentIsCollapsed then
|
|
tt:SetCell(tt:AddLine(),1,C("gray",L["No currencies discovered..."]),nil,nil,0);
|
|
end
|
|
empty = true;
|
|
parentIsCollapsed = ns.toon[name].headers[Currencies[i]]~=nil;
|
|
local l=tt:AddLine();
|
|
if not parentIsCollapsed then
|
|
tt:SetCell(l,1,C("ltblue","|Tinterface\\buttons\\UI-MinusButton-Up:0|t "..headers[Currencies[i]]),nil,nil,0);
|
|
tt:AddSeparator();
|
|
else
|
|
tt:SetCell(l,1,C("gray","|Tinterface\\buttons\\UI-PlusButton-Up:0|t "..headers[Currencies[i]]),nil,nil,0);
|
|
end
|
|
tt:SetLineScript(l,"OnMouseUp", toggleCurrencyHeader,Currencies[i]);
|
|
elseif not parentIsCollapsed then
|
|
local currencyId,currencyInfo,profInfo = GetCurrency(Currencies[i]);
|
|
if currencyId and currencyInfo and currencyInfo.name and (currencyInfo.discovered or hiddenSection) then
|
|
CountCorrection(currencyId,currencyInfo);
|
|
|
|
local str = ns.FormatLargeNumber(name,currencyInfo.quantity,true);
|
|
|
|
-- cap
|
|
if ns.profile[name].showTotalCap and currencyInfo.maxQuantity>0 then
|
|
str = str .."/".. ns.FormatLargeNumber(name,currencyInfo.maxQuantity,true);
|
|
|
|
-- cap coloring
|
|
if ns.profile[name].showCapColor then
|
|
str = CapColor(currencyInfo.maxWeeklyQuantity>0 and {"dkgreen","dkyellow","dkorange","dkred"} or (profInfo.tbl=="w" and {"red","orange","yellow","green"}) or {"green","yellow","orange","red"},str,currencyInfo.quantity>0,currencyInfo.quantity,currencyInfo.maxQuantity);
|
|
end
|
|
end
|
|
|
|
-- weekly cap
|
|
if ns.profile[name].showWeeklyCap and currencyInfo.maxWeeklyQuantity>0 then
|
|
local wstr = "("..ns.FormatLargeNumber(name,currencyInfo.quantityEarnedThisWeek,true).."/"..ns.FormatLargeNumber(name,currencyInfo.maxWeeklyQuantity,true)..")";
|
|
|
|
-- cap coloring
|
|
if ns.profile[name].showCapColor then
|
|
wstr = CapColor({"green","yellow","orange","red"},wstr,currencyInfo.quantity>0,currencyInfo.quantityEarnedThisWeek,currencyInfo.maxWeeklyQuantity);
|
|
end
|
|
|
|
str = wstr.." "..str;
|
|
end
|
|
|
|
-- show currency id
|
|
local id = "";
|
|
if ns.profile[name].showIDs then
|
|
id = C("gray"," ("..currencyId..")");
|
|
end
|
|
|
|
local l = tt:AddLine(
|
|
" "..C(currencyInfo.discovered==0 and "gray" or "ltyellow",currencyInfo.name)..id,
|
|
str.." |T"..(currencyInfo.iconFileID or ns.icon_fallback)..":14:14:0:0:64:64:4:56:4:56|t"
|
|
);
|
|
|
|
-- session earn/loss
|
|
if ns.profile[name].showSession and currencySession[currencyId] then
|
|
local color,num,prefix = nil,currencyInfo.quantity-currencySession[currencyId],"";
|
|
if num>0 then
|
|
color,prefix = "ltgreen","+";
|
|
elseif num<0 then
|
|
color = "ltred";
|
|
end
|
|
if color and num then
|
|
tt:SetCell(l,3,C(color,prefix..num));
|
|
end
|
|
end
|
|
tt:SetLineScript(l, "OnEnter", tooltip2Show, currencyId);
|
|
tt:SetLineScript(l, "OnLeave", tooltip2Hide);
|
|
empty = false;
|
|
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 aceCurrencies = {values={},order={},created=false};
|
|
|
|
local function isHidden(info,isEasyMenu)
|
|
return isEasyMenu; -- only for easymenu
|
|
end
|
|
|
|
local function AceOptOnBroker(info,value)
|
|
local place=tonumber((info[#info]:gsub("currenciesInTitle","")));
|
|
if type(value)=="string" and place then
|
|
local _,id = strsplit(":",value);
|
|
if validateID(id) then
|
|
ns.profile[name].currenciesInTitle[place] = id;
|
|
end
|
|
module.onevent(module.eventFrame,"BE_UPDATE_CFG",info[#info]);
|
|
end
|
|
local id = ("%05d"):format(ns.profile[name].currenciesInTitle[place]);
|
|
if aceCurrencies.order[id] then
|
|
return aceCurrencies.order[id]..":"..id;
|
|
end
|
|
return false;
|
|
end
|
|
|
|
local function aceOptOnBrokerValues(info)
|
|
-- generate currencies list one time per AceOptions creation/refresh. one table for all select fields.
|
|
if info[#info]=="currenciesInTitle1" or not aceCurrencies.created then
|
|
aceCurrencies.created = true;
|
|
local id = ns.profile[name].currenciesInTitle[tonumber((info[#info]:gsub("currenciesInTitle","")))];
|
|
local list,orderList,n = {},{},1;
|
|
wipe(aceCurrencies.values);
|
|
wipe(aceCurrencies.order);
|
|
aceCurrencies.values[false] = NONE;
|
|
for i=1, #Currencies do
|
|
if Currencies[i]=="HIDDEN_CURRENCIES" and not ns.profile[name].showHidden then
|
|
break;
|
|
elseif validateID(Currencies[i]) then
|
|
local currencyId,currencyInfo,profInfo = GetCurrency(Currencies[i]);
|
|
if currencyInfo and currencyInfo.name then
|
|
local color = "white";
|
|
if not currencyInfo.discovered then
|
|
color = "ltgray";
|
|
end
|
|
local order,id = ("%04d"):format(n),(profInfo and profInfo.str) or ("%05d"):format(currencyId);
|
|
aceCurrencies.values[order..":"..id] = C(color,currencyInfo.name);
|
|
aceCurrencies.order[id] = order;
|
|
n=n+1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return aceCurrencies.values;
|
|
end
|
|
|
|
|
|
-- module functions and variables --
|
|
------------------------------------
|
|
module = {
|
|
icon_suffix = "_Neutral",
|
|
events = {
|
|
"PLAYER_LOGIN",
|
|
"CURRENCY_DISPLAY_UPDATE",
|
|
"CHAT_MSG_CURRENCY"
|
|
},
|
|
config_defaults = {
|
|
enabled = false,
|
|
shortTT = false,
|
|
currenciesInTitle = {},
|
|
showTotalCap = true,
|
|
showWeeklyCap = true,
|
|
showCapColor = true,
|
|
showCapBroker = true,
|
|
showCapColorBroker = true,
|
|
showSession = true,
|
|
spacer=0,
|
|
showIDs = false,
|
|
showHidden = false,
|
|
},
|
|
clickOptionsRename = {
|
|
["charinfo"] = "1_open_character_info",
|
|
["menu"] = "2_open_menu"
|
|
},
|
|
clickOptions = {
|
|
["charinfo"] = "CharacterInfo", -- _LEFT
|
|
["menu"] = "OptionMenuCustom"
|
|
}
|
|
}
|
|
|
|
ns.ClickOpts.addDefaults(module,{
|
|
charinfo = "_LEFT",
|
|
menu = "_RIGHT"
|
|
});
|
|
|
|
function module.options()
|
|
local broker = {
|
|
showCapBroker={ type="toggle", order=1, name=L["Show total/weekly cap"], desc=L["Display currency total cap in tooltip."] },
|
|
showCapColorBroker={ type="toggle", order=2, name=L["Coloring total/weekly cap"], desc=L["Display total/weekly caps in different colors"] },
|
|
spacer={ type="range", order=3, name=L["Space between currencies"], desc=L["Add more space between displayed currencies on broker button"], min=0, max=10, step=1 },
|
|
header={ type="header", order=4, name=L["Currency on broker"], hidden=isHidden },
|
|
info={ type="description", order=9, name=L["CurrencyBrokerInfo"], fontSize="medium", hidden=true },
|
|
};
|
|
|
|
for i=1, BrokerPlacesMax do
|
|
broker["currenciesInTitle"..i] = {type="select", order=4+(i>4 and i+1 or i), name=L["Place"].." "..i, desc=L["CurrencyOnBrokerDesc"], values=aceOptOnBrokerValues, get=AceOptOnBroker, set=AceOptOnBroker, hidden=isHidden };
|
|
end
|
|
|
|
return {
|
|
broker = broker,
|
|
tooltip = {
|
|
showTotalCap = { type="toggle", order=1, name=L["CurrencyCapTotal"], desc=L["CurrencyCapTotalDesc"] },
|
|
showWeeklyCap = { type="toggle", order=2, name=L["CurrencyCapWeekly"], desc=L["CurrencyCapWeeklyDesc"] },
|
|
showCapColor = { type="toggle", order=3, name=L["Coloring total cap"], desc=L["Coloring limited currencies by total and/or weekly cap."] },
|
|
showSession = { type="toggle", order=4, name=L["Show session earn/loss"], desc=L["Display session profit in tooltip"] },
|
|
showIDs = { type="toggle", order=5, name=L["Show currency id's"], desc=L["Display the currency id's in tooltip"] },
|
|
shortTT = { type="toggle", order=6, name=L["Short Tooltip"], desc=L["Display the content of the tooltip shorter"] },
|
|
},
|
|
misc = {
|
|
shortNumbers=1,
|
|
showHidden = {type="toggle", order=2, name=L["CurrenyHidden"], desc=L["CurrencyHiddenDesc"], hidden=ns.IsClassicClient }
|
|
},
|
|
}, nil, true
|
|
end
|
|
|
|
local function addMenuSubPage(pList,page)
|
|
local pageIsTable = type(page)=="table";
|
|
local i = (pageIsTable and page.currentHeader) or page;
|
|
local label = headers[Currencies[i]];
|
|
if pageIsTable and page.headers[Currencies[i]] then
|
|
page.num = page.num + 1;
|
|
label = label .." - ".. PAGE_NUMBER:format(page.num);
|
|
end
|
|
return ns.EasyMenu:AddEntry({label=C("ltblue",label), arrow=true}, pList);
|
|
end
|
|
|
|
function module.OptionMenu(parent)
|
|
if (tt~=nil) and (tt:IsShown()) then tt:Hide(); end
|
|
|
|
ns.EasyMenu:InitializeMenu();
|
|
|
|
ns.EasyMenu:AddEntry({ label=L["Currency on broker - menu"], title=true});
|
|
|
|
for place=1, BrokerPlacesMax do
|
|
local pList,pList2,d;
|
|
local id = ns.profile[name].currenciesInTitle[place];
|
|
|
|
if validateID(id) then
|
|
local currencyId,currencyInfo,profInfo = GetCurrency(id);
|
|
if currencyId and currencyInfo and currencyInfo.name then
|
|
pList = ns.EasyMenu:AddEntry({
|
|
arrow = true,
|
|
label = (C("dkyellow","%s %d:").." |T%s:20:20:0:0|t %s"):format(L["Place"],place,(currencyInfo.iconFileID or ns.icon_fallback),C("ltblue",currencyInfo.name)),
|
|
});
|
|
ns.EasyMenu:AddEntry({ label = C("ltred",L["Remove the currency"]), func=function() setInTitle(place, false); end }, pList);
|
|
ns.EasyMenu:AddEntry({separator=true}, pList);
|
|
end
|
|
end
|
|
|
|
if not pList then
|
|
pList = ns.EasyMenu:AddEntry({
|
|
arrow = true,
|
|
label = (C("dkyellow","%s %d:").." %s"):format(L["Place"],place,L["Add a currency"])
|
|
});
|
|
end
|
|
|
|
local page = {limit=40,counter=0,num=0,currentHeader=false,headers={["HIDDEN_CURRENCIES"]=true}};
|
|
for i=1, #Currencies do
|
|
if Currencies[i]=="HIDDEN_CURRENCIES" and not ns.profile[name].showHidden then
|
|
break;
|
|
elseif validateID(Currencies[i]) then
|
|
--isHidden = Currencies[i]=="HIDDEN_CURRENCIES";
|
|
local currencyId,currencyInfo,profInfo = GetCurrency(Currencies[i]);
|
|
if currencyId and currencyInfo and currencyInfo.name then
|
|
CountCorrection(currencyId,currencyInfo);
|
|
local nameStr,disabled = currencyInfo.name,true;
|
|
if ns.profile[name].currenciesInTitle[place]~=Currencies[i] then
|
|
nameStr,disabled = C("ltyellow",nameStr),false;
|
|
end
|
|
ns.EasyMenu:AddEntry({
|
|
label = nameStr, --.." ("..currencyId..")",
|
|
icon = currencyInfo.iconFileID or ns.icon_fallback,
|
|
disabled = disabled,
|
|
keepShown = false,
|
|
func = function() setInTitle(place,Currencies[i]); end
|
|
}, pList2);
|
|
-- next page
|
|
if page.currentHeader and page.headers[ Currencies[page.currentHeader] ] then
|
|
page.counter = page.counter + 1;
|
|
if page.counter == page.limit then
|
|
page.counter = 0;
|
|
--pList2 = ns.EasyMenu:AddEntry({label=C("ltblue",label), arrow=true}, pList);
|
|
pList2 = addMenuSubPage(pList,page);
|
|
end
|
|
end
|
|
end
|
|
else
|
|
-- headers with paging
|
|
if page.currentHeader~=i and page.headers[Currencies[i]] then
|
|
page.currentHeader = i;
|
|
pList2 = addMenuSubPage(pList,page);
|
|
else -- without paging
|
|
page.currentHeader = false;
|
|
pList2 = addMenuSubPage(pList,i);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
ns.EasyMenu:AddConfig(name,true);
|
|
|
|
ns.EasyMenu:ShowMenu(parent);
|
|
end
|
|
|
|
function module.init()
|
|
local strs = ({
|
|
deDE = {"Dungeon und Schlachtzug","Versteckte Währungen"}, esES = {"Mazmorra y banda","Monedas ocultas"},
|
|
esMX = {"Mazmorra y banda","Kaŝaj valutoj"}, frFR = {"Donjons & Raids","Monnaies cachées"},
|
|
itIT = {"Spedizioni e Incursioni","Valute nascoste"}, ptBR = {"Masmorras e Raides","Moedas ocultas"},
|
|
ptPT = {"Masmorras e Raides","Moedas ocultas"}, ruRU = {"Подземелья и рейды","Скрытые валюты"},
|
|
koKR = {"던전 및 공격대","숨겨진 통화"}, zhCN = {"地下城与团队副本","隐藏的货币"},
|
|
zhTW = {"地下城与团队副本","隱藏的貨幣"}
|
|
})[GetLocale()];
|
|
headers.DUNGEON_AND_RAID = strs and strs[1] or "Dungeons and raids";
|
|
headers.HIDDEN_CURRENCIES = strs and strs[2] or "Hidden currencies";
|
|
for i=1, 99 do
|
|
local n = "EXPANSION_NAME"..i;
|
|
if _G[n] then
|
|
headers[n] = _G[n];
|
|
else
|
|
break;
|
|
end
|
|
end
|
|
local KY,NL,NF,VE,NX = 1,4,3,2,0;
|
|
CovenantCurrencies = {
|
|
-- general sl currencies??
|
|
--[1769] = NX, -- Questerfahrung (Standard, versteckt)
|
|
--[[
|
|
[1792] = NX, -- Ehre
|
|
[1802] = NX, -- Stand der wöchentlichen Belohnungen im PvP der Schattenlande
|
|
[1828] = NX, -- Seelenasche
|
|
[1877] = NX, -- Bonuserfahrung
|
|
[1883] = NX, -- Seelenbandmedienenergie
|
|
[1885] = NX, -- Dankbare Gabe
|
|
[1889] = NX, -- Abenteuerkampagnenfortschritt
|
|
[1891] = NX, -- Honor from Rated
|
|
[1808] = NX, -- Kanalisierte Anima
|
|
[1767] = NX, -- Stygia
|
|
|
|
[1822] = NX, -- Ruhm
|
|
[1813] = NX, -- Reservoiranima
|
|
[1810] = NX, -- Erlöste Seele
|
|
--]]
|
|
|
|
-- unsorted covenant currencies
|
|
[1794] = NX, -- Sühnenanima
|
|
[1804] = NX, -- Aufgestiegene
|
|
[1805] = NX, -- Unvergängliche Armee
|
|
[1806] = NX, -- Wilde Jagd
|
|
[1807] = NX, -- Hof der Ernter
|
|
[1837] = NX, -- Der Gluthof
|
|
[1839] = NX, -- Rendel und Knüppelfratze
|
|
[1840] = NX, -- Steinkopf
|
|
[1841] = NX, -- Grufthüter Kassir
|
|
[1843] = NX, -- Seuchenerfinder Marileth
|
|
[1844] = NX, -- Großmeister Vole
|
|
[1845] = NX, -- Alexandros Mograine
|
|
[1846] = NX, -- Sika
|
|
[1849] = NX, -- Mikanikos
|
|
[1850] = NX, -- Choofa
|
|
[1851] = NX, -- Dromanin Aliothe
|
|
[1852] = NX, -- Jagdhauptmann Korayn
|
|
[1880] = NX, -- Ve'nari
|
|
[1884] = NX, -- Die Eingeschworenen
|
|
[1887] = NX, -- Hof der Nacht
|
|
[1888] = NX, -- Marasmius
|
|
|
|
-- kyrianer currencies
|
|
--[1829] = KY, -- Ruhm (Kyrianer)
|
|
--[1859] = KY, -- Reservoiranima - Kyrianer
|
|
--[1863] = KY, -- Erlöste Seele - Kyrianer
|
|
[1867] = KY, -- Architekt des Sanktums - Kyrianer
|
|
[1871] = KY, -- Animaweber des Sanktums - Kyrianer
|
|
[1819] = KY, -- Medaillon des Dienstes
|
|
[1847] = KY, -- Kleia und Pelagos
|
|
[1848] = KY, -- Polemarch Adrestes
|
|
|
|
-- night fae currencies
|
|
--[1831] = NF, -- Ruhm (Nachtfae)
|
|
--[1861] = NF, -- Reservoiranima - Nachtfae
|
|
--[1865] = NF, -- Erlöste Seele - Nachtfae
|
|
[1869] = NF, -- Architekt des Sanktums - Nachtfae
|
|
[1873] = NF, -- Animaweber des Sanktums - Nachtfae
|
|
[1853] = NF, -- Lady Mondbeere
|
|
|
|
-- necrolords currencies
|
|
--[1832] = NL, -- Ruhm (Nekrolords)
|
|
--[1862] = NL, -- Reservoiranima - Nekrolords
|
|
--[1866] = NL, -- Erlöste Seele - Nekrolords
|
|
[1870] = NL, -- Architekt des Sanktums - Nekrolords
|
|
[1874] = NL, -- Animaweber des Sanktums - Nekrolords
|
|
[1842] = NL, -- Baronin Vashj
|
|
[1878] = NL, -- Flickmeister
|
|
|
|
-- venthyr currencies
|
|
--[1830] = VE, -- Ruhm (Venthyr)
|
|
--[1860] = VE, -- Reservoiranima - Venthyr
|
|
--[1864] = VE, -- Erlöste Seele - Venthyr
|
|
[1868] = VE, -- Architekt des Sanktums - Venthyr
|
|
[1872] = VE, -- Animaweber des Sanktums - Venthyr
|
|
--[1816] = NX, -- Sündensteinfragmente
|
|
[1838] = VE, -- Die Gräfin
|
|
};
|
|
local A = faction=="Alliance";
|
|
-- "prog:[kw]:%d:%d" k=knowledge, w=workorders, 1. integer = expansion index, 2. integer = progession index from GetProfessions
|
|
Currencies = {
|
|
"EXPANSION_NAME9",2245,2118,2003,2122,2045,2134,2011,2105,"prof:k:9:1","prof:k:9:2","prof:w:9:1","prof:w:9:2",
|
|
"DUNGEON_AND_RAID",1166,
|
|
"PLAYER_V_PLAYER",2123,391,1792,1586,1602,
|
|
"MISCELLANEOUS",402,81,515,1388,1401,1379,2032,
|
|
"EXPANSION_NAME8",2009,1979,1931,1904,1906,1977,1822,1813,1810,1828,1767,1885,1877,1883,1889,1808,1802,1891,1754,1820,1728,1816,1191,
|
|
"EXPANSION_NAME7",1803,1755,1719,1721,1718,A and 1717 or 1716,1299,1560,1580,1587,1710,1565,1553,
|
|
"EXPANSION_NAME6",1149,1533,1342,1275,1226,1220,1273,1155,1508,1314,1154,1268,
|
|
"EXPANSION_NAME5",823,824,1101,994,1129,944,980,910,1020,1008,1017,999,
|
|
"EXPANSION_NAME4",697,738,776,752,777,789,
|
|
"EXPANSION_NAME3",416,615,614,361,
|
|
"EXPANSION_NAME2",241,61,
|
|
"EXPANSION_NAME1",1704,
|
|
};
|
|
|
|
-- for dragonflight
|
|
expantionProfCurrencies[9] = {};
|
|
local skillLine2DfCurrency = {
|
|
[171] = 2024, -- Alchemy
|
|
[164] = 2023, -- Blacksmithing
|
|
[333] = 2030, -- Enchanting
|
|
[202] = 2027, -- Engineering
|
|
[773] = 2028, -- Inscription
|
|
[755] = 2029, -- Jewelcrafting
|
|
[165] = 2025, -- Leatherworking
|
|
[197] = 2026, -- Tailoring
|
|
[393] = 2033, -- Skinning
|
|
[182] = 2034, -- Herbalism
|
|
[186] = 2035, -- Mining
|
|
};
|
|
expantionProfWorkorders[9] = {};
|
|
local skillLine2DfWorkorder = {
|
|
[171] = 2170, -- Alchemy
|
|
[164] = 2165, -- Blacksmithing
|
|
[333] = 2173, -- Enchanting
|
|
[202] = 2172, -- Engineering
|
|
[773] = 2175, -- Inscription
|
|
[755] = 2174, -- Jewelcrafting
|
|
[165] = 2169, -- Leatherworking
|
|
[197] = 2171, -- Tailoring
|
|
}
|
|
local skillName,skillLine,_={};
|
|
for i,index in ipairs({GetProfessions()}) do
|
|
if index then
|
|
_, _, _, _, _, _, skillLine = GetProfessionInfo(index);
|
|
end
|
|
if skillLine then
|
|
if skillLine2DfCurrency[skillLine] then
|
|
expantionProfCurrencies[9][i] = skillLine2DfCurrency[skillLine];
|
|
expantionProfWorkorders[9][i] = skillLine2DfWorkorder[skillLine];
|
|
end
|
|
end
|
|
end
|
|
|
|
profIconReplace = {
|
|
[2170]=2024, -- Alchemy
|
|
[2165]=2023, -- Blacksmithing
|
|
[2173]=2030, -- Enchanting
|
|
[2172]=2027, -- Engineering
|
|
[2175]=2028, -- Inscription
|
|
[2174]=2029, -- Jewelcrafting
|
|
[2169]=2025, -- Leatherworking
|
|
[2171]=2026, -- Tailoring
|
|
}
|
|
|
|
local ignore = {["n/a"]=1,["UNUSED"]=1};
|
|
tinsert(Currencies,"HIDDEN_CURRENCIES");
|
|
local known = {};
|
|
for i=1, #Currencies do
|
|
if tonumber(Currencies[i]) then
|
|
known[Currencies[i]] = true;
|
|
end
|
|
end
|
|
for i=42, 2500 do
|
|
if not known[i] and not ns.isArchaeologyCurrency(i) then
|
|
local info = C_CurrencyInfo.GetCurrencyInfo(i);
|
|
if info and info.name and not (ignore[info.name] or info.name:find("zzold") or info.name:find("Test") or info.name:find("Prototype") or info.name:find("Scoreboard")) then -- (and not info.isHeader)
|
|
tinsert(Currencies,i);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local insertShadowlandCurrencies
|
|
do
|
|
local insertAfter,hasInsertedCovenant = nil,false;
|
|
local function InsertCurrency(id)
|
|
if not insertAfter then
|
|
for i=1, #Currencies do
|
|
if Currencies[i]==1191 then
|
|
insertAfter = i+1;
|
|
end
|
|
end
|
|
end
|
|
tinsert(Currencies,insertAfter,id);
|
|
insertAfter=insertAfter+1;
|
|
end
|
|
function insertShadowlandCurrencies()
|
|
if hasInsertedCovenant then return end
|
|
hasInsertedCovenant = true;
|
|
|
|
-- covenantID
|
|
for id,covenant in ns.pairsByKeys(CovenantCurrencies)do
|
|
if covenant==covenantID then
|
|
InsertCurrency(id);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function module.onevent(self,event,arg1)
|
|
if event=="BE_UPDATE_CFG" and arg1 and arg1:find("^ClickOpt") then
|
|
ns.ClickOpts.update(name);
|
|
elseif event=="BE_UPDATE_CFG" and arg1 and arg1:find("showHidden") then
|
|
aceCurrencies.created = false; -- recreate currency tables
|
|
elseif event=="PLAYER_LOGIN" then
|
|
if ns.toon[name]==nil or (ns.toon[name] and ns.toon[name].headers==nil) then
|
|
ns.toon[name] = {headers={}};
|
|
end
|
|
resetCurrencySession();
|
|
|
|
-- covenant
|
|
covenantID = C_Covenants.GetActiveCovenantID();
|
|
if covenantID==0 then
|
|
self:RegisterEvent("COVENANT_CHOSEN");
|
|
else
|
|
insertShadowlandCurrencies();
|
|
end
|
|
elseif event=="COVENANT_CHOSEN" then
|
|
-- update Covenant currencies
|
|
covenantID = C_Covenants.GetActiveCovenantID();
|
|
insertShadowlandCurrencies();
|
|
elseif event=="CHAT_MSG_CURRENCY" then -- detecting new currencies
|
|
local id = tonumber(arg1:match("currency:(%d*)"));
|
|
if id and not currencySession[id] then
|
|
local currencyInfo = C_CurrencyInfo.GetCurrencyInfo(id);
|
|
CountCorrection(id,currencyInfo);
|
|
currencySession[id] = currencyInfo.quantity;
|
|
end
|
|
end
|
|
if ns.eventPlayerEnteredWorld then
|
|
updateBroker();
|
|
if (tt) and (tt.key) and (tt.key==ttName) and (tt:IsShown()) then
|
|
createTooltip(tt,true);
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
-- C_Covenants.GetCovenantIDs(); -- only a little table with 4 entries
|
|
-- C_Covenants.GetCovenantData(id); -- to get names for comment line
|
|
{
|
|
1, -- kyrian
|
|
2, -- venthyr
|
|
3, -- nightfae
|
|
4, -- necrolords
|
|
}
|
|
--]]
|
|
|
|
-- 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"},{false},{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;
|
|
|
|
|