Commit 48962a743d4a88b6510fee51ef13336bfb0541f8

Authored by zhouhaihai
1 parent 26e6dd8b

路障系统提交

Showing 3 changed files with 68 additions and 11 deletions   Show diff stats
@@ -1038,20 +1038,29 @@ function Adv:clickBlock(roomId, blockId, params) @@ -1038,20 +1038,29 @@ function Adv:clickBlock(roomId, blockId, params)
1038 1038
1039 local status, errorCode = false, nil 1039 local status, errorCode = false, nil
1040 local clickEvent = false 1040 local clickEvent = false
1041 - if not block.isOpen then 1041 +
  1042 + local function checkAroundBlocks(ignoreGuard)
1042 local canOpen = false --如果未开放是否可以开放 1043 local canOpen = false --如果未开放是否可以开放
1043 - local hadMonster = false -- 周围是否有解锁的怪未击败  
1044 for _, one in ipairs(map:getAroundBlocks(room, block)) do 1044 for _, one in ipairs(map:getAroundBlocks(room, block)) do
1045 local _room, _block = one[1], one[2] 1045 local _room, _block = one[1], one[2]
1046 - if _block.isOpen then canOpen = true end  
1047 - if _block.isOpen and _block:isMonster() then  
1048 - local enemy = self.battle:getEnemy(_room.roomId, _block.blockId)  
1049 - if not enemy:hadBuff(Buff.DONT_DEFEND) then  
1050 - hadMonster = true 1046 + if not ignoreGuard and _block:isGuard() then
  1047 + if _block:isMonster() then
  1048 + local enemy = self.battle:getEnemy(_room.roomId, _block.blockId)
  1049 + if not enemy:hadBuff(Buff.DONT_DEFEND) then
  1050 + return false
  1051 + end
  1052 + else
  1053 + return false
1051 end 1054 end
  1055 + elseif _block:isWalk() then
  1056 + canOpen = true
1052 end 1057 end
1053 end 1058 end
1054 - if canOpen and not hadMonster then --开放 1059 + return canOpen
  1060 + end
  1061 +
  1062 + if not block.isOpen then
  1063 + if checkAroundBlocks() then --开放
1055 self:getCurMap():openBlock(roomId, blockId, true, true) 1064 self:getCurMap():openBlock(roomId, blockId, true, true)
1056 status = true 1065 status = true
1057 end 1066 end
@@ -1061,6 +1070,10 @@ function Adv:clickBlock(roomId, blockId, params) @@ -1061,6 +1070,10 @@ function Adv:clickBlock(roomId, blockId, params)
1061 if not block.event then 1070 if not block.event then
1062 return 1071 return
1063 end 1072 end
  1073 +
  1074 + if block:isHinder() then
  1075 + if not checkAroundBlocks(true) then return end
  1076 + end
1064 --可点击的事件 1077 --可点击的事件
1065 if not room.isBossRoom or block:isBoss() then 1078 if not room.isBossRoom or block:isBoss() then
1066 if eventCallFunc[block.event.etype] then 1079 if eventCallFunc[block.event.etype] then
src/adv/AdvBlock.lua
@@ -11,7 +11,7 @@ function Block:ctor(room, blockId, event, isOpen, trapId) @@ -11,7 +11,7 @@ function Block:ctor(room, blockId, event, isOpen, trapId)
11 self.isOpen = isOpen and true or false 11 self.isOpen = isOpen and true or false
12 self.trapId = trapId 12 self.trapId = trapId
13 13
14 - self:updateEvent(event) 14 + self:updateEvent(event, true)
15 end 15 end
16 function Block:isBoss() 16 function Block:isBoss()
17 return self:getEventType() == AdvEventType.BOSS 17 return self:getEventType() == AdvEventType.BOSS
@@ -29,7 +29,7 @@ function Block:getEventType() @@ -29,7 +29,7 @@ function Block:getEventType()
29 return self.event and self.event.etype 29 return self.event and self.event.etype
30 end 30 end
31 31
32 -function Block:updateEvent(event) 32 +function Block:updateEvent(event, isInit)
33 self.event = event 33 self.event = event
34 end 34 end
35 35
@@ -181,6 +181,29 @@ function Block:randomEvent() @@ -181,6 +181,29 @@ function Block:randomEvent()
181 end 181 end
182 end 182 end
183 183
  184 +-- 获取event 数据
  185 +function Block:getEventData()
  186 + local typToCsv = {
  187 + [AdvEventType.Monster] = "event_monsterCsv",
  188 + [AdvEventType.BOSS] = "event_monsterCsv",
  189 + [AdvEventType.Choose] = "event_chooseCsv",
  190 + [AdvEventType.Drop] = "event_dropCsv",
  191 + [AdvEventType.Build] = "event_buildingCsv",
  192 + [AdvEventType.Trader] = "event_traderCsv",
  193 + [AdvEventType.Trap] = "event_trapCsv",
  194 + [AdvEventType.Click] = "event_clickCsv",
  195 + [AdvEventType.Layer] = "event_layerCsv",
  196 + [AdvEventType.Task] = "event_questCsv",
  197 + [AdvEventType.LinkChoose] = "event_linkchooseCsv",
  198 + }
  199 +
  200 + local etype = self:getEventType()
  201 + if not etype then return end
  202 + if not self.event.id then return end
  203 + if not typToCsv[etype] then return end
  204 +
  205 + return csvdb[typToCsv[etype]][self.event.id]
  206 +end
184 207
185 --事件有需要额外处理的部分 208 --事件有需要额外处理的部分
186 function Block:open() 209 function Block:open()
@@ -193,4 +216,25 @@ function Block:open() @@ -193,4 +216,25 @@ function Block:open()
193 return true 216 return true
194 end 217 end
195 218
  219 +function Block:getObstacle()
  220 + local data = self:getEventData()
  221 + if not data then return 0 end
  222 + return data.obstacle or 0
  223 +end
  224 +
  225 +-- 是否看守周围地板
  226 +function Block:isGuard()
  227 + return self.isOpen and self:getObstacle() == 2
  228 +end
  229 +
  230 +-- 是否是路障
  231 +function Block:isHinder()
  232 + return self.isOpen and self:getObstacle() == 1
  233 +end
  234 +
  235 +-- 玩家是否经过 -- 已经翻开 并且 不是路障
  236 +function Block:isWalk()
  237 + return self.isOpen and not self:isHinder()
  238 +end
  239 +
196 return Block 240 return Block
197 \ No newline at end of file 241 \ No newline at end of file
src/adv/AdvMap.lua
@@ -125,7 +125,7 @@ function Map:openBlockRand(num, isPlayer, ignoreBack) @@ -125,7 +125,7 @@ function Map:openBlockRand(num, isPlayer, ignoreBack)
125 end 125 end
126 126
127 127
128 --- 打开一个地块 翻开地块的入口方法 !!! 128 +-- 打开一个地块 操作翻开地块的入口方法 !!!
129 function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) 129 function Map:openBlock(roomId, blockId, isPlayer, ignoreBack)
130 local room = self.rooms[roomId] 130 local room = self.rooms[roomId]
131 if not room then return end 131 if not room then return end