-- 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 " , 2588 , 2032 , 1401 , 1388 , 1379 , 515 , 402 , 81 ,
" 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 ;