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.
317 lines
11 KiB
317 lines
11 KiB
|
|
-- module independent variables --
|
|
----------------------------------
|
|
local addon, ns = ...
|
|
local C, L, I = ns.LC.color, ns.L, ns.I
|
|
local time,date,tinsert,tconcat=time,date,tinsert,table.concat;
|
|
|
|
|
|
-- module own local variables and local cached functions --
|
|
-----------------------------------------------------------
|
|
local name = "Gold"; -- BONUS_ROLL_REWARD_MONEY L["ModDesc-Gold"]
|
|
local ttName, tt, createTooltip, module = name.."TT";
|
|
local login_money = nil;
|
|
local current_money = 0
|
|
local player = ns.player.name_realm;
|
|
local profit,ttLines = {},{
|
|
{"showProfitSession",L["Session"]},
|
|
{"showProfitDaily",HONOR_TODAY,"daily"},
|
|
{"showProfitDaily",HONOR_YESTERDAY,"daily",true},
|
|
{"showProfitWeekly",ARENA_THIS_WEEK,"weekly"},
|
|
{"showProfitWeekly",HONOR_LASTWEEK,"weekly",true},
|
|
{"showProfitMonthly",L["This month"],"monthly"},
|
|
{"showProfitMonthly",L["Last month"],"monthly",true},
|
|
};
|
|
|
|
|
|
-- register icon names and default files --
|
|
-------------------------------------------
|
|
I[name] = {iconfile="Interface\\Minimap\\TRACKING\\Auctioneer",coords={0.05,0.95,0.05,0.95}} --IconName::Gold--
|
|
|
|
|
|
-- some local functions --
|
|
--------------------------
|
|
local function getProfit(Type,last)
|
|
local value = 0;
|
|
if Type and current_money then
|
|
ns.tablePath(ns.data,name,"Profit",Type,player);
|
|
local p,d=ns.data[name].Profit[Type][player],profit[Type];
|
|
if d then
|
|
if not last then
|
|
value = current_money-p[d[1]];
|
|
elseif p[d[2]]~=false then
|
|
value = tonumber(p[d[2]]);
|
|
end
|
|
end
|
|
elseif login_money~=nil and current_money then -- session
|
|
value = current_money-login_money;
|
|
end
|
|
if value<0 then
|
|
return 0-value,-1;
|
|
end
|
|
return value, value>0 and 1 or 0;
|
|
end
|
|
|
|
local updateProfit;
|
|
function updateProfit()
|
|
local w = date("%w"); w=w==0 and 7 or w;
|
|
local day,T,t = 86400,date("*t"),time();
|
|
local today = time({year=T.year,month=T.month,day=T.day,hour=23,min=59,sec=59});
|
|
local week = time({year=T.year,month=T.month,day=T.day+(7-w)+1,hour=0,min=0,sec=0})-1;
|
|
|
|
profit.daily = { today, today-day };
|
|
profit.weekly = { week, week-(day*7) };
|
|
profit.monthly = {
|
|
time({year=T.year,month=T.month+1,day=1,hour=0,min=0,sec=0})-1,
|
|
time({year=T.year,month=T.month,day=1,hour=0,min=0,sec=0})-1
|
|
};
|
|
|
|
for k,v in pairs(profit) do
|
|
ns.tablePath(ns.data,name,"Profit",k,player);
|
|
local p = ns.data[name].Profit[k][player];
|
|
if p[v[1]]==nil then
|
|
p[v[1]] = current_money;
|
|
end
|
|
if p[v[2]]==nil then
|
|
p[v[2]] = false;
|
|
elseif type(p[v[2]])=="number" then
|
|
p[v[2]] = tostring(current_money-p[v[2]]);
|
|
end
|
|
local c = 0;
|
|
for x,y in ns.pairsByKeys(p,true) do
|
|
c=c+1;
|
|
if c>5 then
|
|
p[x] = nil; -- remove older entries
|
|
end
|
|
end
|
|
end
|
|
|
|
C_Timer.After(today-time()+1,updateProfit); -- next update
|
|
end
|
|
|
|
local function deleteCharacterGoldData(self,name_realm,button)
|
|
if button == "RightButton" then
|
|
Broker_Everything_CharacterDB[name_realm].gold = nil;
|
|
tt:Clear();
|
|
createTooltip(tt,true);
|
|
end
|
|
end
|
|
|
|
local function updateBroker()
|
|
local broker = {};
|
|
if ns.profile[name].showCharGold then
|
|
tinsert(broker,ns.GetCoinColorOrTextureString(name,current_money,{hideMoney=ns.profile[name].goldHideBB}));
|
|
end
|
|
if ns.profile[name].showProfitSessionBroker and login_money then
|
|
local profit, direction = getProfit();
|
|
if profit~=0 then
|
|
local sign = (direction==1 and "|Tinterface\\buttons\\ui-microstream-green:14:14:0:0:32:32:6:26:26:6|t") or (direction==-1 and "|Tinterface\\buttons\\ui-microstream-red:14:14:0:0:32:32:6:26:6:26|t") or "";
|
|
tinsert(broker, sign .. ns.GetCoinColorOrTextureString(name,profit,{hideMoney=ns.profile[name].goldHideBB}));
|
|
end
|
|
end
|
|
if #broker==0 then
|
|
broker = {BONUS_ROLL_REWARD_MONEY};
|
|
end
|
|
ns.LDB:GetDataObjectByName(module.ldbName).text = table.concat(broker,", ");
|
|
end
|
|
|
|
function createTooltip(tt,update)
|
|
if not (tt and tt.key and tt.key==ttName) then return end -- don't override other LibQTip tooltips...
|
|
|
|
local sAR,sAF = ns.profile[name].showCharsFrom=="4",ns.profile[name].showAllFactions==true;
|
|
local totalGold = {Alliance=0,Horde=0,Neutral=0};
|
|
totalGold[ns.player.faction] = current_money;
|
|
|
|
if tt.lines~=nil then tt:Clear(); end
|
|
|
|
tt:AddHeader(C("dkyellow",L["Gold information"]));
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
|
|
if(sAR or sAF)then
|
|
tt:AddLine(C("ltgreen","("..(sAR and L["All realms"] or "")..((sAR and sAF) and "/" or "")..(sAF and L["AllFactions"] or "")..")"));
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
end
|
|
|
|
local faction = ns.player.faction~="Neutral" and " |TInterface\\PVPFrame\\PVP-Currency-"..ns.player.faction..":16:16:0:-1:16:16:0:16:0:16|t" or "";
|
|
tt:AddLine(C(ns.player.class,ns.player.name) .. faction, ns.GetCoinColorOrTextureString(name,current_money,{inTooltip=true,hideMoney=ns.profile[name].goldHideTT}));
|
|
tt:AddSeparator();
|
|
|
|
local lineCount=0;
|
|
for i,toonNameRealm,toonName,toonRealm,toonData,isCurrent in ns.pairsToons(name,{--[[currentFirst=true,]] currentHide=true,--[[forceSameRealm=true]]}) do
|
|
if toonData.gold then
|
|
local faction = toonData.faction~="Neutral" and " |TInterface\\PVPFrame\\PVP-Currency-"..toonData.faction..":16:16:0:-1:16:16:0:16:0:16|t" or "";
|
|
local line = tt:AddLine(
|
|
C(toonData.class,ns.scm(toonName)) .. ns.showRealmName(name,toonRealm) .. faction,
|
|
ns.GetCoinColorOrTextureString(name,toonData.gold,{inTooltip=true,hideMoney=ns.profile[name].goldHideTT})
|
|
);
|
|
|
|
tt:SetLineScript(line, "OnMouseUp", deleteCharacterGoldData, toonNameRealm);
|
|
|
|
totalGold[toonData.faction] = totalGold[toonData.faction] + toonData.gold;
|
|
|
|
line = nil;
|
|
lineCount=lineCount+1;
|
|
end
|
|
end
|
|
|
|
if(lineCount>0)then
|
|
tt:AddSeparator()
|
|
if ns.profile[name].splitSummaryByFaction and ns.profile[name].showAllFactions then
|
|
tt:AddLine(L["Total Gold"].." |TInterface\\PVPFrame\\PVP-Currency-Alliance:16:16:0:-1:16:16:0:16:0:16|t", ns.GetCoinColorOrTextureString(name,totalGold.Alliance,{inTooltip=true,hideMoney=ns.profile[name].goldHideTT}));
|
|
tt:AddLine(L["Total Gold"].." |TInterface\\PVPFrame\\PVP-Currency-Horde:16:16:0:-1:16:16:0:16:0:16|t", ns.GetCoinColorOrTextureString(name,totalGold.Horde,{inTooltip=true,hideMoney=ns.profile[name].goldHideTT}));
|
|
else
|
|
tt:AddLine(L["Total Gold"], ns.GetCoinColorOrTextureString(name,totalGold.Alliance+totalGold.Horde+totalGold.Neutral,{inTooltip=true,hideMoney=ns.profile[name].goldHideTT}))
|
|
end
|
|
end
|
|
|
|
if ns.profile[name].showProfitSession or ns.profile[name].showProfitDaily or ns.profile[name].showProfitWeekly or ns.profile[name].showProfitMonthly then
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
tt:AddLine(C("ltyellow","Profit / Loss"));
|
|
tt:AddSeparator();
|
|
for i=1, #ttLines do
|
|
local v = ttLines[i];
|
|
if ns.profile[name][v[1]] then
|
|
local profit, direction = getProfit(v[3],v[4]);
|
|
local color,icon = "gray","";
|
|
if direction==1 then
|
|
color,icon = "ltgreen","|Tinterface\\buttons\\ui-microstream-green:14:14:0:0:32:32:6:26:26:6|t";
|
|
elseif direction==-1 then
|
|
color,icon = "ltred","|Tinterface\\buttons\\ui-microstream-red:14:14:0:0:32:32:6:26:6:26|t";
|
|
end
|
|
tt:AddLine(C(color,v[2]), icon .. ns.GetCoinColorOrTextureString(name,profit,{inTooltip=true,hideMoney=ns.profile[name].goldHideTT}));
|
|
end
|
|
end
|
|
end
|
|
|
|
if ns.profile.GeneralOptions.showHints then
|
|
tt:AddSeparator(4,0,0,0,0);
|
|
ns.AddSpannedLine(tt,C("ltblue",L["MouseBtnR"]).." || "..C("green",L["Remove entry"]));
|
|
ns.ClickOpts.ttAddHints(tt,name);
|
|
end
|
|
|
|
if not update then
|
|
ns.roundupTooltip(tt);
|
|
end
|
|
end
|
|
|
|
|
|
-- module functions and variables --
|
|
------------------------------------
|
|
module = {
|
|
events = {
|
|
"PLAYER_LOGIN",
|
|
"PLAYER_MONEY",
|
|
"PLAYER_TRADE_MONEY",
|
|
"TRADE_MONEY_CHANGED",
|
|
},
|
|
config_defaults = {
|
|
enabled = true,
|
|
showAllFactions=true,
|
|
showRealmNames=true,
|
|
showCharsFrom="2",
|
|
showCharGold = true,
|
|
showProfitSessionBroker = true,
|
|
splitSummaryByFaction = true,
|
|
showProfitSession = true,
|
|
showProfitDaily = true,
|
|
showProfitWeekly = true,
|
|
showProfitMonthly = true,
|
|
goldHideBB = "0",
|
|
goldHideTT = "0",
|
|
},
|
|
clickOptionsRename = {
|
|
["1_open_tokenframe"] = "currency",
|
|
["2_open_character_info"] = "charinfo",
|
|
["3_open_bags"] = "bags",
|
|
["4_open_menu"] = "menu"
|
|
},
|
|
clickOptions = {
|
|
["currency"] = "Currency",
|
|
["charinfo"] = "CharacterInfo",
|
|
["bags"] = {"Open all bags","call","ToggleAllBags"}, -- L["Open all bags"]
|
|
["menu"] = "OptionMenuCustom"
|
|
}
|
|
}
|
|
|
|
ns.ClickOpts.addDefaults(module,{
|
|
currency = "_LEFT",
|
|
charinfo = "__NONE",
|
|
bags = "__NONE",
|
|
menu = "_RIGHT"
|
|
});
|
|
|
|
function module.options()
|
|
return {
|
|
broker = {
|
|
goldHideBB = 1,
|
|
showCharGold={ type="toggle", order=2, name=L["Show character gold"], desc=L["Show character gold on broker button"] },
|
|
showProfitSessionBroker={ type="toggle", order=3, name=L["Show session profit"], desc=L["Show session profit on broker button"] },
|
|
},
|
|
tooltip = {
|
|
goldHideTT = 1,
|
|
splitSummaryByFaction={type="toggle",order=2, name=L["Split summary by faction"], desc=L["Separate summary by faction (Alliance/Horde)"] },
|
|
showProfitSession = { type="toggle", order=3, name=L["Show session profit"], desc=L["Display profit/loss of the current session in tooltip"]},
|
|
showProfitDaily = { type="toggle", order=4, name=L["Show daily profit"], desc=L["Display today and yesterday profit in tooltip"] },
|
|
showProfitWeekly = { type="toggle", order=5, name=L["Show weekly profit"], desc=L["Display this week and last week profit in tooltip"] },
|
|
showProfitMonthly = { type="toggle", order=6, name=L["Show monthly profit"], desc=L["Display this month and last month profit in tooltip"] },
|
|
showAllFactions=7,
|
|
showRealmNames=8,
|
|
showCharsFrom=9,
|
|
},
|
|
misc = {
|
|
shortNumbers=1,
|
|
},
|
|
}
|
|
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 profit"]), func=function() module.onevent(nil,"PLAYER_LOGIN"); end, keepShown=false });
|
|
ns.EasyMenu:ShowMenu(self);
|
|
end
|
|
|
|
function module.init()
|
|
if ns.toon.gold==nil then
|
|
ns.toon.gold = 0;
|
|
end
|
|
end
|
|
|
|
function module.onevent(self,event,arg1)
|
|
if event=="BE_UPDATE_CFG" and arg1 and arg1:find("^ClickOpt") then
|
|
ns.ClickOpts.update(name);
|
|
else
|
|
current_money = GetMoney();
|
|
ns.toon.gold = current_money;
|
|
if event=="PLAYER_LOGIN" then
|
|
login_money = current_money;
|
|
C_Timer.After(0.5,function()
|
|
updateProfit();
|
|
updateBroker();
|
|
end);
|
|
elseif ns.eventPlayerEnteredWorld then
|
|
updateBroker();
|
|
end
|
|
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, 2, "LEFT", "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;
|
|
|