Commit 8da953a773e97ebd7cd2d97be6a8eb9b8c78ff67

Authored by zhouhaihai
1 parent 51718558

无尽模式

src/actions/AdvAction.lua
@@ -14,6 +14,8 @@ local table_insert = table.insert @@ -14,6 +14,8 @@ local table_insert = table.insert
14 local tconcat = table.concat 14 local tconcat = table.concat
15 local table_unpack = table.unpack 15 local table_unpack = table.unpack
16 16
  17 +local AdvCommon = require "adv.AdvCommon"
  18 +
17 local _M = {} 19 local _M = {}
18 20
19 21
@@ -55,27 +57,45 @@ function _M.startAdvRpc( agent, data ) @@ -55,27 +57,45 @@ function _M.startAdvRpc( agent, data )
55 local chapterId = msg.chapterId --关卡id 57 local chapterId = msg.chapterId --关卡id
56 local layer = msg.layer or 1 --选择层数 58 local layer = msg.layer or 1 --选择层数
57 local format = msg.format --编队 59 local format = msg.format --编队
  60 +
  61 + --上一个关卡结束才可以开始新的关卡
  62 + if next(role:getProperty("advInfo")) then return 8 end
  63 +
58 local chapterData = csvdb["adv_chapterCsv"][chapterId] 64 local chapterData = csvdb["adv_chapterCsv"][chapterId]
59 - if not chapterData then return 1 end 65 + if not chapterData or layer < 1 then return 1 end
60 66
61 if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return 2 end -- 是否有体力 67 if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return 2 end -- 是否有体力
62 68
63 if (layer - 1) % globalCsv.adv_can_out_layer_pre ~= 0 then return 3 end 69 if (layer - 1) % globalCsv.adv_can_out_layer_pre ~= 0 then return 3 end
64 70
65 - if chapterData.limitlevel ~= 0 and layer > chapterData.limitlevel then return 4 end  
66 -  
67 - -- 关卡开放判断  
68 - if not role:advChapterIsOpen(chapterId, layer) then return 5 end  
69 -  
70 - --中继开放判断  
71 local advPass = role:getProperty("advPass") 71 local advPass = role:getProperty("advPass")
72 - if layer ~= 1 and (not role:isFuncOpen(FuncOpenType.AdvRelay) or (advPass[chapterId] or 0) < (layer - 1)) then return 6 end 72 + if AdvCommon.isEndless(chapterId) then
  73 + for _k, _v in pairs(csvdb["adv_chapterCsv"]) do --解锁全部关卡
  74 + if not AdvCommon.isEndless(_k) then
  75 + if (advPass[_k] or 0) ~= _v.limitlevel then return 12 end
  76 + end
  77 + end
  78 + if not role:isFuncOpen(FuncOpenType.AdvEndless) or not role:isFuncOpen(FuncOpenType.AdvRelay) then return 11 end -- 开放了中继模式 和 无尽模式 才可以玩儿无尽模式
  79 + local maxl = math.floor(role:getProperty("advElM") / 10) * 10
  80 + local openLayer = {}
  81 + for i = 0, (globalCsv.adv_endless_open_relay - 1) do
  82 + local l = maxl - i * globalCsv.adv_can_out_layer_pre
  83 + if l < 0 then
  84 + break
  85 + end
  86 + openLayer[l] = 1
  87 + end
  88 + if not openLayer[layer - 1] then return 10 end
  89 + else
  90 + if layer > chapterData.limitlevel then return 4 end
  91 + -- 关卡开放判断
  92 + if not role:advChapterIsOpen(chapterId, layer) then return 5 end
  93 + --中继开放判断
  94 + if layer ~= 1 and (not role:isFuncOpen(FuncOpenType.AdvRelay) or (advPass[chapterId] or 0) < (layer - 1)) then return 6 end
  95 + end
