Commit dc9d814faa59914d3c51c95c53c1152d8252b150

Authored by zhouhaihai
1 parent f603a60f

邮件

src/GlobalVar.lua
... ... @@ -146,4 +146,30 @@ DinerTask = {
146 146 DishWithGoldType = 4,
147 147 SellDishRare = 5,
148 148 DishWithGoldRare = 6,
149   -}
150 149 \ No newline at end of file
  150 +}
  151 +
  152 +SettingEnum = {
  153 + BgMusic = 1, -- 背景音乐
  154 + EffectMusic = 2, -- 音效
  155 + CV = 3, -- cv
  156 +}
  157 +
  158 +SettingStatus = {
  159 + [1] = {
  160 + [1] = 1, -- 开启
  161 + [0] = 1, -- 关闭
  162 + ["default"] = 1, -- 默认设置
  163 + },
  164 + [2] = {
  165 + [1] = 1, -- 开启
  166 + [0] = 1, -- 关闭
  167 + ["default"] = 1, -- 默认设置
  168 + },
  169 + [3] = {
  170 + [1] = 1, -- 开启
  171 + [0] = 1, -- 关闭
  172 + ["default"] = 1, -- 默认设置
  173 + },
  174 +}
  175 +
  176 +EMAIL_LIMIT = 50 --邮件最大数量
