Commit 8da953a773e97ebd7cd2d97be6a8eb9b8c78ff67
1 parent
51718558
无尽模式
Showing
7 changed files
with
77 additions
and
20 deletions
Show diff stats
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) |
src/adv/Adv.lua
| @@ -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 |