Commit da20e3846eeb494e3b599ba8dde71fa5bd7e4996

Authored by zhangqijia
1 parent 01ff9b4b

feat: 一番赏 特殊赏 通知

1. 服务器主动通知 Capsule_notifyChange = 856
2. 客户端主动获获取 Capsule_specialRewardRpc = 857
3. 客户端消除特殊赏通知指令 Capsule_clearSpecialNtyRpc = 862

备注:客户端收到特殊赏的奖励后,都需要消除特殊赏通知。不然特殊赏通知会一直存在。
src/ProtocolCode.lua
... ... @@ -281,11 +281,12 @@ actionCodes = {
281 281 Capsule_drawRpc = 854, --抽扭蛋机
282 282 --Capsule_switchRoomRpc = 855, --切换扭蛋机房间
283 283 Capsule_notifyChange = 856, -- 通知信息变动
284   - Capsule_payReward = 857, -- 特殊赏 奖励通知
  284 + Capsule_specialRewardRpc = 857, -- 获取 未领取特殊赏通知 主动
285 285 Capsule_exitRpc = 858, -- 退出
286 286 Capsule_getDataRpc = 859, --获取扭蛋机信息
287   - Capsule_convertCapsuleRpc = 890, --兑换消耗票
288   - Capsule_pageRecordRpc = 891, --抽奖记录分页查询
  287 + Capsule_convertCapsuleRpc = 860, --兑换消耗票
  288 + Capsule_pageRecordRpc = 861, --抽奖记录分页查询
  289 + Capsule_clearSpecialNtyRpc = 862, --消除特殊赏通知
289 290 }
290 291  
291 292 rpcResponseBegin = 10000
... ...
src/actions/CapsuleAction.lua
... ... @@ -51,7 +51,7 @@ function _M.joinRpc(agent, data)
51 51 if typ == 1 then
52 52 ret = skynet.call(agent.capsule_serv, "lua", "join", roleId, capsuleId)
53 53 elseif typ == 0 then
54   - ret = role:joinCapsule()
  54 + ret = role:joinCapsule(roleId, capsuleId)
55 55 end
56 56 SendPacket(actionCodes.Capsule_joinRpc, MsgPack.pack(ret))
57 57 return true
... ... @@ -143,7 +143,6 @@ function _M.drawRpc(agent, data)
143 143 if drawReward["reward"] and next(drawReward["reward"]) then
144 144 _, change = role:award(drawReward["reward"], {log = {desc = "CapsuleReward", int1 = tonumber(capsuleId), int2 = roleId}})
145 145 drawReward["capsule"] = capsule
146   - dump(drawReward)
147 146 SendPacket(actionCodes.Capsule_drawRpc, MsgPack.pack(drawReward))
148 147 else
149 148 return ret
... ... @@ -162,7 +161,7 @@ function _M.getDataRpc(agent, data)
162 161 if typ == 1 then
163 162 capsule = skynet.call(agent.capsule_serv, "lua", "capsule_data", roleId, capsuleId)
164 163 else
165   - capsule = role:getCapsuleData(capsuleId)
  164 + capsule = role:getCapsuleData(roleId, capsuleId)
