Commit 86584add105b9ece1c83719508c73028a99e4d07
1 parent
f2bebfc4
新手卡池,心愿单卡池
Showing
4 changed files
with
72 additions
and
15 deletions
Show diff stats
src/ProtocolCode.lua
src/actions/HeroAction.lua
| ... | ... | @@ -716,11 +716,14 @@ function _M.drawHeroRpc(agent, data) |
| 716 | 716 | local msg = MsgPack.unpack(data) |
| 717 | 717 | |
| 718 | 718 | if not role:isFuncUnlock(FuncUnlock.GetHero) then return 1 end |
| 719 | - local btype = msg.pool -- 1 2 3 卡池类型 | |
| 719 | + local btype = msg.pool -- 1 2 3 4 5 卡池类型 4新手卡池 5心愿卡池 | |
| 720 | 720 | local subType = msg.subType or 1-- 定向卡池需要传 子类型 |
| 721 | 721 | local drawType = msg.type -- 1 单抽 2 十连 |
| 722 | 722 | if btype ~= 1 then |
| 723 | 723 | subType = 1 |
| 724 | + if btype == 4 and role:getProperty("newerDraw") >= 10 then | |
| 725 | + subType = 2 | |
| 726 | + end | |
| 724 | 727 | end |
| 725 | 728 | |
| 726 | 729 | if btype == 1 then |
| ... | ... | @@ -741,23 +744,32 @@ function _M.drawHeroRpc(agent, data) |
| 741 | 744 | |
| 742 | 745 | -- 计算抽卡消耗品 |
| 743 | 746 | local cost = {} |
| 744 | - local lastCount = drawCount[drawType] | |
| 745 | - for _, costType in ipairs({"draw_card", "draw_coin"}) do | |
| 747 | + if buildTypeData["draw_coin_1"] == "" then | |
| 748 | + return 11 | |
| 749 | + end | |
| 750 | + local diamondCost = buildTypeData["draw_coin_1"]:toArray(true, "=") | |
| 751 | + | |
| 752 | + local isEnough = true | |
| 753 | + for _, costType in ipairs({"draw_card_"}) do | |
| 754 | + costType = costType..drawCount[drawType] | |
| 746 | 755 | if buildTypeData[costType] ~= "" then |
| 747 | 756 | local curCost = buildTypeData[costType]:toArray(true, "=") |
| 748 | 757 | local hadCount = role:getItemCount(curCost[1]) |
| 749 | - local curCount = math.floor(hadCount / curCost[2]) | |
| 750 | - if curCount >= lastCount then | |
| 751 | - cost[curCost[1]] = curCost[2] * lastCount | |
| 752 | - lastCount = 0 | |
| 758 | + if hadCount >= curCost[2] then | |
| 759 | + cost[curCost[1]] = curCost[2] | |
| 753 | 760 | break |
| 754 | - elseif curCount > 0 then | |
| 755 | - cost[curCost[1]] = curCost[2] * curCount | |
| 756 | - lastCount = lastCount - curCount | |
| 761 | + else | |
| 762 | + cost[curCost[1]] = hadCount | |
| 763 | + diamondCost[2] = (curCost[2] - hadCount) * diamondCost[2] | |
| 764 | + if not role:checkItemEnough({[diamondCost[1]]=diamondCost[2]}) then | |
| 765 | + isEnough = false | |
| 766 | + break | |
| 767 | + end | |
| 768 | + cost[diamondCost[1]] = diamondCost[2] | |
| 757 | 769 | end |
| 758 | 770 | end |
| 759 | 771 | end |
| 760 | - if lastCount > 0 then -- 钱不够 | |
| 772 | + if isEnough == false then -- 钱不够 | |
| 761 | 773 | return 4 |
| 762 | 774 | end |
| 763 | 775 | |
| ... | ... | @@ -820,6 +832,9 @@ function _M.drawHeroRpc(agent, data) |
| 820 | 832 | --print(poolId, rand_v, weight, up_pool, values[1]) |
| 821 | 833 | if rand_v < weight and up_pool then |
| 822 | 834 | up_pool = up_pool:toArray(true, "=") |
| 835 | + if btype == 5 then -- 爱心卡池,使用玩家设置的备选池子 | |
| 836 | + up_pool = role:getProperty("wishPool") | |
| 837 | + end | |
| 823 | 838 | for k, v in ipairs(up_pool) do |
| 824 | 839 | resultPool[v] = {1} |
| 825 | 840 | end |
| ... | ... | @@ -885,8 +900,14 @@ function _M.drawHeroRpc(agent, data) |
| 885 | 900 | end |
| 886 | 901 | end |
| 887 | 902 | |
| 888 | - if itemData.quality >= HeroQuality.SR then | |
| 889 | - floorHeroCount = 0 | |
| 903 | + if btype == 4 and role:getProperty("newerDraw") == 0 then -- 新手卡池 | |
| 904 | + if itemData.quality == HeroQuality.SSR then | |
| 905 | + floorHeroCount = 0 | |
| 906 | + end | |
| 907 | + else | |
| 908 | + if itemData.quality >= HeroQuality.SR then | |
| 909 | + floorHeroCount = 0 | |
| 910 | + end | |
| 890 | 911 | end |
| 891 | 912 | |
| 892 | 913 | if role:isHaveHero(itemData.id - ItemStartId.Hero) then |
| ... | ... | @@ -909,6 +930,11 @@ function _M.drawHeroRpc(agent, data) |
| 909 | 930 | role:setProperty("floorHero", floorHero) |
| 910 | 931 | end |
| 911 | 932 | |
| 933 | + if btype == 4 then | |
| 934 | + local newCount = role:getProperty("newerDraw") | |
| 935 | + role:updateProperty({field="newerDraw", value = newCount + drawCount[drawType]}) | |
| 936 | + end | |
| 937 | + | |
| 912 | 938 | role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]}) |
| 913 | 939 | if ssrCount > 0 then |
| 914 | 940 | role:checkTaskEnter("DrawSSR", {count = ssrCount}) |
| ... | ... | @@ -1074,4 +1100,32 @@ function _M.itemComposeRpc(agent, data) |
| 1074 | 1100 | return true |
| 1075 | 1101 | end |
| 1076 | 1102 | |
| 1103 | +function _M.setWishPoolRpc(agent, data) | |
| 1104 | + local role = agent.role | |
| 1105 | + local msg = MsgPack.unpack(data) | |
| 1106 | + | |
| 1107 | + local heros = msg.heros | |
| 1108 | + if #heros > 3 then return 1 end | |
| 1109 | + | |
| 1110 | + for _, heroId in pairs(heros) do | |
| 1111 | + local cfg = csvdb["build_poolCsv"][heroId] | |
| 1112 | + if not cfg then return 2 end | |
| 1113 | + | |
| 1114 | + local buildTypeData = csvdb["build_typeCsv"][5] | |
| 1115 | + if not buildTypeData then return 3 end | |
| 1116 | + local poolMap = buildTypeData["pool"]:toNumMap() | |
| 1117 | + local poolId = poolMap[1] | |
| 1118 | + if not poolId then return 4 end | |
| 1119 | + | |
| 1120 | + if cfg["pool_"..poolId] == 0 then | |
| 1121 | + return 5 | |
| 1122 | + end | |
| 1123 | + end | |
| 1124 | + | |
| 1125 | + role:updateProperty({field="wishPool", value = heros}) | |
| 1126 | + | |
| 1127 | + SendPacket(actionCodes.Hero_setWishPoolRpc, "") | |
| 1128 | + return true | |
| 1129 | +end | |
| 1130 | + | |
| 1077 | 1131 | return _M | ... | ... |
src/models/Role.lua
| ... | ... | @@ -167,7 +167,8 @@ Role.schema = { |
| 167 | 167 | repayMaxC = {"number", 0}, -- 招募保底英雄领取次数 100一次 |
| 168 | 168 | floorHero = {"table", {}}, -- 招募保底 -- {[poolId] = count} |
| 169 | 169 | ssrUp = {"table", {}}, -- ssr up -- {[poolId] = count} |
| 170 | - newerDraw = {"table", {}}, -- 新手池子 {N, 1} 抽了多少次, 是否出了ssr | |
| 170 | + newerDraw = {"number", 0}, -- 新手池子抽卡次数 | |
| 171 | + wishPool = {"table", {}}, -- 心愿池子 | |
| 171 | 172 | |
| 172 | 173 | sudoku = {"table", {}}, -- 九宫格 {[-1] = 1, task = {[1] = {}, [2] = {}}}} -- [-1] 阶段 如果为 -1 关闭(都做完了), task 当前阶段任务进度, reward 连串奖励领取情况 |
| 173 | 174 | sign = {"table", {}}, -- 签到记录 {[1] = 20181029} |
| ... | ... | @@ -394,6 +395,7 @@ function Role:data() |
| 394 | 395 | repayHero = self:getProperty("repayHero"), |
| 395 | 396 | newerDraw = self:getProperty("newerDraw"), |
| 396 | 397 | floorHero = self:getProperty("floorHero"), |
| 398 | + wishPool = self:getProperty("wishPool"), | |
| 397 | 399 | |
| 398 | 400 | sudoku = self:getProperty("sudoku"), |
| 399 | 401 | sign = self:getProperty("sign"), | ... | ... |