Commit 1a0b3c5612b598aa5650742345a470bf9db47fc1

Authored by 测试
1 parent 71a18948

抽卡保底,切换定向卡池

@@ -272,4 +272,11 @@ CardType = { @@ -272,4 +272,11 @@ CardType = {
272 PrivilegeCard = 3, --特权卡 272 PrivilegeCard = 3, --特权卡
273 GrowFund = 4, --成长助力 273 GrowFund = 4, --成长助力
274 BattleCard = 5, --赛季卡 274 BattleCard = 5, --赛季卡
  275 +}
  276 +
  277 +HeroQuality = {
  278 + N = 1,
  279 + R = 2,
  280 + SR = 3,
  281 + SSR = 4,
275 } 282 }
276 \ No newline at end of file 283 \ No newline at end of file
src/ProtocolCode.lua
@@ -88,6 +88,7 @@ actionCodes = { @@ -88,6 +88,7 @@ actionCodes = {
88 Hero_getResetRewardRpc = 219, 88 Hero_getResetRewardRpc = 219,
89 Hero_drawHeroRpc = 220, 89 Hero_drawHeroRpc = 220,
90 Hero_repayHeroRpc = 221, 90 Hero_repayHeroRpc = 221,
  91 + Hero_unlockPoolRpc = 222,
91 92
92 Hang_startRpc = 251, 93 Hang_startRpc = 251,
93 Hang_checkRpc = 252, 94 Hang_checkRpc = 252,
src/actions/GmAction.lua
@@ -515,8 +515,9 @@ end @@ -515,8 +515,9 @@ end
515 table.insert(helpDes, {"测试", "test", ""}) 515 table.insert(helpDes, {"测试", "test", ""})
516 function _M.test(role, pms) 516 function _M.test(role, pms)
517 local id = tonum(pms.pm1, 0) 517 local id = tonum(pms.pm1, 0)
518 - local a = require("actions.StoreAction")  
519 - a.getGrowFundRewardRpc({role=role}, MsgPack.pack({id=id})) 518 + --local hero = require ("actions.HeroAction")
  519 + --hero.unlockPoolRpc({role = role}, MsgPack.pack({type = id}))
  520 + role.storeData:resetStoreReored(id)
520 return "成功" 521 return "成功"
521 end 522 end
522 523
@@ -525,12 +526,4 @@ function _M.ayncPurchase(role, params) @@ -525,12 +526,4 @@ function _M.ayncPurchase(role, params)
525 return role:handlePurchase(params) or "" 526 return role:handlePurchase(params) or ""
526 end 527 end
527 528
528 -function _M.test(role, params)  
529 - local id = tonum(params.pm1, 0)  
530 - local store = require ("actions.StoreAction")  
531 - store.shopBuyRpc({role = role}, MsgPack.pack({id = id}))  
532 - return "成功"  
533 -end  
534 -  
535 -  
536 return _M 529 return _M
537 \ No newline at end of file 530 \ No newline at end of file
src/actions/HeroAction.lua
@@ -681,9 +681,7 @@ function _M.getResetRewardRpc(agent, data) @@ -681,9 +681,7 @@ function _M.getResetRewardRpc(agent, data)
681 return true 681 return true
682 end 682 end
683 683
684 -  
685 -  
686 -function _M.drawHeroRpc(agent, data) 684 +function _M.unuse_drawHeroRpc(agent, data)
687 local role = agent.role 685 local role = agent.role
688 local msg = MsgPack.unpack(data) 686 local msg = MsgPack.unpack(data)
689 687
@@ -921,6 +919,153 @@ function _M.drawHeroRpc(agent, data) @@ -921,6 +919,153 @@ function _M.drawHeroRpc(agent, data)
921 return true 919 return true
922 end 920 end
923 921
  922 +function _M.drawHeroRpc(agent, data)
  923 + local role = agent.role
  924 + local msg = MsgPack.unpack(data)
  925 +
  926 + if not role:isFuncUnlock(FuncUnlock.GetHero) then return end
  927 + local btype = msg.pool -- 1 2 3 卡池类型
  928 + local subType = msg.subType or 1-- 定向卡池需要传 子类型
  929 + local drawType = msg.type -- 1 单抽 2 十连
  930 + local guide = msg.guide -- 是否是引导抽的
  931 + if btype ~= 1 then
  932 + subType = 1
  933 + end
  934 +
  935 + local buildTypeData = csvdb["build_typeCsv"][btype]
  936 + if not buildTypeData then return 1 end
  937 +
  938 + local drawCount = {1, 10} -- 抽取次数
  939 + if not drawCount[drawType] then return 2 end
  940 +
  941 + -- 计算抽卡消耗品
  942 + local cost = {}
  943 + local lastCount = drawCount[drawType]
  944 + for _, costType in ipairs({"draw_card", "draw_coin"}) do
  945 + if buildTypeData[costType] ~= "" then
  946 + local curCost = buildTypeData[costType]:toArray(true, "=")
  947 + local hadCount = role:getItemCount(curCost[1])
  948 + local curCount = math.floor(hadCount / curCost[2])
  949 + if curCount >= lastCount then
  950 + cost[curCost[1]] = curCost[2] * lastCount
  951 + lastCount = 0
  952 + break
  953 + elseif curCount > 0 then
  954 + cost[curCost[1]] = curCost[2] * curCount
  955 + lastCount = lastCount - curCount
  956 + end
  957 + end
  958 + end
  959 + if lastCount > 0 then -- 钱不够
  960 + return 3
  961 + end
  962 +
  963 + -- 抽取的池子
  964 + local poolMap = buildTypeData["pool"]:toNumMap()
  965 + local poolId = poolMap[subType]
  966 + if not poolId then return end
  967 +
  968 + --判断定向卡池是否开启
  969 + if btype == 1 then
  970 + if not role:isTimeResetOpen(TimeReset["DrawType" .. subType]) then
  971 + local unlockPool = role.dailyData:getProperty("unlockPool")
  972 + if not unlockPool[subType] then
  973 + return 1
  974 + end
  975 + end
  976 + end
  977 +
  978 + --TODO 活动覆盖
  979 +
  980 + local unitPool = csvdb["build_unitCsv"][poolId]
  981 + if not unitPool then return 4 end
  982 +
  983 + -- 开始抽
  984 + local resultPool = {}
  985 + local function fillDrawPool()
  986 + local condition = {"rare", "camp"}
  987 + local values = {}
  988 +
  989 + for idx, field in ipairs(condition) do
  990 + if not values[idx] then
  991 + local lpool = {}
  992 + local curIdx = 1
  993 + while unitPool[field .. "_" .. curIdx] do
  994 + lpool[curIdx] = {unitPool[field .. "_" .. curIdx]}
  995 + curIdx = curIdx + 1
  996 + end
  997 +
  998 + if next(lpool) then
  999 + values[idx] = math.randWeight(lpool, 1)
  1000 + end
  1001 + end
  1002 + end
  1003 +
  1004 + for itemId, oneData in pairs(csvdb["build_poolCsv"]) do
  1005 + if oneData["pool_" .. poolId] and oneData["pool_" .. poolId] ~= "" then
  1006 + local itemData = csvdb["itemCsv"][itemId]
  1007 + while itemData do
  1008 + if itemData.type ~= ItemType.Hero then break end
  1009 + local heroData = csvdb["unitCsv"][itemData.id - ItemStartId.Hero]
  1010 + if not heroData then break end
  1011 + local ok = true
  1012 + for idx, field in ipairs(condition) do
  1013 + if heroData[field] ~= values[idx] then ok = false break end
  1014 + end
  1015 + if not ok then break end
  1016 + if oneData["pool_" .. poolId] > 0 then
  1017 + resultPool[itemId] = {oneData["pool_" .. poolId]} -- itemId, count, 概率
  1018 + end
  1019 + break
  1020 + end
  1021 + end
  1022 + end
  1023 + end
  1024 +
  1025 + role:costItems(cost, {log = {desc = "drawHero", short1 = btype, int1 = poolId}})
  1026 +
  1027 + local ssrCount = 0
  1028 + local reward = {}
  1029 + for i = 1, drawCount[drawType] do
  1030 + resultPool = {}
  1031 + while not next(resultPool) do
  1032 + fillDrawPool()
  1033 + end
  1034 +
  1035 + -- 引导必送 613 丝路德
  1036 + local itemId = guide and 613 or math.randWeight(resultPool, 1)
  1037 + local itemData = csvdb["itemCsv"][itemId]
  1038 + if itemData.quality == HeroQuality.SSR then
  1039 + ssrCount = ssrCount + 1
  1040 + end
  1041 +
  1042 + if role:isHaveHero(itemData.id - ItemStartId.Hero) then
  1043 + local fragId = itemData.id - ItemStartId.Hero
  1044 + local heroData = csvdb["unitCsv"][fragId]
  1045 + local count = globalCsv.draw_unit_tofragment[heroData.rare]
  1046 + role:award({[fragId] = count}, {log = {desc = "drawHero", short1 = btype, int1 = poolId}})
  1047 + table.insert(reward, {id = fragId, count = count, from = itemId, fcount = 1})
  1048 + else
  1049 + role:award({[itemId] = 1}, {log = {desc = "drawHero", short1 = btype, int1 = poolId}})
  1050 + table.insert(reward, {id = itemId, count = 1})
  1051 + end
  1052 + end
  1053 +
  1054 + if btype == 1 or btype == 2 then
  1055 + local repayHero = role:getProperty("repayHero") or 0
  1056 + repayHero = repayHero + drawCount[drawType]
  1057 + role:updateProperty({field = "repayHero", value = repayHero})
  1058 + end
  1059 +
  1060 + role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]})
  1061 + if ssrCount > 0 then
  1062 + role:checkTaskEnter("DrawSSR", {count = ssrCount})
  1063 + end
  1064 + role:log("hero_action", {desc = "drawHero", short1 = btype, int1 = drawCount[drawType], int2 = poolId})
  1065 + SendPacket(actionCodes.Hero_drawHeroRpc, MsgPack.pack({reward = reward})) -- 这个 reward 是数组
  1066 + return true
  1067 +end
  1068 +
