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 | 132 | |
133 | 133 | GuideStep = { |
134 | 134 | AdvGuide = 1010, |
135 | + AdvRelay = 1012, | |
135 | 136 | } |
136 | 137 | |
137 | 138 | --客户端不需要知道这个 |
... | ... | @@ -183,7 +184,7 @@ AdvBackEventType = { |
183 | 184 | Dead = 11, --怪死亡 |
184 | 185 | Trader = 12, -- 召唤商人 |
185 | 186 | Monster = 13, -- 召唤怪物 |
186 | - | |
187 | + RelayReward = 14, -- 中级层奖励 | |
187 | 188 | |
188 | 189 | Cost = 16, -- 消耗道具 |
189 | 190 | Trap = 17, --陷阱 | ... | ... |
src/adv/Adv.lua
... | ... | @@ -125,7 +125,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt |
125 | 125 | isNewRelay = true |
126 | 126 | advRelay[chapter] = advRelay[chapter] or {} |
127 | 127 | advRelay[chapter][self.level] = 1 |
128 | - self.owner:updateProperty({field = advRelay, value = advRelay}) | |
128 | + self.owner:updateProperty({field = "advRelay", value = advRelay}) | |
129 | 129 | end |
130 | 130 | end |
131 | 131 | |
... | ... | @@ -1356,8 +1356,14 @@ function Adv:clickBlock(roomId, blockId, params) |
1356 | 1356 | end |
1357 | 1357 | |
1358 | 1358 | if not block.isOpen then |
1359 | - if checkAroundBlocks() then --开放 | |
1359 | + if self.isRelay or checkAroundBlocks() then --开放 | |
1360 | 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 | 1367 | status = true |
1362 | 1368 | end |
1363 | 1369 | else | ... | ... |
src/adv/AdvMap.lua
... | ... | @@ -19,17 +19,17 @@ function Map:ctor(adv, mapIdx, mapInfo, isEnter, isNewRelay) |
19 | 19 | self.mapId = mapInfo.mapId |
20 | 20 | self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用 |
21 | 21 | self.rooms = {} |
22 | - self:loadRooms(mapInfo.rooms) | |
22 | + self:loadRooms(mapInfo.rooms, isNewRelay) | |
23 | 23 | end |
24 | 24 | |
25 | -function Map:loadRooms(rooms) | |
25 | +function Map:loadRooms(rooms, isNewRelay) | |
26 | 26 | local mapData = csvdb["map_" .. csvdb["mapCsv"][self.mapId]["path"] .. "Csv"] |
27 | 27 | for roomId, roomName in pairs(mapData["rooms"]) do |
28 | 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 | 30 | else |
31 | 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 | 33 | end |
34 | 34 | end |
35 | 35 | end |
... | ... | @@ -55,6 +55,17 @@ function Map:showMap() |
55 | 55 | self.isShow = true |
56 | 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 | 70 | function Map:checkOver() |
60 | 71 | local mapCsv = csvdb["mapCsv"][self.mapId] |
... | ... | @@ -66,14 +77,7 @@ function Map:checkOver() |
66 | 77 | elseif mapCsv.clearType == 3 then -- 持有 |
67 | 78 | if self.adv:cost(mapCsv.clear:toNumMap(), {}, true) then return true end |
68 | 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 | 81 | else |
78 | 82 | return true |
79 | 83 | end |
... | ... | @@ -288,13 +292,13 @@ createMap = function(self, mapId, isEnter, isNewRelay) |
288 | 292 | randomFunc[AdvEventType.In] = function()end |
289 | 293 | --出口 |
290 | 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 | 296 | return false |
293 | 297 | end |
294 | 298 | end |
295 | 299 | --中继点出口 |
296 | 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 | 302 | end |
299 | 303 | --开放出口 |
300 | 304 | randomFunc[AdvEventType.InOut] = function() end |
... | ... | @@ -399,6 +403,8 @@ createMap = function(self, mapId, isEnter, isNewRelay) |
399 | 403 | if self.adv.isRelay and isNewRelay then |
400 | 404 | local relayData = self.adv:isHaveRelay() |
401 | 405 | if relayData then |
406 | + | |
407 | + -- choose | |
402 | 408 | local choose = relayData.choose:toArray(true, "=") |
403 | 409 | local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0 |
404 | 410 | for _, chooseId in pairs(choose) do |
... | ... | @@ -412,6 +418,22 @@ createMap = function(self, mapId, isEnter, isNewRelay) |
412 | 418 | lastCount = lastCount - 1 |
413 | 419 | stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil |
414 | 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 | 437 | end |
416 | 438 | end |
417 | 439 | ... | ... |
src/adv/AdvRoom.lua
... | ... | @@ -5,7 +5,7 @@ local Block = require "adv.AdvBlock" |
5 | 5 | local Passive = require "adv.AdvPassive" |
6 | 6 | |
7 | 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 | 9 | self.map = map |
10 | 10 | self.roomId = roomId |
11 | 11 | self.col, self.row = AdvCommon.getCrById(self.roomId) |
... | ... | @@ -15,10 +15,10 @@ function Room:ctor(map, roomId, csvData, info, isPath) |
15 | 15 | self.battleAfterCall = {} |
16 | 16 | |
17 | 17 | self.blocks = {} |
18 | - self:loadBlocks(csvData, info) | |
18 | + self:loadBlocks(csvData, info, isNewRelay) | |
19 | 19 | end |
20 | 20 | |
21 | -function Room:loadBlocks(csvData, info) | |
21 | +function Room:loadBlocks(csvData, info, isNewRelay) | |
22 | 22 | local isFirstOpen = false |
23 | 23 | for blockId, _ in pairs(csvData["blocks"]) do |
24 | 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 | 38 | end |
39 | 39 | end |
40 | 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 | 42 | table.insert(self.battleAfterCall, function() |
43 | 43 | for _, block in pairs(self.blocks) do |
44 | 44 | self:openBlock(block) | ... | ... |