From c8210d562035141fd8b972cba8ac2cea7cec8f54 Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Thu, 27 Feb 2020 17:56:29 +0800 Subject: [PATCH] boss 房有入口 --- src/adv/Adv.lua | 5 +---- src/adv/AdvMap.lua | 37 +++++++++++++++++++++---------------- src/adv/AdvRoom.lua | 11 +++++++++-- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 96aab12..f6852f5 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -1235,10 +1235,7 @@ function Adv:doActive(activeId, target) -- 8:翻开范围内的方格 doActiveEffect[8] = function(_) for _ , target in ipairs(targers) do - if not target.isOpen then - target:open() - self:backBlockChange(target.room.roomId, target.blockId) - end + self:getCurMap():openBlock(target.room.roomId, target.blockId, true) end return true end diff --git a/src/adv/AdvMap.lua b/src/adv/AdvMap.lua index 90e97e3..807c1fc 100644 --- a/src/adv/AdvMap.lua +++ b/src/adv/AdvMap.lua @@ -100,7 +100,7 @@ function Map:addNewMonsterRand(monsterId, where) end -- 随机翻开 num 个 以开放的房间的 地块 -function Map:openBlockRand(num, isPlayer) +function Map:openBlockRand(num, isPlayer, ignoreBack) local pool = {} for _, room in pairs(self.rooms) do if room.isShow and not room.isPath then @@ -113,12 +113,12 @@ function Map:openBlockRand(num, isPlayer) end if #pool <= num then for _, temp in ipairs(pool) do - self:openBlock(temp[1], temp[2], isPlayer) + self:openBlock(temp[1], temp[2], isPlayer, ignoreBack) end else for i = 1, num do local idx = math.randomInt(1, #pool) - self:openBlock(pool[idx][1], pool[idx][2], isPlayer) + self:openBlock(pool[idx][1], pool[idx][2], isPlayer, ignoreBack) table.remove(pool, idx) end end @@ -131,34 +131,39 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) if not room then return end local block = room.blocks[blockId] if not block then return end - room:openBlock(block) - if isPlayer then - self.adv.battle.player:triggerPassive(Passive.OPEN_BLOCK) - end - if not ignoreBack then - self.adv:backBlockChange(roomId, blockId) + local status = room:openBlock(block) + + if status then + if isPlayer then + self.adv.battle.player:triggerPassive(Passive.OPEN_BLOCK) + self.map.adv:scoreChange(AdvScoreType.Block) + end + + if not ignoreBack then + self.adv:backBlockChange(roomId, blockId) + end end end -function Map:openBlockBySize(roomId, blockId, size, isPlayer) +function Map:openBlocksBySize(roomId, blockId, size, isPlayer, ignoreBack) local blocks = self:getBlocksBySize(roomId, blockId, size) for _, block in pairs(blocks) do - self:openBlock(block.room.roomId, block.blockId, isPlayer) + self:openBlock(block.room.roomId, block.blockId, isPlayer, ignoreBack) end end -function Map:openBlocksByRoom(roomId, isPlayer) +function Map:openBlocksByRoom(roomId, isPlayer, ignoreBack) local room = self.rooms[roomId] - if not room then return end + if not room then return end for blockId, block in pairs(room.blocks) do - self:openBlock(roomId, blockId, isPlayer) + self:openBlock(roomId, blockId, isPlayer, ignoreBack) end end -function Map:openAllBlocks(isPlayer) +function Map:openAllBlocks(isPlayer, ignoreBack) for roomId, room in pairs(self.rooms) do - self:openBlocksByRoom(room.roomId, isPlayer) + self:openBlocksByRoom(room.roomId, isPlayer, ignoreBack) end end diff --git a/src/adv/AdvRoom.lua b/src/adv/AdvRoom.lua index 2b73eb7..2916fd2 100644 --- a/src/adv/AdvRoom.lua +++ b/src/adv/AdvRoom.lua @@ -18,6 +18,7 @@ function Room:ctor(map, roomId, csvData, info, isPath) end function Room:loadBlocks(csvData, info) + local isFirstOpen = false for blockId, _ in pairs(csvData["blocks"]) do self.blocks[blockId] = Block.new(self, blockId, info.event[blockId], info.open == 1 or info.open[blockId], info.trap[blockId]) if self.map.adv.isRelay then -- 中继层全部开放 @@ -33,11 +34,18 @@ function Room:loadBlocks(csvData, info) if self.blocks[blockId]:getEventType() == AdvEventType.In or self.blocks[blockId]:getEventType() == AdvEventType.InOut then -- 开放 self.isShow = true self.blocks[blockId].isOpen = true + isFirstOpen = true --入口房间只会在这里首次展示开放 --触发固有技 self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId}) end end end + -- boss 房间 开启一下所有的地块 + if self.isBossRoom and self.isShow and isFirstOpen then + for _, block in pairs(self.blocks) do + self:openBlock(block) + end + end end function Room:getDB() @@ -68,13 +76,12 @@ function Room:openBlock(block) block:open() end - self.map.adv:scoreChange(AdvScoreType.Block) - if not self.isShow then self.isShow = true --首次展示房间 self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId}) end + return true end -- libgit2 0.21.2