924 function _M.repayHeroRpc(agent, data) 1069 function _M.repayHeroRpc(agent, data)
925 local role = agent.role 1070 local role = agent.role
926 1071
@@ -950,4 +1095,36 @@ function _M.repayHeroRpc(agent, data) @@ -950,4 +1095,36 @@ function _M.repayHeroRpc(agent, data)
950 return true 1095 return true
951 end 1096 end
952 1097
  1098 +function _M.unlockPoolRpc(agent, data)
  1099 + local role = agent.role
  1100 + local msg = MsgPack.unpack(data)
  1101 +
  1102 + if not role:isFuncUnlock(FuncUnlock.GetHero) then return end
  1103 + local type = msg.type -- 指定定向卡池需要类型 1, 2, 3
  1104 + local needCost = true
  1105 + --当前开启的类型不用解锁
  1106 + if role:isTimeResetOpen(TimeReset["DrawType" .. type]) then
  1107 + needCost = false
  1108 + end
  1109 + --已经解锁的不需要重复解锁
  1110 + local unlockPool = role.dailyData:getProperty("unlockPool")
  1111 + if unlockPool[type] then
  1112 + needCost = false
  1113 + end
  1114 +
  1115 + if needCost then
  1116 + if not role:costDiamond({count = 300, log = {desc = "unlockPool", short1 = type}}) then
  1117 + return
  1118 + end
  1119 + end
  1120 +
  1121 + unlockPool[type] = 1
  1122 + role.dailyData:updateProperty({field="unlockPool", value = unlockPool})
  1123 + role.dailyData:updateProperty({field="curPool", value = type})
  1124 +
  1125 + role:log("hero_action", {desc = "unlockPool", short1=type})
  1126 + SendPacket(actionCodes.Hero_unlockPoolRpc, MsgPack.pack({}))
  1127 + return true
  1128 +end
  1129 +
