forked from rilgamon/zz_Money
167 lines
4.9 KiB
Lua
Executable File
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') |