diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index 2fcb954..91efce4 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -132,6 +132,7 @@ TimeReset = { GuideStep = { AdvGuide = 1010, + AdvRelay = 1012, } --客户端不需要知道这个 @@ -183,7 +184,7 @@ AdvBackEventType = { Dead = 11, --怪死亡 Trader = 12, -- 召唤商人 Monster = 13, -- 召唤怪物 - + RelayReward = 14, -- 中级层奖励 Cost = 16, -- 消耗道具 Trap = 17, --陷阱 diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index be6dc1e..311483f 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -125,7 +125,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt isNewRelay = true advRelay[chapter] = advRelay[chapter] or {} advRelay[chapter][self.level] = 1 - self.owner:updateProperty({field = advRelay, value = advRelay}) + self.owner:updateProperty({field = "advRelay", value = advRelay}) end end @@ -1356,8 +1356,14 @@ function Adv:clickBlock(roomId, blockId, params) end if not block.isOpen then - if checkAroundBlocks() then --开放 + if self.isRelay or checkAroundBlocks() then --开放 self:getCurMap():openBlock(roomId, blockId, true, true) + if self.isRelay and self:getCurMap():isAllOpen() then -- 发放翻开的奖励 + local relayData = self:isHaveRelay() + if relayData and relayData.award ~= "" then + self:pushBackEvent(AdvBackEventType.RelayReward, {items = self:award(relayData.award:toNumMap(), {log = {desc = "relayReward"}})}) + end + end status = true end else diff --git a/src/adv/AdvMap.lua b/src/adv/AdvMap.lua index d12c1de..6d99d08 100644 --- a/src/adv/AdvMap.lua +++ b/src/adv/AdvMap.lua @@ -19,17 +19,17 @@ function Map:ctor(adv, mapIdx, mapInfo, isEnter, isNewRelay) self.mapId = mapInfo.mapId self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用 self.rooms = {} - self:loadRooms(mapInfo.rooms) + self:loadRooms(mapInfo.rooms, isNewRelay) end -function Map:loadRooms(rooms) +function Map:loadRooms(rooms, isNewRelay) local mapData = csvdb["map_" .. csvdb["mapCsv"][self.mapId]["path"] .. "Csv"] for roomId, roomName in pairs(mapData["rooms"]) do if roomName == "path" then - self.rooms[roomId] = Room.new(self, roomId, mapData["path"], rooms[roomId], true) + self.rooms[roomId] = Room.new(self, roomId, mapData["path"], rooms[roomId], true, isNewRelay) else roomName = roomName:gsub("/", "_") - self.rooms[roomId] = Room.new(self, roomId, csvdb["room_" .. roomName .. "Csv"], rooms[roomId], false) + self.rooms[roomId] = Room.new(self, roomId, csvdb["room_" .. roomName .. "Csv"], rooms[roomId], false, isNewRelay) end end end @@ -55,6 +55,17 @@ function Map:showMap() self.isShow = true end +function Map:isAllOpen() + for roomId, room in pairs(self.rooms) do + for blockId, block in pairs(room.blocks) do + if not block.isOpen then + return false + end + end + end + return true +end + --结束本层的时候调用 function Map:checkOver() local mapCsv = csvdb["mapCsv"][self.mapId] @@ -66,14 +77,7 @@ function Map:checkOver() elseif mapCsv.clearType == 3 then -- 持有 if self.adv:cost(mapCsv.clear:toNumMap(), {}, true) then return true end elseif mapCsv.clearType == 4 then - for roomId, room in pairs(self.rooms) do - for blockId, block in pairs(room.blocks) do - if not block.isOpen then - return false - end - end - return true - end + return self:isAllOpen() else return true end @@ -288,13 +292,13 @@ createMap = function(self, mapId, isEnter, isNewRelay) randomFunc[AdvEventType.In] = function()end --出口 randomFunc[AdvEventType.Out] = function() - if not self.adv:isEndless() and isNewRelay then + if not self.adv:isEndless() and self.adv.isRelay and not self.adv.owner:checkOverGuide(GuideStep.AdvRelay) then return false end end --中继点出口 randomFunc[AdvEventType.Exit] = function() - if not self.adv.isRelay or isEnter then return false end + if not self.adv.isRelay or self.adv.owner:checkOverGuide(GuideStep.AdvRelay) then return false end end --开放出口 randomFunc[AdvEventType.InOut] = function() end @@ -399,6 +403,8 @@ createMap = function(self, mapId, isEnter, isNewRelay) if self.adv.isRelay and isNewRelay then local relayData = self.adv:isHaveRelay() if relayData then + + -- choose local choose = relayData.choose:toArray(true, "=") local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0 for _, chooseId in pairs(choose) do @@ -412,6 +418,22 @@ createMap = function(self, mapId, isEnter, isNewRelay) lastCount = lastCount - 1 stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil end + + -- 掉落 + local drop = relayData.drop:toNumMap() + for dropId, dropCount in pairs(drop) do + for i = 1, dropCount do + if lastCount <= 0 then break end + local idx = math.randomInt(1, lastCount) + local cur = stagePool["global"][AdvCodeRandomStage][idx] + + giveEvent(cur["room"], cur["block"], AdvEventType.Drop, dropId) + + table.remove(stagePool["global"][AdvCodeRandomStage], idx) + lastCount = lastCount - 1 + stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil + end + end end end diff --git a/src/adv/AdvRoom.lua b/src/adv/AdvRoom.lua index 8ef3d19..8109b68 100644 --- a/src/adv/AdvRoom.lua +++ b/src/adv/AdvRoom.lua @@ -5,7 +5,7 @@ local Block = require "adv.AdvBlock" local Passive = require "adv.AdvPassive" local Room = class("AdvRoom") -function Room:ctor(map, roomId, csvData, info, isPath) +function Room:ctor(map, roomId, csvData, info, isPath, isNewRelay) self.map = map self.roomId = roomId self.col, self.row = AdvCommon.getCrById(self.roomId) @@ -15,10 +15,10 @@ function Room:ctor(map, roomId, csvData, info, isPath) self.battleAfterCall = {} self.blocks = {} - self:loadBlocks(csvData, info) + self:loadBlocks(csvData, info, isNewRelay) end -function Room:loadBlocks(csvData, info) +function Room:loadBlocks(csvData, info, isNewRelay) 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]) @@ -38,7 +38,7 @@ function Room:loadBlocks(csvData, info) end end --中继层全部开放 boss 房间 开启所有的地块 - if self.map.adv.isRelay or (self.isBossRoom and self.isShow and isFirstOpen) then + if (self.map.adv.isRelay and not isNewRelay) or (self.isBossRoom and self.isShow and isFirstOpen) then table.insert(self.battleAfterCall, function() for _, block in pairs(self.blocks) do self:openBlock(block) -- libgit2 0.21.2