... ...
src/ProtocolCode.lua
... ... @@ -35,6 +35,11 @@ actionCodes = {
35 35 Role_chatRpc = 120,
36 36 Role_chat = 121,
37 37 Role_chatGet = 122,
  38 + Role_changeNameRpc = 123,
  39 + Role_changeIntroRpc = 124,
  40 + Role_changeSettingRpc = 125,
  41 + Role_drawCodeRpc = 126,
  42 + Role_changeHeadRpc = 127,
38 43  
39 44 Adv_startAdvRpc = 151,
40 45 Adv_startHangRpc = 152,
... ... @@ -143,6 +148,13 @@ actionCodes = {
143 148 Store_rechargeRpc = 550,
144 149 Store_dailyBuyRpc = 551,
145 150 Store_dinerBuyRpc = 552,
  151 +
  152 + Email_listRpc = 600,
  153 + Email_drawAllAttachRpc = 601,
  154 + Email_drawAttachRpc = 602,
  155 + Email_checkRpc = 603,
  156 + Email_delRpc = 604,
  157 +
146 158 }
147 159  
148 160 rpcResponseBegin = 10000
... ...
src/RedisKeys.lua
... ... @@ -8,6 +8,8 @@ R_PVP = "role:%d:pvp" -- pvp
8 8 R_EQUIP_ROOT = "role:%d:equip*" -- 装备根目录
9 9 R_RUNEIDS = "role:%d:runeIds" -- 玩家拥有符文自增id
10 10 R_RUNE = "role:%d:rune:%d" -- 符文详细信息
  11 +R_EMAIL = "role:%d:emailIds" --邮件列表
  12 +R_EMAIL_ITEM = "email:%d:%d" --邮件
11 13  
12 14  
13 15 -- rank
... ...
src/actions/EmailAction.lua 0 → 100644
... ... @@ -0,0 +1,188 @@
  1 +local _M = {}
  2 +local tarr2tab = table.array2Table
  3 +
  4 +local function loadEmails(roleId)
  5 + local emails = {}
  6 + local rds = string.format(R_EMAIL, roleId)
  7 + local ids = redisproxy:lrange(rds, 0, EMAIL_LIMIT - 1)
  8 + local redret = redisproxy:pipelining(function (red)
  9 + for _, id in ipairs(ids) do
  10 + red:hgetall(string.format("email:%d:%s", roleId, id))
  11 + end
  12 + end)
  13 + for index, id in ipairs(ids) do
  14 + local email = require("models.Email").new({key = string.format("email:%d:%s", roleId, id)})
  15 + if email:load(tarr2tab(redret[index])) then
  16 + table.insert(emails, email)
  17 + end
  18 + end
  19 + return emails
  20 +end
  21 +
  22 +function _M.listRpc(agent, data)
  23 + local role = agent.role
  24 + local roleId = role:getProperty("id")
  25 + local now = skynet.timex()
  26 + local result = {}
  27 + local mid = role:getProperty("sid")
  28 +
  29 + local globalEmail = redisproxy:hget("autoincrement_set", "email")
  30 + globalEmail = tonum(globalEmail)
  31 + local emailSync = role:getProperty("emailSync")
  32 + if globalEmail > emailSync then
  33 + role:setProperty("emailSync", globalEmail)
  34 + emailSync = math.max(emailSync + 1, globalEmail - EMAIL_LIMIT + 1)
  35 + local result = redisproxy:pipelining(function (red)
  36 + for id = emailSync, globalEmail do
  37 + red:hgetall(string.format("globalEmail:%s", id))
  38 + end
  39 + end)
  40 + local count = 1
  41 + for _, data in ipairs(result) do
  42 + local email = tarr2tab(data)
  43 + if tonum(email.createtime) > role:getProperty("ctime")
  44 + and ( not email.mid or tonum(email.mid) == mid )
  45 + and ( not email.endtime or tonum(email.endtime) > now )then
  46 + local time = email.timestamp and tonum(email.timestamp) or email.createtime
  47 + redisproxy:insertEmail({
  48 + roleId = roleId,
  49 + emailId = 0,
  50 + createtime = time,
  51 + title = email.title,
  52 + content = email.content,
  53 + attachments = email.attachments
  54 + })
  55 + --role:log("mail_actions", {desc = "get_global", s1 = email.title, s2 = email.attachments})
  56 + end
  57 + end
  58 + end
  59 +
  60 + local emails = loadEmails(roleId)
  61 + for _, email in ipairs(emails) do
  62 + table.insert(result, email:data())
  63 + end
  64 +
  65 + SendPacket(actionCodes.Email_listRpc, MsgPack.pack(result))
  66 + return true
  67 +end
  68 +
  69 +local function getEmailAttachments( email )
  70 + if email:getProperty("status") == 2 then
  71 + return ""
  72 + end
  73 + local attachments = email:getProperty("attachments")
  74 + if attachments:len() == 0 then
  75 + local rewardPms = email:getProperty("rewardPms")
  76 + local emailData = csvdb["emailCsv"][email:getProperty("emailId")]
  77 + if emailData then
  78 + attachments = emailData.attachment:format(table.unpack(rewardPms))
  79 + end
  80 + end
  81 + return attachments
  82 +end
  83 +
  84 +function _M.drawAllAttachRpc(agent, data)
  85 + local role = agent.role
  86 + local roleId = role:getProperty("id")
  87 +
  88 + local reward = {}
  89 + local ids = {}
  90 +
  91 + local emails = loadEmails(roleId)
  92 + redisproxy:pipelining(function (red)
  93 + for _, email in ipairs(emails) do
  94 + local attachments = getEmailAttachments(email)
  95 + if attachments ~= "" then
  96 + local emailId = email:getProperty("id")
  97 + local items = role:award(attachments)
  98 + ids[emailId] = 1
  99 + red:hset(string.format(R_EMAIL_ITEM, roleId, emailId), "status", 2)
  100 + -- role:log("mail_actions", {desc = "draw_attach", int1 = emailId, s1 = email:getProperty("title"), s2 = attachments})
  101 +
  102 + for key, v in pairs(items) do
  103 + reward[key] = (reward[key] or 0) + v
  104 + end
  105 + end
  106 + end
  107 + end)
  108 +
  109 + SendPacket(actionCodes.Email_drawAllAttachRpc, MsgPack.pack({ids = ids, reward = reward}))
  110 + return true
  111 +end
  112 +
  113 +function _M.drawAttachRpc(agent, data)
  114 + local role = agent.role
  115 + local roleId = role:getProperty("id")
  116 + local msg = MsgPack.unpack(data)
  117 + local id = msg.id
  118 +
  119 + local rds = string.format(R_EMAIL_ITEM, roleId, id)
  120 +
  121 + local email = require("models.Email").new({key = rds})
  122 + if not email:load() then return end
  123 +
  124 + local attachments = getEmailAttachments(email)
  125 + if attachments == "" then return end
  126 +
  127 + local reward = role:award(attachments)
  128 + redisproxy:hset(rds, "status", 2) -- 领取标记
  129 + SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward}))
  130 +
  131 + -- role:log("mail_actions", {desc = "draw_attach", int1 = id, s1 = email:getProperty("title"), s2 = attachments, ucode = ucode})
  132 + return true
  133 +end
  134 +
  135 +function _M.checkRpc(agent, data)
  136 + local role = agent.role
  137 + local roleId = role:getProperty("id")
  138 +
  139 + local msg = MsgPack.unpack(data)
  140 + local id = msg.id
  141 +
  142 + local rds = string.format(R_EMAIL_ITEM, roleId, id)
  143 + if not redisproxy:exists(rds) then return end
  144 +
  145 + redisproxy:hset(rds, "status", 1)
  146 + -- role:log("mail_actions", {desc = "check_mail", int1 = id})
  147 +
  148 + SendPacket(actionCodes.Email_checkRpc, '')
  149 + return true
  150 +end
  151 +
  152 +function _M.delRpc(agent, data)
  153 + local role = agent.role
  154 + local roleId = role:getProperty("id")
  155 +
  156 + local rds = string.format(R_EMAIL, roleId)
  157 + local ids = redisproxy:lrange(rds, 0, EMAIL_LIMIT - 1)
  158 + local now = skynet.timex()
  159 + local result = {}
  160 + local emailSet = csvdb["emailCsv"]
  161 +
  162 + redisproxy:pipelining(function (red)
  163 + for _, id in ipairs(ids) do
  164 + local emailRds = string.format("email:%d:%s", roleId, id)
  165 + local email = require("models.Email").new({key = emailRds})
  166 + if email:load() then
  167 + local status = email:getProperty("status")
  168 + local attachments = email:getProperty("attachments")
  169 + local emailData = emailSet[email:getProperty("emailId")]
  170 + if emailData and attachments:len() == 0 then
  171 + attachments = emailData.attachment
  172 + end
  173 + if status == 2 or (status == 1 and attachments:len() == 0) then
  174 + red:lrem(rds, 0, id)
  175 + red:del(emailRds)
  176 + result[tonum(id)] = 1
  177 + end
  178 + end
  179 + end
  180 + end)
  181 + -- for delId, _ in ipairs(result) do
  182 + -- role:log("mail_actions", {desc = "del_mail", int1 = delId})
  183 + -- end
  184 + SendPacket(actionCodes.Email_delRpc, MsgPack.pack({result = result}))
  185 + return true
  186 +end
  187 +
  188 +return _M