73 96
74 if not checkFormat(role, format) then return 7 end 97 if not checkFormat(role, format) then return 7 end
75 98
76 - --上一个关卡结束才可以开始新的关卡  
77 - if next(role:getProperty("advInfo")) then return 8 end  
78 -  
79 local advTeam = role:getProperty("advTeam") 99 local advTeam = role:getProperty("advTeam")
80 table.clear(advTeam) 100 table.clear(advTeam)
81 101
@@ -107,8 +127,7 @@ function _M.startHangRpc(agent, data) @@ -107,8 +127,7 @@ function _M.startHangRpc(agent, data)
107 if advHang[chapterId] then return end --正在挂机 127 if advHang[chapterId] then return end --正在挂机
108 128
109 local advPass = role:getProperty("advPass") 129 local advPass = role:getProperty("advPass")
110 - if chapterData.limitlevel == 0 or advPass[chapterId] ~= chapterData.limitlevel then return end -- 没有全通关  
111 - 130 + if AdvCommon.isEndless(chapterId) or advPass[chapterId] ~= chapterData.limitlevel then return end -- 没有全通关
112 131
113 if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力 132 if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力
114 133
src/actions/RoleAction.lua
@@ -116,6 +116,7 @@ function _M.loginRpc( agent, data ) @@ -116,6 +116,7 @@ function _M.loginRpc( agent, data )
116 SERV_OPEN = redisproxy:hget("autoincrement_set", "server_start") 116 SERV_OPEN = redisproxy:hget("autoincrement_set", "server_start")
117 117
118 role:changeStructVersion() -- 数据结构 版本更新 118 role:changeStructVersion() -- 数据结构 版本更新
  119 + role:advEndlessSeasonCheck() -- 冒险赛季更新检查
119 120
120 -- 跨天登陆事件 121 -- 跨天登陆事件
121 role:onCrossDay(now) 122 role:onCrossDay(now)
@@ -176,10 +176,18 @@ function Adv:randomMapId(chapterId, level) @@ -176,10 +176,18 @@ function Adv:randomMapId(chapterId, level)
176 error("chapterId " .. chapterId .. " dont exist!") 176 error("chapterId " .. chapterId .. " dont exist!")
177 return 177 return
178 end 178 end
179 - if chapterData.limitlevel ~= 0 and level > chapterData.limitlevel then  
180 - error("level overflow!")  
181 - return 179 + if AdvCommon.isEndless(chapterId) then
  180 + level = level % chapterData.limitlevel
  181 + if level == 0 then
  182 + level = chapterData.limitlevel
  183 + end
  184 + else
  185 + if level > chapterData.limitlevel then
  186 + error("level overflow!")
  187 + return
  188 + end
182 end 189 end
  190 +
183 --随出地图Id 191 --随出地图Id
184 local raw_pool = chapterData.mapid:toArray(true, "=") 192 local raw_pool = chapterData.mapid:toArray(true, "=")
185 193
@@ -270,14 +278,21 @@ local function clickOut(self, room, block, params) @@ -270,14 +278,21 @@ local function clickOut(self, room, block, params)
270 278
271 local advPass = self.owner:getProperty("advPass") 279 local advPass = self.owner:getProperty("advPass")
272 280
273 - if self.level > (advPass[self.chapterId] or 0) then  
274 - self.owner:changeUpdates({{type = "advPass", field = self.chapterId, value = self.level}}) 281 + if AdvCommon.isEndless(self.chapterId) then
  282 + -- 刷新最高层
  283 + if self.owner:getProperty("advElM") < self.level then
  284 + self.owner:updateProperty({field = "advElM", value = self.level})
  285 + end
  286 + else
  287 + if self.level > (advPass[self.chapterId] or 0) then
  288 + self.owner:changeUpdates({{type = "advPass", field = self.chapterId, value = self.level}})
  289 + end
275 end 290 end
276 if params.relay then 291 if params.relay then
277 if self.level % globalCsv.adv_can_out_layer_pre ~= 0 or not self.owner:isFuncOpen(FuncOpenType.AdvRelay) then return end 292 if self.level % globalCsv.adv_can_out_layer_pre ~= 0 or not self.owner:isFuncOpen(FuncOpenType.AdvRelay) then return end
278 end 293 end
279 local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel 294 local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel
280 - if params.relay or (levellimit > 0 and self.level >= levellimit) or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1) then --关卡结束 295 + if params.relay or (not AdvCommon.isEndless(self.chapterId) and (self.level >= levellimit or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1))) then --关卡结束
281 self:over(true) 296 self:over(true)
282 else 297 else
283 self:initByChapter(self.chapterId, self.level + 1, true, true) 298 self:initByChapter(self.chapterId, self.level + 1, true, true)
src/adv/AdvCommon.lua
@@ -47,4 +47,8 @@ function AdvCommon.checkIsIn(checkValue, checkType, checkRange) @@ -47,4 +47,8 @@ function AdvCommon.checkIsIn(checkValue, checkType, checkRange)
47 end 47 end
48 end 48 end
49 49
  50 +function AdvCommon.isEndless(chapterId)
  51 + return math.floor(chapterId / 100) == 2
  52 +end
  53 +
