From f382b4f2d6c0c26c00e4423bb40e85aed53920c1 Mon Sep 17 00:00:00 2001 From: zqj <582132116@qq.com> Date: Mon, 26 Jul 2021 19:01:38 +0800 Subject: [PATCH] fix: 一番赏的抽奖bug --- src/actions/CapsuleAction.lua | 12 +++++++++--- src/models/Capsule.lua | 21 ++++++++++++--------- src/models/RolePlugin.lua | 13 +++++++++---- src/services/capsuled.lua | 20 ++++++++++++++------ 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/actions/CapsuleAction.lua b/src/actions/CapsuleAction.lua index 7a24dd9..d43d125 100644 --- a/src/actions/CapsuleAction.lua +++ b/src/actions/CapsuleAction.lua @@ -82,6 +82,7 @@ function _M.registerRpc(agent, data) local capsuleId = msg.capsule_id local ret = skynet.call(agent.capsule_serv, "lua", "register", roleId, capsuleId) + if not ret then return 1 end SendPacket(actionCodes.Capsule_registerRpc, MsgPack.pack(ret)) return true end @@ -93,16 +94,21 @@ function _M.drawRpc(agent, data) local capsuleId = msg.capsule_id local typ = msg.typ --0=独享,1= 公开 local full = msg.full -- 0=单次,1=十连抽 2=全收 - local continue = msg.continue--确认次数。 local cares = msg.cares local ret, reward, change if typ == 1 then - ret, reward = skynet.call(agent.capsule_serv, "lua", "draw_capsule", roleId, capsuleId, full, continue, cares) + ret, reward = skynet.call(agent.capsule_serv, "lua", "draw_capsule", roleId, capsuleId, full, cares) else ret, reward = role:drawCapsule(capsuleId, full, cares) end - if ret <= 4 then return ret end + if ret < 4 then + return ret + end + + if ret == 4 then + SendPacket(actionCodes.Capsule_drawRpc, MsgPack.pack(reward)) + end reward, change = role:award(reward, {log = {desc = "CapsuleReward", int1 = capsuleId, int2 = roleId}}) dump(reward) diff --git a/src/models/Capsule.lua b/src/models/Capsule.lua index 3099bb1..3cc51b4 100644 --- a/src/models/Capsule.lua +++ b/src/models/Capsule.lua @@ -188,21 +188,23 @@ function Capsule:join(roleId) local register = self:getProperty("register") or {} register[roleId] = 0 self:setProperty("register", register) - return true + return self:data(roleId) end -function Capsule:isRegister(roleId) +function Capsule:getRegisterByRoleId(roleId) local register = self:getProperty("register") or {} - return register[roleId] == 1 + return register[roleId] or 0 +end + +function Capsule:isRegister(roleId) + return self:getRegisterByRoleId(roleId) == 1 end function Capsule:register(roleId) local register = self:getProperty("register") or {} - if next(register) then - register[roleId] = 1 - return true - end - return false + register[roleId] = 1 + self:setProperty("register", register) + return self:data(roleId) end function Capsule:exit(roleId) @@ -776,7 +778,7 @@ function Capsule:draw(roleId, full, cares) end -function Capsule:data() +function Capsule:data(roleId) return { id = self:getProperty("id"), room = self:getProperty("room"), @@ -784,6 +786,7 @@ function Capsule:data() name = self:getProperty("name"), coin = self:getProperty("coin"), onlineCount = self:getOnlineCount(), + playerStatus = self:getRegisterByRoleId(roleId), record = self:getProperty("record"), --recordByRole = self:getProperty("recordByRole"), rank = self:getProperty("rank"), diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index afe1be0..143edf6 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -829,11 +829,16 @@ function RolePlugin.bind(Role) for _, key in pairs(res) do local capsule = require("models.Capsule").new({ key = CAPSULE_ROLE:format(roleId,tonumber(key))}) capsule:load() - if capsule:refreshing(now) then - capsule:init() - capsule:create() + if capsule:isShow() then + if capsule:refreshing(now) then + capsule:init() + capsule:create() + end + self.capsules[key] = capsule + else + redisproxy:del(CAPSULE_ROLE:format(roleId, tonumber(key))) + redisproxy:srem(CAPSULE_ID_ROLE, key) end - self.capsules[key] = capsule end for _, data in pairs(csvdb["ichibankuji_mainCsv"]) do diff --git a/src/services/capsuled.lua b/src/services/capsuled.lua index 3067646..f7a56d3 100644 --- a/src/services/capsuled.lua +++ b/src/services/capsuled.lua @@ -61,7 +61,7 @@ local function add(roleId, capsuleId) if next(capsule) then capsule:join(roleId) broadCastCapsule(roleId, capsuleId, {changeType = NotifyChangeType.JOIN, roleId = roleId}) - return capsule:data() + return capsule:data(roleId) end print("id 不存在: ".. capsuleId) return nil @@ -95,8 +95,8 @@ function CMD.start() end capsules[key] = capsule else - redisproxy.del(CAPSULE_PUBLIC:format(tonumber(key))) - redisproxy.srem(CAPSULE_INFO, key) + redisproxy:del(CAPSULE_PUBLIC:format(tonumber(key))) + redisproxy:srem(CAPSULE_INFO, key) end end @@ -109,7 +109,7 @@ function CMD.start() capsule:init() capsule:create() capsules[key] = capsule - redisproxy.sadd(CAPSULE_INFO, key) + redisproxy:sadd(CAPSULE_INFO, key) end end end @@ -145,10 +145,10 @@ function CMD.exit(roleId, capsuleId) end end -function CMD.draw_capsule(roleId, capsuleId, typ, cares) +function CMD.draw_capsule(roleId, capsuleId, full, cares) local capsule = capsules[capsuleId] or {} if next(capsule) then - local ret, reward, notify = capsule:draw(roleId, typ, cares) + local ret, reward, notify = capsule:draw(roleId, full, cares) --if ret > 4 then -- broadCastCapsule(roleId, capsuleId, {changeType = NotifyChangeType.DRAW, roleId = roleId, notify = notify}) --end @@ -157,6 +157,14 @@ function CMD.draw_capsule(roleId, capsuleId, typ, cares) return nil end +function CMD.register(roleId, capsuleId) + local capsule = capsules[capsuleId] or {} + if next(capsule) then + return capsule:register(roleId) + end + return nil +end + skynet.start(function() skynet.dispatch("lua", function(session, address, cmd, ...) local f = CMD[string.lower(cmd)] -- libgit2 0.21.2