Commit 7b64b6cd44d5980539c0f2b508c4993fda27c87f
1 parent
f9acbb32
中继层优化
Showing
4 changed files
with
50 additions
and
21 deletions
Show diff stats
src/GlobalVar.lua
@@ -132,6 +132,7 @@ TimeReset = { | @@ -132,6 +132,7 @@ TimeReset = { | ||
132 | 132 | ||
133 | GuideStep = { | 133 | GuideStep = { |
134 | AdvGuide = 1010, | 134 | AdvGuide = 1010, |
135 | + AdvRelay = 1012, | ||
135 | } | 136 | } |
136 | 137 | ||
137 | --客户端不需要知道这个 | 138 | --客户端不需要知道这个 |
@@ -183,7 +184,7 @@ AdvBackEventType = { | @@ -183,7 +184,7 @@ AdvBackEventType = { | ||
183 | Dead = 11, --怪死亡 | 184 | Dead = 11, --怪死亡 |
184 | Trader = 12, -- 召唤商人 | 185 | Trader = 12, -- 召唤商人 |
185 | Monster = 13, -- 召唤怪物 | 186 | Monster = 13, -- 召唤怪物 |
186 | - | 187 | + RelayReward = 14, -- 中级层奖励 |
187 | 188 | ||
188 | Cost = 16, -- 消耗道具 | 189 | Cost = 16, -- 消耗道具 |
189 | Trap = 17, --陷阱 | 190 | Trap = 17, --陷阱 |
src/adv/Adv.lua
@@ -125,7 +125,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt | @@ -125,7 +125,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt | ||
125 | isNewRelay = true | 125 | isNewRelay = true |
126 | advRelay[chapter] = advRelay[chapter] or {} | 126 | advRelay[chapter] = advRelay[chapter] or {} |
127 | advRelay[chapter][self.level] = 1 | 127 | advRelay[chapter][self.level] = 1 |
128 | - self.owner:updateProperty({field = advRelay, value = advRelay}) | 128 | + self.owner:updateProperty({field = "advRelay", value = advRelay}) |
129 | end | 129 | end |
130 | end | 130 | end |
131 | 131 | ||
@@ -1356,8 +1356,14 @@ function Adv:clickBlock(roomId, blockId, params) | @@ -1356,8 +1356,14 @@ function Adv:clickBlock(roomId, blockId, params) | ||
1356 | end | 1356 | end |
1357 | 1357 | ||
1358 | if not block.isOpen then | 1358 | if not block.isOpen then |
1359 | - if checkAroundBlocks() then --开放 | 1359 | + if self.isRelay or checkAroundBlocks() then --开放 |
1360 | self:getCurMap():openBlock(roomId, blockId, true, true) | 1360 | self:getCurMap():openBlock(roomId, blockId, true, true) |
1361 | + if self.isRelay and self:getCurMap():isAllOpen() then -- 发放翻开的奖励 | ||
1362 | + local relayData = self:isHaveRelay() | ||
1363 | + if relayData and relayData.award ~= "" then | ||
1364 | + self:pushBackEvent(AdvBackEventType.RelayReward, {items = self:award(relayData.award:toNumMap(), {log = {desc = "relayReward"}})}) | ||
1365 | + end | ||
1366 | + end | ||
1361 | status = true | 1367 | status = true |
1362 | end | 1368 | end |
1363 | else | 1369 | else |
src/adv/AdvMap.lua
@@ -19,17 +19,17 @@ function Map:ctor(adv, mapIdx, mapInfo, isEnter, isNewRelay) | @@ -19,17 +19,17 @@ function Map:ctor(adv, mapIdx, mapInfo, isEnter, isNewRelay) | ||
19 | self.mapId = mapInfo.mapId | 19 | self.mapId = mapInfo.mapId |
20 | self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用 | 20 | self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用 |
21 | self.rooms = {} | 21 | self.rooms = {} |
22 | - self:loadRooms(mapInfo.rooms) | 22 | + self:loadRooms(mapInfo.rooms, isNewRelay) |
23 | end | 23 | end |
24 | 24 | ||
25 | -function Map:loadRooms(rooms) | 25 | +function Map:loadRooms(rooms, isNewRelay) |
26 | local mapData = csvdb["map_" .. csvdb["mapCsv"][self.mapId]["path"] .. "Csv"] | 26 | local mapData = csvdb["map_" .. csvdb["mapCsv"][self.mapId]["path"] .. "Csv"] |
27 | for roomId, roomName in pairs(mapData["rooms"]) do | 27 | for roomId, roomName in pairs(mapData["rooms"]) do |
28 | if roomName == "path" then | 28 | if roomName == "path" then |
29 | - self.rooms[roomId] = Room.new(self, roomId, mapData["path"], rooms[roomId], true) | 29 | + self.rooms[roomId] = Room.new(self, roomId, mapData["path"], rooms[roomId], true, isNewRelay) |
30 | else | 30 | else |
31 | roomName = roomName:gsub("/", "_") | 31 | roomName = roomName:gsub("/", "_") |
32 | - self.rooms[roomId] = Room.new(self, roomId, csvdb["room_" .. roomName .. "Csv"], rooms[roomId], false) | 32 | + self.rooms[roomId] = Room.new(self, roomId, csvdb["room_" .. roomName .. "Csv"], rooms[roomId], false, isNewRelay) |
33 | end | 33 | end |
34 | end | 34 | end |
35 | end | 35 | end |
@@ -55,6 +55,17 @@ function Map:showMap() | @@ -55,6 +55,17 @@ function Map:showMap() | ||
55 | self.isShow = true | 55 | self.isShow = true |
56 | end | 56 | end |
57 | 57 | ||
58 | +function Map:isAllOpen() | ||
59 | + for roomId, room in pairs(self.rooms) do | ||
60 | + for blockId, block in pairs(room.blocks) do | ||
61 | + if not block.isOpen then | ||
62 | + return false | ||
63 | + end | ||
64 | + end | ||
65 | + end | ||
66 | + return true | ||
67 | +end | ||
68 | + | ||
58 | --结束本层的时候调用 | 69 | --结束本层的时候调用 |
59 | function Map:checkOver() | 70 | function Map:checkOver() |
60 | local mapCsv = csvdb["mapCsv"][self.mapId] | 71 | local mapCsv = csvdb["mapCsv"][self.mapId] |
@@ -66,14 +77,7 @@ function Map:checkOver() | @@ -66,14 +77,7 @@ function Map:checkOver() | ||
66 | elseif mapCsv.clearType == 3 then -- 持有 | 77 | elseif mapCsv.clearType == 3 then -- 持有 |
67 | if self.adv:cost(mapCsv.clear:toNumMap(), {}, true) then return true end | 78 | if self.adv:cost(mapCsv.clear:toNumMap(), {}, true) then return true end |
68 | elseif mapCsv.clearType == 4 then | 79 | elseif mapCsv.clearType == 4 then |
69 | - for roomId, room in pairs(self.rooms) do | ||
70 | - for blockId, block in pairs(room.blocks) do | ||
71 | - if not block.isOpen then | ||
72 | - return false | ||
73 | - end | ||
74 | - end | ||
75 | - return true | ||
76 | - end | 80 | + return self:isAllOpen() |
77 | else | 81 | else |
78 | return true | 82 | return true |
79 | end | 83 | end |
@@ -288,13 +292,13 @@ createMap = function(self, mapId, isEnter, isNewRelay) | @@ -288,13 +292,13 @@ createMap = function(self, mapId, isEnter, isNewRelay) | ||
288 | randomFunc[AdvEventType.In] = function()end | 292 | randomFunc[AdvEventType.In] = function()end |
289 | --出口 | 293 | --出口 |
290 | randomFunc[AdvEventType.Out] = function() | 294 | randomFunc[AdvEventType.Out] = function() |
291 | - if not self.adv:isEndless() and isNewRelay then | 295 | + if not self.adv:isEndless() and self.adv.isRelay and not self.adv.owner:checkOverGuide(GuideStep.AdvRelay) then |
292 | return false | 296 | return false |
293 | end | 297 | end |
294 | end | 298 | end |
295 | --中继点出口 | 299 | --中继点出口 |
296 | randomFunc[AdvEventType.Exit] = function() | 300 | randomFunc[AdvEventType.Exit] = function() |
297 | - if not self.adv.isRelay or isEnter then return false end | 301 | + if not self.adv.isRelay or self.adv.owner:checkOverGuide(GuideStep.AdvRelay) then return false end |
298 | end | 302 | end |
299 | --开放出口 | 303 | --开放出口 |
300 | randomFunc[AdvEventType.InOut] = function() end | 304 | randomFunc[AdvEventType.InOut] = function() end |
@@ -399,6 +403,8 @@ createMap = function(self, mapId, isEnter, isNewRelay) | @@ -399,6 +403,8 @@ createMap = function(self, mapId, isEnter, isNewRelay) | ||
399 | if self.adv.isRelay and isNewRelay then | 403 | if self.adv.isRelay and isNewRelay then |
400 | local relayData = self.adv:isHaveRelay() | 404 | local relayData = self.adv:isHaveRelay() |
401 | if relayData then | 405 | if relayData then |
406 | + | ||
407 | + -- choose | ||
402 | local choose = relayData.choose:toArray(true, "=") | 408 | local choose = relayData.choose:toArray(true, "=") |
403 | local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0 | 409 | local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0 |
404 | for _, chooseId in pairs(choose) do | 410 | for _, chooseId in pairs(choose) do |
@@ -412,6 +418,22 @@ createMap = function(self, mapId, isEnter, isNewRelay) | @@ -412,6 +418,22 @@ createMap = function(self, mapId, isEnter, isNewRelay) | ||
412 | lastCount = lastCount - 1 | 418 | lastCount = lastCount - 1 |
413 | stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil | 419 | stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil |
414 | end | 420 | end |
421 | + | ||
422 | + -- 掉落 | ||
423 | + local drop = relayData.drop:toNumMap() | ||
424 | + for dropId, dropCount in pairs(drop) do | ||
425 | + for i = 1, dropCount do | ||
426 | + if lastCount <= 0 then break end | ||
427 | + local idx = math.randomInt(1, lastCount) | ||
428 | + local cur = stagePool["global"][AdvCodeRandomStage][idx] | ||
429 | + | ||
430 | + giveEvent(cur["room"], cur["block"], AdvEventType.Drop, dropId) | ||
431 | + | ||
432 | + table.remove(stagePool["global"][AdvCodeRandomStage], idx) | ||
433 | + lastCount = lastCount - 1 | ||
434 | + stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil | ||
435 | + end | ||
436 | + end | ||
415 | end | 437 | end |
416 | end | 438 | end |
417 | 439 |
src/adv/AdvRoom.lua
@@ -5,7 +5,7 @@ local Block = require "adv.AdvBlock" | @@ -5,7 +5,7 @@ local Block = require "adv.AdvBlock" | ||
5 | local Passive = require "adv.AdvPassive" | 5 | local Passive = require "adv.AdvPassive" |
6 | 6 | ||
7 | local Room = class("AdvRoom") | 7 | local Room = class("AdvRoom") |
8 | -function Room:ctor(map, roomId, csvData, info, isPath) | 8 | +function Room:ctor(map, roomId, csvData, info, isPath, isNewRelay) |
9 | self.map = map | 9 | self.map = map |
10 | self.roomId = roomId | 10 | self.roomId = roomId |
11 | self.col, self.row = AdvCommon.getCrById(self.roomId) | 11 | self.col, self.row = AdvCommon.getCrById(self.roomId) |
@@ -15,10 +15,10 @@ function Room:ctor(map, roomId, csvData, info, isPath) | @@ -15,10 +15,10 @@ function Room:ctor(map, roomId, csvData, info, isPath) | ||
15 | self.battleAfterCall = {} | 15 | self.battleAfterCall = {} |
16 | 16 | ||
17 | self.blocks = {} | 17 | self.blocks = {} |
18 | - self:loadBlocks(csvData, info) | 18 | + self:loadBlocks(csvData, info, isNewRelay) |
19 | end | 19 | end |
20 | 20 | ||
21 | -function Room:loadBlocks(csvData, info) | 21 | +function Room:loadBlocks(csvData, info, isNewRelay) |
22 | local isFirstOpen = false | 22 | local isFirstOpen = false |
23 | for blockId, _ in pairs(csvData["blocks"]) do | 23 | for blockId, _ in pairs(csvData["blocks"]) do |
24 | self.blocks[blockId] = Block.new(self, blockId, info.event[blockId], info.open == 1 or info.open[blockId], info.trap[blockId]) | 24 | self.blocks[blockId] = Block.new(self, blockId, info.event[blockId], info.open == 1 or info.open[blockId], info.trap[blockId]) |
@@ -38,7 +38,7 @@ function Room:loadBlocks(csvData, info) | @@ -38,7 +38,7 @@ function Room:loadBlocks(csvData, info) | ||
38 | end | 38 | end |
39 | end | 39 | end |
40 | --中继层全部开放 boss 房间 开启所有的地块 | 40 | --中继层全部开放 boss 房间 开启所有的地块 |
41 | - if self.map.adv.isRelay or (self.isBossRoom and self.isShow and isFirstOpen) then | 41 | + if (self.map.adv.isRelay and not isNewRelay) or (self.isBossRoom and self.isShow and isFirstOpen) then |
42 | table.insert(self.battleAfterCall, function() | 42 | table.insert(self.battleAfterCall, function() |
43 | for _, block in pairs(self.blocks) do | 43 | for _, block in pairs(self.blocks) do |
44 | self:openBlock(block) | 44 | self:openBlock(block) |