From a8424e2050deff68652d7630d4b669ecee150c93 Mon Sep 17 00:00:00 2001 From: rilgamon Date: Fri, 12 Mar 2021 01:01:03 +0100 Subject: [PATCH] modify and add files for zz2 --- banker.lua | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++ broker.lua | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++ helper.lua | 67 ++++++++++++++++++++++ prefs.lua | 74 ++++++++++++++++++++++++ 4 files changed, 468 insertions(+) create mode 100644 banker.lua create mode 100644 broker.lua create mode 100644 helper.lua create mode 100644 prefs.lua diff --git a/banker.lua b/banker.lua new file mode 100644 index 0000000..023ef58 --- /dev/null +++ b/banker.lua @@ -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 diff --git a/broker.lua b/broker.lua new file mode 100644 index 0000000..6cd7976 --- /dev/null +++ b/broker.lua @@ -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 +} diff --git a/helper.lua b/helper.lua new file mode 100644 index 0000000..24593cf --- /dev/null +++ b/helper.lua @@ -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 \ No newline at end of file diff --git a/prefs.lua b/prefs.lua new file mode 100644 index 0000000..766208d --- /dev/null +++ b/prefs.lua @@ -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 \ No newline at end of file