0 189 \ No newline at end of file
... ...
src/actions/RoleAction.lua
... ... @@ -277,7 +277,7 @@ function _M.createRpc(agent, data)
277 277 key = string_format("role:%d", roleId),
278 278 id = roleId,
279 279 uid = tostring(msg.uid),
280   - subId = msg.subId or 0,
  280 + sid = msg.subId or 0,
281 281 name = roleName,
282 282 uname = msg.uname or "",
283 283 device = tostring(msg.device)
... ... @@ -294,16 +294,85 @@ function _M.createRpc(agent, data)
294 294 return true
295 295 end
296 296  
  297 + newRole:award(globalCsv.birthItem)
297 298 -- 欢迎邮件
298 299 -- redisproxy:insertEmail({roleId = roleId, emailId = 1})
299 300 -- redisproxy:insertEmail({roleId = roleId, emailId = 2})
300 301  
301   - newRole:log("create", { ip = agent.ip, ucode = ucode})
  302 + newRole:log("create", { ip = agent.ip})
302 303  
303 304 SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response))
304 305 return true
305 306 end
306 307  
  308 +function _M.changeNameRpc(agent, data)
  309 + local role = agent.role
  310 + local roleId = role:getProperty("id")
  311 + local msg = MsgPack.unpack(data)
  312 +
  313 + local newName = msg.name
  314 + local oldName = role:getProperty("name")
  315 +
  316 + if not newName or type(newName) ~= "string" then return end
  317 + if newName == oldName then return end
  318 + -- 检查name是否合法
  319 + local checked = validName(newName)
  320 + if checked ~= "ok" then
  321 + --[[
  322 + "existed" 已经存在
  323 + "illegal" 包含非法字符
  324 + ]]
  325 + local errCodes = {
  326 + ["existed"] = 1,
  327 + ["illegal"] = 2
  328 + }
  329 + SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = errCodes[checked]}))
  330 + return true
  331 + end
  332 +
  333 + if not roleId then
  334 + SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 3}))
  335 + return true
  336 + end
  337 +
  338 + local result = redisproxy:setnx(string_format("user:%s", newName), roleId)
  339 + if result == 0 then
  340 + SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 1}))
  341 + return true
  342 + end
  343 + redisproxy:pipelining(function (red)
  344 + red:del(string_format("user:%s", oldName))
  345 + red:set(string_format("uid:%s", role:getProperty("uid")), newName)
  346 + end)
  347 +
  348 + role:updateProperties({
  349 + ["name"] = newName,
  350 + })
  351 + SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 0}))
  352 + return true
  353 +end
  354 +
  355 +function _M.changeIntroRpc(agent, data)
  356 + local role = agent.role
  357 + local roleId = role:getProperty("id")
  358 + local msg = MsgPack.unpack(data)
  359 + local content = msg.content
  360 + if not content or type(content) ~= "string" then return end
  361 +
  362 + local SERV = string_format("CHATED%d", math.random(1, 5))
  363 + local legal, mod = skynet.call(SERV, "lua", "check", content)
  364 + if not legal then
  365 + content = mod or ""
  366 + end
  367 +
  368 + if content == "" then
  369 + role:updateProperty({field = "intro", value = content})
  370 + end
  371 +
  372 + SendPacket(actionCodes.Role_changeIntroRpc, '')
  373 + return true
  374 +end
  375 +
