Commit 7b64b6cd44d5980539c0f2b508c4993fda27c87f

Authored by zhouhaihai
1 parent f9acbb32

中继层优化

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 &quot;adv.AdvBlock&quot;
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)
... ...