50 return AdvCommon 54 return AdvCommon
51 \ No newline at end of file 55 \ No newline at end of file
src/adv/AdvMap.lua
@@ -334,7 +334,13 @@ end @@ -334,7 +334,13 @@ end
334 --关卡事件库 334 --关卡事件库
335 getEventLib = function(self, needEventType) -- needEventType 需要的事件 335 getEventLib = function(self, needEventType) -- needEventType 需要的事件
336 local chapterId, level = self.adv.chapterId, self.adv.level 336 local chapterId, level = self.adv.chapterId, self.adv.level
337 - 337 + if AdvCommon.isEndless(chapterId) then
  338 + local chapterData = csvdb["adv_chapterCsv"][chapterId]
  339 + level = level % chapterData.limitlevel
  340 + if level == 0 then
  341 + level = chapterData.limitlevel
  342 + end
  343 + end
338 local libsToType = { 344 local libsToType = {
339 ["event_monsterCsv"] = {AdvEventType.Monster, AdvEventType.BOSS, AdvEventType.Monster}, 345 ["event_monsterCsv"] = {AdvEventType.Monster, AdvEventType.BOSS, AdvEventType.Monster},
340 ["event_chooseCsv"] = AdvEventType.Choose, 346 ["event_chooseCsv"] = AdvEventType.Choose,
src/models/Role.lua
@@ -53,6 +53,8 @@ Role.schema = { @@ -53,6 +53,8 @@ Role.schema = {
53 advMTask = {"table", {id = 1, status = 0, lock = true}}, -- 冒险主线任务 -- {id = id, status = status, lock = true} -- 当前主线id 当前主线状态 是否锁定状态 53 advMTask = {"table", {id = 1, status = 0, lock = true}}, -- 冒险主线任务 -- {id = id, status = status, lock = true} -- 当前主线id 当前主线状态 是否锁定状态
54 advAchiev = {"table", {}}, -- 冒险成就 {chapterId = {achievId = status}} 54 advAchiev = {"table", {}}, -- 冒险成就 {chapterId = {achievId = status}}
55 advL = {"number", 1}, -- 冒险队等级 55 advL = {"number", 1}, -- 冒险队等级
  56 + advElM = {"number", 0}, -- 无尽模式通关的最高层数 endless max layer
  57 + advElS = {"number", globalCsv.adv_endless_season}, -- 无尽模式记录的赛季 endless season
56 58
57 --挂机相关 59 --挂机相关
58 hangPass = {"table", {}}, -- 挂机通过的最大关卡 60 hangPass = {"table", {}}, -- 挂机通过的最大关卡
@@ -192,6 +194,7 @@ function Role:data() @@ -192,6 +194,7 @@ function Role:data()
192 advMTask = self:getProperty("advMTask"), 194 advMTask = self:getProperty("advMTask"),
193 advAchiev = self:getProperty("advAchiev"), 195 advAchiev = self:getProperty("advAchiev"),
194 advL = self:getProperty("advL"), 196 advL = self:getProperty("advL"),
  197 + advElM = self:getProperty("advElM"),
195 198
196 hangPass = self:getProperty("hangPass"), 199 hangPass = self:getProperty("hangPass"),
197 hangTeam = self:getProperty("hangTeam"), 200 hangTeam = self:getProperty("hangTeam"),
src/models/RolePlugin.lua
@@ -645,6 +645,15 @@ function RolePlugin.bind(Role) @@ -645,6 +645,15 @@ function RolePlugin.bind(Role)
645 return openStatus 645 return openStatus
646 end 646 end
647 647
  648 + -- 赛季检查
  649 + function Role:advEndlessSeasonCheck()
  650 + if self:getProperty("advElS") ~= globalCsv.adv_endless_season then
  651 + local ml = self:getProperty("advElM")
  652 + local nl = math.max(0, ml - (math.floor(ml / 50) + 2) * 10)
  653 + self:setProperty("advElM", math.floor(nl / 10) * 10)
  654 + self:setProperty("advElS", globalCsv.adv_endless_season)
  655 + end
  656 + end
648 end 657 end
649 658
650 return RolePlugin 659 return RolePlugin
651 \ No newline at end of file 660 \ No newline at end of file