dc9d814f
zhouhaihai
邮件
|
1
2
3
4
5
|
local _M = {}
local tarr2tab = table.array2Table
local function loadEmails(roleId)
local emails = {}
|
2ca93972
liuzujun
添加邮件表
|
6
7
8
9
|
local res = mysqlproxy:query(string.format("SELECT * FROM `Email` WHERE `roleId` = %s", roleId))
for _, data in ipairs(res) do
local email = require("models.Email").new({key = string.format("%d",data.id), id=data.id})
if email:load(data) then
|
dc9d814f
zhouhaihai
邮件
|
10
11
12
13
14
15
|
table.insert(emails, email)
end
end
return emails
end
|
2ca93972
liuzujun
添加邮件表
|
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
local function delExpireEmails(roleId)
local sql = [[
DELETE FROM Email
WHERE id IN (
SELECT id FROM (
SELECT id
FROM Email WHERE roleId=%s
ORDER BY createtime DESC, id desc
LIMIT %s, 100000
) a
);
]]
sql = string.format(sql, roleId, EMAIL_LIMIT)
mysqlproxy:query(sql)
end
|
dc9d814f
zhouhaihai
邮件
|
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
function _M.listRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local now = skynet.timex()
local result = {}
local mid = role:getProperty("sid")
local globalEmail = redisproxy:hget("autoincrement_set", "email")
globalEmail = tonum(globalEmail)
local emailSync = role:getProperty("emailSync")
if globalEmail > emailSync then
role:setProperty("emailSync", globalEmail)
emailSync = math.max(emailSync + 1, globalEmail - EMAIL_LIMIT + 1)
local result = redisproxy:pipelining(function (red)
for id = emailSync, globalEmail do
red:hgetall(string.format("globalEmail:%s", id))
end
end)
local count = 1
for _, data in ipairs(result) do
local email = tarr2tab(data)
|
62ed4275
liuzujun
添加新的延時類型郵件
|
53
54
55
56
57
58
59
60
61
|
-- 0 需要判斷創角時間小於郵件創建時間 1 只需要在時間段內登陸即可領取
local delayType = tonum(email.delayType)
local flag = false
if delayType == 1 then
flag = skynet.timex() > tonum(email.createtime)
else
flag = tonum(email.createtime) > role:getProperty("ctime")
end
if flag and ( not email.mid or tonum(email.mid) == mid )
|
dc9d814f
zhouhaihai
邮件
|
62
|
and ( not email.endtime or tonum(email.endtime) > now )then
|
1fc9c12a
zhouhaihai
or
|
63
|
local time = math.max(tonum(email.timestamp, 0) , tonum(email.createtime))
|
2ca93972
liuzujun
添加邮件表
|
64
|
mysqlproxy:insertEmail({
|
dc9d814f
zhouhaihai
邮件
|
65
66
67
68
|
roleId = roleId,
emailId = 0,
createtime = time,
title = email.title,
|
eb4b0152
zhouhaihai
邮件增加 stitle
|
69
|
stitle = email.stitle,
|
dc9d814f
zhouhaihai
邮件
|
70
71
72
|
content = email.content,
attachments = email.attachments
})
|
f22a33af
zhouhaihai
自己的日志
|
73
|
role:mylog("mail_action", {desc = "get_global", key1 = email.title, key2 = email.attachments})
|
dc9d814f
zhouhaihai
邮件
|
74
75
76
|
end
end
end
|
2ca93972
liuzujun
添加邮件表
|
77
|
delExpireEmails(roleId)
|
dc9d814f
zhouhaihai
邮件
|
78
79
80
81
82
83
|
local emails = loadEmails(roleId)
for _, email in ipairs(emails) do
table.insert(result, email:data())
end
|
94edf97b
zhouhaihai
邮件
|
84
|
SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result}))
|
dc9d814f
zhouhaihai
邮件
|
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
return true
end
local function getEmailAttachments( email )
if email:getProperty("status") == 2 then
return ""
end
local attachments = email:getProperty("attachments")
if attachments:len() == 0 then
local rewardPms = email:getProperty("rewardPms")
local emailData = csvdb["emailCsv"][email:getProperty("emailId")]
if emailData then
attachments = emailData.attachment:format(table.unpack(rewardPms))
end
end
return attachments
end
function _M.drawAllAttachRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
|
7bb30dca
zhouhaihai
修改发奖
|
107
|
local reward, change = {}
|
dc9d814f
zhouhaihai
邮件
|
108
109
110
|
local ids = {}
local emails = loadEmails(roleId)
|
39bcd7ca
zhouhaihai
LOG
|
111
112
113
|
for _, email in ipairs(emails) do
local attachments = getEmailAttachments(email)
if attachments ~= "" then
|
6136eaca
liuzujun
添加好友表
|
114
|
email:setProperty("status", 2, true)
|
39bcd7ca
zhouhaihai
LOG
|
115
|
email:log(role, 2)
|
a3e69a31
zhouhaihai
缺了 id 来源
|
116
|
ids[email:getProperty("id")] = 1
|
39bcd7ca
zhouhaihai
LOG
|
117
118
|
for key, v in pairs(attachments:toNumMap()) do
reward[key] = (reward[key] or 0) + v
|
dc9d814f
zhouhaihai
邮件
|
119
|
end
|
f22a33af
zhouhaihai
自己的日志
|
120
|
role:mylog("mail_action", {desc = "draw_attach", int1 = email:getProperty("emailId"), key1 = email:getProperty("title"), key2 = attachments})
|
dc9d814f
zhouhaihai
邮件
|
121
|
end
|
39bcd7ca
zhouhaihai
LOG
|
122
|
end
|
7bb30dca
zhouhaihai
修改发奖
|
123
124
|
reward, change = role:award(reward, {log = {desc = "draw_attach"}})
SendPacket(actionCodes.Email_drawAllAttachRpc, MsgPack.pack({ids = ids, reward = reward, change = change}))
|
dc9d814f
zhouhaihai
邮件
|
125
126
127
128
129
130
131
132
133
|
return true
end
function _M.drawAttachRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local id = msg.id
|
dc9d814f
zhouhaihai
邮件
|
134
|
|
2ca93972
liuzujun
添加邮件表
|
135
|
local email = require("models.Email").new({key = string.format("%d", id), id = id})
|
dc9d814f
zhouhaihai
邮件
|
136
137
138
139
140
|
if not email:load() then return end
local attachments = getEmailAttachments(email)
if attachments == "" then return end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
141
|
local reward, change = role:award(attachments, {log = {desc = "draw_attach", int1 = id}})
|
6136eaca
liuzujun
添加好友表
|
142
|
email:setProperty("status", 2, true)
|
39bcd7ca
zhouhaihai
LOG
|
143
|
email:log(role, 2)
|
7bb30dca
zhouhaihai
修改发奖
|
144
|
SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward, change = change}))
|
f22a33af
zhouhaihai
自己的日志
|
145
|
role:mylog("mail_action", {desc = "draw_attach", int1 = id, key1 = email:getProperty("title"), key2 = attachments})
|
dc9d814f
zhouhaihai
邮件
|
146
147
148
149
150
151
152
153
154
155
|
return true
end
function _M.checkRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local id = msg.id
|
2ca93972
liuzujun
添加邮件表
|
156
|
local email = require("models.Email").new({key = string.format("%d", id), id = id})
|
39bcd7ca
zhouhaihai
LOG
|
157
|
if not email:load() then return end
|
dc9d814f
zhouhaihai
邮件
|
158
|
|
6136eaca
liuzujun
添加好友表
|
159
|
email:setProperty("status", 1, true)
|
39bcd7ca
zhouhaihai
LOG
|
160
|
email:log(role, 1)
|
f22a33af
zhouhaihai
自己的日志
|
161
|
role:mylog("mail_action", {desc = "check_mail", int1 = id})
|
dc9d814f
zhouhaihai
邮件
|
162
163
164
165
166
167
168
169
|
SendPacket(actionCodes.Email_checkRpc, '')
return true
end
function _M.delRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
|
dc9d814f
zhouhaihai
邮件
|
170
|
local result = {}
|
2ca93972
liuzujun
添加邮件表
|
171
172
173
174
175
176
177
178
179
|
local tmp = {}
local emails = loadEmails(roleId)
for _, email in ipairs(emails) do
local attachments = getEmailAttachments(email)
if email:getProperty("status") == 2 or (attachments == "" and email:getProperty("status") == 1) then
result[email:getProperty("id")] = 1
email:log(role, 3)
table.insert(tmp, email:getProperty("id"))
|
dc9d814f
zhouhaihai
邮件
|
180
|
end
|
2ca93972
liuzujun
添加邮件表
|
181
182
183
184
|
end
mysqlproxy:query(string.format("DELETE FROM `Email` WHERE `id` in (%s)", table.concat(tmp, ",")))
|
f22a33af
zhouhaihai
自己的日志
|
185
186
187
|
for delId, _ in ipairs(result) do
role:mylog("mail_action", {desc = "del_mail", int1 = delId})
end
|
dc9d814f
zhouhaihai
邮件
|
188
189
190
191
192
|
SendPacket(actionCodes.Email_delRpc, MsgPack.pack({result = result}))
return true
end
return _M
|