166 165 end
167 166 if not capsule then return 1 end
168 167  
... ... @@ -213,4 +212,41 @@ function _M.pageRecordRpc(agent, data)
213 212 return true
214 213 end
215 214  
  215 +function _M.specialRewardRpc(agent, data)
  216 + local role = agent.role
  217 + local msg = MsgPack.unpack(data)
  218 + local capsuleId = msg.capsule_id
  219 + local typ = msg.typ --0=独享,1= 公开
  220 + local roleId = role:getProperty("id")
  221 +
  222 + local ret
  223 + if typ == 1 then
  224 + ret = skynet.call(agent.capsule_serv, "lua", "get_special_nty", roleId, capsuleId)
  225 + else
  226 + ret = role:getSpecialNotify(roleId, capsuleId)
  227 + end
  228 + if not ret or not next(ret) then return 1 end
  229 +
  230 + SendPacket(actionCodes.Capsule_specialRewardRpc, MsgPack.pack({special= ret}))
  231 + return true
  232 +end
  233 +
  234 +function _M.clearSpecialNtyRpc(agent, data)
  235 + local role = agent.role
  236 + local msg = MsgPack.unpack(data)
  237 + local capsuleId = msg.capsule_id
  238 + local typ = msg.typ --0=独享,1= 公开
  239 + local good_ids = msg.good_ids
  240 + local roleId = role:getProperty("id")
  241 +
  242 + local ret
  243 + if typ == 1 then
  244 + ret = skynet.call(agent.capsule_serv, "lua", "clear_special_nty", roleId, capsuleId, good_ids)
  245 + end
  246 + if not ret or not next(ret) then return 1 end
  247 +
  248 + SendPacket(actionCodes.Capsule_clearSpecialNtyRpc, MsgPack.pack({}))
  249 + return true
  250 +end
  251 +
216 252 return _M
217 253 \ No newline at end of file
... ...
src/models/Capsule.lua
... ... @@ -669,8 +669,7 @@ function Capsule:checkIncentive(roleId, name, now)
669 669 incentiveRecord[roleId] = incentiveByRole
670 670 self:setProperty("incentiveRecord", incentiveRecord)
671 671  
672   - --TODO 先屏蔽
673   - return {}
  672 + return incentiveByRole
674 673 end
675 674  
676 675 local rewardCollect = function(reward, goods)
... ... @@ -892,6 +891,40 @@ function Capsule:pageRecord(up, idx)
892 891 return tmpRecord
893 892 end
894 893  
  894 +--检查是否有未领取奖励的通知
  895 +function Capsule:getSpecialNotify(roleId)
  896 + local specialsRecord = self:getProperty("specialsRecord") or {}
  897 + local specialsRecordByRole = specialsRecord[roleId]
  898 + if not specialsRecordByRole then return nil end
  899 +
  900 + local tmp = {}
  901 + for good_id, good in pairs(specialsRecordByRole) do
  902 + if not good.nty or good.nty == 0 then
  903 + tmp[good_id] = good
  904 + end
  905 + end
  906 +
  907 + specialsRecord[roleId] = specialsRecordByRole
  908 + self:setProperty("specialsRecord", specialsRecord)
  909 +
  910 + return tmp
  911 +end
  912 +
  913 +function Capsule:clearSpecialNty(roleId, good_ids)
  914 + local specialsRecord = self:getProperty("specialsRecord") or {}
  915 + local specialsRecordByRole = specialsRecord[roleId]
  916 + if not specialsRecordByRole then return nil end
  917 +
  918 + for _, good_id in ipairs(good_ids) do
  919 + if specialsRecordByRole[good_id] then
  920 + specialsRecordByRole[good_id].nty = 1
  921 + end
  922 + end
  923 +
  924 + specialsRecord[roleId] = specialsRecordByRole
  925 + self:setProperty("specialsRecord", specialsRecord)
  926 +end
  927 +