307 376 function _M.syncTimeRpc(agent, data)
308 377 SendPacket(actionCodes.Role_syncTimeRpc, MsgPack.pack({nowTime = skynet.timex()}))
309 378 return true
... ... @@ -703,4 +772,86 @@ function _M.chatGet(agent, data)
703 772 return true
704 773 end
705 774  
  775 +
  776 +function _M.changeSettingRpc(agent, data)
  777 + local role = agent.role
  778 + local msg = MsgPack.unpack(data)
  779 +
  780 + local id = msg.id
  781 + local status = msg.status
  782 +
  783 + local statusEnum = SettingStatus[id]
  784 + if not statusEnum then return 1 end
  785 +
  786 + if not statusEnum[status] then return 2 end
  787 +
  788 + local setting = role:getProperty("setting")
  789 + setting[id] = status
  790 + role:updateProperty({field = "setting", value = setting})
  791 +
  792 + SendPacket(actionCodes.Role_changeSettingRpc, '')
  793 + return true
  794 +end
  795 +
  796 +function _M.drawCodeRpc(agent, data)
  797 + local msg = MsgPack.unpack(data)
  798 + local codeurl = skynet.getenv("codeurl")
  799 + local role = agent.role
  800 + local msg = MsgPack.unpack(data)
  801 + local code = msg.code
  802 +
  803 + if type(code) ~= "string" then return end
  804 + if code:find("[^0-9a-zA-Z]") then return end
  805 +
  806 + local codestr = role:getProperty("codeStr")
  807 + local content = {
  808 + ["platformId"] = role:getProperty("sid"),
  809 + ["code"] = code,
  810 + ["itemIds"] = codestr,
  811 + ["key"] = "zhaolugame20170831",
  812 + }
  813 + local status, body = httpc.get(codeurl, "/libaoma?" .. httpGetFormatData(content), {})
  814 + if status == 200 then
  815 + local result = json.decode(body)
  816 + local ret = tonum(result.ret)
  817 + if ret == 0 then
  818 + local giftId = tonumber(result.giftId)
  819 + role:setProperty("codeStr", codestr:setv(giftId, 1))
  820 + local reward = role:award(result.gift)
  821 +
  822 + SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({
  823 + result = ret,
  824 + reward = reward,
  825 + }))
  826 + return true
  827 + end
  828 + -- 1 不存在的礼包码
  829 + -- 2 已经领取过相同类型物品
  830 + -- 3 领取数量达到上限
  831 + -- 4 过期了
  832 + SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({result = ret}))
  833 + return true
  834 + end
  835 + SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({result = -1}))
  836 + return true
  837 +end
  838 +
  839 +function _M.changeHeadRpc(agent, data)
  840 + local role = agent.role
  841 + local msg = MsgPack.unpack(data)
  842 +
  843 + local id = msg.id
  844 + local icon = csvdb["player_iconCsv"][id]
  845 + if not icon then
  846 + return
  847 + end
  848 + if role:getItemCount(id) < 1 then
  849 + return
  850 + end
  851 + role:updateProperty({field = "headId" ,value = id})
  852 + SendPacket(actionCodes.Role_changeHeadRpc, "")
  853 + return true
  854 +end
  855 +
  856 +
