Commit 49f617d971b1ee6cf3cf990203fae2b8ff1a1c79
Merge branch 'cn/develop' into cn/publish/zhaolu
Showing
14 changed files
with
820 additions
and
339 deletions
Show diff stats
src/ProtocolCode.lua
@@ -67,6 +67,8 @@ actionCodes = { | @@ -67,6 +67,8 @@ actionCodes = { | ||
67 | Role_itemConvertDevilTicketRpc = 148, -- 兑换魔鬼训练营门票 | 67 | Role_itemConvertDevilTicketRpc = 148, -- 兑换魔鬼训练营门票 |
68 | Role_unRegisterRpc = 149, --注销账号 | 68 | Role_unRegisterRpc = 149, --注销账号 |
69 | Role_searchAllRoleRpc = 150, --查询所有服的角色信息 | 69 | Role_searchAllRoleRpc = 150, --查询所有服的角色信息 |
70 | + Role_takeTreasureRpc = 151, --抓取额外宝藏 | ||
71 | + Role_treasureMapRpc = 152, --兑换宝藏图 | ||
70 | 72 | ||
71 | Adv_startAdvRpc = 151, | 73 | Adv_startAdvRpc = 151, |
72 | Adv_startHangRpc = 152, | 74 | Adv_startHangRpc = 152, |
@@ -121,6 +123,10 @@ actionCodes = { | @@ -121,6 +123,10 @@ actionCodes = { | ||
121 | Hero_changeSparkRpc = 227, | 123 | Hero_changeSparkRpc = 227, |
122 | Hero_saveGeniusTreeRpc = 228, | 124 | Hero_saveGeniusTreeRpc = 228, |
123 | Hero_stickersConvertRpc = 229, --兑换英雄贴纸 | 125 | Hero_stickersConvertRpc = 229, --兑换英雄贴纸 |
126 | + Hero_trainStartRpc = 230, --开始魔鬼训练 | ||
127 | + Hero_trainFinishRpc = 231, | ||
128 | + Hero_trainTaskRewardRpc = 232, --领取魔鬼训练营任务 | ||
129 | + Hero_trainQuickRpc = 233, --魔鬼训练营加速 | ||
124 | 130 | ||
125 | Hang_startRpc = 251, | 131 | Hang_startRpc = 251, |
126 | Hang_checkRpc = 252, | 132 | Hang_checkRpc = 252, |
src/actions/GmAction.lua
@@ -692,19 +692,36 @@ function _M.test(role, pms) | @@ -692,19 +692,36 @@ function _M.test(role, pms) | ||
692 | if id > 100 then | 692 | if id > 100 then |
693 | actid = tonum(pms.pm2, 0) | 693 | actid = tonum(pms.pm2, 0) |
694 | end | 694 | end |
695 | - --local hero = require ("actions.HeroAction") | ||
696 | - --hero.unlockPoolRpc({role = role}, MsgPack.pack({type = id})) | 695 | + --if id == 1 then |
696 | + -- local hero = require ("actions.HeroAction") | ||
697 | + -- local ret = hero.trainStartRpc({role = role}, MsgPack.pack({id = 1})) | ||
698 | + -- if ret ~= true then | ||
699 | + -- return ret | ||
700 | + -- end | ||
701 | + --elseif id == 2 then | ||
702 | + -- local hero = require ("actions.HeroAction") | ||
703 | + -- local ret = hero.trainFinishRpc({role = role}, MsgPack.pack({id = 1})) | ||
704 | + -- if ret ~= true then | ||
705 | + -- return ret | ||
706 | + -- end | ||
707 | + --elseif id == 3 then | ||
708 | + -- local hero = require ("actions.HeroAction") | ||
709 | + -- local ret = hero.trainQuickRpc({role = role}, MsgPack.pack({id = 1})) | ||
710 | + -- if ret ~= true then | ||
711 | + -- return ret | ||
712 | + -- end | ||
713 | + --end | ||
697 | 714 | ||
698 | --role:sendMail(13, nil, "1=2", {111}) | 715 | --role:sendMail(13, nil, "1=2", {111}) |
699 | - local file = io.open("draw_hero_"..id..".csv", "a") | ||
700 | - for i=1, 10000 do | ||
701 | - local heroIds = _M.drawHero(role, id, actid) | ||
702 | - for k, v in ipairs(heroIds) do | ||
703 | - print((i - 1)* 10 + k, v) | ||
704 | - file:write(v.."\n") | ||
705 | - end | ||
706 | - end | ||
707 | - io.close(file) | 716 | + --local file = io.open("draw_hero_"..id..".csv", "a") |
717 | + --for i=1, 10000 do | ||
718 | + -- local heroIds = _M.drawHero(role, id, actid) | ||
719 | + -- for k, v in ipairs(heroIds) do | ||
720 | + -- print((i - 1)* 10 + k, v) | ||
721 | + -- file:write(v.."\n") | ||
722 | + -- end | ||
723 | + --end | ||
724 | + --io.close(file) | ||
708 | return "成功" | 725 | return "成功" |
709 | end | 726 | end |
710 | 727 | ||
@@ -1012,7 +1029,7 @@ function _M.treasure(role, pms) | @@ -1012,7 +1029,7 @@ function _M.treasure(role, pms) | ||
1012 | dump(treasureList) | 1029 | dump(treasureList) |
1013 | return "宝藏图鉴" | 1030 | return "宝藏图鉴" |
1014 | elseif pm1 == "FLUSH" then | 1031 | elseif pm1 == "FLUSH" then |
1015 | - local treasureList= role.dailyData:getTreasrueList(role) | 1032 | + local treasureList= role.dailyData:getTreasureList(role) |
1016 | dump(treasureList) | 1033 | dump(treasureList) |
1017 | return "宝藏图鉴" | 1034 | return "宝藏图鉴" |
1018 | elseif pm1 == "CHECK" then | 1035 | elseif pm1 == "CHECK" then |
@@ -1175,5 +1192,40 @@ function _M.draw_code(role, pms) | @@ -1175,5 +1192,40 @@ function _M.draw_code(role, pms) | ||
1175 | return ret | 1192 | return ret |
1176 | end | 1193 | end |
1177 | 1194 | ||
1195 | +table.insert(helpDes, {"抓取额外宝藏", "treasure_extra"}) | ||
1196 | +function _M.treasure_extra(role, pms) | ||
1197 | + local extraCount = role.dailyData:getProperty("treasureExtraCount") --每日发现额外宝藏使用次数(累计),隔天清零 | ||
1198 | + local mapCount = role.dailyData:getProperty("treasureMapCount") | ||
1199 | + local baseExtra = role.dailyData:getProperty("treasureBaseExtra") | ||
1200 | + | ||
1201 | + if extraCount >= globalCsv.idle_treasure_extra_limie then return 1 end | ||
1202 | + if mapCount <= 0 then return 2 end | ||
1203 | + | ||
1204 | + baseExtra = baseExtra + globalCsv.idle_treasure_base_extra | ||
1205 | + | ||
1206 | + local tmpTreasure, treasureListExtra = role.dailyData:getTreasureExtra(baseExtra) | ||
1207 | + | ||
1208 | + dump(tmpTreasure) | ||
1209 | + dump(treasureListExtra) | ||
1210 | + if not tmpTreasure then return 3 end | ||
1211 | + | ||
1212 | + role.dailyData:updateProperty({field = "treasureExtraCount", delta = 1}) | ||
1213 | + role.dailyData:updateProperty({field = "treasureBaseExtra", value = mapCount - 1}) | ||
1214 | + role.dailyData:updateProperty({field = "treasureBaseExtra", value = baseExtra}) | ||
1215 | + | ||
1216 | + return "成功" | ||
1217 | +end | ||
1218 | + | ||
1219 | +table.insert(helpDes, {"兑换宝藏图", "treasure_map"}) | ||
1220 | +function _M.treasure_map(role, pms) | ||
1221 | + local count = tonumber(pms.pm1 or 1) | ||
1222 | + local cost ={[ItemId.Jade] = globalCsv.idle_treasure_buy * count} | ||
1223 | + if not role:checkItemEnough(cost) then return -1 end | ||
1224 | + if not role:costItems(cost, {log = {desc = "treasureMap", int1 = count}}) then return -2 end | ||
1225 | + role.dailyData:updateProperty({field = "treasureMapCount", delta = 1*count}) | ||
1226 | + | ||
1227 | + local treasureMapCount = role.dailyData:getProperty("treasureMapCount") | ||
1228 | + return treasureMapCount | ||
1229 | +end | ||
1178 | 1230 | ||
1179 | return _M | 1231 | return _M |
1180 | \ No newline at end of file | 1232 | \ No newline at end of file |
src/actions/HangAction.lua
@@ -125,10 +125,18 @@ local function checkReward(role, isTreasure, carbonId) | @@ -125,10 +125,18 @@ local function checkReward(role, isTreasure, carbonId) | ||
125 | randomItem() | 125 | randomItem() |
126 | end | 126 | end |
127 | 127 | ||
128 | - --挂机得到的宝藏加入到挂机奖励 | ||
129 | - if isTreasure or false == true then | ||
130 | - local treasureList= role.dailyData:checkTreasureList(carbonId or hangInfo.carbonId) or {} | ||
131 | - for _, val in pairs(treasureList) do | 128 | + --挂机得到的宝藏加入到挂机奖励 + 额外宝藏奖励 |
129 | + if isTreasure then | ||
130 | + local treasureList= role.dailyData:checkTreasureList(carbonId or hangInfo.carbonId) | ||
131 | + for _, val in pairs(treasureList or {}) do | ||
132 | + local award = val.award:toNumMap() | ||
133 | + for k,v in pairs(award) do | ||
134 | + items[k] = (items[k] or 0) + v | ||
135 | + end | ||
136 | + end | ||
137 | + | ||
138 | + treasureList = role.dailyData:checkTreasureListExtra(carbonId or hangInfo.carbonId) | ||
139 | + for _, val in pairs(treasureList or {}) do | ||
132 | local award = val.award:toNumMap() | 140 | local award = val.award:toNumMap() |
133 | for k,v in pairs(award) do | 141 | for k,v in pairs(award) do |
134 | items[k] = (items[k] or 0) + v | 142 | items[k] = (items[k] or 0) + v |
@@ -339,7 +347,7 @@ function _M.endBattleRpc(agent, data) | @@ -339,7 +347,7 @@ function _M.endBattleRpc(agent, data) | ||
339 | 347 | ||
340 | --刷新宝藏图鉴 | 348 | --刷新宝藏图鉴 |
341 | if isWin and globalCsv.idle_treasure_point and globalCsv.idle_treasure_point == carbonId then | 349 | if isWin and globalCsv.idle_treasure_point and globalCsv.idle_treasure_point == carbonId then |
342 | - role.dailyData:getTreasrueList() | 350 | + role.dailyData:getTreasureList() |
343 | end | 351 | end |
344 | 352 | ||
345 | role:updateProperty({field = "hangInfo", value = hangInfo}) | 353 | role:updateProperty({field = "hangInfo", value = hangInfo}) |
@@ -513,8 +521,17 @@ function _M.quickRpc(agent , data) | @@ -513,8 +521,17 @@ function _M.quickRpc(agent , data) | ||
513 | end | 521 | end |
514 | 522 | ||
515 | --宝藏加速 | 523 | --宝藏加速 |
516 | - local treasureList = role.dailyData:quickTreasureList(hangInfo.carbonId, time) or {} | ||
517 | - for id, val in pairs(treasureList) do | 524 | + local treasureList = role.dailyData:quickTreasureList(hangInfo.carbonId, time) |
525 | + for _, val in pairs(treasureList or {}) do | ||
526 | + local award = val.award:toNumMap() | ||
527 | + for k,v in pairs(award) do | ||
528 | + reward[k] = (reward[k] or 0) + v | ||
529 | + end | ||
530 | + end | ||
531 | + | ||
532 | + --额外宝藏加速 | ||
533 | + treasureList = role.dailyData:quickTreasureListExtra(hangInfo.carbonId, time) | ||
534 | + for _, val in pairs(treasureList or {}) do | ||
518 | local award = val.award:toNumMap() | 535 | local award = val.award:toNumMap() |
519 | for k,v in pairs(award) do | 536 | for k,v in pairs(award) do |
520 | reward[k] = (reward[k] or 0) + v | 537 | reward[k] = (reward[k] or 0) + v |
src/actions/HeroAction.lua
@@ -117,6 +117,8 @@ function _M.wakeRpc(agent, data) | @@ -117,6 +117,8 @@ function _M.wakeRpc(agent, data) | ||
117 | local hero = role.heros[msg.id] | 117 | local hero = role.heros[msg.id] |
118 | if not hero then return 1 end | 118 | if not hero then return 1 end |
119 | if hero:getProperty("wakeL") >= #csvdb["unit_wakeCsv"] then return 2 end | 119 | if hero:getProperty("wakeL") >= #csvdb["unit_wakeCsv"] then return 2 end |
120 | + if hero:getProperty("trainTs") ~= 0 then return 9 end | ||
121 | + | ||
120 | local typ = hero:getProperty("type") | 122 | local typ = hero:getProperty("type") |
121 | local wakeData = csvdb["unit_wakeCsv"][hero:getProperty("wakeL")] | 123 | local wakeData = csvdb["unit_wakeCsv"][hero:getProperty("wakeL")] |
122 | if not wakeData then return 3 end | 124 | if not wakeData then return 3 end |
@@ -180,6 +182,8 @@ function _M.wakeRpc(agent, data) | @@ -180,6 +182,8 @@ function _M.wakeRpc(agent, data) | ||
180 | 182 | ||
181 | role:checkTaskEnter("HeroStarCollect", {}) | 183 | role:checkTaskEnter("HeroStarCollect", {}) |
182 | role:checkTaskEnter("HeroStartSum", {}) | 184 | role:checkTaskEnter("HeroStartSum", {}) |
185 | + role:checkTaskEnter("SSRHeroStarSum", {}) | ||
186 | + role:checkTaskEnter("SRHeroStarSum", {}) | ||
183 | return true | 187 | return true |
184 | end | 188 | end |
185 | 189 | ||
@@ -1435,4 +1439,166 @@ function _M.stickersConvertRpc(agent, data) | @@ -1435,4 +1439,166 @@ function _M.stickersConvertRpc(agent, data) | ||
1435 | return true | 1439 | return true |
1436 | end | 1440 | end |
1437 | 1441 | ||
1442 | +function _M.trainStartRpc(agent, data) | ||
1443 | + local role = agent.role | ||
1444 | + local msg = MsgPack.unpack(data) | ||
1445 | + local hero = role.heros[msg.id] | ||
1446 | + if not hero then return 1 end | ||
1447 | + local rare = hero:getRare() | ||
1448 | + if rare ~= HeroQuality.SSR and rare ~= HeroQuality.SR then return 2 end | ||
1449 | + local trainTimeCfg = (rare == HeroQuality.SSR and globalCsv.training_camp_ssr or globalCsv.training_camp_sr) | ||
1450 | + local trainCostCfg = (rare == HeroQuality.SSR and globalCsv.training_camp_ssr_cost or globalCsv.training_camp_sr_cost) | ||
1451 | + dump(trainTimeCfg) | ||
1452 | + dump(trainCostCfg) | ||
1453 | + | ||
1454 | + local curLevel = hero:getProperty("wakeL") | ||
1455 | + local trainTs = hero:getProperty("trainTs") | ||
1456 | + local sparkInfo = hero:getProperty("spark") | ||
1457 | + print(msg.id, rare, curLevel) | ||
1458 | + if trainTs ~= 0 then return 3 end | ||
1459 | + | ||
1460 | + local sec = trainTimeCfg[curLevel] or 0 | ||
1461 | + if sec == 0 then return 4 end | ||
1462 | + | ||
1463 | + if not trainCostCfg[curLevel] then return 10 end | ||
1464 | + | ||
1465 | + local costs = trainCostCfg[curLevel]:toNumMap() | ||
1466 | + | ||
1467 | + if not role:checkItemEnough(costs) then return 5 end | ||
1468 | + | ||
1469 | + -- 大于等于7的时候需要装备火花才能升 | ||
1470 | + if curLevel >= 7 then | ||
1471 | + if #sparkInfo == 0 then | ||
1472 | + return 6 | ||
1473 | + end | ||
1474 | + local ok = false | ||
1475 | + for _, info in ipairs(sparkInfo) do | ||
1476 | + local cfg = csvdb["sparkCsv"][info.cfg_id][info.level or 0] | ||
1477 | + if not cfg then return 7 end | ||
1478 | + if cfg.star == curLevel then | ||
1479 | + ok = true | ||
1480 | + break | ||
1481 | + end | ||
1482 | + end | ||
1483 | + if not ok then return 8 end | ||
1484 | + end | ||
1485 | + | ||
1486 | + if not role:costItems(costs, {log = {desc = "trainHero", int1 = hero:getProperty("type")}}) then return 9 end | ||
1487 | + | ||
1488 | + hero:updateProperty({field="trainTs", value = skynet.timex() + sec}) | ||
1489 | + | ||
1490 | + hero:mylog({desc = "trainHeroStart", int1 = hero:getProperty("type"), int2 = curLevel}) | ||
1491 | + | ||
1492 | + SendPacket(actionCodes.Hero_trainStartRpc, '') | ||
1493 | + | ||
1494 | + return true | ||
1495 | +end | ||
1496 | + | ||
1497 | +function _M.trainQuickRpc(agent, data) | ||
1498 | + local role = agent.role | ||
1499 | + local msg = MsgPack.unpack(data) | ||
1500 | + local hero = role.heros[msg.id] | ||
1501 | + if not hero then return 1 end | ||
1502 | + local trainTs = hero:getProperty("trainTs") | ||
1503 | + if trainTs == 0 then return 2 end | ||
1504 | + local timeNow = skynet.timex() | ||
1505 | + if timeNow >= trainTs then return 3 end | ||
1506 | + | ||
1507 | + local h = math.ceil((trainTs - timeNow)/3600) | ||
1508 | + | ||
1509 | + local cost = {[ItemId.Jade] = h * (globalCsv.training_camp_quick or 60)} | ||
1510 | + if not role:checkItemEnough(cost) then return 4 end | ||
1511 | + | ||
1512 | + if not role:costItems(cost, {log = {desc = "trainQuickHero", int1 = hero:getProperty("type")}}) then return 9 end | ||
1513 | + | ||
1514 | + hero:updateProperty({field="trainTs", value = skynet.timex()}) | ||
1515 | + | ||
1516 | + hero:mylog({desc = "trainQuick", int1 = hero:getProperty("type")}) | ||
1517 | + | ||
1518 | + SendPacket(actionCodes.Hero_trainQuickRpc, '') | ||
1519 | + | ||
1520 | + return true | ||
1521 | +end | ||
1522 | + | ||
1523 | + | ||
1524 | +function _M.trainFinishRpc(agent, data) | ||
1525 | + local role = agent.role | ||
1526 | + local msg = MsgPack.unpack(data) | ||
1527 | + local hero = role.heros[msg.id] | ||
1528 | + if not hero then return 1 end | ||
1529 | + | ||
1530 | + local curLevel = hero:getProperty("wakeL") | ||
1531 | + local trainTs = hero:getProperty("trainTs") | ||
1532 | + local typ = hero:getProperty("type") | ||
1533 | + if trainTs == 0 then return 2 end | ||
1534 | + if skynet.timex() < trainTs then return 3 end | ||
1535 | + | ||
1536 | + hero:updateProperty({field = "wakeL", delta = 1}) | ||
1537 | + hero:updateProperty({field = "trainTs", value = 0}) | ||
1538 | + | ||
1539 | + curLevel = curLevel + 1 | ||
1540 | + role:checkTaskEnter("Wake", {heroType = typ, wakeL = curLevel}) | ||
1541 | + if curLevel == 3 then -- 解锁cg | ||
1542 | + role:checkTaskEnter("WakeCG", {heroType = typ}) | ||
1543 | + role:checkTaskEnter("WakeCGSum", {count = 1}) | ||
1544 | + end | ||
1545 | + | ||
1546 | + if curLevel >= 4 then --自动觉醒技能 | ||
1547 | + local new = hero:increGeniusTree() | ||
1548 | + hero:updateProperty({field = "genius", value = new}) | ||
1549 | + end | ||
1550 | + hero:mylog({desc = "trainFinish", int1 = hero:getProperty("type")}) | ||
1551 | + | ||
1552 | + SendPacket(actionCodes.Hero_trainFinishRpc, '') | ||
1553 | + | ||
1554 | + role:checkTaskEnter("HeroStarCollect", {}) | ||
1555 | + role:checkTaskEnter("HeroStartSum", {}) | ||
1556 | + role:checkTaskEnter("SSRHeroStarSum", {}) | ||
1557 | + role:checkTaskEnter("SRHeroStarSum", {}) | ||
1558 | + | ||
1559 | + return true | ||
1560 | +end | ||
1561 | + | ||
1562 | +function _M.trainTaskRewardRpc(agent, data) | ||
1563 | + local role = agent.role | ||
1564 | + local msg = MsgPack.unpack(data) | ||
1565 | + local taskId = msg.id | ||
1566 | + local trainTask = role:getProperty("trainTask") or {} | ||
1567 | + local record = trainTask["r"] or {} | ||
1568 | + local flag = record[taskId] or 0 | ||
1569 | + if flag == 1 then return 1 end | ||
1570 | + local taskCfg = csvdb["training_camp_taskCsv"][taskId] | ||
1571 | + | ||
1572 | + if not taskCfg then return 2 end | ||
1573 | + | ||
1574 | + --只有类型4的任务可以完成,领取奖励 | ||
1575 | + if taskCfg.type < 4 then | ||
1576 | + return 3 | ||
1577 | + end | ||
1578 | + | ||
1579 | + --前置任务1一 | ||
1580 | + local preTask1 = csvdb["training_camp_taskCsv"][taskCfg.condition1] | ||
1581 | + if trainTask[preTask1.id] < preTask1.condition1 then | ||
1582 | + return 4 | ||
1583 | + end | ||
1584 | + | ||
1585 | + --前置任务2一 | ||
1586 | + local preTask2 = csvdb["training_camp_taskCsv"][taskCfg.condition2] | ||
1587 | + if trainTask[preTask2.id] < preTask1.condition1 then | ||
1588 | + return 5 | ||
1589 | + end | ||
1590 | + | ||
1591 | + record[taskId] = 1 | ||
1592 | + | ||
1593 | + trainTask["r"] = record | ||
1594 | + | ||
1595 | + role:updateProperty({field = "trainTask", value = trainTask}) | ||
1596 | + | ||
1597 | + local reward, change = role:award(taskCfg.reward, {log = {desc = "trainTask"}}) | ||
1598 | + | ||
1599 | + SendPacket(actionCodes.Hero_trainTaskRewardRpc, MsgPack.pack(role:packReward(reward, change))) | ||
1600 | + | ||
1601 | + return true | ||
1602 | +end | ||
1603 | + | ||
1438 | return _M | 1604 | return _M |
src/actions/RoleAction.lua
@@ -185,6 +185,7 @@ function _M.loginRpc( agent, data ) | @@ -185,6 +185,7 @@ function _M.loginRpc( agent, data ) | ||
185 | role.activity:checkActivityStatus(now, false, false) | 185 | role.activity:checkActivityStatus(now, false, false) |
186 | role:log("onLogin") | 186 | role:log("onLogin") |
187 | end | 187 | end |
188 | + role:checkTaskEnter("LoginAddUp", {}) | ||
188 | 189 | ||
189 | redisproxy:zadd(FRIEND_RECOMMEND, now, roleId) | 190 | redisproxy:zadd(FRIEND_RECOMMEND, now, roleId) |
190 | 191 | ||
@@ -357,6 +358,14 @@ function _M.loginRpc( agent, data ) | @@ -357,6 +358,14 @@ function _M.loginRpc( agent, data ) | ||
357 | end | 358 | end |
358 | end | 359 | end |
359 | 360 | ||
361 | + local hangPass = role:getProperty("hangPass") | ||
362 | + for _, carbonId in pairs(hangPass) do | ||
363 | + role:checkTaskEnter("HangPass", {id = carbonId}) | ||
364 | + end | ||
365 | + | ||
366 | + role:checkTaskEnter("SSRHeroStarSum", {}) | ||
367 | + role:checkTaskEnter("SRHeroStarSum", {}) | ||
368 | + | ||
360 | return true | 369 | return true |
361 | end | 370 | end |
362 | 371 | ||
@@ -1900,4 +1909,40 @@ function _M.itemConvertDevilTicketRpc(agent, data) | @@ -1900,4 +1909,40 @@ function _M.itemConvertDevilTicketRpc(agent, data) | ||
1900 | return true | 1909 | return true |
1901 | end | 1910 | end |
1902 | 1911 | ||
1912 | +function _M.takeTreasureRpc(agent, data) | ||
1913 | + local role = agent.role | ||
1914 | + local extraCount = role.dailyData:getProperty("treasureExtraCount") --每日发现额外宝藏使用次数(累计),隔天清零 | ||
1915 | + local mapCount = role.dailyData:getProperty("treasureMapCount") | ||
1916 | + local baseExtra = role.dailyData:getProperty("treasureBaseExtra") | ||
1917 | + | ||
1918 | + if extraCount >= globalCsv.idle_treasure_extra_limie then return 1 end | ||
1919 | + if mapCount <= 0 then return 2 end | ||
1920 | + | ||
1921 | + baseExtra = baseExtra + globalCsv.idle_treasure_base_extra | ||
1922 | + | ||
1923 | + local tmpTreasure, treasureListExtra = role.dailyData:getTreasureExtra(baseExtra) | ||
1924 | + if not tmpTreasure then return 3 end | ||
1925 | + | ||
1926 | + role.dailyData:updateProperty({field = "treasureExtraCount", delta = 1}) | ||
1927 | + role.dailyData:updateProperty({field = "treasureBaseExtra", value = mapCount - 1}) | ||
1928 | + role.dailyData:updateProperty({field = "treasureBaseExtra", value = baseExtra}) | ||
1929 | + | ||
1930 | + SendPacket(actionCodes.Role_takeTreasureRpc, MsgPack.pack({treasureListExtra = treasureListExtra, treasure = tmpTreasure})) | ||
1931 | + return true | ||
1932 | +end | ||
1933 | + | ||
1934 | +function _M.treasureMapRpc(agent,data) | ||
1935 | + local role = agent.role | ||
1936 | + local msg = MsgPack.unpack(data) | ||
1937 | + local count = msg.count or 1 | ||
1938 | + local cost ={[ItemId.Jade] = globalCsv.idle_treasure_buy * count} | ||
1939 | + if not role:checkItemEnough(cost) then return 1 end | ||
1940 | + if not role:costItems(cost, {log = {desc = "treasureMap", int1 = count}}) then return 2 end | ||
1941 | + role.dailyData:updateProperty({field = "treasureMapCount", delta = 1*count}) | ||
1942 | + | ||
1943 | + local treasureMapCount = role.dailyData:getProperty("treasureMapCount") | ||
1944 | + SendPacket(actionCodes.Role_treasureMapRpc, MsgPack.pack({mapCount = treasureMapCount})) | ||
1945 | + return true | ||
1946 | +end | ||
1947 | + | ||
1903 | return _M | 1948 | return _M |
1904 | \ No newline at end of file | 1949 | \ No newline at end of file |
src/models/Daily.lua
1 | -- 日常数据 | 1 | -- 日常数据 |
2 | 2 | ||
3 | local Daily = class("Daily", require("shared.ModelBaseMysql")) | 3 | local Daily = class("Daily", require("shared.ModelBaseMysql")) |
4 | - | ||
5 | -oneDay = 60*60*24 | 4 | +local DailyPlugin = import(".DailyPlugin") --宝藏相关 |
5 | +DailyPlugin.bind(Daily) | ||
6 | 6 | ||
7 | function Daily:ctor(properties) | 7 | function Daily:ctor(properties) |
8 | Daily.super.ctor(self, properties) | 8 | Daily.super.ctor(self, properties) |
@@ -37,6 +37,11 @@ Daily.schema = { | @@ -37,6 +37,11 @@ Daily.schema = { | ||
37 | treasureBase = {"number", 0}, -- 资源值 | 37 | treasureBase = {"number", 0}, -- 资源值 |
38 | treasureList = {"table", {}}, --挂机图鉴 | 38 | treasureList = {"table", {}}, --挂机图鉴 |
39 | 39 | ||
40 | + treasureListExtra = {"table", {}}, --额外宝藏,挂机图鉴扩展功能 | ||
41 | + treasureMapCount = {"number", 0}, --宝藏图,消耗一张宝藏图可以发现一次额外宝藏 | ||
42 | + treasureExtraCount = {"number", 0}, --每日发现额外宝藏使用次数(累计),隔天清零 | ||
43 | + treasureBaseExtra = {"number", 0}, --额外宝藏资源值 | ||
44 | + | ||
40 | chatTimes = {"number", 0}, --每日发言次数 | 45 | chatTimes = {"number", 0}, --每日发言次数 |
41 | } | 46 | } |
42 | 47 | ||
@@ -73,7 +78,9 @@ function Daily:refreshDailyData(notify) | @@ -73,7 +78,9 @@ function Daily:refreshDailyData(notify) | ||
73 | elseif field == "treasureBase" then | 78 | elseif field == "treasureBase" then |
74 | dataMap[field] = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum() | 79 | dataMap[field] = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum() |
75 | elseif field == "treasureList" then | 80 | elseif field == "treasureList" then |
76 | - dataMap[field] = self:getTreasrueList() | 81 | + dataMap[field] = self:getTreasureList() |
82 | + elseif field == "treasureExtraCount" then | ||
83 | + dataMap[field] = 0 | ||
77 | elseif field == "pvpBought" then | 84 | elseif field == "pvpBought" then |
78 | dataMap[field] = 0 | 85 | dataMap[field] = 0 |
79 | elseif field ~= "key" then | 86 | elseif field ~= "key" then |
@@ -101,300 +108,6 @@ function Daily:refreshDailyData(notify) | @@ -101,300 +108,6 @@ function Daily:refreshDailyData(notify) | ||
101 | end | 108 | end |
102 | end | 109 | end |
103 | 110 | ||
104 | ---解锁 | ||
105 | -function Daily:checkUnlock(treaval) | ||
106 | - local role = self.owner | ||
107 | - local treasureC = treaval.unlock:toArray(true, "=") | ||
108 | - local show = false | ||
109 | - if treasureC[1] == 1 then --通关关卡 | ||
110 | - show = self.owner:checkHangPass(treasureC[2]) | ||
111 | - elseif treasureC[1] == 2 then --通关拾荒章节=x层 | ||
112 | - show = role:checkAdvChapterPass(treasureC[2]) | ||
113 | - elseif treasureC[1] == 3 then --拥有指定id的角色时 | ||
114 | - local hero = role:getHeroByID(treasureC[2]) | ||
115 | - if hero then show = true end | ||
116 | - else | ||
117 | - show = true | ||
118 | - end | ||
119 | - return show | ||
120 | -end | ||
121 | - | ||
122 | ---CD | ||
123 | -function Daily:checkTreasureExpired(treasureAttr, treasureList) | ||
124 | - local curInfo = treasureList[treasureAttr.id] | ||
125 | - if curInfo then | ||
126 | - -- check finish | ||
127 | - if curInfo["expire_time"] then | ||
128 | - if curInfo.cool_time > 1 then | ||
129 | - if skynet.timex() >= curInfo["expire_time"] then | ||
130 | - treasureList[treasureAttr.id] = nil | ||
131 | - curInfo = clone(treasureAttr) | ||
132 | - elseif skynet.timex() >= curInfo["expire_time"] - curInfo.cool_time * oneDay then --未冷却 | ||
133 | - curInfo = nil | ||
134 | - else | ||
135 | - curInfo = clone(treasureAttr) | ||
136 | - end | ||
137 | - else | ||
138 | - if skynet.timex() >= curInfo["expire_time"] then | ||
139 | - treasureList[treasureAttr.id] = nil | ||
140 | - end | ||
141 | - curInfo = clone(treasureAttr) | ||
142 | - end | ||
143 | - end | ||
144 | - else | ||
145 | - curInfo = clone(treasureAttr) | ||
146 | - end | ||
147 | - | ||
148 | - return curInfo | ||
149 | -end | ||
150 | - | ||
151 | ---资源 | ||
152 | -function Daily:checkTreasureBase(treasureList, treasureBase, removeId) | ||
153 | - local tmptreasure = {} | ||
154 | - local num = 0 | ||
155 | - for k, val in pairs(treasureList) do | ||
156 | - if removeId and val.id == removeId then | ||
157 | - treasureList[k] = nil | ||
158 | - else | ||
159 | - if treasureBase >= val.treasure_value then | ||
160 | - treasureBase = treasureBase - val.treasure_value | ||
161 | - tmptreasure[val.id] = val | ||
162 | - num = num + 1 | ||
163 | - end | ||
164 | - end | ||
165 | - | ||
166 | - end | ||
167 | - return tmptreasure, num | ||
168 | -end | ||
169 | - | ||
170 | ---绑定通关关卡 | ||
171 | -function Daily:checkChapters() | ||
172 | - local chapters = {} | ||
173 | - local tmp_chapters = {} | ||
174 | - local treasureList = self:getProperty("treasureList") | ||
175 | - if next(treasureList) then | ||
176 | - for _, curInfo in pairs(treasureList) do | ||
177 | - if curInfo["expire_time"] or not curInfo["end_time"] then | ||
178 | - tmp_chapters[curInfo.chapter_id] = curInfo | ||
179 | - end | ||
180 | - end | ||
181 | - end | ||
182 | - local hangInfo = self.owner:getProperty("hangInfo") or {} | ||
183 | - for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do | ||
184 | - if chapter_id ~= hangInfo.carbonId then | ||
185 | - if self.owner:checkHangPass(chapter_id) then | ||
186 | - if next(tmp_chapters) and not tmp_chapters[chapter_id] then | ||
187 | - chapters[chapter_id] = val | ||
188 | - else | ||
189 | - chapters[chapter_id] = val | ||
190 | - end | ||
191 | - end | ||
192 | - end | ||
193 | - | ||
194 | - end | ||
195 | - return chapters | ||
196 | -end | ||
197 | - | ||
198 | ---权重 | ||
199 | -function Daily:checkTreasureWeight(treasureList, tmptreasure, treasureBase) | ||
200 | - local removeId | ||
201 | - local chapters = self:checkChapters() | ||
202 | - local treasure | ||
203 | - if next(chapters) == nil then return end | ||
204 | - | ||
205 | - --扣除在挖宝列表里未过期宝藏的资源值 | ||
206 | - for _, val in pairs(treasureList) do | ||
207 | - if not val["expire_time"] then | ||
208 | - treasureBase = treasureBase - val["treasure_value"] | ||
209 | - end | ||
210 | - end | ||
211 | - | ||
212 | - while next(tmptreasure) do | ||
213 | - local tmp, num = self:checkTreasureBase(tmptreasure, treasureBase, removeId) | ||
214 | - | ||
215 | - if num == 0 then | ||
216 | - break | ||
217 | - elseif num == 1 then | ||
218 | - for _, val in pairs(tmp) do | ||
219 | - treasure = val | ||
220 | - end | ||
221 | - else | ||
222 | - local id = math.randWeight(tmp, "weight") --宝藏id | ||
223 | - if not id then | ||
224 | - break | ||
225 | - end | ||
226 | - treasure = tmp[id] | ||
227 | - end | ||
228 | - | ||
229 | - if treasureBase >= treasure.treasure_value then | ||
230 | - --扣除资源值 | ||
231 | - treasureBase = treasureBase - treasure.treasure_value | ||
232 | - else | ||
233 | - break | ||
234 | - end | ||
235 | - local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id | ||
236 | - if not chapterId then | ||
237 | - break | ||
238 | - end | ||
239 | - | ||
240 | - treasure.chapter_id = chapterId | ||
241 | - treasureList[treasure.id] = treasure | ||
242 | - removeId = treasure.id | ||
243 | - end | ||
244 | -end | ||
245 | - | ||
246 | ---chapterId | ||
247 | -function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId) | ||
248 | - local treasure = nil | ||
249 | - | ||
250 | - if not curInfo then | ||
251 | - return treasure | ||
252 | - end | ||
253 | - local treasureBase = self:getProperty("treasureBase") | ||
254 | - | ||
255 | - --开始挖宝关卡ID=挂机关卡ID | ||
256 | - if chapterId == curInfo.chapter_id then | ||
257 | - --开始挖宝 | ||
258 | - if not curInfo["end_time"] then | ||
259 | - curInfo["end_time"] = skynet.timex() + curInfo.working_time | ||
260 | - else | ||
261 | - if skynet.timex() >= curInfo["end_time"] then | ||
262 | - if curInfo.cool_time > 1 then | ||
263 | - --宝藏冷却时间 | ||
264 | - if not curInfo["expire_time"] then | ||
265 | - if treasureBase >= curInfo["treasure_value"] then | ||
266 | - treasureBase = treasureBase - curInfo["treasure_value"] | ||
267 | - | ||
268 | - treasure = treasureList[curInfo.id] | ||
269 | - curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay | ||
270 | - end | ||
271 | - else | ||
272 | - --已经领取宝藏 检索宝藏冷却时间 | ||
273 | - if skynet.timex() >= curInfo["expire_time"] then | ||
274 | - treasureList[curInfo.id] = nil | ||
275 | - end | ||
276 | - end | ||
277 | - else | ||
278 | - if treasureBase >= curInfo["treasure_value"] then | ||
279 | - treasureBase = treasureBase - curInfo["treasure_value"] | ||
280 | - | ||
281 | - treasure = treasureList[curInfo.id] | ||
282 | - treasureList[curInfo.id] = nil | ||
283 | - end | ||
284 | - end | ||
285 | - end | ||
286 | - end | ||
287 | - else | ||
288 | - --已经开始挖宝 | ||
289 | - if curInfo["end_time"] then | ||
290 | - if skynet.timex() >= curInfo["end_time"] then | ||
291 | - if curInfo.cool_time > 1 then | ||
292 | - --宝藏冷却时间 | ||
293 | - if not curInfo["expire_time"] then | ||
294 | - if treasureBase >= curInfo["treasure_value"] then | ||
295 | - treasureBase = treasureBase - curInfo["treasure_value"] | ||
296 | - | ||
297 | - treasure = treasureList[curInfo.id] | ||
298 | - curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay | ||
299 | - end | ||
300 | - | ||
301 | - else | ||
302 | - --已经领取宝藏 检索宝藏冷却时间 | ||
303 | - if skynet.timex() >= curInfo["expire_time"] then | ||
304 | - treasureList[curInfo.id] = nil | ||
305 | - end | ||
306 | - end | ||
307 | - else | ||
308 | - if treasureBase >= curInfo["treasure_value"] then | ||
309 | - treasureBase = treasureBase - curInfo["treasure_value"] | ||
310 | - | ||
311 | - treasure = treasureList[curInfo.id] | ||
312 | - treasureList[curInfo.id] = nil | ||
313 | - end | ||
314 | - end | ||
315 | - else | ||
316 | - curInfo["end_time"] = nil | ||
317 | - end | ||
318 | - end | ||
319 | - end | ||
320 | - return treasure | ||
321 | -end | ||
322 | - | ||
323 | -function Daily:buyTreasure(treasureList) | ||
324 | - local boughtTreasurer = {} | ||
325 | - local treasureBase = self:getProperty("treasureBase") | ||
326 | - for id, val in pairs(treasureList) do | ||
327 | - if treasureBase >= val.treasure_value then | ||
328 | - boughtTreasurer[id] = val | ||
329 | - treasureBase = treasureBase - val.treasure_value | ||
330 | - end | ||
331 | - end | ||
332 | - self:updateProperty({field = "treasureBase", value = treasureBase}) | ||
333 | - return boughtTreasurer | ||
334 | -end | ||
335 | - | ||
336 | ---重置宝藏图鉴 | ||
337 | -function Daily:resetTreasureList() | ||
338 | - self:updateProperty({field = "treasureList", value = {}}) | ||
339 | -end | ||
340 | - | ||
341 | ---宝藏图鉴 | ||
342 | -function Daily:getTreasrueList() | ||
343 | - local tmpcsv = csvdb["idle_treasureCsv"] | ||
344 | - local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新 | ||
345 | - local tmptreasure = {} | ||
346 | - local treasureBase = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum() | ||
347 | - for id, val in pairs(tmpcsv) do | ||
348 | - if self:checkUnlock(val) == true then | ||
349 | - local treasure = self:checkTreasureExpired(val, treasureList) | ||
350 | - if treasure then | ||
351 | - table.insert(tmptreasure, treasure) | ||
352 | - end | ||
353 | - end | ||
354 | - end | ||
355 | - table.sort(tmptreasure, function (a,b) return a.treasure_value > b.treasure_value end) | ||
356 | - | ||
357 | - self:checkTreasureWeight(treasureList, tmptreasure, treasureBase) | ||
358 | - self:updateProperty({field = "treasureList", value = treasureList}) | ||
359 | - self:updateProperty({field = "treasureBase", value = treasureBase}) | ||
360 | - return treasureList | ||
361 | -end | ||
362 | - | ||
363 | - | ||
364 | ---检索挖宝列表 | ||
365 | -function Daily:checkTreasureList(chapterId) | ||
366 | - local treasureList = self:getProperty("treasureList") or {} | ||
367 | - local tmptreasure = {} | ||
368 | - for id, val in pairs(treasureList) do | ||
369 | - local treasure = self:checkTreasureChapterId(val, treasureList, chapterId) | ||
370 | - if treasure ~= nil then | ||
371 | - tmptreasure[id] = treasure | ||
372 | - end | ||
373 | - end | ||
374 | - | ||
375 | - if next(tmptreasure) == nil then | ||
376 | - self:updateProperty({field = "treasureList", value = treasureList}) | ||
377 | - return nil | ||
378 | - end | ||
379 | - local boughtTreasurer = self:buyTreasure(tmptreasure) | ||
380 | - self:updateProperty({field = "treasureList", value = treasureList}) | ||
381 | - return boughtTreasurer | ||
382 | -end | ||
383 | - | ||
384 | ---宝藏加速 | ||
385 | -function Daily:quickTreasureList(chapterId, time) | ||
386 | - local treasureList = self:getProperty("treasureList") or {} | ||
387 | - if next(treasureList) then | ||
388 | - for id, val in pairs(treasureList) do | ||
389 | - if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then | ||
390 | - val["end_time"] = val["end_time"] - time | ||
391 | - end | ||
392 | - end | ||
393 | - end | ||
394 | - self:updateProperty({field = "treasureList", value = treasureList}) | ||
395 | - return self:checkTreasureList(chapterId) | ||
396 | -end | ||
397 | - | ||
398 | function Daily:data() | 111 | function Daily:data() |
399 | return { | 112 | return { |
400 | hangQC = self:getProperty("hangQC"), | 113 | hangQC = self:getProperty("hangQC"), |
@@ -417,6 +130,10 @@ function Daily:data() | @@ -417,6 +130,10 @@ function Daily:data() | ||
417 | curPool = self:getProperty("curPool"), | 130 | curPool = self:getProperty("curPool"), |
418 | treasureBase = self:getProperty("treasureBase"), | 131 | treasureBase = self:getProperty("treasureBase"), |
419 | treasureList = self:getProperty("treasureList"), | 132 | treasureList = self:getProperty("treasureList"), |
133 | + treasureListExtra = self:getProperty("treasureListExtra"), | ||
134 | + treasureMapCount = self:getProperty("treasureMapCount"), | ||
135 | + treasureExtraCount = self:getProperty("treasureExtraCount"), | ||
136 | + treasureBaseExtra = self:getProperty("treasureBaseExtra"), | ||
420 | chatTimes = self:getProperty("chatTimes"), | 137 | chatTimes = self:getProperty("chatTimes"), |
421 | } | 138 | } |
422 | end | 139 | end |
@@ -0,0 +1,402 @@ | @@ -0,0 +1,402 @@ | ||
1 | + | ||
2 | +local DailyPlugin = {} | ||
3 | +oneDay = 60*60*24 | ||
4 | +function DailyPlugin.bind(Daily) | ||
5 | + --解锁 | ||
6 | + function Daily:checkUnlock(treaval) | ||
7 | + local role = self.owner | ||
8 | + local treasureC = treaval.unlock:toArray(true, "=") | ||
9 | + if treasureC[1] == 1 then --通关关卡 | ||
10 | + return self.owner:checkHangPass(treasureC[2]) | ||
11 | + elseif treasureC[1] == 2 then --通关拾荒章节=x层 | ||
12 | + return role:checkAdvChapterPass(treasureC[2]) | ||
13 | + elseif treasureC[1] == 3 then --拥有指定id的角色时 | ||
14 | + local hero = role:getHeroByID(treasureC[2]) | ||
15 | + if hero then return true end | ||
16 | + else | ||
17 | + return true | ||
18 | + end | ||
19 | + return false | ||
20 | + end | ||
21 | + | ||
22 | + --CD | ||
23 | + function Daily:checkTreasureExpired(treasureAttr, treasureList) | ||
24 | + local curInfo = treasureList[treasureAttr.id] | ||
25 | + if curInfo then | ||
26 | + -- check finish | ||
27 | + if curInfo["expire_time"] then | ||
28 | + if curInfo.cool_time > 1 then | ||
29 | + if skynet.timex() >= curInfo["expire_time"] then | ||
30 | + treasureList[treasureAttr.id] = nil | ||
31 | + curInfo = clone(treasureAttr) | ||
32 | + elseif skynet.timex() >= curInfo["expire_time"] - curInfo.cool_time * oneDay then --未冷却 | ||
33 | + curInfo = nil | ||
34 | + else | ||
35 | + curInfo = clone(treasureAttr) | ||
36 | + end | ||
37 | + else | ||
38 | + if skynet.timex() >= curInfo["expire_time"] then | ||
39 | + treasureList[treasureAttr.id] = nil | ||
40 | + end | ||
41 | + curInfo = clone(treasureAttr) | ||
42 | + end | ||
43 | + end | ||
44 | + else | ||
45 | + curInfo = clone(treasureAttr) | ||
46 | + end | ||
47 | + | ||
48 | + return curInfo | ||
49 | + end | ||
50 | + | ||
51 | + --绑定通关关卡 | ||
52 | + function Daily:checkChapters(treasureList, treasureListOther) | ||
53 | + local chapters = {} | ||
54 | + local tmp_chapters = {} | ||
55 | + | ||
56 | + for _, curInfo in pairs(treasureList or {}) do | ||
57 | + if curInfo["expire_time"] or not curInfo["end_time"] then | ||
58 | + tmp_chapters[curInfo.chapter_id] = curInfo | ||
59 | + end | ||
60 | + end | ||
61 | + | ||
62 | + for _, curInfo in pairs(treasureListOther or {}) do | ||
63 | + if curInfo["expire_time"] or not curInfo["end_time"] then | ||
64 | + tmp_chapters[curInfo.chapter_id] = curInfo | ||
65 | + end | ||
66 | + end | ||
67 | + | ||
68 | + local hangInfo = self.owner:getProperty("hangInfo") or {} | ||
69 | + for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do | ||
70 | + if chapter_id ~= hangInfo.carbonId then | ||
71 | + if self.owner:checkHangPass(chapter_id) then | ||
72 | + if next(tmp_chapters) and not tmp_chapters[chapter_id] then | ||
73 | + chapters[chapter_id] = val | ||
74 | + else | ||
75 | + chapters[chapter_id] = val | ||
76 | + end | ||
77 | + end | ||
78 | + end | ||
79 | + | ||
80 | + end | ||
81 | + return chapters | ||
82 | + end | ||
83 | + | ||
84 | + --权重 | ||
85 | + function Daily:checkTreasureWeight(treasureList, tmpTreasure, treasureBase, treasureListOther) | ||
86 | + local chapters = self:checkChapters(treasureList, treasureListOther) | ||
87 | + if not chapters or not next(chapters) then return end | ||
88 | + | ||
89 | + --扣除在挖宝列表里未过期宝藏的资源值 | ||
90 | + for _, val in pairs(treasureList) do | ||
91 | + if not val["expire_time"] then | ||
92 | + treasureBase = treasureBase - val["treasure_value"] | ||
93 | + end | ||
94 | + end | ||
95 | + | ||
96 | + if tmpTreasure and next(tmpTreasure) then | ||
97 | + table.sort(tmpTreasure, function (a, b) return a.treasure_value > b.treasure_value end) | ||
98 | + end | ||
99 | + | ||
100 | + local treasure | ||
101 | + while next(tmpTreasure or {}) do | ||
102 | + local tmp = {} | ||
103 | + local tmpBase = treasureBase | ||
104 | + for _, val in pairs(tmpTreasure) do | ||
105 | + if tmpBase >= val.treasure_value then | ||
106 | + tmpBase = tmpBase - val.treasure_value | ||
107 | + tmp[val.id] = val | ||
108 | + end | ||
109 | + end | ||
110 | + if not next(tmp) then break end | ||
111 | + | ||
112 | + local id = math.randWeight(tmp, "weight") --宝藏id | ||
113 | + if not id then break end | ||
114 | + | ||
115 | + treasure = tmp[id] | ||
116 | + if treasureBase < treasure.treasure_value then break end | ||
117 | + --扣除资源值 | ||
118 | + treasureBase = treasureBase - treasure.treasure_value | ||
119 | + | ||
120 | + local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id | ||
121 | + if not chapterId then break end | ||
122 | + | ||
123 | + treasure.chapter_id = chapterId | ||
124 | + treasureList[treasure.id] = treasure | ||
125 | + | ||
126 | + tmpTreasure[treasure.id] = nil | ||
127 | + chapters[chapterId] = nil | ||
128 | + end | ||
129 | + end | ||
130 | + | ||
131 | + --只抓一个 额外宝藏 | ||
132 | + function Daily:getOneTreasureExtra(treasureList, tmpTreasure, treasureBase, treasureListOther) | ||
133 | + local chapters = self:checkChapters(treasureList, treasureListOther) | ||
134 | + if not chapters or not next(chapters) then return end | ||
135 | + | ||
136 | + --扣除在挖宝列表里未过期宝藏的资源值 | ||
137 | + for _, val in pairs(treasureList) do | ||
138 | + if not val["expire_time"] then | ||
139 | + treasureBase = treasureBase - val["treasure_value"] | ||
140 | + end | ||
141 | + end | ||
142 | + | ||
143 | + if tmpTreasure and next(tmpTreasure) then | ||
144 | + table.sort(tmpTreasure, function (a, b) return a.treasure_value > b.treasure_value end) | ||
145 | + end | ||
146 | + | ||
147 | + local treasure | ||
148 | + local tmp = {} | ||
149 | + local tmpBase = treasureBase | ||
150 | + for _, val in pairs(tmpTreasure) do | ||
151 | + if tmpBase >= val.treasure_value then | ||
152 | + tmpBase = tmpBase - val.treasure_value | ||
153 | + tmp[val.id] = val | ||
154 | + end | ||
155 | + end | ||
156 | + if not next(tmp) then return end | ||
157 | + | ||
158 | + local id = math.randWeight(tmp, "weight") --宝藏id | ||
159 | + if not id then return end | ||
160 | + | ||
161 | + treasure = tmp[id] | ||
162 | + if treasureBase < treasure.treasure_value then return end | ||
163 | + --扣除资源值 | ||
164 | + treasureBase = treasureBase - treasure.treasure_value | ||
165 | + | ||
166 | + local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id | ||
167 | + if not chapterId then return end | ||
168 | + | ||
169 | + | ||
170 | + treasure.chapter_id = chapterId | ||
171 | + treasureList[treasure.id] = treasure | ||
172 | + | ||
173 | + return treasure | ||
174 | + end | ||
175 | + | ||
176 | + --chapterId | ||
177 | + function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId, treasureBase) | ||
178 | + if not curInfo then return nil end | ||
179 | + | ||
180 | + local treasure = nil | ||
181 | + --开始挖宝关卡ID=挂机关卡ID | ||
182 | + if chapterId == curInfo.chapter_id then | ||
183 | + --开始挖宝 | ||
184 | + if not curInfo["end_time"] then | ||
185 | + curInfo["end_time"] = skynet.timex() + curInfo.working_time | ||
186 | + else | ||
187 | + if skynet.timex() >= curInfo["end_time"] then | ||
188 | + if curInfo.cool_time > 1 then | ||
189 | + --宝藏冷却时间 | ||
190 | + if not curInfo["expire_time"] then | ||
191 | + if treasureBase >= curInfo["treasure_value"] then | ||
192 | + treasureBase = treasureBase - curInfo["treasure_value"] | ||
193 | + | ||
194 | + treasure = treasureList[curInfo.id] | ||
195 | + curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay | ||
196 | + end | ||
197 | + else | ||
198 | + --已经领取宝藏 检索宝藏冷却时间 | ||
199 | + if skynet.timex() >= curInfo["expire_time"] then | ||
200 | + treasureList[curInfo.id] = nil | ||
201 | + end | ||
202 | + end | ||
203 | + else | ||
204 | + if treasureBase >= curInfo["treasure_value"] then | ||
205 | + treasureBase = treasureBase - curInfo["treasure_value"] | ||
206 | + | ||
207 | + treasure = treasureList[curInfo.id] | ||
208 | + treasureList[curInfo.id] = nil | ||
209 | + end | ||
210 | + end | ||
211 | + end | ||
212 | + end | ||
213 | + else | ||
214 | + --已经开始挖宝 | ||
215 | + if curInfo["end_time"] then | ||
216 | + if skynet.timex() >= curInfo["end_time"] then | ||
217 | + if curInfo.cool_time > 1 then | ||
218 | + --宝藏冷却时间 | ||
219 | + if not curInfo["expire_time"] then | ||
220 | + if treasureBase >= curInfo["treasure_value"] then | ||
221 | + treasureBase = treasureBase - curInfo["treasure_value"] | ||
222 | + | ||
223 | + treasure = treasureList[curInfo.id] | ||
224 | + curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay | ||
225 | + end | ||
226 | + | ||
227 | + else | ||
228 | + --已经领取宝藏 检索宝藏冷却时间 | ||
229 | + if skynet.timex() >= curInfo["expire_time"] then | ||
230 | + treasureList[curInfo.id] = nil | ||
231 | + end | ||
232 | + end | ||
233 | + else | ||
234 | + if treasureBase >= curInfo["treasure_value"] then | ||
235 | + treasureBase = treasureBase - curInfo["treasure_value"] | ||
236 | + | ||
237 | + treasure = treasureList[curInfo.id] | ||
238 | + treasureList[curInfo.id] = nil | ||
239 | + end | ||
240 | + end | ||
241 | + else | ||
242 | + curInfo["end_time"] = nil | ||
243 | + end | ||
244 | + end | ||
245 | + end | ||
246 | + return treasure | ||
247 | + end | ||
248 | + | ||
249 | + function Daily:buyTreasure(treasureList) | ||
250 | + local boughtTreasure = {} | ||
251 | + local treasureBase = self:getProperty("treasureBase") | ||
252 | + for id, val in pairs(treasureList) do | ||
253 | + if treasureBase >= val.treasure_value then | ||
254 | + boughtTreasure[id] = val | ||
255 | + treasureBase = treasureBase - val.treasure_value | ||
256 | + end | ||
257 | + end | ||
258 | + self:updateProperty({field = "treasureBase", value = treasureBase}) | ||
259 | + return boughtTreasure | ||
260 | + end | ||
261 | + | ||
262 | + --重置宝藏图鉴 | ||
263 | + function Daily:resetTreasureList() | ||
264 | + self:updateProperty({field = "treasureList", value = {}}) | ||
265 | + self:updateProperty({field = "treasureListExtra", value = {}}) | ||
266 | + end | ||
267 | + | ||
268 | + --宝藏图鉴 | ||
269 | + function Daily:getTreasureList() | ||
270 | + local tmpcsv = csvdb["idle_treasureCsv"] | ||
271 | + local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新 | ||
272 | + local treasureListExtra = self:getProperty("treasureListExtra") or {} --额外宝藏列表 过期删除 领取奖励删除 跨天更新 | ||
273 | + local tmpTreasure = {} | ||
274 | + local treasureBase = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum() | ||
275 | + for _, val in pairs(tmpcsv) do | ||
276 | + if self:checkUnlock(val) == true then | ||
277 | + local treasure = self:checkTreasureExpired(val, treasureList) | ||
278 | + if treasure then | ||
279 | + table.insert(tmpTreasure, treasure) | ||
280 | + end | ||
281 | + end | ||
282 | + end | ||
283 | + | ||
284 | + if not next(tmpTreasure) then return treasureList end | ||
285 | + | ||
286 | + self:checkTreasureWeight(treasureList, tmpTreasure, treasureBase, treasureListExtra) | ||
287 | + self:updateProperty({field = "treasureList", value = treasureList}) | ||
288 | + self:updateProperty({field = "treasureBase", value = treasureBase}) | ||
289 | + return treasureList | ||
290 | + end | ||
291 | + | ||
292 | + | ||
293 | + --检索挖宝列表 获得宝藏 | ||
294 | + function Daily:checkTreasureList(chapterId) | ||
295 | + local treasureList = self:getProperty("treasureList") or {} | ||
296 | + local treasureBase = self:getProperty("treasureBase") or {} | ||
297 | + local tmpTreasure = {} | ||
298 | + for id, val in pairs(treasureList) do | ||
299 | + local treasure = self:checkTreasureChapterId(val, treasureList, chapterId, treasureBase) | ||
300 | + if treasure then | ||
301 | + tmpTreasure[id] = treasure | ||
302 | + end | ||
303 | + end | ||
304 | + | ||
305 | + if not next(tmpTreasure) then | ||
306 | + self:updateProperty({field = "treasureList", value = treasureList}) | ||
307 | + return nil | ||
308 | + end | ||
309 | + local boughtTreasure = self:buyTreasure(tmpTreasure) | ||
310 | + self:updateProperty({field = "treasureList", value = treasureList}) | ||
311 | + return boughtTreasure | ||
312 | + end | ||
313 | + | ||
314 | + --宝藏加速 | ||
315 | + function Daily:quickTreasureList(chapterId, time) | ||
316 | + local treasureList = self:getProperty("treasureList") or {} | ||
317 | + if next(treasureList) then | ||
318 | + for _, val in pairs(treasureList) do | ||
319 | + if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then | ||
320 | + val["end_time"] = val["end_time"] - time | ||
321 | + end | ||
322 | + end | ||
323 | + end | ||
324 | + self:updateProperty({field = "treasureList", value = treasureList}) | ||
325 | + return self:checkTreasureList(chapterId) | ||
326 | + end | ||
327 | + | ||
328 | + --宝藏功能优化——增加"发现宝藏"功能 | ||
329 | + function Daily:buyTreasureExtra(treasureList) | ||
330 | + local boughtTreasure = {} | ||
331 | + local treasureBase = self:getProperty("treasureExtraBase") | ||
332 | + for id, val in pairs(treasureList) do | ||
333 | + if treasureBase >= val.treasure_value then | ||
334 | + boughtTreasure[id] = val | ||
335 | + treasureBase = treasureBase - val.treasure_value | ||
336 | + end | ||
337 | + end | ||
338 | + self:updateProperty({field = "treasureExtraBase", value = treasureBase}) | ||
339 | + return boughtTreasure | ||
340 | + end | ||
341 | + | ||
342 | + function Daily:getTreasureExtra(tmpBaseExtra) | ||
343 | + local tmpcsv = csvdb["idle_treasureCsv"] | ||
344 | + local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新 | ||
345 | + local treasureListExtra = self:getProperty("treasureListExtra") or {} --额外宝藏 过期删除 领取奖励删除 跨天更新 | ||
346 | + | ||
347 | + local tmpTreasure = {} | ||
348 | + for _, val in pairs(tmpcsv) do | ||
349 | + if self:checkUnlock(val) then | ||
350 | + local treasure = self:checkTreasureExpired(val, treasureListExtra) | ||
351 | + if treasure then | ||
352 | + table.insert(tmpTreasure, treasure) | ||
353 | + end | ||
354 | + end | ||
355 | + end | ||
356 | + if not next(tmpTreasure) then return nil, treasureListExtra end | ||
357 | + | ||
358 | + local tmp = self:getOneTreasureExtra(treasureListExtra, tmpTreasure, tmpBaseExtra, treasureList) | ||
359 | + self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) | ||
360 | + return tmp, treasureListExtra | ||
361 | + end | ||
362 | + | ||
363 | + --检索宝藏列表 获得额外宝藏 | ||
364 | + function Daily:checkTreasureListExtra(chapterId) | ||
365 | + local treasureListExtra = self:getProperty("treasureListExtra") or {} | ||
366 | + local treasureBaseExtra = self:getProperty("treasureBaseExtra") or {} | ||
367 | + local tmpTreasure = {} | ||
368 | + for id, val in pairs(treasureListExtra) do | ||
369 | + local treasure = self:checkTreasureChapterId(val, treasureListExtra, chapterId, treasureBaseExtra) | ||
370 | + if treasure then | ||
371 | + tmpTreasure[id] = treasure | ||
372 | + end | ||
373 | + end | ||
374 | + | ||
375 | + if next(tmpTreasure) then | ||
376 | + self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) | ||
377 | + return nil | ||
378 | + end | ||
379 | + | ||
380 | + local boughtTreasure = self:buyTreasureExtra(tmpTreasure) | ||
381 | + self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) | ||
382 | + return boughtTreasure | ||
383 | + end | ||
384 | + | ||
385 | + --额外宝藏加速 | ||
386 | + function Daily:quickTreasureListExtra(chapterId, time) | ||
387 | + local treasureListExtra = self:getProperty("treasureListExtra") or {} | ||
388 | + if next(treasureListExtra) then | ||
389 | + for _, val in pairs(treasureListExtra) do | ||
390 | + if val["end_time"] and val["chapter_id"] and chapterId == val["chapter_id"] then | ||
391 | + val["end_time"] = val["end_time"] - time | ||
392 | + end | ||
393 | + end | ||
394 | + end | ||
395 | + | ||
396 | + self:updateProperty({field = "treasureListExtra", value = treasureListExtra}) | ||
397 | + return self:checkTreasureListExtra(chapterId) | ||
398 | + end | ||
399 | +end | ||
400 | + | ||
401 | + | ||
402 | +return DailyPlugin | ||
0 | \ No newline at end of file | 403 | \ No newline at end of file |
src/models/Hero.lua
@@ -19,6 +19,7 @@ Hero.schema = { | @@ -19,6 +19,7 @@ Hero.schema = { | ||
19 | faith = {"number", 0}, -- 信赖 | 19 | faith = {"number", 0}, -- 信赖 |
20 | spark = {"table", {}}, -- 火花属性 | 20 | spark = {"table", {}}, -- 火花属性 |
21 | genius = {"string", "" }, --天赋点 4=10201 5=10201 6=10203 7=10204 | 21 | genius = {"string", "" }, --天赋点 4=10201 5=10201 6=10203 7=10204 |
22 | + trainTs = {"number", 0}, -- 魔鬼训练营截止时间 0为未训练 | ||
22 | } | 23 | } |
23 | 24 | ||
24 | function Hero:ctor( properties ) | 25 | function Hero:ctor( properties ) |
@@ -113,6 +114,7 @@ function Hero:data() | @@ -113,6 +114,7 @@ function Hero:data() | ||
113 | faith = self:getProperty("faith"), | 114 | faith = self:getProperty("faith"), |
114 | spark = self:getProperty("spark"), | 115 | spark = self:getProperty("spark"), |
115 | genius = self:getProperty("genius"), | 116 | genius = self:getProperty("genius"), |
117 | + trainTs = self:getProperty("trainTs"), | ||
116 | } | 118 | } |
117 | end | 119 | end |
118 | 120 |
src/models/Role.lua
@@ -218,6 +218,7 @@ Role.schema = { | @@ -218,6 +218,7 @@ Role.schema = { | ||
218 | worldChangePoints = {"table", {}}, -- 世界变动积分 {[1]= 转盘抽取次数, [2]= 获得的积分, [3]=魔导石消耗, [4]= 虹光玉消耗} | 218 | worldChangePoints = {"table", {}}, -- 世界变动积分 {[1]= 转盘抽取次数, [2]= 获得的积分, [3]=魔导石消耗, [4]= 虹光玉消耗} |
219 | worldLineReward = {"table", {}}, -- 世界积分 领取记录 {[id] = 1} | 219 | worldLineReward = {"table", {}}, -- 世界积分 领取记录 {[id] = 1} |
220 | del = {"number", 0}, -- 标记删除 0=未删除,1=已删除 | 220 | del = {"number", 0}, -- 标记删除 0=未删除,1=已删除 |
221 | + trainTask = {"table", {}}, -- 训练营任务 | ||
221 | } | 222 | } |
222 | 223 | ||
223 | 224 | ||
@@ -463,6 +464,7 @@ function Role:data() | @@ -463,6 +464,7 @@ function Role:data() | ||
463 | bgId = self:getProperty("bgId"), | 464 | bgId = self:getProperty("bgId"), |
464 | worldChangePoints = self:getProperty("worldChangePoints"), | 465 | worldChangePoints = self:getProperty("worldChangePoints"), |
465 | worldLineReward = self:getProperty("worldLineReward"), | 466 | worldLineReward = self:getProperty("worldLineReward"), |
467 | + trainTask = self:getProperty("trainTask"), | ||
466 | } | 468 | } |
467 | end | 469 | end |
468 | 470 |
src/models/RoleLog.lua
@@ -74,6 +74,9 @@ local ItemReason = { | @@ -74,6 +74,9 @@ local ItemReason = { | ||
74 | regularWorldBossMilestone = 158, -- 常规世界boss伤害里程碑 | 74 | regularWorldBossMilestone = 158, -- 常规世界boss伤害里程碑 |
75 | regularWorldBossBattle = 159, -- 常规世界boss战斗奖励 | 75 | regularWorldBossBattle = 159, -- 常规世界boss战斗奖励 |
76 | itemConvertDevilTicket = 160, -- 兑换魔鬼训练营门票 | 76 | itemConvertDevilTicket = 160, -- 兑换魔鬼训练营门票 |
77 | + trainHero = 161, -- 魔鬼训练开始 | ||
78 | + trainQuickHero = 162, -- 魔鬼训练加速 | ||
79 | + treasureMap = 163, --虹光玉兑换宝藏图 | ||
77 | 80 | ||
78 | 81 | ||
79 | 82 |
src/models/RolePlugin.lua
@@ -185,6 +185,8 @@ function RolePlugin.bind(Role) | @@ -185,6 +185,8 @@ function RolePlugin.bind(Role) | ||
185 | itemType = itemCfg.type | 185 | itemType = itemCfg.type |
186 | end | 186 | end |
187 | self:checkTaskEnter("AddItem", {id = itemId, count = count, type = itemType}) | 187 | self:checkTaskEnter("AddItem", {id = itemId, count = count, type = itemType}) |
188 | + elseif count < 0 then | ||
189 | + self:checkTaskEnter("CostItem", {id = itemId, count = count}) | ||
188 | end | 190 | end |
189 | -- 对数量筛查 | 191 | -- 对数量筛查 |
190 | count = checkItemCount(self, itemId, count) | 192 | count = checkItemCount(self, itemId, count) |
@@ -647,6 +649,8 @@ function RolePlugin.bind(Role) | @@ -647,6 +649,8 @@ function RolePlugin.bind(Role) | ||
647 | self:checkTaskEnter("AddHero", {heroType = heroType, wakeL = newHero:getProperty("wakeL"), camp = unitData.camp, job = unitData.job, ssrCount = ssrCount}, params.notNotify) | 649 | self:checkTaskEnter("AddHero", {heroType = heroType, wakeL = newHero:getProperty("wakeL"), camp = unitData.camp, job = unitData.job, ssrCount = ssrCount}, params.notNotify) |
648 | self:checkTaskEnter("HeroQualityCollect", {}) | 650 | self:checkTaskEnter("HeroQualityCollect", {}) |
649 | self:checkTaskEnter("HeroStartSum", {}) | 651 | self:checkTaskEnter("HeroStartSum", {}) |
652 | + self:checkTaskEnter("SSRHeroStarSum", {}) | ||
653 | + self:checkTaskEnter("SRHeroStarSum", {}) | ||
650 | 654 | ||
651 | if not params.notNotify then | 655 | if not params.notNotify then |
652 | local heroResponse = {} | 656 | local heroResponse = {} |
@@ -2315,6 +2319,18 @@ function RolePlugin.bind(Role) | @@ -2315,6 +2319,18 @@ function RolePlugin.bind(Role) | ||
2315 | -- end | 2319 | -- end |
2316 | -- end | 2320 | -- end |
2317 | 2321 | ||
2322 | + --月卡-特刊加判断; | ||
2323 | + -- 问题描述: 支付回调里订单支付完成,但是没有奖励,对应的特刊也没有购买成功。 | ||
2324 | + -- 避免这种情况发生,在生成订单的时候就判断是否能购买特刊,生成对应的订单id | ||
2325 | + if rechargeData.shop == 2 and rechargeData.type == CardType.SuperMonthCard then | ||
2326 | + local card = csvdb["shop_cardCsv"][rechargeData.id] | ||
2327 | + if not card then return "" end | ||
2328 | + | ||
2329 | + if not self.storeData:buySMonthCardLimit(card["buyLimit"]) then | ||
2330 | + return "" | ||
2331 | + end | ||
2332 | + end | ||
2333 | + | ||
2318 | local orderId = redisproxy:hincrby("autoincrement_set", "order", 1) | 2334 | local orderId = redisproxy:hincrby("autoincrement_set", "order", 1) |
2319 | local uid = orderId * MAX_SVR_ID + serverId | 2335 | local uid = orderId * MAX_SVR_ID + serverId |
2320 | local partnerOrderId = string.format("%d", orderId * MAX_SVR_ID + serverId) | 2336 | local partnerOrderId = string.format("%d", orderId * MAX_SVR_ID + serverId) |
src/models/RoleTask.lua
@@ -19,6 +19,8 @@ local TaskType = { | @@ -19,6 +19,8 @@ local TaskType = { | ||
19 | DrawHeroLimitPack = 14, -- 抽卡限时礼貌 -- count | 19 | DrawHeroLimitPack = 14, -- 抽卡限时礼貌 -- count |
20 | HeroStartSum = 15, -- 英雄星级总数 | 20 | HeroStartSum = 15, -- 英雄星级总数 |
21 | WakeCGSum = 16, -- 累计解锁xx张CG | 21 | WakeCGSum = 16, -- 累计解锁xx张CG |
22 | + SSRHeroStarSum = 17, -- SSR英雄星级总数 | ||
23 | + SRHeroStarSum = 18, -- SR英雄星级总数 | ||
22 | 24 | ||
23 | 25 | ||
24 | --装备相关 | 26 | --装备相关 |
@@ -117,6 +119,8 @@ local TaskType = { | @@ -117,6 +119,8 @@ local TaskType = { | ||
117 | Rename = 913, -- 重命名 | 119 | Rename = 913, -- 重命名 |
118 | CostJade = 914, -- 消耗虹光玉 | 120 | CostJade = 914, -- 消耗虹光玉 |
119 | BuyLimitPack = 915, -- 购买指定id礼包触发 | 121 | BuyLimitPack = 915, -- 购买指定id礼包触发 |
122 | + CostItem = 916, -- 消耗道具 | ||
123 | + LoginAddUp = 917, -- 累计登录 | ||
120 | 124 | ||
121 | --功能未实现 todo | 125 | --功能未实现 todo |
122 | AdvShop = 1002, -- 冒险商城 | 126 | AdvShop = 1002, -- 冒险商城 |
@@ -333,6 +337,7 @@ local CalendaTaskListener = { | @@ -333,6 +337,7 @@ local CalendaTaskListener = { | ||
333 | [TaskType.CostJade] = {{43, 1, f("count")}}, | 337 | [TaskType.CostJade] = {{43, 1, f("count")}}, |
334 | [TaskType.HeroStartSum] = {{44, 3}}, | 338 | [TaskType.HeroStartSum] = {{44, 3}}, |
335 | [TaskType.WakeCGSum] = {{45, 1, f("count")}}, | 339 | [TaskType.WakeCGSum] = {{45, 1, f("count")}}, |
340 | + [TaskType.LoginAddUp] = {{46, 1}}, | ||
336 | } | 341 | } |
337 | } | 342 | } |
338 | 343 | ||
@@ -351,6 +356,16 @@ local ReturnerTask = { | @@ -351,6 +356,16 @@ local ReturnerTask = { | ||
351 | listen = CalendaTaskListener["listen"] | 356 | listen = CalendaTaskListener["listen"] |
352 | } | 357 | } |
353 | 358 | ||
359 | +local TraningCampTask = { | ||
360 | + func = "checkTraingCampTask", | ||
361 | + listen = { | ||
362 | + [TaskType.HangPass]= {{1, 3}}, | ||
363 | + [TaskType.SSRHeroStarSum] = {{2, 3}}, | ||
364 | + [TaskType.SRHeroStarSum] = {{3, 3}}, | ||
365 | + [TaskType.CostItem] = {{4, 3, f("id"), f("count")}}, | ||
366 | + } | ||
367 | +} | ||
368 | + | ||
354 | local TaskListeners = { | 369 | local TaskListeners = { |
355 | StoryListener, | 370 | StoryListener, |
356 | CommonListener, | 371 | CommonListener, |
@@ -362,6 +377,7 @@ local TaskListeners = { | @@ -362,6 +377,7 @@ local TaskListeners = { | ||
362 | BattleCommandTaskListener, | 377 | BattleCommandTaskListener, |
363 | ReturnerTask, | 378 | ReturnerTask, |
364 | NewUserTaskListener, | 379 | NewUserTaskListener, |
380 | + TraningCampTask, | ||
365 | } | 381 | } |
366 | 382 | ||
367 | local RoleTask = {} | 383 | local RoleTask = {} |
@@ -900,6 +916,52 @@ function RoleTask.bind(Role) | @@ -900,6 +916,52 @@ function RoleTask.bind(Role) | ||
900 | self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2) | 916 | self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2) |
901 | end | 917 | end |
902 | 918 | ||
919 | + function Role:checkTraingCampTask(notNotify, mainType, subType, param1, param2) | ||
920 | + local trainTask = self:getProperty("trainTask") or {} | ||
921 | + param1 = param1 or 1 | ||
922 | + for id, cfg in pairs(csvdb["training_camp_taskCsv"]) do | ||
923 | + if cfg.type == mainType then | ||
924 | + if subType == 1 then -- 增加数值 | ||
925 | + trainTask[id] = (trainTask[id] or 0) + param1 | ||
926 | + elseif subType == 2 then -- 直接赋值 | ||
927 | + trainTask[id] = param1 | ||
928 | + elseif subType == 3 then -- 自定义类型 | ||
929 | + if cfg.type == 1 then -- 通关关卡 | ||
930 | + if (trainTask[id] or 0) == 0 then | ||
931 | + if self:checkHangPass(cfg.condition2) then | ||
932 | + trainTask[id] = 1 | ||
933 | + end | ||
934 | + end | ||
935 | + elseif cfg.type == 2 then --玩家拥有SR拾荒者总星级达到xxx | ||
936 | + local count = 0 | ||
937 | + for _, hero in pairs(self.heros) do | ||
938 | + if hero:getRare() == HeroQuality.SR then | ||
939 | + count = count + hero:getProperty("wakeL") | ||
940 | + end | ||
941 | + end | ||
942 | + if (trainTask[id] or 0) < count then | ||
943 | + trainTask[id] = count | ||
944 | + end | ||
945 | + elseif cfg.type == 3 then --玩家拥有SR拾荒者总星级达到xxx | ||
946 | + local count = 0 | ||
947 | + for _, hero in pairs(self.heros) do | ||
948 | + if hero:getRare() == HeroQuality.SSR then | ||
949 | + count = count + hero:getProperty("wakeL") | ||
950 | + end | ||
951 | + end | ||
952 | + if (trainTask[id] or 0) < count then | ||
953 | + trainTask[id] = count | ||
954 | + end | ||
955 | + elseif cfg.type == 4 then -- 消耗指定id道具多少个 | ||
956 | + -- if cfg.condition2 == param1 then | ||
957 | + -- trainTask[id] = (trainTask[id] or 0) + (param2 or 0) | ||
958 | + -- end | ||
959 | + end | ||
960 | + end | ||
961 | + end | ||
962 | + end | ||
963 | + self:updateProperty({field = "trainTask", value = trainTask, notNotify = notNotify}) | ||
964 | + end | ||
903 | end | 965 | end |
904 | 966 | ||
905 | return RoleTask | 967 | return RoleTask |
src/models/Store.lua
@@ -342,26 +342,26 @@ function Store:isSMonthCardExpired(id) | @@ -342,26 +342,26 @@ function Store:isSMonthCardExpired(id) | ||
342 | end | 342 | end |
343 | 343 | ||
344 | function Store:buySMonthCardLimit(buylimit) | 344 | function Store:buySMonthCardLimit(buylimit) |
345 | + if not buylimit or buylimit == "" then return true end | ||
346 | + | ||
345 | local smonthCards = self:getProperty("smonthCards") or {} | 347 | local smonthCards = self:getProperty("smonthCards") or {} |
346 | - for k, v in pairs(buylimit) do | 348 | + for k, v in pairs(buylimit:toNumMap() or {}) do |
347 | if k == 1 then | 349 | if k == 1 then |
348 | if v == 101 then | 350 | if v == 101 then |
349 | if self:isMonthCardExpire() then | 351 | if self:isMonthCardExpire() then |
350 | - skynet.error("月卡过期") | ||
351 | return false | 352 | return false |
352 | end | 353 | end |
353 | else | 354 | else |
354 | - if smonthCards[v] == nil then | ||
355 | - skynet.error("没有购买增刊里的条件, %d", v) | 355 | + if not smonthCards[v] then |
356 | return false | 356 | return false |
357 | end | 357 | end |
358 | end | 358 | end |
359 | elseif k == 2 then | 359 | elseif k == 2 then |
360 | - if smonthCards[v] == nil and v ~= 101 then | 360 | + if not smonthCards[v] then |
361 | skynet.error("没有购买增刊条件里的特刊, %d", v) | 361 | skynet.error("没有购买增刊条件里的特刊, %d", v) |
362 | return false | 362 | return false |
363 | end | 363 | end |
364 | - if self:isSMonthCardExpired(v) == false and v ~= 101 then | 364 | + if not self:isSMonthCardExpired(v) then |
365 | skynet.error("上期特刊奖励没领完") --策划yc+hbw 没领完上期特刊,新一期特刊不展示,不允许购买 | 365 | skynet.error("上期特刊奖励没领完") --策划yc+hbw 没领完上期特刊,新一期特刊不展示,不允许购买 |
366 | return false | 366 | return false |
367 | end | 367 | end |
@@ -372,18 +372,17 @@ end | @@ -372,18 +372,17 @@ end | ||
372 | 372 | ||
373 | function Store:buySMonthCard(id) | 373 | function Store:buySMonthCard(id) |
374 | local smonthCards = self:getProperty("smonthCards") or {} | 374 | local smonthCards = self:getProperty("smonthCards") or {} |
375 | + local card = csvdb["shop_cardCsv"][id] | ||
376 | + if not card then return false end | ||
377 | + | ||
378 | + if not self:buySMonthCardLimit(card["buyLimit"]) then | ||
379 | + skynet.error("不满足购买条件") | ||
380 | + return false | ||
381 | + end | ||
375 | 382 | ||
376 | local BuyMonthCard = {} | 383 | local BuyMonthCard = {} |
377 | BuyMonthCard["renewal"]= function() | 384 | BuyMonthCard["renewal"]= function() |
378 | --续刊 | 385 | --续刊 |
379 | - local card = csvdb["shop_cardCsv"][id] or {} | ||
380 | - if card["buyLimit"] and card["buyLimit"] ~= "" then | ||
381 | - if not self:buySMonthCardLimit(card["buyLimit"]:toNumMap()) then | ||
382 | - skynet.error("不满足购买条件") | ||
383 | - return false | ||
384 | - end | ||
385 | - end | ||
386 | - | ||
387 | local smonthCard = smonthCards[id] or {} | 386 | local smonthCard = smonthCards[id] or {} |
388 | if next(smonthCard) then | 387 | if next(smonthCard) then |
389 | smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1 | 388 | smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1 |
@@ -397,14 +396,6 @@ function Store:buySMonthCard(id) | @@ -397,14 +396,6 @@ function Store:buySMonthCard(id) | ||
397 | 396 | ||
398 | BuyMonthCard["order"] = function() | 397 | BuyMonthCard["order"] = function() |
399 | --增刊 | 398 | --增刊 |
400 | - local card = csvdb["shop_cardCsv"][id] or {} | ||
401 | - if card["buyLimit"] and card["buyLimit"] ~= "" then | ||
402 | - if not self:buySMonthCardLimit(card["buyLimit"]:toNumMap()) then | ||
403 | - skynet.error("不满足增刊条件") | ||
404 | - return false | ||
405 | - end | ||
406 | - end | ||
407 | - | ||
408 | smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1} | 399 | smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1} |
409 | self:updateProperty({field= "smonthCards", value = smonthCards}) | 400 | self:updateProperty({field= "smonthCards", value = smonthCards}) |
410 | return true | 401 | return true |