Commit 48962a743d4a88b6510fee51ef13336bfb0541f8
1 parent
26e6dd8b
路障系统提交
Showing
3 changed files
with
68 additions
and
11 deletions
Show diff stats
src/adv/Adv.lua
| ... | ... | @@ -1038,20 +1038,29 @@ function Adv:clickBlock(roomId, blockId, params) |
| 1038 | 1038 | |
| 1039 | 1039 | local status, errorCode = false, nil |
| 1040 | 1040 | local clickEvent = false |
| 1041 | - if not block.isOpen then | |
| 1041 | + | |
| 1042 | + local function checkAroundBlocks(ignoreGuard) | |
| 1042 | 1043 | local canOpen = false --如果未开放是否可以开放 |
| 1043 | - local hadMonster = false -- 周围是否有解锁的怪未击败 | |
| 1044 | 1044 | for _, one in ipairs(map:getAroundBlocks(room, block)) do |
| 1045 | 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 | 1054 | end |
| 1055 | + elseif _block:isWalk() then | |
| 1056 | + canOpen = true | |
| 1052 | 1057 | end |
| 1053 | 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 | 1064 | self:getCurMap():openBlock(roomId, blockId, true, true) |
| 1056 | 1065 | status = true |
| 1057 | 1066 | end |
| ... | ... | @@ -1061,6 +1070,10 @@ function Adv:clickBlock(roomId, blockId, params) |
| 1061 | 1070 | if not block.event then |
| 1062 | 1071 | return |
| 1063 | 1072 | end |
| 1073 | + | |
| 1074 | + if block:isHinder() then | |
| 1075 | + if not checkAroundBlocks(true) then return end | |
| 1076 | + end | |
| 1064 | 1077 | --可点击的事件 |
| 1065 | 1078 | if not room.isBossRoom or block:isBoss() then |
| 1066 | 1079 | if eventCallFunc[block.event.etype] then | ... | ... |
src/adv/AdvBlock.lua
| ... | ... | @@ -11,7 +11,7 @@ function Block:ctor(room, blockId, event, isOpen, trapId) |
| 11 | 11 | self.isOpen = isOpen and true or false |
| 12 | 12 | self.trapId = trapId |
| 13 | 13 | |
| 14 | - self:updateEvent(event) | |
| 14 | + self:updateEvent(event, true) | |
| 15 | 15 | end |
| 16 | 16 | function Block:isBoss() |
| 17 | 17 | return self:getEventType() == AdvEventType.BOSS |
| ... | ... | @@ -29,7 +29,7 @@ function Block:getEventType() |
| 29 | 29 | return self.event and self.event.etype |
| 30 | 30 | end |
| 31 | 31 | |
| 32 | -function Block:updateEvent(event) | |
| 32 | +function Block:updateEvent(event, isInit) | |
| 33 | 33 | self.event = event |
| 34 | 34 | end |
| 35 | 35 | |
| ... | ... | @@ -181,6 +181,29 @@ function Block:randomEvent() |
| 181 | 181 | end |
| 182 | 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 | 209 | function Block:open() |
| ... | ... | @@ -193,4 +216,25 @@ function Block:open() |
| 193 | 216 | return true |
| 194 | 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 | 240 | return Block |
| 197 | 241 | \ No newline at end of file | ... | ... |
src/adv/AdvMap.lua
| ... | ... | @@ -125,7 +125,7 @@ function Map:openBlockRand(num, isPlayer, ignoreBack) |
| 125 | 125 | end |
| 126 | 126 | |
| 127 | 127 | |
| 128 | --- 打开一个地块 翻开地块的入口方法 !!! | |
| 128 | +-- 打开一个地块 操作翻开地块的入口方法 !!! | |
| 129 | 129 | function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) |
| 130 | 130 | local room = self.rooms[roomId] |
| 131 | 131 | if not room then return end | ... | ... |