275 lines
7.2 KiB
Plaintext
Executable File
275 lines
7.2 KiB
Plaintext
Executable File
--#include "data\config\mail\MailEventConfig.txt" once --触发事件发邮件
|
|
|
|
|
|
--邮件通用接口
|
|
--nActorId 玩家Id
|
|
--sTitle 标题
|
|
--sContent 内容
|
|
--awardTable 奖励表
|
|
--[[
|
|
awardTable =
|
|
{
|
|
{type = 0, id = 1, count = 1, quality = 1, qualityDataIndex = 1, strong = 1, bind = 1,}
|
|
}
|
|
]]--
|
|
mailAttachCount = 5
|
|
function SendMail(nActorId, sTitle,sContent,awardTable)
|
|
if nActorId == 0 then
|
|
print("SendMail error,nActorId =0")
|
|
return
|
|
end
|
|
if not sTitle or not sContent then
|
|
print("SendMail error,sTitle or sContent = nil")
|
|
return
|
|
end
|
|
if not awardTable or type(awardTable) ~= "table" then
|
|
System.sendSysMail(nActorId, sTitle, sContent)
|
|
--print("SendMail error,awardTable nil or not a table")
|
|
return
|
|
end
|
|
local nAwardCount = #awardTable
|
|
local nCurCount = 0
|
|
local splitTable = {}
|
|
if nAwardCount == 0 or nAwardCount < mailAttachCount then
|
|
System.sendSysMail(nActorId, sTitle, sContent, awardTable)
|
|
else
|
|
for i=1,nAwardCount do
|
|
nCurCount = nCurCount + 1
|
|
table.insert(splitTable, awardTable[i])
|
|
if i == nAwardCount or nCurCount >= mailAttachCount then --超过5个附件分开发
|
|
System.sendSysMail(nActorId, sTitle, sContent, splitTable)
|
|
nCurCount = 0
|
|
splitTable = {}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--跨服邮件
|
|
function SendCrossServerMail(nActorId,sTitle,sContent,awardTable)
|
|
if not sTitle or not sContent then
|
|
print("SendMail error,sTitle or sContent = nil")
|
|
return
|
|
end
|
|
if not awardTable or type(awardTable) ~= "table" then
|
|
System.sendCrossServerMail(nActorId, sTitle, sContent)
|
|
--print("SendMail error,awardTable nil or not a table")
|
|
return
|
|
end
|
|
local nAwardCount = #awardTable
|
|
local nCurCount = 0
|
|
local splitTable = {}
|
|
if nAwardCount == 0 or nAwardCount < mailAttachCount then
|
|
System.sendCrossServerMail(nActorId, sTitle, sContent, awardTable)
|
|
else
|
|
for i=1,nAwardCount do
|
|
nCurCount = nCurCount + 1
|
|
table.insert(splitTable, awardTable[i])
|
|
if i == nAwardCount or nCurCount >= mailAttachCount then --超过5个附件分开发
|
|
System.sendCrossServerMail(nActorId, sTitle, sContent, splitTable)
|
|
nCurCount = 0
|
|
splitTable = {}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--在线发邮件,可带职业,性别等筛选条件
|
|
function SendMailEx(sysarg, sTitle, sContent, awardTable)
|
|
local nActorId = Actor.getActorId(sysarg)
|
|
local useAwardTable = {}
|
|
for i,v in ipairs(awardTable) do
|
|
local isUse = true
|
|
if v.sex ~= nil and v.sex ~= -1 and v.sex ~= Actor.getIntProperty(sysarg,PROP_ACTOR_SEX) then --有性别要求
|
|
isUse = false
|
|
end
|
|
if v.job ~= nil and v.job ~= 0 and v.job ~= Actor.getIntProperty(sysarg, PROP_ACTOR_VOCATION) then --有职业要求
|
|
isUse = false
|
|
end
|
|
if isUse then
|
|
table.insert(useAwardTable,v)
|
|
end
|
|
end
|
|
SendMail(nActorId, sTitle, sContent, useAwardTable)
|
|
end
|
|
|
|
|
|
function TestMail(sysarg,mailCount)
|
|
local mailCount = tonumber(mailCount) or 1
|
|
local nActorId = Actor.getActorId(sysarg)
|
|
local sTitle1 = "标题"
|
|
local sContent1 = "内容"
|
|
|
|
for i=1,mailCount do
|
|
local awardTable =
|
|
{
|
|
{type = 0, id = 281 , count = 1, sex = 0},
|
|
{type = 0, id = 281 , count = 2, sex =1},
|
|
{type = 11, id = 0 , count = 100*i, job=1 },
|
|
{type = 21, id = 0 , count = 100*i, job=2},
|
|
{type = 31, id = 0 , count = 100*i, job=3},
|
|
}
|
|
local sTitle = sTitle1..i
|
|
local sContent = sContent1 ..i
|
|
SendMailEx(sysarg, sTitle, sContent, awardTable)
|
|
end
|
|
end
|
|
|
|
|
|
--触发邮件事件
|
|
function OnMailEvent( sysarg, mailEventId, value1, value2 )
|
|
--print("OnMailEvent, mailEventId="..mailEventId..", value1="..value1..", value2="..value2)
|
|
local eventcfg = MailEventCfg[mailEventId]
|
|
if not eventcfg then --无此事件的配置
|
|
return
|
|
end
|
|
|
|
if not eventcfg.isUse then --此事件不使用了
|
|
return
|
|
end
|
|
|
|
local mailCfg = GetElemMatch2Cond(eventcfg.mails, value1, value2) --搜索匹配的事件配置
|
|
if mailCfg then
|
|
SendMail( Actor.getActorId(sysarg), mailCfg.title, mailCfg.content, mailCfg.awards )
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--[[
|
|
离线玩家邮件
|
|
GlobalMailData[AtvId]
|
|
{
|
|
maxId ,--邮件id
|
|
offlineMail[1...]
|
|
{
|
|
sTitle --邮件标题
|
|
content -- 邮件内容
|
|
awards[]
|
|
{
|
|
type, --类型
|
|
id, --id
|
|
count, --数量
|
|
}
|
|
}
|
|
}
|
|
]]--
|
|
--获取玩家数据
|
|
function GetGlobalMailData(nActorId)
|
|
if nActorId == nil then
|
|
assert(false)
|
|
end
|
|
local var = System.getStaticVar();
|
|
if var.GlobalMailData == nil then
|
|
var.GlobalMailData = {}
|
|
end
|
|
|
|
if var.GlobalMailData[nActorId] == nil then
|
|
var.GlobalMailData[nActorId] = {}
|
|
end
|
|
|
|
return var.GlobalMailData[nActorId]
|
|
end
|
|
|
|
|
|
--发送usedata 类型的奖励
|
|
function SendUserDataMail(nActorId, sTitle,sContent,useDataTable)
|
|
if nActorId == 0 then
|
|
print("SendMail error,nActorId =0")
|
|
return
|
|
end
|
|
if not sTitle or not sContent then
|
|
print("SendMail error,sTitle or sContent = nil")
|
|
return
|
|
end
|
|
if not useDataTable then
|
|
print("SendMail error,useDataTable = nil")
|
|
return
|
|
end
|
|
local awardTable = {}
|
|
for v, _ in Ipairs(useDataTable) do
|
|
local mail ={}
|
|
mail.type = useDataTable[v].type
|
|
mail.id =useDataTable[v].id
|
|
mail.count =useDataTable[v].count
|
|
table.insert(awardTable, mail)
|
|
end
|
|
|
|
local nAwardCount = #awardTable
|
|
local nCurCount = 0
|
|
local splitTable = {}
|
|
if nAwardCount == 0 or nAwardCount < mailAttachCount then
|
|
System.sendSysMail(nActorId, sTitle, sContent, awardTable)
|
|
else
|
|
for i=1,nAwardCount do
|
|
nCurCount = nCurCount + 1
|
|
table.insert(splitTable, awardTable[i])
|
|
if i == nAwardCount or nCurCount >= mailAttachCount then --超过5个附件分开发
|
|
System.sendSysMail(nActorId, sTitle, sContent, splitTable)
|
|
nCurCount = 0
|
|
splitTable = {}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--触发邮件
|
|
function LoginCheckMail( sysarg)
|
|
local actorid = Actor.getActorId(sysarg);
|
|
local maildata = GetGlobalMailData(actorid);
|
|
if maildata.offlineMail == nil then
|
|
return
|
|
end
|
|
for v, infos in Ipairs(maildata.offlineMail) do
|
|
--print("infos.."..v);
|
|
local mail = maildata.offlineMail[v]
|
|
if mail then
|
|
print("LoginCheckMail, nActorId="..actorid..", title="..(mail.sTitle or 0)..", Content="..(mail.content or 0))
|
|
if mail.sTitle and mail.content then
|
|
SendUserDataMail( actorid, mail.sTitle, mail.content, mail.awards )
|
|
end
|
|
end
|
|
end
|
|
maildata.offlineMail = nil;--清空
|
|
end
|
|
|
|
|
|
--触发邮件
|
|
function AddOfflineMail( nActorId, title, Content, nCount,...)
|
|
print("AddOfflineMail, nActorId="..nActorId..", title="..title..", Content="..Content," nCount="..nCount)
|
|
local maildata = GetGlobalMailData(nActorId);
|
|
if maildata.offlineMail == nil then
|
|
maildata.offlineMail = {}
|
|
end
|
|
|
|
if maildata.offlineMail.maxId == nil then
|
|
maildata.offlineMail.maxId = 0
|
|
end
|
|
|
|
maildata.offlineMail.maxId = maildata.offlineMail.maxId + 1
|
|
|
|
local maxId = maildata.offlineMail.maxId;
|
|
|
|
maildata.offlineMail[maxId] = {}
|
|
--print("maxId"..maxId);
|
|
|
|
local offline = maildata.offlineMail[maxId];
|
|
offline.sTitle = title;
|
|
offline.content = Content;
|
|
offline.awards = {};
|
|
local arg={...}
|
|
for i,v in ipairs(arg) do
|
|
local index = i % 3;
|
|
local inType = math.ceil(i / 3);
|
|
if offline.awards[inType] == nil then
|
|
offline.awards[inType] = {}
|
|
end
|
|
--print("vv.."..v.."..inType.."..inType)
|
|
if index == 1 then
|
|
offline.awards[inType].type = v; --类型
|
|
elseif index == 2 then
|
|
offline.awards[inType].id = v;
|
|
else
|
|
offline.awards[inType].count = v;
|
|
end
|
|
end
|
|
end
|