Commit 49f617d971b1ee6cf3cf990203fae2b8ff1a1c79

Authored by liuzujun
2 parents d02210ec a5b00e35

Merge branch 'cn/develop' into cn/publish/zhaolu

src/ProtocolCode.lua
... ... @@ -67,6 +67,8 @@ actionCodes = {
67 67 Role_itemConvertDevilTicketRpc = 148, -- 兑换魔鬼训练营门票
68 68 Role_unRegisterRpc = 149, --注销账号
69 69 Role_searchAllRoleRpc = 150, --查询所有服的角色信息
  70 + Role_takeTreasureRpc = 151, --抓取额外宝藏
  71 + Role_treasureMapRpc = 152, --兑换宝藏图
70 72  
71 73 Adv_startAdvRpc = 151,
72 74 Adv_startHangRpc = 152,
... ... @@ -121,6 +123,10 @@ actionCodes = {
121 123 Hero_changeSparkRpc = 227,
122 124 Hero_saveGeniusTreeRpc = 228,
123 125 Hero_stickersConvertRpc = 229, --兑换英雄贴纸
  126 + Hero_trainStartRpc = 230, --开始魔鬼训练
  127 + Hero_trainFinishRpc = 231,
  128 + Hero_trainTaskRewardRpc = 232, --领取魔鬼训练营任务
  129 + Hero_trainQuickRpc = 233, --魔鬼训练营加速
124 130  
125 131 Hang_startRpc = 251,
126 132 Hang_checkRpc = 252,
... ...
src/actions/GmAction.lua
... ... @@ -692,19 +692,36 @@ function _M.test(role, pms)
692 692 if id > 100 then
693 693 actid = tonum(pms.pm2, 0)
694 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 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 725 return "成功"
709 726 end
710 727  
... ... @@ -1012,7 +1029,7 @@ function _M.treasure(role, pms)
1012 1029 dump(treasureList)
1013 1030 return "宝藏图鉴"
1014 1031 elseif pm1 == "FLUSH" then
1015   - local treasureList= role.dailyData:getTreasrueList(role)
  1032 + local treasureList= role.dailyData:getTreasureList(role)
1016 1033 dump(treasureList)
1017 1034 return "宝藏图鉴"
1018 1035 elseif pm1 == "CHECK" then
... ... @@ -1175,5 +1192,40 @@ function _M.draw_code(role, pms)
1175 1192 return ret
1176 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 1231 return _M
1180 1232 \ No newline at end of file
... ...
src/actions/HangAction.lua
... ... @@ -125,10 +125,18 @@ local function checkReward(role, isTreasure, carbonId)
125 125 randomItem()
126 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 140 local award = val.award:toNumMap()
133 141 for k,v in pairs(award) do
134 142 items[k] = (items[k] or 0) + v
... ... @@ -339,7 +347,7 @@ function _M.endBattleRpc(agent, data)
339 347  
340 348 --刷新宝藏图鉴
341 349 if isWin and globalCsv.idle_treasure_point and globalCsv.idle_treasure_point == carbonId then
342   - role.dailyData:getTreasrueList()
  350 + role.dailyData:getTreasureList()
343 351 end
344 352  
345 353 role:updateProperty({field = "hangInfo", value = hangInfo})
... ... @@ -513,8 +521,17 @@ function _M.quickRpc(agent , data)
513 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 535 local award = val.award:toNumMap()
519 536 for k,v in pairs(award) do
520 537 reward[k] = (reward[k] or 0) + v
... ...
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,166 @@ 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.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 1604 return _M
... ...
src/actions/RoleAction.lua
... ... @@ -185,6 +185,7 @@ function _M.loginRpc( agent, data )
185 185 role.activity:checkActivityStatus(now, false, false)
186 186 role:log("onLogin")
187 187 end
  188 + role:checkTaskEnter("LoginAddUp", {})
188 189  
189 190 redisproxy:zadd(FRIEND_RECOMMEND, now, roleId)
190 191  
... ... @@ -357,6 +358,14 @@ function _M.loginRpc( agent, data )
357 358 end
358 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 369 return true
361 370 end
362 371  
... ... @@ -1900,4 +1909,40 @@ function _M.itemConvertDevilTicketRpc(agent, data)
1900 1909 return true
1901 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 1948 return _M
1904 1949 \ No newline at end of file
... ...
1   -Subproject commit 6883d567759b8f50bf1bace2d7e53e658083fa75
  1 +Subproject commit 007bdd1f580a9f31e64e55ac6e1cb72387ed3698
... ...
src/models/Daily.lua
1 1 -- 日常数据
2 2  
3 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 7 function Daily:ctor(properties)
8 8 Daily.super.ctor(self, properties)
... ... @@ -37,6 +37,11 @@ Daily.schema = {
37 37 treasureBase = {"number", 0}, -- 资源值
38 38 treasureList = {"table", {}}, --挂机图鉴
39 39  
  40 + treasureListExtra = {"table", {}}, --额外宝藏,挂机图鉴扩展功能
  41 + treasureMapCount = {"number", 0}, --宝藏图,消耗一张宝藏图可以发现一次额外宝藏
  42 + treasureExtraCount = {"number", 0}, --每日发现额外宝藏使用次数(累计),隔天清零
  43 + treasureBaseExtra = {"number", 0}, --额外宝藏资源值
  44 +
40 45 chatTimes = {"number", 0}, --每日发言次数
41 46 }
42 47  
... ... @@ -73,7 +78,9 @@ function Daily:refreshDailyData(notify)
73 78 elseif field == "treasureBase" then
74 79 dataMap[field] = globalCsv.idle_treasure_base + self.owner:getBnousTreasureBaseMaximum()
75 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 84 elseif field == "pvpBought" then
78 85 dataMap[field] = 0
79 86 elseif field ~= "key" then
... ... @@ -101,300 +108,6 @@ function Daily:refreshDailyData(notify)
101 108 end
102 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 111 function Daily:data()
399 112 return {
400 113 hangQC = self:getProperty("hangQC"),
... ... @@ -417,6 +130,10 @@ function Daily:data()
417 130 curPool = self:getProperty("curPool"),
418 131 treasureBase = self:getProperty("treasureBase"),
419 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 137 chatTimes = self:getProperty("chatTimes"),
421 138 }
422 139 end
... ...
src/models/DailyPlugin.lua 0 → 100644
... ... @@ -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 403 \ No newline at end of file
... ...
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
... ... @@ -74,6 +74,9 @@ local ItemReason = {
74 74 regularWorldBossMilestone = 158, -- 常规世界boss伤害里程碑
75 75 regularWorldBossBattle = 159, -- 常规世界boss战斗奖励
76 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 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 = {}
... ... @@ -2315,6 +2319,18 @@ function RolePlugin.bind(Role)
2315 2319 -- end
2316 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 2334 local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
2319 2335 local uid = orderId * MAX_SVR_ID + serverId
2320 2336 local partnerOrderId = string.format("%d", orderId * MAX_SVR_ID + serverId)
... ...
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,8 @@ local TaskType = {
117 119 Rename = 913, -- 重命名
118 120 CostJade = 914, -- 消耗虹光玉
119 121 BuyLimitPack = 915, -- 购买指定id礼包触发
  122 + CostItem = 916, -- 消耗道具
  123 + LoginAddUp = 917, -- 累计登录
120 124  
121 125 --功能未实现 todo
122 126 AdvShop = 1002, -- 冒险商城
... ... @@ -333,6 +337,7 @@ local CalendaTaskListener = {
333 337 [TaskType.CostJade] = {{43, 1, f("count")}},
334 338 [TaskType.HeroStartSum] = {{44, 3}},
335 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 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 369 local TaskListeners = {
355 370 StoryListener,
356 371 CommonListener,
... ... @@ -362,6 +377,7 @@ local TaskListeners = {
362 377 BattleCommandTaskListener,
363 378 ReturnerTask,
364 379 NewUserTaskListener,
  380 + TraningCampTask,
365 381 }
366 382  
367 383 local RoleTask = {}
... ... @@ -900,6 +916,52 @@ function RoleTask.bind(Role)
900 916 self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2)
901 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 965 end
904 966  
905 967 return RoleTask
... ...
src/models/Store.lua
... ... @@ -342,26 +342,26 @@ function Store:isSMonthCardExpired(id)
342 342 end
343 343  
344 344 function Store:buySMonthCardLimit(buylimit)
  345 + if not buylimit or buylimit == "" then return true end
  346 +
345 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 349 if k == 1 then
348 350 if v == 101 then
349 351 if self:isMonthCardExpire() then
350   - skynet.error("月卡过期")
351 352 return false
352 353 end
353 354 else
354   - if smonthCards[v] == nil then
355   - skynet.error("没有购买增刊里的条件, %d", v)
  355 + if not smonthCards[v] then
356 356 return false
357 357 end
358 358 end
359 359 elseif k == 2 then
360   - if smonthCards[v] == nil and v ~= 101 then
  360 + if not smonthCards[v] then
361 361 skynet.error("没有购买增刊条件里的特刊, %d", v)
362 362 return false
363 363 end
364   - if self:isSMonthCardExpired(v) == false and v ~= 101 then
  364 + if not self:isSMonthCardExpired(v) then
365 365 skynet.error("上期特刊奖励没领完") --策划yc+hbw 没领完上期特刊,新一期特刊不展示,不允许购买
366 366 return false
367 367 end
... ... @@ -372,18 +372,17 @@ end
372 372  
373 373 function Store:buySMonthCard(id)
374 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 383 local BuyMonthCard = {}
377 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 386 local smonthCard = smonthCards[id] or {}
388 387 if next(smonthCard) then
389 388 smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1
... ... @@ -397,14 +396,6 @@ function Store:buySMonthCard(id)
397 396  
398 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 399 smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1}
409 400 self:updateProperty({field= "smonthCards", value = smonthCards})
410 401 return true
... ...