From 078bdb2fca0739af145cd47af2257ec40d93e93e Mon Sep 17 00:00:00 2001 From: zqj <582132116@qq.com> Date: Fri, 6 Aug 2021 11:52:54 +0800 Subject: [PATCH] fix: 一番赏 特殊赏的抽奖记录的数据结构修改 --- src/models/Capsule.lua | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------ src/services/capsuled.lua | 12 +++++------- 2 files changed, 59 insertions(+), 79 deletions(-) diff --git a/src/models/Capsule.lua b/src/models/Capsule.lua index 9f99089..11cb104 100644 --- a/src/models/Capsule.lua +++ b/src/models/Capsule.lua @@ -44,8 +44,8 @@ Capsule.schema = { goods = {"table", {}}, --奖励池 specials = {"table", {}}, --特殊赏 incentive = {"table", {}}, --激励奖 - incentiveRecord = {"table", {}}, --激励奖记录 - specialsRecord= {"table", {}}, --特殊赏领取记录 + incentiveRecord = {"table", {}}, --激励奖记录 {roleId = {}, roleId={}} + specialsRecord= {"table", {}}, --特殊赏领取记录 {1={},2={}} key=触发特殊赏的 抽奖次数, v=特殊赏商品 table resetTimes = {"number", 0}, --每日一次手动重置的机会 hideTime = {"number", 0} , --隐藏时间 drawEndTime = {"number", 0}, --抽完时间 @@ -323,7 +323,7 @@ function Capsule:checkSpecialFlag(typ) return spKey, special end -local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) +local function getSpecialReward(rewardRecord, count, award, spKey, typ, now) local rewardByRole = {} while(count > 0 and next(rewardRecord)) do local roleId = math.randWeight(rewardRecord, "amount") @@ -334,19 +334,9 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) if tmp["amount"] <= 0 then rewardRecord[roleId] = nil end - tmp = rewardByRole[roleId] or {} - if not next(tmp) then - local name = getNameByRoleId(roleId) - tmp[spKey] = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now} - else - if not tmp[spKey] then - local name = getNameByRoleId(roleId) - tmp[spKey] = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now} - else - tmp[spKey].amount = tmp[spKey].amount + 1 - end - end - rewardByRole[roleId] = tmp + local name = getNameByRoleId(roleId) + tmp = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now} + table.insert(rewardByRole, tmp) count = count - 1 end @@ -355,20 +345,11 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) end -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 +local rewardToRecordFunc = function(specialsRecord, recordAmount, rewardByRole) + if not specialsRecord[recordAmount] then + specialsRecord[recordAmount] = rewardByRole + else + table.insert(specialsRecord[recordAmount], rewardByRole) end end @@ -406,12 +387,12 @@ function Capsule:getTop(record, recordAmount,now) end end - local rewardByRole, count = getSpecialRoleNotify(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP,now) + local rewardByRole, count = getSpecialReward(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP,now) special["amount"] = count specials[spKey] = special - rewardToNtyFunc(specialsRecord, rewardByRole) + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole @@ -455,17 +436,17 @@ function Capsule:getCore(record, recordAmount,now) end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.CORE,now) + local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.CORE,now) special["amount"] = count specials[spKey] = special - rewardToNtyFunc(specialsRecord, rewardByRole) + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -function Capsule:getLast(record,now) +function Capsule:getLast(record, recordAmount, now) local spKey, special = self:checkSpecialFlag(SpecialType.LAST) if not special then return nil end @@ -495,17 +476,17 @@ function Capsule:getLast(record,now) end end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.LAST,now) + local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.LAST,now) special["amount"] = count specials[spKey] = special - rewardToNtyFunc(specialsRecord, rewardByRole) + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -function Capsule:getJoker(record,now) +function Capsule:getJoker(record, recordAmount, now) local spKey, special = self:checkSpecialFlag(SpecialType.JOKER) if not special then return nil end @@ -521,17 +502,17 @@ function Capsule:getJoker(record,now) end end - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.JOKER,now) + local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.JOKER,now) special["amount"] = count specials[spKey] = special - rewardToNtyFunc(specialsRecord, rewardByRole) + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end -function Capsule:getKing(record,now) +function Capsule:getKing(record, recordAmount, now) local spKey, special = self:checkSpecialFlag(SpecialType.KING) if not special then return nil end @@ -566,7 +547,7 @@ function Capsule:getKing(record,now) special["amount"] = count specials[spKey] = special - rewardToNtyFunc(specialsRecord, rewardByRole) + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) self:setProperties({specialsRecord = specialsRecord, specials = specials}) return rewardByRole end @@ -585,16 +566,16 @@ function Capsule:checkSpecialReward(now, goodsAmount) if goodsAmount == 0 then local coreReward = self:getCore(record, recordAmount, now) - rewardToNtyFunc(notify, coreReward) + rewardToRecordFunc(notify, recordAmount, coreReward) - local lastReward = self:getLast(record, now) - rewardToNtyFunc(notify, lastReward) + local lastReward = self:getLast(record, recordAmount, now) + rewardToRecordFunc(notify, recordAmount, lastReward) - local jokerReward = self:getJoker(record, now) - rewardToNtyFunc(notify, jokerReward) + local jokerReward = self:getJoker(record, recordAmount, now) + rewardToRecordFunc(notify, recordAmount, jokerReward) - local kingReward = self:getKing(record, now) - rewardToNtyFunc(notify, kingReward) + local kingReward = self:getKing(record, recordAmount, now) + rewardToRecordFunc(notify, recordAmount, kingReward) end return notify @@ -679,22 +660,25 @@ end local rewardCollect = function(reward, goods) for _, v in pairs(goods) do for id, count in pairs(v.award:toNumMap()) do - reward[id] = (reward[id] or 0) + count + reward[id] = (reward[id] or 0) + count * v.amount end end end local rewardCollectByRoleId = function(roleId, reward, goods) local tmp = {} - for key, val in pairs(goods) do - if roleId == key then - for k, v in pairs(val) do + for _, val in pairs(goods) do + for _, v in ipairs(val) do + if v.roleId == roleId then for id, count in pairs(v.award:toNumMap()) do - reward[id] = (reward[id] or 0) + count + reward[id] = (reward[id] or 0) + count * v.amount + end + if not tmp[v.good_id] then + tmp[v.good_id] = v + else + tmp[v.good_id].amount = tmp[v.good_id].amount + v.amount end - end - tmp = val end end return tmp @@ -898,17 +882,16 @@ end --检查是否有未领取奖励的通知 function Capsule:getSpecialNotify(roleId) local specialsRecord = self:getProperty("specialsRecord") or {} - local specialsRecordByRole = specialsRecord[roleId] - if not specialsRecordByRole then return nil end - local tmp = {} - for good_id, good in pairs(specialsRecordByRole) do - if not good.nty or good.nty == 0 then - tmp[good_id] = good + for _, goods in pairs(specialsRecord) do + for _, good in ipairs(goods) do + if good.roleId == roleId then + if not good.nty or good.nty == 0 then + tmp[good.good_id] = good + end + end end end - - specialsRecord[roleId] = specialsRecordByRole self:setProperty("specialsRecord", specialsRecord) return tmp @@ -916,16 +899,15 @@ end function Capsule:clearSpecialNty(roleId, good_ids) local specialsRecord = self:getProperty("specialsRecord") or {} - local specialsRecordByRole = specialsRecord[roleId] - if not specialsRecordByRole then return nil end - - for _, good_id in ipairs(good_ids) do - if specialsRecordByRole[good_id] then - specialsRecordByRole[good_id].nty = 1 + for _, goods in pairs(specialsRecord) do + for _, good in ipairs(goods) do + for _, good_id in ipairs(good_ids) do + if good_id == good.good_id and good.roleId == roleId then + good.nty = 1 + end + end end end - - specialsRecord[roleId] = specialsRecordByRole self:setProperty("specialsRecord", specialsRecord) end diff --git a/src/services/capsuled.lua b/src/services/capsuled.lua index 0afb57e..7b62c03 100644 --- a/src/services/capsuled.lua +++ b/src/services/capsuled.lua @@ -118,13 +118,11 @@ function CMD.reset() for _, val in ipairs(data) do if val.type == 1 then local key = val.id..val.room - if not capsules[key] then - local capsule = require("models.Capsule").new({ key = CAPSULE_PUBLIC:format(key), id= val.id, room = val.room, typ = 1, name=val.name}) - capsule:init() - capsule:create() - capsules[key] = capsule - redisproxy:sadd(CAPSULE_INFO, key) - end + local capsule = require("models.Capsule").new({ key = CAPSULE_PUBLIC:format(key), id= val.id, room = val.room, typ = 1, name=val.name}) + capsule:init() + capsule:create() + capsules[key] = capsule + redisproxy:sadd(CAPSULE_INFO, key) end end end -- libgit2 0.21.2