953 return _M 1130 return _M
954 \ No newline at end of file 1131 \ No newline at end of file
src/actions/RoleAction.lua
@@ -663,7 +663,8 @@ function _M.taskRpc(agent, data) @@ -663,7 +663,8 @@ function _M.taskRpc(agent, data)
663 { type = roleField[taskType], field = "a", value = active}, 663 { type = roleField[taskType], field = "a", value = active},
664 }) 664 })
665 665
666 - role:updateProperty({field = "battlePoint", role:getProperty("battlePoint") + 100}) 666 + local oldVal = role:getProperty("battlePoint") or 0
  667 + role:updateProperty({field = "battlePoint", value = oldVal + taskData.active})
667 668
668 SendPacket(actionCodes.Role_taskRpc, MsgPack.pack(role:packReward(reward, change))) 669 SendPacket(actionCodes.Role_taskRpc, MsgPack.pack(role:packReward(reward, change)))
669 return true 670 return true
src/actions/StoreAction.lua
@@ -387,6 +387,11 @@ function _M.getBattlePassRewardRpc(agent, data) @@ -387,6 +387,11 @@ function _M.getBattlePassRewardRpc(agent, data)
387 return 1 387 return 1
388 end 388 end
389 389
  390 + if role:getProperty("battlePoint") < config.condition then
  391 + skynet.error(string.format("user do not have enough battle point, user_id:%d", role:getProperty("id")))
  392 + return 1
  393 + end
  394 +