895 928  
896 929 function Capsule:data(roleId)
897 930 return {
... ...
src/models/RoleCross.lua
... ... @@ -211,7 +211,6 @@ RoleCross.bind = function (Role)
211 211 end
212 212  
213 213 function Role:paySpecialReward(roleId, notify)
214   - dump(notify)
215 214 if notify and next(notify) then
216 215 local reward = {}
217 216 for key, val in pairs(notify) do
... ... @@ -221,6 +220,7 @@ RoleCross.bind = function (Role)
221 220  
222 221 end
223 222 self:award(reward, {log = {desc = "CapsuleReward", int1=roleId}})
  223 + SendPacket(actionCodes.Capsule_notifyChange, MsgPack.pack({special = notify}))
224 224 end
225 225 end
226 226  
... ...
src/models/RolePlugin.lua
... ... @@ -2090,7 +2090,7 @@ function RolePlugin.bind(Role)
2090 2090 local emailSync = math.max(emailSync + 1, globalEmail - EMAIL_LIMIT + 1)
2091 2091 local redret = redisproxy:pipelining(function (red)
2092 2092 for id = emailSync, globalEmail do
2093   - red:hgetall(string.format("globalEmail:%s", id))
  2093 + red:hgetall(string.format("globalEmail:%s", id))
2094 2094 end
2095 2095 end)
2096 2096 for _, data in ipairs(redret) do
... ... @@ -3174,11 +3174,11 @@ function RolePlugin.bind(Role)
3174 3174 return ret, drawReward, capsule:data(roleId)
3175 3175 end
3176 3176  
3177   - function Role:joinCapsule(capsuleId)
  3177 + function Role:joinCapsule(roleId, capsuleId)
3178 3178 local capsule = self.capsules[capsuleId]
3179 3179 if not capsule then return nil end
3180 3180  
3181   - return capsule:data()
  3181 + return capsule:data(roleId)
3182 3182 end
3183 3183  
3184 3184 function Role:checkCapsule(now)
... ... @@ -3197,11 +3197,11 @@ function RolePlugin.bind(Role)
3197 3197 return capsule:getGoodsAmount(), capsule:getProperty("token")
3198 3198 end
3199 3199  
3200   - function Role:getCapsuleData(capsuleId)
  3200 + function Role:getCapsuleData(roleId, capsuleId)
3201 3201 local capsule = self.capsules[capsuleId]
3202 3202 if not capsule then return nil end
3203 3203  
3204   - return capsule:data()
  3204 + return capsule:data(roleId)
3205 3205 end
3206 3206  
3207 3207 function Role:resetCapsule()
... ... @@ -3234,6 +3234,13 @@ function RolePlugin.bind(Role)
3234 3234  
3235 3235 return capsule:pageRecord(up, idx)
3236 3236 end
  3237 +
  3238 + function Role:getSpecialNotify(roleId, capsuleId)
  3239 + local capsule = self.capsules[capsuleId]
  3240 + if not capsule then return nil end
  3241 +
  3242 + return capsule:getSpecialNotify(roleId)
  3243 + end
3237 3244 end
3238 3245  
3239 3246 return RolePlugin
3240 3247 \ No newline at end of file
... ...
src/services/capsuled.lua
... ... @@ -73,7 +73,7 @@ function broadCastSpecial(roleId, capsuleId, broadInfo)
73 73 for id, _ in pairs(register) do
74 74 if id ~= roleId then
75 75 if broadInfo[id] then
76   - rpcRole(id, "paySpecialReward", id, broadInfo[id])
  76 + rpcRole(id, "paySpecialReward", id, broadInfo[id])
77 77 end
78 78 end
79 79 end
... ... @@ -243,6 +243,20 @@ function CMD.page_record(capsuleId, up, idx)
243 243 return capsule:pageRecord(up, idx)
244 244 end
245 245  
  246 +function CMD.get_special_nty(roleId, capsuleId)
  247 + local capsule = capsules[capsuleId]
  248 + if not capsule then skynet.error("not capsule: " .. capsuleId) return nil end
  249 +
  250 + return capsule:getSpecialNotify(roleId)
  251 +end
  252 +
  253 +function CMD.clear_special_nty(roleId, capsuleId, good_ids)
  254 + local capsule = capsules[capsuleId]
  255 + if not capsule then skynet.error("not capsule: " .. capsuleId) return nil end
  256 +
  257 + return capsule:clearSpecialNty(roleId, good_ids)
  258 +end
  259 +
246 260 skynet.start(function()
247 261 skynet.dispatch("lua", function(session, address, cmd, ...)
248 262 local f = CMD[string.lower(cmd)]
... ...