From a35233c6bf15892238d8948aca89b4dea8307af8 Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Tue, 24 Dec 2019 15:37:50 +0800 Subject: [PATCH] 保底和回馈 --- src/GlobalVar.lua | 2 +- src/ProtocolCode.lua | 1 + src/actions/HeroAction.lua | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- src/models/Role.lua | 5 +++++ 4 files changed, 70 insertions(+), 5 deletions(-) diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index e1253fe..2ed6ed9 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -172,4 +172,4 @@ SettingStatus = { }, } -EMAIL_LIMIT = 50 --邮件最大数量 +EMAIL_LIMIT = 20 --邮件最大数量 diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 33c29e4..64d5fe7 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -76,6 +76,7 @@ actionCodes = { Hero_createHeroRandomRpc = 218, Hero_getResetRewardRpc = 219, Hero_drawHeroRpc = 220, + Hero_repayHeroRpc = 221, Hang_startRpc = 251, Hang_checkRpc = 252, diff --git a/src/actions/HeroAction.lua b/src/actions/HeroAction.lua index 48dc2de..6b000cf 100644 --- a/src/actions/HeroAction.lua +++ b/src/actions/HeroAction.lua @@ -743,9 +743,12 @@ function _M.drawHeroRpc(agent, data) local resultPool = {} local fillPoolFunc = { - unitRate = function() + unitRate = function(fixRare, fixCamp, fixJob) local condition = {"rare", "camp", "job"} local values = randomDrawCondition(csvdb["build_unitCsv"][pool], condition) + values[1] = fixRare or values[1] + values[2] = fixCamp or values[2] + values[3] = fixJob or values[3] fillDrawPool(pool, resultPool, function(itemData) if itemData.type ~= ItemType.Hero then return end local heroData = csvdb["unitCsv"][itemData.id - ItemStartId.Hero] @@ -756,9 +759,12 @@ function _M.drawHeroRpc(agent, data) return true end) end, - fragmentRate = function() + fragmentRate = function(fixRare, fixCamp, fixJob) local condition = {"rare", "camp", "job"} local values = randomDrawCondition(csvdb["build_fragmentCsv"][pool], condition) + values[1] = fixRare or values[1] + values[2] = fixCamp or values[2] + values[3] = fixJob or values[3] fillDrawPool(pool, resultPool, function(itemData) if itemData.type ~= ItemType.HeroFragment then return end local heroData = csvdb["unitCsv"][itemData.id] @@ -778,16 +784,29 @@ function _M.drawHeroRpc(agent, data) } role:costItems(cost) + local floorHeroCount = role:getProperty("floorHero")[pool] or 0 local ssrCount = 0 local reward = {} for i = 1, drawCount[drawType] do + floorHeroCount = floorHeroCount + 1 resultPool = {} + local isFloorBack = globalCsv.draw_floor_back_counts[pool] and floorHeroCount >= globalCsv.draw_floor_back_counts[pool] while not next(resultPool) do - local rateType = math.randWeight(typePool, 1) + local rateType + + if isFloorBack then + rateType = 1 --保底英雄 + else + rateType = math.randWeight(typePool, 1) + end if not fillPoolFunc[rateTypes[rateType]] then return 4 end - fillPoolFunc[rateTypes[rateType]]() + if isFloorBack then + fillPoolFunc[rateTypes[rateType]](4) -- 保底 + else + fillPoolFunc[rateTypes[rateType]]() + end end local idx = math.randWeight(resultPool, 3) @@ -796,6 +815,7 @@ function _M.drawHeroRpc(agent, data) if itemData.type == ItemType.Hero and itemData.quality == 4 then ssrCount = ssrCount + 1 + floorHeroCount = 0 end if itemData.type == ItemType.Hero and role:isHaveHero(itemData.id - ItemStartId.Hero) then @@ -810,12 +830,51 @@ function _M.drawHeroRpc(agent, data) end end + if globalCsv.draw_floor_back_counts[pool] then + local floorHero = role:getProperty("floorHero") + floorHero[pool] = floorHeroCount + role:updateProperty({field = "floorHero", value = floorHero}) + end + + local repayHero = role:getProperty("repayHero") + repayHero = math.min(globalCsv.draw_super_repay_count, repayHero + drawCount[drawType]) + role:updateProperty({field = "repayHero", value = repayHero}) + role:checkTaskEnter("DrawHero", {pool = pool, count = drawCount[drawType]}) if ssrCount > 0 then role:checkTaskEnter("DrawSSR", {count = ssrCount}) end + SendPacket(actionCodes.Hero_drawHeroRpc, MsgPack.pack({reward = reward})) -- 这个 reward 是数组 return true end +function _M.repayHeroRpc(agent, data) + local role = agent.role + + local repayHero = role:getProperty("repayHero") + if repayHero < globalCsv.draw_super_repay_count then + return + end + + role:updateProperty({field = "repayHero", value = 0}) + local id = math.randWeight(csvdb["build_giftCsv"], "pool_1") + + local reward = {} + local itemData = csvdb["itemCsv"][id] + if itemData.type == ItemType.Hero and role:isHaveHero(itemData.id - ItemStartId.Hero) then + local fragId = itemData.id - ItemStartId.Hero + local heroData = csvdb["unitCsv"][fragId] + local count = globalCsv.draw_unit_tofragment[heroData.rare] + role:award({[fragId] = count}) + reward = {id = fragId, count = count, from = id, fcount = 1} + else + role:award({[id] = 1}) + reward = {id = id, count = 1} + end + + SendPacket(actionCodes.Hero_repayHeroRpc, MsgPack.pack({reward = reward})) + return true +end + return _M \ No newline at end of file diff --git a/src/models/Role.lua b/src/models/Role.lua index 69a4354..c1538e7 100644 --- a/src/models/Role.lua +++ b/src/models/Role.lua @@ -116,6 +116,9 @@ Role.schema = { rmbC = {"number", 0}, -- 人民币重置额 emailSync = {"number", 0}, -- 已经同步到的邮件Id + + repayHero = {"number", 0}, -- 超级招募 回馈 + floorHero = {"table", {}}, -- 招募保底 -- {[poolId] = count} } @@ -267,6 +270,8 @@ function Role:data() dinerS = self:getProperty("dinerS"), rmbC = self:getProperty("rmbC"), + repayHero = self:getProperty("repayHero"), + floorHero = self:getProperty("floorHero"), } end -- libgit2 0.21.2