modify and add files for zz2

This commit is contained in:
rilgamon 2021-03-12 01:01:03 +01:00
parent 89c2112488
commit a8424e2050
4 changed files with 468 additions and 0 deletions

163
banker.lua Normal file
View File

@ -0,0 +1,163 @@
local addonName, addonTable = ...
addonTable['events'] = addonTable['events'] or {}
local db, mailSum, mailRec, player, dbb, dbr, dbf, L, faction, realm
local events = addonTable['events']
function addonTable:SetupBanker()
player = UnitName('player')
L = addonTable['storage']['L']
db = addonTable['storage']['db']
dbr = addonTable['storage']['dbr']
dbf = addonTable['storage']['dbf']
dbb = dbf['banker']
faction = addonTable['storage']['faction']
realm = addonTable['storage']['realm']
addonTable['bankHandler'] :SetDB(db[faction]['banker'])
end
local mailframes = {}
local posFrame = CreateFrame("Frame")
posFrame:SetSize(32,1)
posFrame:SetPoint("TOPRIGHT",SendMailFrame,"TOPRIGHT",-10,-12)
posFrame:SetScript("OnEvent", function(self, event, ...)
self:UnregisterEvent('MAIL_FAILED')
self:UnregisterEvent('MAIL_SEND_SUCCESS')
if(event == "MAIL_SEND_SUCCESS") then
if(mailRec and mailSum) then
dbr[mailRec]['incoming'] = (dbr[mailRec]['incoming'] or 0) + mailSum
print(L['Success'](mailRec,mailSum))
mailframes[mailRec]:Hide()
end
elseif(event == "MAIL_FAILED") then
print(L['Fail'])
end
mailRec = nil
mailSum = nil
end)
local function GetFactionList()
local n,m,_
local l = {}
if(addonTable['db']['sv']['profileKeys']) then
for k,v in pairs(addonTable['db']['sv']['profileKeys']) do
n,_,m = strsplit(' ',k,3)
if(n) then
if(m == realm) then
if(faction == dbr[n]['faction']) then
l[n] = true
end
end
end
end
end
return l
end
local function getDeliver(name)
if(not dbr[name] or not dbr[name]['currentGold']) then return 0 end
local sendSum,offset
local lim, mon
if(dbb['banker'] ~= player) then
lim = dbb['maxLimit'] or 100
mon = GetMoney()
sendSum = mon - lim*10000 - 30
offset = 0
else
lim = dbb['minLimit'] or 100
mon = dbr[name]['currentGold']
sendSum = lim*10000 - mon
offset = 30
end
if(sendSum + offset > GetMoney()) then
sendSum = GetMoney()
end
return sendSum - (dbb['banker'] == name and 0 or (dbr[name]['incoming'] or 0))
end
local function Click(self,button)
local sendSum = getDeliver(self['destName'])
if(addonTable:IsTwink(self['destName']) and self['destName']~=player) then
if(sendSum>0) then
if(SetSendMailMoney(sendSum)) then
posFrame:RegisterEvent('MAIL_SEND_SUCCESS')
posFrame:RegisterEvent('MAIL_FAILED')
mailRec = self['destName']
mailSum = sendSum
SendMail(self['destName'],L['Subject'],nil)
end
end
end
end
local function Mouse(self)
local tip = GameTooltip
tip:SetOwner(self, "ANCHOR_BOTTOM")
tip:ClearLines()
self['tooltip'] = tip
if(dbb['banker'] ~= player) then
tip:AddLine(format("%s %s",L['Bankier'],dbb['banker']))
tip:AddLine(format("%s %s",L['Goldgrenze'],dbb['maxLimit']))
else
tip:AddLine(format("%s %s",L['Empfaenger'],self['destName']))
tip:AddLine(format("%s %s",L['Goldgrenze'],dbb['minLimit']))
end
local sendSum = getDeliver(self['destName'])
tip:AddLine(format("%s %s",L['Sende'],GetCoinTextureString(sendSum)))
tip:Show()
end
local function MouseOut(self)
self['tooltip']:Hide()
end
local function MainFrame(name)
if(getDeliver(name)<0) then return nil end
local mailframe = mailframes[name] and mailframes[name] or CreateFrame("Button",nil,SendMailFrame,"ActionButtonTemplate SecureActionButtonTemplate")
mailframe:SetSize(32,32)
mailframe:SetPoint("TOPRIGHT",lastframe,"BOTTOMRIGHT",0,-8)
mailframe:EnableMouse(true)
mailframe:RegisterForClicks("AnyUp")
mailframe['destName'] = name
mailframe:SetScript("OnClick", Click)
mailframe:SetScript("OnEnter", Mouse)
mailframe:SetScript("OnLeave", MouseOut)
if(not mailframe['texture']) then
mailframe['texture'] = mailframe:CreateTexture(nil,"BACKGROUND")
mailframe['texture']:SetTexture("Interface\\Icons\\INV_Misc_Bag_10_Blue")
mailframe['texture']:SetAllPoints(mailframe)
mailframe['texture']:SetPoint("CENTER",0,0)
mailframe['texture']:Show()
end
return mailframe
end
local function buildMailFrames()
local banker = dbb['banker']
if(banker and mailframes) then
for k,v in pairs(mailframes) do
mailframes[k]:Hide()
mailframes[k] = nil
end
mailframes = {}
end
if(db["disableBanker"]) then return end
posFrame:Show()
lastframe = posFrame
if(player == banker) then
local fl = GetFactionList()
if(fl) then
local money = GetMoney()
for k,v in pairs(fl) do
if(k ~= banker) then
if(getDeliver(k) > 0 and getDeliver(k) < money - 10000) then
mailframes[k] = MainFrame(k)
mailframes[k]:Show()
lastframe = mailframes[k]
end
end
end
end
else
local money = GetMoney()
if(getDeliver(banker) > 0 and getDeliver(banker) < money - 10000) then
mailframes[banker] = MainFrame(banker)
mailframes[banker]:Show()
end
end
end
function events:MAIL_SHOW()
buildMailFrames()
end

