zz_Money/banker.lua

167 lines
4.9 KiB
Lua
Executable File

local addonName, addon = ...
local childName = addon['childName']
local child = addon[childName]
local db, mailSum, mailRec, player, dbb, dbr, dbf, L, faction, realm
local events = child['events']
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 lastframe = posFrame
local function GetFactionList()
local n,m,_
local l = {}
if(addon['db']['sv']['profileKeys']) then
for k,v in pairs(addon['db']['sv']['profileKeys']) do
n,_,m = strsplit(' ',k,3)
if(n) then
m = string.gsub(m, "%s+", "")
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(child: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
local init = {
Setup = function(self)
player = UnitName('player')
L = child['storage']['L']
db = child['storage']['db']
dbr = child['storage']['dbr']
dbf = child['storage']['dbf']
dbb = dbf['banker']
faction = child['storage']['faction']
realm = child['storage']['realm']
end
}
addon.RegisterCallback(init, format("Init%s", childName), 'Setup')