390 local gift = "" 395 local gift = ""
391 if freeFlag == "0" then 396 if freeFlag == "0" then
392 gift = config.giftFree 397 gift = config.giftFree
src/models/Daily.lua
@@ -26,7 +26,8 @@ Daily.schema = { @@ -26,7 +26,8 @@ Daily.schema = {
26 advSupRe = {"number", 0}, -- 冒险支援效果刷新次数 26 advSupRe = {"number", 0}, -- 冒险支援效果刷新次数
27 goldBuyT = {"number", 0}, -- 金币购买次数 27 goldBuyT = {"number", 0}, -- 金币购买次数
28 28
29 - unlockPool = {"table", {}} -- 解锁的属性卡池 29 + unlockPool = {"table", {}}, -- 解锁的属性卡池
  30 + curPool = {"number", 0}, -- 属性卡池当前索引
30 } 31 }
31 32
32 function Daily:updateProperty(params) 33 function Daily:updateProperty(params)
@@ -99,6 +100,8 @@ function Daily:data() @@ -99,6 +100,8 @@ function Daily:data()
99 dailySDD = self:getProperty("dailySDD"), 100 dailySDD = self:getProperty("dailySDD"),
100 advSupRe = self:getProperty("advSupRe"), 101 advSupRe = self:getProperty("advSupRe"),
101 goldBuyT = self:getProperty("goldBuyT"), 102 goldBuyT = self:getProperty("goldBuyT"),
  103 + unlockPool = self:getProperty("unlockPool"),
  104 + curPool = self:getProperty("curPool"),
102 } 105 }
103 end 106 end
104 107
src/models/RoleTimeReset.lua
@@ -66,6 +66,10 @@ function Role:updateTimeReset(now, notify) @@ -66,6 +66,10 @@ function Role:updateTimeReset(now, notify)
66 ResetFunc[funcName](self, notify, response, now) 66 ResetFunc[funcName](self, notify, response, now)
67 resetMode[funcName] = true 67 resetMode[funcName] = true
68 end 68 end
  69 + if needResetId[resetId] then
  70 + -- 充值商城购买记录
  71 + self.storeData:resetStoreReored(resetId)
  72 + end
69 end 73 end
70 74
71 for resetId, round in pairs(needResetId) do 75 for resetId, round in pairs(needResetId) do
src/models/Store.lua
@@ -194,6 +194,29 @@ function Store:notifyUpdateProperty(field, newValue, oldValue) @@ -194,6 +194,29 @@ function Store:notifyUpdateProperty(field, newValue, oldValue)
194 SendPacket(actionCodes.Store_updateproperty, MsgPack.pack(datas)) 194 SendPacket(actionCodes.Store_updateproperty, MsgPack.pack(datas))
195 end 195 end
196 196
  197 +function Store:resetStoreReored(resetId)
  198 + local payRecord = self:getProperty("payR") or {}
  199 + local buyRecord = self:getProperty("buyR") or {}
  200 + for k, v in pairs(payRecord) do
  201 + local config = csvdb["shop_rechargeCsv"][k]
  202 + if config then
  203 + if config.resetTime == resetId then
  204 + payRecord[k] = nil
  205 + end
  206 + end
  207 + end
  208 + self:updateProperty({field = "payR", value = payRecord})
  209 + for k, v in pairs(buyRecord) do
  210 + local config = csvdb["shop_normalCsv"][k]
  211 + if config then
  212 + if config.resetTime == resetId then
  213 + buyRecord[k] = nil
  214 + end
  215 + end
  216 + end
  217 + self:updateProperty({field = "buyR", value = buyRecord})
  218 +end
  219 +
197 function Store:data() 220 function Store:data()
198 return { 221 return {
199 buyR = self:getProperty("buyR"), 222 buyR = self:getProperty("buyR"),