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,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 |