Commit df622b85a5b7918c3de099fce0fa87fd3a93d83d
1 parent
9a6d3ed3
魔鬼训练营相关
Showing
9 changed files
with
254 additions
and
12 deletions
Show diff stats
src/ProtocolCode.lua
| ... | ... | @@ -121,6 +121,10 @@ actionCodes = { |
| 121 | 121 | Hero_changeSparkRpc = 227, |
| 122 | 122 | Hero_saveGeniusTreeRpc = 228, |
| 123 | 123 | Hero_stickersConvertRpc = 229, --兑换英雄贴纸 |
| 124 | + Hero_trainStartRpc = 230, --开始魔鬼训练 | |
| 125 | + Hero_trainFinishRpc = 231, | |
| 126 | + Hero_trainTaskRewardRpc = 232, --领取魔鬼训练营任务 | |
| 127 | + Hero_trainQuickRpc = 233, --魔鬼训练营加速 | |
| 124 | 128 | |
| 125 | 129 | Hang_startRpc = 251, |
| 126 | 130 | Hang_checkRpc = 252, | ... | ... |
src/actions/GmAction.lua
| ... | ... | @@ -688,19 +688,36 @@ function _M.test(role, pms) |
| 688 | 688 | if id > 100 then |
| 689 | 689 | actid = tonum(pms.pm2, 0) |
| 690 | 690 | end |
| 691 | - --local hero = require ("actions.HeroAction") | |
| 692 | - --hero.unlockPoolRpc({role = role}, MsgPack.pack({type = id})) | |
| 691 | + --if id == 1 then | |
| 692 | + -- local hero = require ("actions.HeroAction") | |
| 693 | + -- local ret = hero.trainStartRpc({role = role}, MsgPack.pack({id = 1})) | |
| 694 | + -- if ret ~= true then | |
| 695 | + -- return ret | |
| 696 | + -- end | |
| 697 | + --elseif id == 2 then | |
| 698 | + -- local hero = require ("actions.HeroAction") | |
| 699 | + -- local ret = hero.trainFinishRpc({role = role}, MsgPack.pack({id = 1})) | |
| 700 | + -- if ret ~= true then | |
| 701 | + -- return ret | |
| 702 | + -- end | |
| 703 | + --elseif id == 3 then | |
| 704 | + -- local hero = require ("actions.HeroAction") | |
| 705 | + -- local ret = hero.trainQuickRpc({role = role}, MsgPack.pack({id = 1})) | |
| 706 | + -- if ret ~= true then | |
| 707 | + -- return ret | |
| 708 | + -- end | |
| 709 | + --end | |
| 693 | 710 | |
| 694 | 711 | --role:sendMail(13, nil, "1=2", {111}) |
| 695 | - local file = io.open("draw_hero_"..id..".csv", "a") | |
| 696 | - for i=1, 10000 do | |
| 697 | - local heroIds = _M.drawHero(role, id, actid) | |
| 698 | - for k, v in ipairs(heroIds) do | |
| 699 | - print((i - 1)* 10 + k, v) | |
| 700 | - file:write(v.."\n") | |
| 701 | - end | |
| 702 | - end | |
| 703 | - io.close(file) | |
| 712 | + --local file = io.open("draw_hero_"..id..".csv", "a") | |
| 713 | + --for i=1, 10000 do | |
| 714 | + -- local heroIds = _M.drawHero(role, id, actid) | |
| 715 | + -- for k, v in ipairs(heroIds) do | |
| 716 | + -- print((i - 1)* 10 + k, v) | |
| 717 | + -- file:write(v.."\n") | |
| 718 | + -- end | |
| 719 | + --end | |
| 720 | + --io.close(file) | |
| 704 | 721 | return "成功" |
| 705 | 722 | end |
| 706 | 723 | ... | ... |
src/actions/HeroAction.lua
| ... | ... | @@ -117,6 +117,8 @@ function _M.wakeRpc(agent, data) |
| 117 | 117 | local hero = role.heros[msg.id] |
| 118 | 118 | if not hero then return 1 end |
| 119 | 119 | if hero:getProperty("wakeL") >= #csvdb["unit_wakeCsv"] then return 2 end |
| 120 | + if hero:getProperty("trainTs") ~= 0 then return 9 end | |
| 121 | + | |
| 120 | 122 | local typ = hero:getProperty("type") |
| 121 | 123 | local wakeData = csvdb["unit_wakeCsv"][hero:getProperty("wakeL")] |
| 122 | 124 | if not wakeData then return 3 end |
| ... | ... | @@ -180,6 +182,8 @@ function _M.wakeRpc(agent, data) |
| 180 | 182 | |
| 181 | 183 | role:checkTaskEnter("HeroStarCollect", {}) |
| 182 | 184 | role:checkTaskEnter("HeroStartSum", {}) |
| 185 | + role:checkTaskEnter("SSRHeroStarSum", {}) | |
| 186 | + role:checkTaskEnter("SRHeroStarSum", {}) | |
| 183 | 187 | return true |
| 184 | 188 | end |
| 185 | 189 | |
| ... | ... | @@ -1435,4 +1439,149 @@ function _M.stickersConvertRpc(agent, data) |
| 1435 | 1439 | return true |
| 1436 | 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.actCalendaTaskRpc(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 | + if not taskCfg then return 2 end | |
| 1572 | + | |
| 1573 | + if (trainTask[taskId] or 0) < taskCfg.condition1 then return 3 end | |
| 1574 | + | |
| 1575 | + record[taskId] = 1 | |
| 1576 | + trainTask["r"] = record | |
| 1577 | + | |
| 1578 | + role:updateProperty({field = "trainTask", value = trainTask}) | |
| 1579 | + | |
| 1580 | + local reward, change = role:award(taskCfg.reward, {log = {desc = "trainTask"}}) | |
| 1581 | + | |
| 1582 | + SendPacket(actionCodes.Hero_trainTaskRewardRpc, MsgPack.pack(role:packReward(reward, change))) | |
| 1583 | + | |
| 1584 | + return true | |
| 1585 | +end | |
| 1586 | + | |
| 1438 | 1587 | return _M | ... | ... |
src/models/Hero.lua
| ... | ... | @@ -19,6 +19,7 @@ Hero.schema = { |
| 19 | 19 | faith = {"number", 0}, -- 信赖 |
| 20 | 20 | spark = {"table", {}}, -- 火花属性 |
| 21 | 21 | genius = {"string", "" }, --天赋点 4=10201 5=10201 6=10203 7=10204 |
| 22 | + trainTs = {"number", 0}, -- 魔鬼训练营截止时间 0为未训练 | |
| 22 | 23 | } |
| 23 | 24 | |
| 24 | 25 | function Hero:ctor( properties ) |
| ... | ... | @@ -113,6 +114,7 @@ function Hero:data() |
| 113 | 114 | faith = self:getProperty("faith"), |
| 114 | 115 | spark = self:getProperty("spark"), |
| 115 | 116 | genius = self:getProperty("genius"), |
| 117 | + trainTs = self:getProperty("trainTs"), | |
| 116 | 118 | } |
| 117 | 119 | end |
| 118 | 120 | ... | ... |
src/models/Role.lua
| ... | ... | @@ -218,6 +218,7 @@ Role.schema = { |
| 218 | 218 | worldChangePoints = {"table", {}}, -- 世界变动积分 {[1]= 转盘抽取次数, [2]= 获得的积分, [3]=魔导石消耗, [4]= 虹光玉消耗} |
| 219 | 219 | worldLineReward = {"table", {}}, -- 世界积分 领取记录 {[id] = 1} |
| 220 | 220 | del = {"number", 0}, -- 标记删除 0=未删除,1=已删除 |
| 221 | + trainTask = {"table", {}}, -- 训练营任务 | |
| 221 | 222 | } |
| 222 | 223 | |
| 223 | 224 | |
| ... | ... | @@ -463,6 +464,7 @@ function Role:data() |
| 463 | 464 | bgId = self:getProperty("bgId"), |
| 464 | 465 | worldChangePoints = self:getProperty("worldChangePoints"), |
| 465 | 466 | worldLineReward = self:getProperty("worldLineReward"), |
| 467 | + trainTask = self:getProperty("trainTask"), | |
| 466 | 468 | } |
| 467 | 469 | end |
| 468 | 470 | ... | ... |
src/models/RoleLog.lua
src/models/RolePlugin.lua
| ... | ... | @@ -185,6 +185,8 @@ function RolePlugin.bind(Role) |
| 185 | 185 | itemType = itemCfg.type |
| 186 | 186 | end |
| 187 | 187 | self:checkTaskEnter("AddItem", {id = itemId, count = count, type = itemType}) |
| 188 | + elseif count < 0 then | |
| 189 | + self:checkTaskEnter("CostItem", {id = itemId, count = count}) | |
| 188 | 190 | end |
| 189 | 191 | -- 对数量筛查 |
| 190 | 192 | count = checkItemCount(self, itemId, count) |
| ... | ... | @@ -647,6 +649,8 @@ function RolePlugin.bind(Role) |
| 647 | 649 | self:checkTaskEnter("AddHero", {heroType = heroType, wakeL = newHero:getProperty("wakeL"), camp = unitData.camp, job = unitData.job, ssrCount = ssrCount}, params.notNotify) |
| 648 | 650 | self:checkTaskEnter("HeroQualityCollect", {}) |
| 649 | 651 | self:checkTaskEnter("HeroStartSum", {}) |
| 652 | + self:checkTaskEnter("SSRHeroStarSum", {}) | |
| 653 | + self:checkTaskEnter("SRHeroStarSum", {}) | |
| 650 | 654 | |
| 651 | 655 | if not params.notNotify then |
| 652 | 656 | local heroResponse = {} | ... | ... |
src/models/RoleTask.lua
| ... | ... | @@ -19,6 +19,8 @@ local TaskType = { |
| 19 | 19 | DrawHeroLimitPack = 14, -- 抽卡限时礼貌 -- count |
| 20 | 20 | HeroStartSum = 15, -- 英雄星级总数 |
| 21 | 21 | WakeCGSum = 16, -- 累计解锁xx张CG |
| 22 | + SSRHeroStarSum = 17, -- SSR英雄星级总数 | |
| 23 | + SRHeroStarSum = 18, -- SR英雄星级总数 | |
| 22 | 24 | |
| 23 | 25 | |
| 24 | 26 | --装备相关 |
| ... | ... | @@ -117,6 +119,7 @@ local TaskType = { |
| 117 | 119 | Rename = 913, -- 重命名 |
| 118 | 120 | CostJade = 914, -- 消耗虹光玉 |
| 119 | 121 | BuyLimitPack = 915, -- 购买指定id礼包触发 |
| 122 | + CostItem = 916, -- 消耗道具 | |
| 120 | 123 | |
| 121 | 124 | --功能未实现 todo |
| 122 | 125 | AdvShop = 1002, -- 冒险商城 |
| ... | ... | @@ -351,6 +354,16 @@ local ReturnerTask = { |
| 351 | 354 | listen = CalendaTaskListener["listen"] |
| 352 | 355 | } |
| 353 | 356 | |
| 357 | +local TraningCampTask = { | |
| 358 | + func = "checkTraingCampTask", | |
| 359 | + listen = { | |
| 360 | + [TaskType.HangPass]= {{1, 3}}, | |
| 361 | + [TaskType.SSRHeroStarSum] = {{2, 3}}, | |
| 362 | + [TaskType.SRHeroStarSum] = {{3, 3}}, | |
| 363 | + [TaskType.CostItem] = {{4, 3, f("id"), f("count")}}, | |
| 364 | + } | |
| 365 | +} | |
| 366 | + | |
| 354 | 367 | local TaskListeners = { |
| 355 | 368 | StoryListener, |
| 356 | 369 | CommonListener, |
| ... | ... | @@ -362,6 +375,7 @@ local TaskListeners = { |
| 362 | 375 | BattleCommandTaskListener, |
| 363 | 376 | ReturnerTask, |
| 364 | 377 | NewUserTaskListener, |
| 378 | + TraningCampTask, | |
| 365 | 379 | } |
| 366 | 380 | |
| 367 | 381 | local RoleTask = {} |
| ... | ... | @@ -900,6 +914,54 @@ function RoleTask.bind(Role) |
| 900 | 914 | self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2) |
| 901 | 915 | end |
| 902 | 916 | |
| 917 | + function Role:checkTraingCampTask(notNotify, mainType, subType, param1, param2) | |
| 918 | + local trainTask = self:getProperty("trainTask") or {} | |
| 919 | + param1 = param1 or 1 | |
| 920 | + | |
| 921 | + for id, cfg in pairs(csvdb["training_camp_taskCsv"]) do | |
| 922 | + if cfg.type == mainType then | |
| 923 | + if subType == 1 then -- 增加数值 | |
| 924 | + trainTask[id] = (trainTask[id] or 0) + param1 | |
| 925 | + elseif subType == 2 then -- 直接赋值 | |
| 926 | + trainTask[id] = param1 | |
| 927 | + elseif subType == 3 then -- 自定义类型 | |
| 928 | + if cfg.type == 1 then -- 通关关卡 | |
| 929 | + if (trainTask[id] or 0) == 0 then | |
| 930 | + if self:checkHangPass(cfg.condition2) then | |
| 931 | + trainTask[id] = 1 | |
| 932 | + end | |
| 933 | + end | |
| 934 | + elseif cfg.type == 2 then --玩家拥有SR拾荒者总星级达到xxx | |
| 935 | + local count = 0 | |
| 936 | + for _, hero in pairs(self.heros) do | |
| 937 | + if hero:getRare() == HeroQuality.SR then | |
| 938 | + count = count + hero:getProperty("wakeL") | |
| 939 | + end | |
| 940 | + end | |
| 941 | + if (trainTask[id] or 0) < count then | |
| 942 | + trainTask[id] = count | |
| 943 | + end | |
| 944 | + elseif cfg.type == 3 then --玩家拥有SR拾荒者总星级达到xxx | |
| 945 | + local count = 0 | |
| 946 | + for _, hero in pairs(self.heros) do | |
| 947 | + if hero:getRare() == HeroQuality.SSR then | |
| 948 | + count = count + hero:getProperty("wakeL") | |
| 949 | + end | |
| 950 | + end | |
| 951 | + if (trainTask[id] or 0) < count then | |
| 952 | + trainTask[id] = count | |
| 953 | + end | |
| 954 | + elseif cfg.type == 4 then -- 消耗指定id道具多少个 | |
| 955 | + if cfg.condition2 == param1 then | |
| 956 | + trainTask[id] = (trainTask[id] or 0) + (param2 or 0) | |
| 957 | + end | |
| 958 | + end | |
| 959 | + end | |
| 960 | + end | |
| 961 | + end | |
| 962 | + self:updateProperty({field = "trainTask", value = trainTask, notNotify = notNotify}) | |
| 963 | + end | |
| 964 | + | |
| 903 | 965 | end |
| 904 | 966 | |
| 905 | 967 | return RoleTask | ... | ... |