diff --git a/src/actions/HeroAction.lua b/src/actions/HeroAction.lua index 690d6ce..e3a3350 100644 --- a/src/actions/HeroAction.lua +++ b/src/actions/HeroAction.lua @@ -762,7 +762,7 @@ function _M.drawHeroRpc(agent, data) -- 开始抽 local resultPool = {} - local function fillDrawPool(fixRare, fixCamp, ssrUp) + local function fillDrawPool(fixRare, fixCamp, ssrUp, floorBack) local condition = {"rare", "camp"} local values = {fixRare, fixCamp} @@ -781,8 +781,16 @@ function _M.drawHeroRpc(agent, data) for _, weight in pairs(lpool) do all = all + weight[1] end - - lpool[4][1] = lpool[4][1] + (ssrUp or 0) * all + --[[ + SSR概率值:初始概率 + 步长概率 + SR概率值:初始概率 * [ (初始概率+R初始概率) - 步长概率 ] /(初始概率+R初始概率) + R概率值:初始概率 * [ (初始概率+SR初始概率) - 步长概率 ] /(初始概率+SR初始概率) + ]] + local ssrAdd = (ssrUp or 0) * all + local last = all - lpool[4][1] + lpool[4][1] = lpool[4][1] + ssrAdd + lpool[3][1] = lpool[3][1] * (last - ssrAdd) / last + lpool[2][1] = lpool[2][1] * (last - ssrAdd) / last end if next(lpool) then @@ -791,7 +799,7 @@ function _M.drawHeroRpc(agent, data) end end - for itemId, oneData in pairs(csvdb["build_poolCsv"]) do + for itemId, oneData in pairs(floorBack and csvdb["build_floorCsv"] or csvdb["build_poolCsv"]) do if oneData["pool_" .. pool] and oneData["pool_" .. pool] ~= "" then local itemData = csvdb["itemCsv"][itemId] while itemData do @@ -839,13 +847,15 @@ function _M.drawHeroRpc(agent, data) local ssrUp = 0 if draw_ssr_up_count_rate then - ssrUp = math.floor(ssrUpCount / draw_ssr_up_count_rate[1]) * draw_ssr_up_count_rate[2] / 100 + ssrUp = math.min(math.floor(ssrUpCount / draw_ssr_up_count_rate[1]) * draw_ssr_up_count_rate[2], draw_ssr_up_count_rate[3]) / 100 end while not next(resultPool) do if isNewerSSR then fillDrawPool(4) -- 新手保底的 ssr elseif isFloorBack then - fillDrawPool(3) -- 保底 sr 【郑斌】明确 + -- 保底 sr 【郑斌】明确 + -- 保底 sr 改为 池子随机 sr 或者 ssr【郑斌】 + fillDrawPool(nil, nil, nil, true) else fillDrawPool(nil, nil, ssrUp) end @@ -857,17 +867,17 @@ function _M.drawHeroRpc(agent, data) if itemData.quality == 4 then ssrCount = ssrCount + 1 ssrUpCount = 0 - if btype == 4 then newerHadSSR = newerHadSSR + 1 end - elseif itemData.quality == 3 then - floorHeroCount = 0 - ssrUpCount = ssrUpCount + 1 else ssrUpCount = ssrUpCount + 1 end + if itemData.quality >= 3 then + floorHeroCount = 0 + end + if role:isHaveHero(itemData.id - ItemStartId.Hero) then local fragId = itemData.id - ItemStartId.Hero local heroData = csvdb["unitCsv"][fragId] -- libgit2 0.21.2