164
broker.lua Normal file
View File

@ -0,0 +1,164 @@
local addonName, addonTable = ...
local childName = "zz_Money"
local db, dbr, dbp, L, lineIn, lineOut, session, faction, realm
local ldbicon = LibStub:GetLibrary("LibDBIcon-1.0")
function addonTable:SetupBroker()
L = addonTable['storage']['L']
db = addonTable['storage']['db']
dbr = addonTable['storage']['dbr']
dbp = addonTable['storage']['dbp']
session = addonTable['storage']['session']
faction = addonTable['storage']['faction']
realm = addonTable['storage']['realm']
local folder = addonName ~= childName and format("Interface\\AddOns\\%s\\%s", addonName, childName) or format("Interface\\AddOns\\%s", childName)
lineIn = format("|T%s:0|t %s", format("%s\\in.tga", folder), L['Einnahmen'])
lineOut = format("|T%s:0|t %s", format("%s\\out.tga", folder), L['Ausgaben'])
end
local function cdbCheck(n,realm)
db[realm] = db[realm] or {}
db[realm][n] = db[realm][n] or { currentGold = 0 }
end
local function getSumToday(d)
if(faction=='Neutral') then return 0,0 end
local sumIn,sumOut = 0,0
d = d or 0
local day = addonTable:getDateString() + d
for a,b in pairs(dbr['activity'][faction][tostring(day)] or {}) do
if(b < 0) then
sumOut = sumOut + b
else
sumIn = sumIn + b
end
end
return sumOut,sumIn
end
local function getSumWeek()
local sumIn, sumOut = 0,0
local sumWeekIn, sumWeekOut = 0,0
for a=0,6 do
sumOut, sumIn = getSumToday(a * -1)
sumWeekIn = sumWeekIn + sumIn
sumWeekOut = sumWeekOut + sumOut
end
return sumWeekOut,sumWeekIn
end
local function Helper_Tooltip3(realm)
if(not db['connectedRealms']) then return end
connectedRealms = connectedRealms or GetAutoCompleteRealms()
for k, v in pairs(connectedRealms) do
if(v == realm) then
return true
end
end
end
local function OnClick(self, button)
if(IsShiftKeyDown() and button == "LeftButton") then
local sb = addonTable['db']['global']['ldbicons']
sb[childName]['hide'] = not sb[childName]['hide']
if(ldbicon) then
if(sb[childName]['hide']) then
ldbicon:Hide(childName)
else
ldbicon:Show(childName)
end
end
else
if(not InCombatLockdown()) then
if(InterfaceOptionsFrame:IsVisible()) then
InterfaceOptionsFrame:Hide()
else
InterfaceOptionsFrame_OpenToCategory(childName)
InterfaceOptionsFrame_OpenToCategory(childName) -- Twice because of a bug in InterfaceOptionsFrame_OpenToCategory
end
end
end
end
local function OnTooltipShow(tip)
tip:AddLine(childName)
if(faction == 'Neutral') then
tip:AddLine(L['neutral'])
return
end
local sessdiff = dbp['currentGold'] - session['start']
local sdr,sdg,sdb = 1, 1, 1
if(sessdiff<0) then
sdr,sdg,sdb = 1, 0, 0
end
tip:AddDoubleLine(L['Sitzung'], addonTable:displayMoney(abs(sessdiff), db['shortMoneyTip']),1,1,0,sdr,sdg,sdb)
tip:AddDoubleLine(lineIn, addonTable:displayMoney(session['income'], db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddDoubleLine(lineOut, addonTable:displayMoney(abs(session['expense']), db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddLine(' ')
local sumOut,sumIn = getSumToday()
sessdiff = sumOut+sumIn
if(sessdiff<0) then
sdr,sdg,sdb = 1, 0, 0
else
sdr,sdg,sdb = 1, 1, 1
end
tip:AddDoubleLine(L['Heute'], addonTable:displayMoney(abs(sessdiff), db['shortMoneyTip']),1,1,0,sdr,sdg,sdb)
tip:AddDoubleLine(lineIn, addonTable:displayMoney(sumIn, db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddDoubleLine(lineOut, addonTable:displayMoney(abs(sumOut), db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddLine(' ')
local sumOut,sumIn = getSumToday(-1)
sessdiff = sumOut+sumIn
if(sessdiff<0) then
sdr,sdg,sdb = 1, 0, 0
else
sdr,sdg,sdb = 1, 1, 1
end
tip:AddDoubleLine(L['Gestern'], addonTable:displayMoney(abs(sessdiff), db['shortMoneyTip']),1,1,0,sdr,sdg,sdb)
tip:AddDoubleLine(lineIn, addonTable:displayMoney(sumIn, db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddDoubleLine(lineOut, addonTable:displayMoney(abs(sumOut), db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddLine(' ')
local sumOut,sumIn = getSumWeek()
sessdiff = sumOut+sumIn
if(sessdiff<0) then
sdr,sdg,sdb = 1, 0, 0
else
sdr,sdg,sdb = 1, 1, 1
end
tip:AddDoubleLine(L['7-Tage'], addonTable:displayMoney(abs(sessdiff), db['shortMoneyTip']),1,1,0,sdr,sdg,sdb)
tip:AddDoubleLine(lineIn, addonTable:displayMoney(sumIn, db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddDoubleLine(lineOut, addonTable:displayMoney(abs(sumOut), db['shortMoneyTip']),1,1,1,1,1,1)
tip:AddLine(' ')
local sum = 0
local ttlist = {}
if(addonTable['db']['sv']['profileKeys']) then
for k,v in pairs(addonTable['db']['sv']['profileKeys']) do
local n,_,m = strsplit(' ',k,3)
if(n) then
local cr = Helper_Tooltip3(m)
if(m == realm or cr) then
cdbCheck(n,cr and m or realm)
if( faction == db[cr and m or realm][n]['faction']) then
sum = sum + db[cr and m or realm][n]['currentGold']
ttlist[k] = db[cr and m or realm][n]['currentGold']
end
end
end
end
end
for _,v in pairs(addonTable:sortArray(ttlist,db['sortDir'])) do
local n,_,m = strsplit(' ',v,3)
local cr = Helper_Tooltip3(m)
tip:AddDoubleLine(addonTable:classcolor(n,db[cr and m or realm][n]['class']),addonTable:displayMoney(db[cr and m or realm][n]['currentGold']+(db[cr and m or realm][n]['incoming'] or 0), db['shortMoneyTip']),0,1,0,1,1,1)
end
tip:AddLine(' ')
tip:AddDoubleLine(L['Gesamt'],addonTable:displayMoney(sum, db['shortMoneyTip']),0,1,0,1,1,1)
end
function addonTable:GetBroker(objname)
return LibStub:GetLibrary("zzLDB"):GetLDB(objname)
end
function addonTable:OnText(objname, message)
local ldbobj = addonTable:GetBroker(objname)
if(ldbobj['text'] ~= message) then
ldbobj['text'] = message
end
end
addonTable['ldb'] = { -- https://github.com/tekkub/libdatabroker-1-1/wiki/Data-Specifications
['type'] = 'data source', -- required: 'data source' or 'launcher'
['text'] = childName, -- required/optional for launcher
['icon'] = 'Interface\\Icons\\INV_Misc_Bag_10_Blue', -- optional/required for launcher
['OnClick'] = OnClick, -- optional/required for launcher
['OnTooltipShow'] = OnTooltipShow, -- optional
}

67
helper.lua Normal file
View File

@ -0,0 +1,67 @@
local addonName, addonTable = ...
function addonTable:colorize(text, color)
return string.format("|cff%s%s|r",color and color or 'ffffff',text and text or '')
end
function addonTable:classcolor(text,class)
class = RAID_CLASS_COLORS[class] and class or "PRIEST"
return string.format("|c%s%s|r",RAID_CLASS_COLORS[class]['colorStr'],text)
end
function addonTable:round(num, idp)
return math.floor(num * (10^(idp or 0)) + 0.5) / (10^(idp or 0))
end
function addonTable:sortArray(tmp,dir)
local newtmp = {}
local n = 1
local cnt = 0
local maximum = 0
local first
for k,v in pairs(tmp) do
cnt = cnt + 1
if(v > maximum) then
maximum = v + 1
end
first = first or k
end
while(cnt > 0) do
local mx, mn = dir and maximum or 0,first
for k,v in pairs(tmp) do
if(dir) then
if(tonumber(v)<=tonumber(mx)) then
mx = v
mn = k
end
else
if(tonumber(v)>=tonumber(mx)) then
mx = v
mn = k
end
end
end
newtmp[n] = mn
tmp[mn] = nil
cnt = 0
for k,v in pairs(tmp) do
cnt = cnt + 1
end
n = n + 1
mn = 0
mx = dir and mx or 0
end
return newtmp
end
function addonTable:IsTwink(name)
local realm = GetRealmName()
local _
if(self['db']['sv']['profileKeys']) then
for k,v in pairs(self['db']['sv']['profileKeys']) do
local n,m = strsplit(" - ",k,2)
_,m = strsplit(" ",m,2)
if(n) then
if(n == name and m == realm) then
return true
end
end
end
end
return false
end

74
prefs.lua Normal file
View File

@ -0,0 +1,74 @@
local addonName, addonTable = ...
local db, dbr, faction
addonTable['bankHandler'] = {
SetDB = function(self, db) self.db = db end,
GetPref = function(self, pref)
return self['db'][pref[#pref]]
end,
SetPref = function (self, pref, value)
self['db'][pref[#pref]] = value
addonTable['events']['MAIL_SHOW'](addonTable)
end,
}
local function buildSelect()
local sel = {}
local n,m,_
if(addonTable['db']['sv']['profileKeys']) then
for k,v in pairs(addonTable['db']['sv']['profileKeys']) do
n,_,m = strsplit(' ',k,3)
if(addonTable:IsTwink(n)) then
if(dbr[n] and faction == dbr[n]['faction']) then
sel[n] = n
end
end
end
end
return sel
end
local function buildSelectAll()
local sel = {}
local n,m,_
if(addonTable['db']['sv']['profileKeys']) then
for k,v in pairs(addonTable['db']['sv']['profileKeys']) do
n,_,m = strsplit(' ',k,3)
sel[format("%s-%s",n,m)] = format("%s-%s",n,m)
end
end
return sel
end
local function deleteChar()
if(db['deleteCharOk']) then
local charName, charRealm = strsplit('-', db['deleteChar'],2)
if(db[charRealm] and db[charRealm][charName]) then
db[charRealm][charName] = nil
addonTable['db']['sv']['profileKeys'][format("%s - %s", charName, charRealm)] = nil
end
end
db['deleteCharOk'] = nil
end
function addonTable:SetupPrefs(childName)
local L = addonTable['storage']['L']
dbr = addonTable['storage']['dbr']
db = addonTable['storage']['db']
faction = addonTable['storage']['faction']
local config = LibStub:GetLibrary("zzConfig")
local main = addonTable['options']['args'][childName]
local menu = config:AddConfigMenu(addonTable['options'], L['Bankier'], addonTable['bankHandler'] , 2, { disabled = function() return db['disableBanker']
end})
config:AddConfigEntry(menu, "minLimit", "range", L['Minimum Limit'],L['Desc MinL'],1,10,150000,5, false)
config:AddConfigEntry(menu, "maxLimit", "range", L['Maximum Limit'],L['Desc MaxL'],2,10,150000,5,false)
config:AddConfigEntry(menu, "banker","select",L['Bankier'],nil,3,buildSelect)
config:AddConfigEntry(main, "disableBanker", "toggle", L['nobanker'], nil, 3)
config:AddConfigEntry(main, "deleteCharHeader", "header", L['DeleteChar'], nil, 9)
config:AddConfigEntry(main, "deleteChar", "select", L['DeleteChar'], L['DeleteCharDesc'], 10, buildSelectAll)
config:AddConfigEntry(main, "deleteCharOk", "toggle", L['DeleteCharOk'], nil , 11)
config:AddConfigEntry(main, "deleteCharExec", "execute", L['DeleteChar'], L['DeleteCharDesc'], 12, deleteChar)
config:AddConfigEntry(main, "sortDir", "toggle", L['sortDir'], nil, 2)
config:AddConfigEntry(main, "connectedRealms", "toggle", L['connectedRealms'], nil, 2)
config:AddConfigEntry(main, "accountMoney", "toggle", L['accountMoney'], L['accountMoneyDesc'], 4)
config:AddConfigEntry(main, "shortMoney", "toggle", L['shortMoney'], nil, 5)
config:AddConfigEntry(main, "shortMoneyTip", "toggle", L['shortMoneyTip'], nil, 5)
config:AddConfigEntry(main, "abrevK", "toggle", L['abrevK'], nil, 6)
config:AddConfigEntry(main, "abrevM", "toggle", L['abrevM'], nil, 6)
config:AddConfigEntry(main, "showLog", "toggle", L['showLog'], nil, 7)
end