Commit 86584add105b9ece1c83719508c73028a99e4d07

Authored by liuzujun
1 parent f2bebfc4

新手卡池,心愿单卡池

src/ProtocolCode.lua
@@ -101,6 +101,7 @@ actionCodes = { @@ -101,6 +101,7 @@ actionCodes = {
101 Hero_changeCrown = 223, 101 Hero_changeCrown = 223,
102 Hero_drawHeroExtraRewardNtf = 224, 102 Hero_drawHeroExtraRewardNtf = 224,
103 Hero_itemComposeRpc = 225, 103 Hero_itemComposeRpc = 225,
  104 + Hero_setWishPoolRpc = 226,
104 105
105 Hang_startRpc = 251, 106 Hang_startRpc = 251,
106 Hang_checkRpc = 252, 107 Hang_checkRpc = 252,
src/actions/HeroAction.lua
@@ -716,11 +716,14 @@ function _M.drawHeroRpc(agent, data) @@ -716,11 +716,14 @@ function _M.drawHeroRpc(agent, data)
716 local msg = MsgPack.unpack(data) 716 local msg = MsgPack.unpack(data)
717 717
718 if not role:isFuncUnlock(FuncUnlock.GetHero) then return 1 end 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 local subType = msg.subType or 1-- 定向卡池需要传 子类型 720 local subType = msg.subType or 1-- 定向卡池需要传 子类型
721 local drawType = msg.type -- 1 单抽 2 十连 721 local drawType = msg.type -- 1 单抽 2 十连
722 if btype ~= 1 then 722 if btype ~= 1 then
723 subType = 1 723 subType = 1
  724 + if btype == 4 and role:getProperty("newerDraw") >= 10 then
  725 + subType = 2
  726 + end
724 end 727 end
725 728
726 if btype == 1 then 729 if btype == 1 then
@@ -741,23 +744,32 @@ function _M.drawHeroRpc(agent, data) @@ -741,23 +744,32 @@ function _M.drawHeroRpc(agent, data)
741 744
742 -- 计算抽卡消耗品 745 -- 计算抽卡消耗品
743 local cost = {} 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 if buildTypeData[costType] ~= "" then 755 if buildTypeData[costType] ~= "" then
747 local curCost = buildTypeData[costType]:toArray(true, "=") 756 local curCost = buildTypeData[costType]:toArray(true, "=")
748 local hadCount = role:getItemCount(curCost[1]) 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 break 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 end 769 end
758 end 770 end
759 end 771 end
760 - if lastCount > 0 then -- 钱不够 772 + if isEnough == false then -- 钱不够
761 return 4 773 return 4
762 end 774 end
763 775
@@ -820,6 +832,9 @@ function _M.drawHeroRpc(agent, data) @@ -820,6 +832,9 @@ function _M.drawHeroRpc(agent, data)
820 --print(poolId, rand_v, weight, up_pool, values[1]) 832 --print(poolId, rand_v, weight, up_pool, values[1])
821 if rand_v < weight and up_pool then 833 if rand_v < weight and up_pool then
822 up_pool = up_pool:toArray(true, "=") 834 up_pool = up_pool:toArray(true, "=")
  835 + if btype == 5 then -- 爱心卡池,使用玩家设置的备选池子
  836 + up_pool = role:getProperty("wishPool")
  837 + end
823 for k, v in ipairs(up_pool) do 838 for k, v in ipairs(up_pool) do
824 resultPool[v] = {1} 839 resultPool[v] = {1}
825 end 840 end
@@ -885,8 +900,14 @@ function _M.drawHeroRpc(agent, data) @@ -885,8 +900,14 @@ function _M.drawHeroRpc(agent, data)
885 end 900 end
886 end 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 end 911 end
891 912
892 if role:isHaveHero(itemData.id - ItemStartId.Hero) then 913 if role:isHaveHero(itemData.id - ItemStartId.Hero) then
@@ -909,6 +930,11 @@ function _M.drawHeroRpc(agent, data) @@ -909,6 +930,11 @@ function _M.drawHeroRpc(agent, data)
909 role:setProperty("floorHero", floorHero) 930 role:setProperty("floorHero", floorHero)
910 end 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 role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]}) 938 role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]})
913 if ssrCount > 0 then 939 if ssrCount > 0 then
914 role:checkTaskEnter("DrawSSR", {count = ssrCount}) 940 role:checkTaskEnter("DrawSSR", {count = ssrCount})
@@ -1074,4 +1100,32 @@ function _M.itemComposeRpc(agent, data) @@ -1074,4 +1100,32 @@ function _M.itemComposeRpc(agent, data)
1074 return true 1100 return true
1075 end 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 return _M 1131 return _M
1 -Subproject commit 7ddcf852c731685bc3aa13e4f0bf7d7a86b45b65 1 +Subproject commit 897a3e0e4afa8217614a9ecf199d54b0ca641bab
src/models/Role.lua
@@ -167,7 +167,8 @@ Role.schema = { @@ -167,7 +167,8 @@ Role.schema = {
167 repayMaxC = {"number", 0}, -- 招募保底英雄领取次数 100一次 167 repayMaxC = {"number", 0}, -- 招募保底英雄领取次数 100一次
168 floorHero = {"table", {}}, -- 招募保底 -- {[poolId] = count} 168 floorHero = {"table", {}}, -- 招募保底 -- {[poolId] = count}
169 ssrUp = {"table", {}}, -- ssr up -- {[poolId] = count} 169 ssrUp = {"table", {}}, -- ssr up -- {[poolId] = count}
170 - newerDraw = {"table", {}}, -- 新手池子 {N, 1} 抽了多少次, 是否出了ssr 170 + newerDraw = {"number", 0}, -- 新手池子抽卡次数
  171 + wishPool = {"table", {}}, -- 心愿池子
171 172
172 sudoku = {"table", {}}, -- 九宫格 {[-1] = 1, task = {[1] = {}, [2] = {}}}} -- [-1] 阶段 如果为 -1 关闭(都做完了), task 当前阶段任务进度, reward 连串奖励领取情况 173 sudoku = {"table", {}}, -- 九宫格 {[-1] = 1, task = {[1] = {}, [2] = {}}}} -- [-1] 阶段 如果为 -1 关闭(都做完了), task 当前阶段任务进度, reward 连串奖励领取情况
173 sign = {"table", {}}, -- 签到记录 {[1] = 20181029} 174 sign = {"table", {}}, -- 签到记录 {[1] = 20181029}
@@ -394,6 +395,7 @@ function Role:data() @@ -394,6 +395,7 @@ function Role:data()
394 repayHero = self:getProperty("repayHero"), 395 repayHero = self:getProperty("repayHero"),
395 newerDraw = self:getProperty("newerDraw"), 396 newerDraw = self:getProperty("newerDraw"),
396 floorHero = self:getProperty("floorHero"), 397 floorHero = self:getProperty("floorHero"),
  398 + wishPool = self:getProperty("wishPool"),
397 399
398 sudoku = self:getProperty("sudoku"), 400 sudoku = self:getProperty("sudoku"),
399 sign = self:getProperty("sign"), 401 sign = self:getProperty("sign"),