706 857 return _M
707 858 \ No newline at end of file
... ...
src/models/Email.lua 0 → 100644
... ... @@ -0,0 +1,56 @@
  1 +local Email = class("Email", require("shared.ModelBase"))
  2 +
  3 +function Email:ctor(properties)
  4 + Email.super.ctor(self, properties)
  5 +end
  6 +
  7 +Email.schema = {
  8 + key = {"string"}, -- redis key
  9 + id = {"number", 0}, -- 数据库ID
  10 + emailId = {"number", 0}, -- 邮件csv ID
  11 + title = {"string", ""}, -- 邮件标题
  12 + content = {"string", ""}, -- 邮件正文
  13 + attachments = {"string", ""},
  14 + status = {"number", 0}, -- 邮件状态: 未读, 已读, 已领取
  15 + createtime = {"number", skynet.timex()},
  16 + contentPms = {"table", {}},
  17 + rewardPms = {"table", {}},
  18 +}
  19 +
  20 +function Email:data()
  21 + local emailId = self:getProperty("emailId")
  22 + local title = self:getProperty("title")
  23 + local content = self:getProperty("content")
  24 + local attachments = self:getProperty("attachments")
  25 + local contentPms = self:getProperty("contentPms")
  26 + local rewardPms = self:getProperty("rewardPms")
  27 +
  28 + local emailData = csvdb["emailCsv"][emailId]
  29 +
  30 + if emailData then
  31 + -- 如果内容是直接插入到数据库
  32 + if content == "" and emailData.body ~= "" then
  33 + content = io.readfile("src/" .. emailData.body)
  34 + content = content:format(table.unpack(contentPms))
  35 + end
  36 +
  37 + if title == "" and emailData.title ~= "" then
  38 + title = emailData.title
  39 + end
  40 +
  41 + if attachments == "" and emailData.attachment ~= "" then
  42 + attachments = emailData.attachment:format(table.unpack(rewardPms))
  43 + end
  44 + end
  45 +
  46 + return {
  47 + id = self:getProperty("id"),
  48 + status = self:getProperty("status"),
  49 + createtime = self:getProperty("createtime"),
  50 + title = title,
  51 + content = content,
  52 + attachments = attachments,
  53 + }
  54 +end
  55 +
  56 +return Email
