Commit df0f3a8e928370e5f4ce36431c72c529acec0ce3

Authored by suhongyang
2 parents 42f465e5 a0834e49

Merge branch 'develop' of 120.26.43.151:wasteland/server into develop

src/adv/Adv.lua
... ... @@ -1436,7 +1436,7 @@ function Adv:clickBlock(roomId, blockId, params)
1436 1436 if not ignoreGuard and _block:isGuard() then
1437 1437 if _block:isMonster() then
1438 1438 local enemy = self.battle:getEnemy(_room.roomId, _block.blockId)
1439   - if not enemy:hadBuff(Buff.DONT_DEFEND) then
  1439 + if not enemy:hadBuff(Buff.DONT_DEFEND) and not self.battle.player:hadBuff(Buff.SNEAK) then
1440 1440 return false
1441 1441 end
1442 1442 else
... ...
src/adv/AdvBattle.lua
... ... @@ -163,7 +163,11 @@ function Battle:addEnemy(room, block, mapIdx)
163 163 end
164 164 block.event.enemy = enemy
165 165 end
166   - local player = Enemy.new(self, block.event.mId or 999, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx)
  166 + if not block.event.mId then
  167 + block.event.mId = self.adv.lastEnemyId
  168 + self.adv.lastEnemyId = self.adv.lastEnemyId + 1
  169 + end
  170 + local player = Enemy.new(self, block.event.mId, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx)
167 171 table.insert(self.enemys[mapIdx], player)
168 172 return player
169 173 elseif block:isBuild() then
... ...
src/adv/AdvBlock.lua
... ... @@ -54,11 +54,9 @@ function Block:randomEvent()
54 54 local randomFunc = {}
55 55 --怪
56 56 randomFunc[AdvEventType.Monster] = function()
57   - self.event.mId = adv.lastEnemyId --给怪一个有序id 回合逻辑时使用
58   - adv.lastEnemyId = adv.lastEnemyId + 1
59 57 local enemy = adv.battle:getEnemy(room.roomId, self.blockId, map.mapIdx)
60 58 if enemy then
61   - enemy:unlock(self.event.mId)
  59 + enemy:unlock()
62 60 else
63 61 enemy = adv.battle:addEnemy(room, self, map.mapIdx)
64 62 enemy:initAfter(self.event.enemy)
... ... @@ -177,18 +175,14 @@ function Block:randomEvent()
177 175 backTrap = false
178 176 elseif data.target == 3 then -- 翻开周围8格,并给怪物附带buff(不伤害玩家)
179 177 self.room.map.adv:getCurMap():openBlocksBySize(self.room.roomId, self.blockId, 2)
180   - local blocks = self.room.map.adv:getCurMap():getBlocksBySize(self.room.roomId, self.blockId, 2)
181   - for _, block in pairs(blocks) do
182   - if block:isMonster() then
183   - local e = adv.battle:getEnemy(block.room.roomId, block.blockId)
184   - for _, buffId in ipairs(buffs) do
185   - e:addBuff(buffId)
186   - end
  178 + local enemys = self.room.map.adv:getCurMap():getEnemysBySize(self.room.roomId, self.blockId, 2)
  179 + for _, e in ipairs(enemys) do
  180 + for _, buffId in ipairs(buffs) do
  181 + e:addBuff(buffId)
187 182 end
188 183 end
189 184 end
190 185  
191   -
192 186 if data.specialEff ~= "" then
193 187 local effect = data.specialEff:toArray(true, "=")
194 188 if effect[1] == 1 then
... ...
src/adv/AdvBuff.lua
... ... @@ -32,6 +32,7 @@ Buff.SP_MAX_CHANGE = 28 -- 魔法上限
32 32 Buff.ITEM_GET_UP = 29 -- 获得道具数量增加
33 33 Buff.Buff_EFFECT_CHANGE = 30 -- 改变 buff 效果
34 34 Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物
  35 +Buff.SNEAK = 32 --潜行
35 36  
36 37  
37 38 --角色一些属性的变化
... ... @@ -371,7 +372,26 @@ local BuffFactory = {
371 372 return self.buffData.effectValue1
372 373 end
373 374 end,
  375 + [Buff.SNEAK] = function(_Buff)
  376 + _Buff._initDB = function(self, data)
  377 + self.sneak = data.sneak
  378 + end
374 379  
  380 + _Buff._getDB = function(self)
  381 + return {sneak = self.sneak}
  382 + end
  383 + -- 翻开怪 周围的格子
  384 + _Buff.sneakBreak = function(self, enemyIds)
  385 + if self.isDel then return end
  386 + for _, enemyId in ipairs(enemyIds) do
  387 + self.sneak[enemyId] = (self.sneak[enemyId] or 0) + 1
  388 + if self.sneak[enemyId] >= 4 then -- 4格 就删掉玩家的buff
  389 + self.isDel = true
  390 + break
  391 + end
  392 + end
  393 + end
  394 + end,
375 395 }
376 396  
377 397 -- 同样的返回 effectValue1, effectValue2 * self.layer 类型的buff
... ... @@ -488,6 +508,7 @@ function Buff:checkKeep()
488 508 2=建筑id;
489 509 3=事件id
490 510 4=队伍为特定属性时
  511 + 5=拥有指定buff
