Commit da20e3846eeb494e3b599ba8dde71fa5bd7e4996
1 parent
01ff9b4b
feat: 一番赏 特殊赏 通知
1. 服务器主动通知 Capsule_notifyChange = 856 2. 客户端主动获获取 Capsule_specialRewardRpc = 857 3. 客户端消除特殊赏通知指令 Capsule_clearSpecialNtyRpc = 862 备注:客户端收到特殊赏的奖励后,都需要消除特殊赏通知。不然特殊赏通知会一直存在。
Showing
6 changed files
with
106 additions
and
15 deletions
Show diff stats
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)] | ... | ... |