diff --git a/src/actions/CapsuleAction.lua b/src/actions/CapsuleAction.lua index f95b5ae..4703ac7 100644 --- a/src/actions/CapsuleAction.lua +++ b/src/actions/CapsuleAction.lua @@ -135,8 +135,8 @@ function _M.drawRpc(agent, data) return ret end - dump(reward) - dump(rewardByGoods) + --dump(rewardByGoods) + --dump(capsule) if ret == 5 then SendPacket(actionCodes.Capsule_drawRpc, MsgPack.pack({change = reward, capsule = capsule})) @@ -153,15 +153,16 @@ function _M.drawRpc(agent, data) return true end -function _M.getData(agent, data) +function _M.getDataRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local capsuleId = msg.capsule_id local typ = msg.typ --0=独享,1= 公开 + local roleId = role:getProperty("id") local capsule if typ == 1 then - capsule = skynet.call(agent.capsule_serv, "lua", "capsule_data", capsuleId) + capsule = skynet.call(agent.capsule_serv, "lua", "capsule_data", roleId, capsuleId) else capsule = role:getCapsuleData(capsuleId) end diff --git a/src/models/Capsule.lua b/src/models/Capsule.lua index 29e8433..2b878fd 100644 --- a/src/models/Capsule.lua +++ b/src/models/Capsule.lua @@ -86,7 +86,7 @@ function Capsule:init() for _, data in pairs(csvdb["ichibankuji_goodsCsv"]) do for _, val in pairs(data) do if val.key == goods_id then - goods[goods_id..val.id] = clone(val) + goods[goods_id] = clone(val) end end end @@ -304,13 +304,41 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) return rewardByRole, count end -function Capsule:getTop(record) + +local rewardToNtyFunc = function(notify, tmpReward) + for key, val in pairs(tmpReward or {}) do + if not notify[key] then + notify[key] = clone(val) + else + for k, v in pairs(val) do + if not notify[key][k] then + notify[key][k] = v + else + notify[key][k] = notify[key][k].amount + v.amount + end + end + + end + end +end + +local function getRecordAmount(record) + local amount = 0 + for _, v in ipairs(record) do + amount = amount + v.amount + end + return amount +end + + +function Capsule:getTop(record, recordAmount,now) local spKey, special = self:checkSpecialFlag(SpecialType.TOP) if not special then return nil end local specials = self:getProperty("specials") or {} local specialsRecord = self:getProperty("specialsRecord") or {} - if #record < special["np"] then return nil end + if recordAmount < special["np"] then return nil end + local topRecord = {} local count = special["np"] for _, v in ipairs(record) do @@ -332,18 +360,20 @@ function Capsule:getTop(record) end end - local rewardByRole, count = getSpecialRoleNotify(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP) + local rewardByRole, count = getSpecialRoleNotify(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP,now) special["amount"] = count specials[spKey] = special - specialsRecord[SpecialType.TOP] = rewardByRole + + rewardToNtyFunc(specialsRecord, rewardByRole) + self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end --TODO -function Capsule:getCore(record) +function Capsule:getCore(record, recordAmount,now) local spKey, special = self:checkSpecialFlag(SpecialType.CORE) if not special then return nil end @@ -353,10 +383,10 @@ function Capsule:getCore(record) if self:getGoodsAmount() > 0 then return nil end local np = special["np"] - if np > #record then return nil end + if np > recordAmount then return nil end - local left = math.ceil((np - #record)/2) or 0 + local left = math.ceil((np - recordAmount)/2) or 0 local count = np local roleRecord = {} for i, v in ipairs(record) do @@ -380,16 +410,17 @@ function Capsule:getCore(record) end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], SpecialType.CORE) + local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.CORE,now) special["amount"] = count specials[spKey] = special - specialsRecord[SpecialType.CORE] = rewardByRole + + rewardToNtyFunc(specialsRecord, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -function Capsule:getLast(record) +function Capsule:getLast(record,now) local spKey, special = self:checkSpecialFlag(SpecialType.LAST) if not special then return nil end @@ -422,16 +453,17 @@ function Capsule:getLast(record) end end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], SpecialType.LAST) + local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.LAST,now) special["amount"] = count specials[spKey] = special - specialsRecord[SpecialType.LAST] = rewardByRole + + rewardToNtyFunc(specialsRecord, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -function Capsule:getJoker(record) +function Capsule:getJoker(record,now) local spKey, special = self:checkSpecialFlag(SpecialType.JOKER) if not special then return nil end @@ -449,16 +481,17 @@ function Capsule:getJoker(record) end end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], SpecialType.JOKER) + local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.JOKER,now) special["amount"] = count specials[spKey] = special - specialsRecord[SpecialType.JOKER] = rewardByRole + + rewardToNtyFunc(specialsRecord, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -function Capsule:getKing(record) +function Capsule:getKing(record,now) local spKey, special = self:checkSpecialFlag(SpecialType.KING) if not special then return nil end @@ -476,31 +509,15 @@ function Capsule:getKing(record) end end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], SpecialType.KING) + local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.KING,now) special["amount"] = count specials[spKey] = special - specialsRecord[SpecialType.KING] = rewardByRole + + rewardToNtyFunc(specialsRecord, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -local rewardToNtyFunc = function(notify, tmpReward) - for key, val in pairs(tmpReward or {}) do - if not notify[key] then - notify[key] = val - else - for k, v in pairs(val) do - if not notify[key][k] then - notify[key][k] = v - else - notify[key][k] = notify[key][k].amount + v.amount - end - end - - end - end -end - function Capsule:checkSpecialReward( now) local specials = self:getProperty("specials") or {} if not next(specials) then return nil end @@ -509,19 +526,25 @@ function Capsule:checkSpecialReward( now) if not next(record) then return nil end table.sort(record, function(a, b) return a.create_time < b.create_time end ) + local recordAmount = getRecordAmount(record) - local notify = self:getTop(record) or {} + local notify = self:getTop(record, recordAmount,now) or {} - local coreReward = self:getCore(record) + dump(notify) + local coreReward = self:getCore(record, recordAmount, now) + dump(coreReward) rewardToNtyFunc(notify, coreReward) - local lastReward = self:getLast(record) + local lastReward = self:getLast(record, now) + dump(lastReward) rewardToNtyFunc(notify, lastReward) - local jokerReward = self:getJoker(record) + local jokerReward = self:getJoker(record, now) + dump(jokerReward) rewardToNtyFunc(notify, jokerReward) - local kingReward = self:getKing(record) + local kingReward = self:getKing(record, now) + dump(kingReward) rewardToNtyFunc(notify, kingReward) diff --git a/src/services/capsuled.lua b/src/services/capsuled.lua index f50ec67..b509ceb 100644 --- a/src/services/capsuled.lua +++ b/src/services/capsuled.lua @@ -195,9 +195,9 @@ function CMD.goods_stock(capsuleId) return capsule:getGoodsAmount(), capsule:getProperty("token") end -function CMD.capsule_data(capsuleId) +function CMD.capsule_data(roleId, capsuleId) local capsule = capsules[capsuleId] or {} - return capsule:data() + return capsule:data(roleId) end skynet.start(function() -- libgit2 0.21.2