491 512 --]]
492 513  
493 514 local checkFunc = {}
... ... @@ -524,6 +545,13 @@ function Buff:checkKeep()
524 545 local role = self.owner.battle.adv.owner
525 546 return role:getHerosCamp(role:getProperty("advTeam").heros) == teamAttr
526 547 end
  548 + checkFunc[5] = function(_, buffId)
  549 + local buff = self.owner:getBuffById(buffId)
  550 + if buff and not buff.isDel then
  551 + return true
  552 + end
  553 + return false
  554 + end
527 555  
528 556 local keepTerm = self.buffData.keepTerm:toArray(true, "=")
529 557 if not checkFunc[keepTerm[1]] then return true end
... ...
src/adv/AdvMap.lua
... ... @@ -2,6 +2,8 @@
2 2 local Room = require "adv.AdvRoom"
3 3 local Passive = require "adv.AdvPassive"
4 4 local AdvCommon = require "adv.AdvCommon"
  5 +
  6 +local Buff = require "adv.AdvBuff"
5 7 -- 一层地图
6 8 local Map = class("AdvMap")
7 9 -- 内部方法声明
... ... @@ -115,12 +117,15 @@ function Map:addNewMonsterRand(monsterId, where)
115 117 monsterId = math.randWeight(eventLib[AdvEventType.Monster][0], "showup")
116 118 end
117 119  
118   - local event = {etype = AdvEventType.Monster, mId = self.adv.lastEnemyId}
119   - self.adv.lastEnemyId = self.adv.lastEnemyId + 1
120   - event.id = monsterId
  120 + local event = {
  121 + type = AdvEventType.Monster,
  122 + id = monsterId,
  123 + }
121 124 block:updateEvent(event)
122 125  
123   - self.adv.battle:addEnemy(room, block):triggerPassive(Passive.BORN_ONCE)
  126 + local enemy = self.adv.battle:addEnemy(room, block)
  127 + enemy:initAfter(event.enemy)
  128 + enemy:triggerPassive(Passive.BORN_ONCE)
124 129  
125 130 return room, block
126 131 end
... ... @@ -168,6 +173,17 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack)
168 173 if not ignoreBack then
169 174 self.adv:backBlockChange(roomId, blockId)
170 175 end
  176 +
  177 + -- 潜行检查
  178 + local sneakBuff = self.adv.battle.player:hadBuff(Buff.SNEAK)
  179 + if sneakBuff then
  180 + local enemys = self:getEnemysBySize(roomId, blockId, 2)
  181 + local ids = {}
  182 + for _, e in ipairs(enemys) do
  183 + table.insert(ids, e.id)
  184 + end
  185 + sneakBuff:sneakBreak(ids)
  186 + end
171 187 end
172 188 end
173 189  
... ... @@ -244,6 +260,20 @@ function Map:getBlocksBySize(roomId, blockId, size)
244 260 return blocks
245 261 end
246 262  
  263 +function Map:getEnemysBySize(roomId, blockId, size)
  264 + local blocks = self:getBlocksBySize(roomId, blockId, size)
  265 + local enemys = {}
  266 + for _, block in ipairs(blocks) do
  267 + if block:isMonster() then
  268 + local e = self.adv.battle:getEnemy(block.room.roomId, block.blockId)
  269 + if e then
  270 + table.insert(enemys, e)
  271 + end
  272 + end
  273 + end
  274 + return enemys
  275 +end
  276 +
247 277 -----------------------------随机地图-----------------------------
248 278  
249 279 -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入
... ...
src/adv/AdvPlayer.lua
... ... @@ -527,8 +527,7 @@ function Enemy:ctor(battle, mId, monsterId, roomId, blockId, lock, enemy, mapIdx
527 527 self.mapIdx = mapIdx
528 528 self:initData(enemy)
529 529 end
530   -function Enemy:unlock(id)
531   - self.id = id
  530 +function Enemy:unlock()
532 531 self.lock = nil
533 532 end
534 533  
... ...