0 57 \ No newline at end of file
... ...
src/models/Role.lua
... ... @@ -27,6 +27,7 @@ Role.schema = {
27 27 id = {"number"},
28 28 uid = {"string", ""},
29 29 name = {"string", ""},
  30 + intro = {"string", ""},
30 31 headId = {"number", 3201},
31 32 sid = {"number", 0},
32 33 device = {"string", ""},
... ... @@ -38,6 +39,8 @@ Role.schema = {
38 39 sversion = {"number", globalCsv.StructVersion or 0}, -- 重整数据版本
39 40 diamond = {"number", 0},
40 41 reDiamond = {"number", 0},
  42 + setting = {"table", {}}, --设置
  43 + codeStr = {"string", ""}, --已经领过的礼包码
41 44 -- roleInfo
42 45 level = {"number", 1},
43 46 exp = {"number", 0},
... ... @@ -111,6 +114,8 @@ Role.schema = {
111 114 dinerS = {"table", {}}, -- 美食币商城 购买记录 {[id] = count}
112 115  
113 116 rmbC = {"number", 0}, -- 人民币重置额
  117 +
  118 + emailSync = {"number", 0}, -- 已经同步到的邮件Id
114 119 }
115 120  
116 121  
... ... @@ -212,7 +217,9 @@ function Role:data()
212 217 return {
213 218 id = self:getProperty("id"),
214 219 name = self:getProperty("name"),
  220 + intro = self:getProperty("intro"),
215 221 headId = self:getProperty("headId"),
  222 + setting = self:getProperty("setting"),
216 223 level = self:getProperty("level"),
217 224 exp = self:getProperty("exp"),
218 225 items = self:getProperty("items"):toNumMap(),
... ...
src/models/RolePlugin.lua
... ... @@ -895,6 +895,90 @@ function RolePlugin.bind(Role)
895 895 pvpTBVC = self:getTeamBattleValue(team.heros),
896 896 })
897 897 end
  898 +
  899 + -- update
  900 + function Role:onRecoverTimer(now)
  901 + self:checkNewEvent(now)
  902 + end
  903 +
  904 + local function breath(sec)
  905 + local last_breath = 0
  906 + return function (now)
  907 + if now >= last_breath then
  908 + last_breath = now + sec
  909 + return true
  910 + end
  911 + return false
  912 + end
  913 + end
  914 + local breathes = {
  915 + ["email"] = breath(120), -- email
  916 + }
  917 + function Role:checkNewEvent(now)
  918 + if now - self:getProperty("ltime") < 5 then
  919 + return
  920 + end
  921 +
  922 + local checks = {}
  923 + -- 检查全局邮件 -- 增加邮件红点
  924 + checks["email"] = function()
  925 + local mid = self:getProperty("sid")
  926 + local result = redisproxy:hmget("autoincrement_set", "email", "emailTimestamp")
  927 + local globalEmail = tonum(result[1])
  928 + local timestamp = tonum(result[2])
  929 + local emailSync = self:getProperty("emailSync")
  930 + if globalEmail > emailSync and timestamp > self:getProperty("ctime") then
  931 + local emailSync = math.max(emailSync + 1, globalEmail - EMAIL_LIMIT + 1)
  932 + local redret = redisproxy:pipelining(function (red)
  933 + for id = emailSync, globalEmail do
  934 + red:hgetall(string.format("globalEmail:%s", id))
  935 + end
  936 + end)
  937 + for _, data in ipairs(redret) do
  938 + local email = tarr2tab(data)
  939 + if tonum(email.createtime) > self:getProperty("ctime")
  940 + and ( not email.mid or tonum(email.mid) == mid )
  941 + and ( not email.endtime or tonum(email.endtime) > now )then
  942 + return true
  943 + end
  944 + end
  945 + end
  946 +
  947 + local roleId = self:getProperty("id")
  948 + local email_rds = string.format(R_EMAIL, roleId)
  949 +
  950 + local emailIds = redisproxy:lrange(email_rds, 0, EMAIL_LIMIT - 1) or {}
  951 + local redret = redisproxy:pipelining(function (red)
  952 + for _, id in ipairs(emailIds) do
  953 + red:hget(string.format(R_EMAIL_ITEM, roleId, id), "status")
  954 + end
  955 + end)
  956 + for index, id in ipairs(emailIds) do
  957 + if tonumber(redret[index]) == 0 then
  958 + return true
  959 + end
  960 + end
  961 + end
  962 +
  963 + local events = {}
  964 + for name, breath in pairs(breathes) do
  965 + if breath(now) and checks[name] then
  966 + local status = checks[name]()
  967 + if status then
  968 + if status == true then
  969 + events[name] = 1
  970 + else
  971 + events[name] = status
  972 + end
  973 + end
  974 + end
  975 + end
  976 +
  977 + if next(events) then
  978 + SendPacket(actionCodes.Role_notifyNewEvent, MsgPack.pack({events = events}))
  979 + end
  980 + end
  981 +
898 982 end
899 983  
900 984 return RolePlugin
901 985 \ No newline at end of file
... ...
src/rdsscripts/RedisScripts.lua
1 1 local _M = {}
2 2  
3   -_M["rankDetails"] = {
4   - file = "src/rdsscripts/rankDetails.lua",
5   - sha1 = nil,
6   -}
7 3 _M["insertEmail"] = {
8 4 file = "src/rdsscripts/insertEmail.lua",
9 5 sha1 = nil,
10 6 }
11   -_M["refreshAssist"] = {
12   - file = "src/rdsscripts/refreshAssist.lua",
13   - sha1 = nil,
14   -}
15   -_M["assistInfo"] = {
16   - file = "src/rdsscripts/assistInfo.lua",
17   - sha1 = nil,
18   -}
19 7  
20 8 return _M
21 9 \ No newline at end of file
... ...
src/rdsscripts/assistInfo.lua deleted
... ... @@ -1,55 +0,0 @@
1   -local roleId = tonumber(KEYS[1])
2   -
3   -local formationJson = redis.call("hget", string.format("role:%d", roleId), "pveFormationJson")
4   -
5   -local formation = cjson.decode(formationJson)
6   -
7   -local function formatAttrEx(str)
8   - local tb = {}
9   - for k, v in str:gmatch("([%d.]+)=([%d.]+)") do
10   - tb[#tb+1] = {tonumber(k), tonumber(v)}
11   - end
12   - return tb
13   -end
14   -
15   -local function formatEquips(str)
16   - local tb = {}
17   - for k, v in str:gmatch("([%d.]+)=([%d.]+)") do
18   - tb[tonumber(k)] = tonumber(v)
19   - end
20   - return tb
21   -end
22   -
23   -local heroFields = {"type", "level", "star", "evolveCount", "wake", "breakLevel", "equips"}
24   -local equipFields = {"type", "level", "evolCount", "attrEx"}
25   -for _, hero in ipairs(formation.heros) do
26   - if hero.leader then
27   - local heroInfo = redis.call("hmget", string.format("hero:%d:%d", roleId, hero.id), unpack(heroFields))
28   - local equipstr = heroInfo[7]
29   - local equips = {}
30   - for part, equipId in equipstr:gmatch("(%d+)=(%d+)") do
31   - part, equipId = tonumber(part), tonumber(equipId)
32   - if equipId ~= 0 then
33   - local equipInfo = redis.call("hmget", string.format("equip:%d:%d", roleId, equipId), unpack(equipFields))
34   - equips[equipId] = {}
35   - for index, value in ipairs(equipInfo) do
36   - equips[equipId][equipFields[index]] = index ~= 4 and tonumber(value) or formatAttrEx(equipInfo[4] or "")
37   - end
38   - end
39   - end
40   - return cmsgpack.pack {
41   - type = tonumber(heroInfo[1]),
42   - level = tonumber(heroInfo[2]),
43   - star = tonumber(heroInfo[3]),
44   - evolveCount = tonumber(heroInfo[4]),
45   - wake = tonumber(heroInfo[5]),
46   - breakLevel = tonumber(heroInfo[6]),
47   - equips = formatEquips(heroInfo[7]),
48   - equipDtls = equips,
49   - }
50   - end
51   -end
52   -
53   -return cmsgpack.pack {}
54   -
55   -
src/rdsscripts/insertEmail.lua
1   -local con1 = KEYS[4] or ""
2   -local con2 = KEYS[5] or ""
3   -local con3 = KEYS[6] or ""
4   -local att1 = KEYS[7] or ""
5   -local att2 = KEYS[8] or ""
6   -local att3 = KEYS[9] or ""
7   -local title = KEYS[10] or ""
8   -local content = KEYS[11] or ""
9   -local attachments = KEYS[12] or ""
  1 +local EMAIL_LIMIT = KEYS[1]
  2 +local roleId = KEYS[2]
  3 +local emailId = KEYS[3] or 0
  4 +local createTime = KEYS[4]
  5 +local con = KEYS[5] or cmsgpack.pack({})
  6 +local att = KEYS[6] or cmsgpack.pack({})
  7 +local title = KEYS[7] or ""
  8 +local content = KEYS[8] or ""
  9 +local attachments = KEYS[9] or ""
10 10  
11   --- local roleInfo = redis.call("HGET", string.format("role:%d", KEYS[1]), "delete")
  11 +
  12 +-- local roleInfo = redis.call("HGET", string.format("role:%d", roleId), "delete")
12 13  
13 14 -- if tonumber(roleInfo) == 1 then return end
14 15  
15   -local id = redis.call("HINCRBY", string.format("role:%d:autoincr", KEYS[1]), "email", 1)
16   -redis.call("LPUSH", string.format("role:%d:emailIds", KEYS[1]), id)
17   -local deleteIds = redis.call("LRANGE", string.format("role:%d:emailIds", KEYS[1]), 50, -1)
  16 +local id = redis.call("HINCRBY", string.format("role:%d:autoincr", roleId), "email", 1)
  17 +redis.call("LPUSH", string.format("role:%d:emailIds", roleId), id)
  18 +local deleteIds = redis.call("LRANGE", string.format("role:%d:emailIds", roleId), EMAIL_LIMIT, -1)
18 19 for _, deleteId in ipairs(deleteIds) do
19   - redis.call("DEL", string.format("email:%d:%d", KEYS[1], deleteId))
  20 + redis.call("DEL", string.format("email:%d:%d", roleId, deleteId))
20 21 end
21 22  
22   -redis.call("LTRIM", string.format("role:%d:emailIds", KEYS[1]), 0, 49)
23   -redis.call("HMSET", string.format("email:%d:%d", KEYS[1], id), "id", tostring(id), "emailId", KEYS[2],
24   - "status", "0", "createtime", KEYS[3],
25   - "con1", con1, "con2", con2, "con3", con3,
26   - "att1", att1, "att2", att2, "att3", att3,
27   - "title", title, "content", content, "attachments", attachments)
  23 +redis.call("LTRIM", string.format("role:%d:emailIds", roleId), 0, EMAIL_LIMIT - 1)
  24 +redis.call("HMSET", string.format("email:%d:%d", roleId, id),
  25 + "id", tostring(id),
  26 + "emailId", emailId,
  27 + "status", "0",
  28 + "createtime", createTime,
  29 + "contentPms", con,
  30 + "rewardPms", att,
  31 + "title", title,
  32 + "content", content,
  33 + "attachments", attachments
  34 +)
... ...
src/rdsscripts/rankDetails.lua deleted
... ... @@ -1,30 +0,0 @@
1   -local field = KEYS[1]
2   -local roleId = tonumber(KEYS[2])
3   -
4   -local formationJson = redis.call("hget", string.format("role:%d", roleId), field .. "FormationJson")
5   -
6   -local formation = cjson.decode(formationJson)
7   -
8   -local response = {formation = {}, heros = {}}
9   -
10   -if formation.heros then
11   - for _, hero in ipairs(formation.heros) do
12   - table.insert(response.formation, hero.id)
13   - end
14   -end
15   -
16   -local heroIds = redis.call("smembers", string.format("role:%d:heroIds", roleId))
17   -
18   -local heroFields = {"type", "level", "star", "evolveCount", "wake", "breakLevel"}
19   -for _, heroId in ipairs(heroIds) do
20   - local heroId = tonumber(heroId)
21   - local heroInfo = redis.call("hmget", string.format("hero:%d:%d", roleId, heroId), unpack(heroFields))
22   -
23   - local tb = {}
24   - for k, v in ipairs(heroInfo) do
25   - tb[heroFields[k]] = tonumber(v)
26   - end
27   - response.heros[heroId] = tb
28   -end
29   -
30   -return cmsgpack.pack(response)
31 0 \ No newline at end of file
src/rdsscripts/refreshAssist.lua deleted
... ... @@ -1,58 +0,0 @@
1   -local roleId = tonumber(KEYS[1])
2   -
3   -local friendKey = "role:%d:friend"
4   -local assistKey = "role:%d:assist"
5   -
6   -local function formatTable(tbl)
7   - local t = {}
8   - for _, id in ipairs(tbl) do
9   - t[tonumber(id)] = 1
10   - end
11   - return t
12   -end
13   -
14   -local friendIds = redis.call("smembers", friendKey:format(roleId))
15   -local assistIds = formatTable(redis.call("smembers", assistKey:format(roleId)))
16   -
17   -local heroFields = {"type", "level", "star", "evolveCount", "wake", "breakLevel", "battleValue", "dress"}
18   -local function getLeader(id, formation)
19   - for _, hero in ipairs(formation.heros) do
20   - if hero.leader then
21   - local heroInfo = redis.call("hmget", string.format("hero:%d:%d", id, hero.id), unpack(heroFields))
22   - return {
23   - type = tonumber(heroInfo[1]),
24   - level = tonumber(heroInfo[2]),
25   - star = tonumber(heroInfo[3]),
26   - evolveCount = tonumber(heroInfo[4]),
27   - wake = tonumber(heroInfo[5]),
28   - breakLevel = tonumber(heroInfo[6]),
29   - battleValue = tonumber(heroInfo[7]),
30   - dress = tonumber(heroInfo[8]),
31   - }
32   - end
33   - end
34   -end
35   -
36   -local response = {}
37   -for _, id in ipairs(friendIds) do
38   - id = tonumber(id)
39   - local dtls = redis.call("hmget", string.format("role:%d", id),
40   - "name", "level", "vip", "pveFormationJson")
41   - local formation = cjson.decode(dtls[4])
42   - local leader = getLeader(id, formation)
43   - if leader then
44   - table.insert(response, {
45   - roleId = id,
46   - name = dtls[1],
47   - level = tonumber(dtls[2]),
48   - vip = tonumber(dtls[3]),
49   - leader = leader,
50   - used = assistIds[id] or 0,
51   - })
52   - end
53   -end
54   -
55   -return cmsgpack.pack(response)
56   -
57   -
58   -
src/services/agent_util.lua
... ... @@ -84,7 +84,7 @@ function _M:update(agent)
84 84 nextCheckTime = now + HEART_TIMER_INTERVAL
85 85 end
86 86 pcall(check_daily_reset, agent, now)
87   - -- pcall(role.onRecoverTimer, role, now)
  87 + pcall(role.onRecoverTimer, role, now)
88 88 end
89 89  
90 90 function _M:heart_beat(agent)
... ...
src/services/redisd.lua
... ... @@ -13,17 +13,6 @@ function command.open(conf)
13 13 db = conf.redisdb or 0,
14 14 auth = conf.auth,
15 15 })
16   -
17   - --[[
18   - local csvdata = require("csvdata.world_boss_battle")
19   - for i=1, #csvdata do
20   - for j=1, #csvdata[i] do
21   - db:del(string.format("boss:%d:%d", i, j))
22   - end
23   - end
24   - --]]
25   - db:del("rtpvp")
26   -
27 16 end
28 17  
29 18 skynet.start(function()
... ...
src/shared/redisproxy.lua
... ... @@ -51,21 +51,15 @@ function redisproxy:insertEmail(params)
51 51 roleId = params.roleId,
52 52 emailId = params.emailId,
53 53 createtime = params.createtime or skynet.timex(),
54   - con1 = params.con1 or "",
55   - con2 = params.con2 or "",
56   - con3 = params.con3 or "",
57   - att1 = params.att1 or "",
58   - att2 = params.att2 or "",
59   - att3 = params.att3 or "",
  54 + con = params.con or {},
  55 + att = params.att or {},
60 56 title = params.title or "",
61 57 content = params.content or "",
62 58 attachments = params.attachments or "",
63 59 }
64   - self:runScripts("insertEmail", 12,
  60 + self:runScripts("insertEmail", 9, EMAIL_LIMIT,
65 61 pms.roleId, pms.emailId, pms.createtime,
66   - pms.con1, pms.con2, pms.con3,
67   - pms.att1, pms.att2, pms.att3,
68   - pms.title, pms.content, pms.attachments)
  62 + MsgPack.pack(pms.con), MsgPack.pack(pms.att), pms.title, pms.content, pms.attachments)
69 63 return true
70 64 end
71 65  
... ...