Commit a0834e49e04e46920a52f2fbbbbe745ab85d027f

Authored by zhouhaihai
1 parent 23d9f086

增加潜行 功能

@@ -1436,7 +1436,7 @@ function Adv:clickBlock(roomId, blockId, params) @@ -1436,7 +1436,7 @@ function Adv:clickBlock(roomId, blockId, params)
1436 if not ignoreGuard and _block:isGuard() then 1436 if not ignoreGuard and _block:isGuard() then
1437 if _block:isMonster() then 1437 if _block:isMonster() then
1438 local enemy = self.battle:getEnemy(_room.roomId, _block.blockId) 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 return false 1440 return false
1441 end 1441 end
1442 else 1442 else
src/adv/AdvBattle.lua
@@ -163,7 +163,11 @@ function Battle:addEnemy(room, block, mapIdx) @@ -163,7 +163,11 @@ function Battle:addEnemy(room, block, mapIdx)
163 end 163 end
164 block.event.enemy = enemy 164 block.event.enemy = enemy
165 end 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 table.insert(self.enemys[mapIdx], player) 171 table.insert(self.enemys[mapIdx], player)
168 return player 172 return player
169 elseif block:isBuild() then 173 elseif block:isBuild() then
src/adv/AdvBlock.lua
@@ -54,11 +54,9 @@ function Block:randomEvent() @@ -54,11 +54,9 @@ function Block:randomEvent()
54 local randomFunc = {} 54 local randomFunc = {}
55 --怪 55 --怪
56 randomFunc[AdvEventType.Monster] = function() 56 randomFunc[AdvEventType.Monster] = function()
57 - self.event.mId = adv.lastEnemyId --给怪一个有序id 回合逻辑时使用  
58 - adv.lastEnemyId = adv.lastEnemyId + 1  
59 local enemy = adv.battle:getEnemy(room.roomId, self.blockId, map.mapIdx) 57 local enemy = adv.battle:getEnemy(room.roomId, self.blockId, map.mapIdx)
60 if enemy then 58 if enemy then
61 - enemy:unlock(self.event.mId) 59 + enemy:unlock()
62 else 60 else
63 enemy = adv.battle:addEnemy(room, self, map.mapIdx) 61 enemy = adv.battle:addEnemy(room, self, map.mapIdx)
64 enemy:initAfter(self.event.enemy) 62 enemy:initAfter(self.event.enemy)
@@ -177,18 +175,14 @@ function Block:randomEvent() @@ -177,18 +175,14 @@ function Block:randomEvent()
177 backTrap = false 175 backTrap = false
178 elseif data.target == 3 then -- 翻开周围8格,并给怪物附带buff(不伤害玩家) 176 elseif data.target == 3 then -- 翻开周围8格,并给怪物附带buff(不伤害玩家)
179 self.room.map.adv:getCurMap():openBlocksBySize(self.room.roomId, self.blockId, 2) 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 end 182 end
188 end 183 end
189 end 184 end
190 185
191 -  
192 if data.specialEff ~= "" then 186 if data.specialEff ~= "" then
193 local effect = data.specialEff:toArray(true, "=") 187 local effect = data.specialEff:toArray(true, "=")
194 if effect[1] == 1 then 188 if effect[1] == 1 then
src/adv/AdvBuff.lua
@@ -32,6 +32,7 @@ Buff.SP_MAX_CHANGE = 28 -- 魔法上限 @@ -32,6 +32,7 @@ Buff.SP_MAX_CHANGE = 28 -- 魔法上限
32 Buff.ITEM_GET_UP = 29 -- 获得道具数量增加 32 Buff.ITEM_GET_UP = 29 -- 获得道具数量增加
33 Buff.Buff_EFFECT_CHANGE = 30 -- 改变 buff 效果 33 Buff.Buff_EFFECT_CHANGE = 30 -- 改变 buff 效果
34 Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物 34 Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物
  35 +Buff.SNEAK = 32 --潜行
35 36
36 37
37 --角色一些属性的变化 38 --角色一些属性的变化
@@ -371,7 +372,26 @@ local BuffFactory = { @@ -371,7 +372,26 @@ local BuffFactory = {
371 return self.buffData.effectValue1 372 return self.buffData.effectValue1
372 end 373 end
373 end, 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 -- 同样的返回 effectValue1, effectValue2 * self.layer 类型的buff 397 -- 同样的返回 effectValue1, effectValue2 * self.layer 类型的buff
@@ -488,6 +508,7 @@ function Buff:checkKeep() @@ -488,6 +508,7 @@ function Buff:checkKeep()
488 2=建筑id; 508 2=建筑id;
489 3=事件id 509 3=事件id
490 4=队伍为特定属性时 510 4=队伍为特定属性时
  511 + 5=拥有指定buff
491 --]] 512 --]]
492 513
493 local checkFunc = {} 514 local checkFunc = {}
@@ -524,6 +545,13 @@ function Buff:checkKeep() @@ -524,6 +545,13 @@ function Buff:checkKeep()
524 local role = self.owner.battle.adv.owner 545 local role = self.owner.battle.adv.owner
525 return role:getHerosCamp(role:getProperty("advTeam").heros) == teamAttr 546 return role:getHerosCamp(role:getProperty("advTeam").heros) == teamAttr
526 end 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 local keepTerm = self.buffData.keepTerm:toArray(true, "=") 556 local keepTerm = self.buffData.keepTerm:toArray(true, "=")
529 if not checkFunc[keepTerm[1]] then return true end 557 if not checkFunc[keepTerm[1]] then return true end
src/adv/AdvMap.lua
@@ -2,6 +2,8 @@ @@ -2,6 +2,8 @@
2 local Room = require "adv.AdvRoom" 2 local Room = require "adv.AdvRoom"
3 local Passive = require "adv.AdvPassive" 3 local Passive = require "adv.AdvPassive"
4 local AdvCommon = require "adv.AdvCommon" 4 local AdvCommon = require "adv.AdvCommon"
  5 +
  6 +local Buff = require "adv.AdvBuff"
5 -- 一层地图 7 -- 一层地图
6 local Map = class("AdvMap") 8 local Map = class("AdvMap")
7 -- 内部方法声明 9 -- 内部方法声明
@@ -115,12 +117,15 @@ function Map:addNewMonsterRand(monsterId, where) @@ -115,12 +117,15 @@ function Map:addNewMonsterRand(monsterId, where)
115 monsterId = math.randWeight(eventLib[AdvEventType.Monster][0], "showup") 117 monsterId = math.randWeight(eventLib[AdvEventType.Monster][0], "showup")
116 end 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 block:updateEvent(event) 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 return room, block 130 return room, block
126 end 131 end
@@ -168,6 +173,17 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack) @@ -168,6 +173,17 @@ function Map:openBlock(roomId, blockId, isPlayer, ignoreBack)
168 if not ignoreBack then 173 if not ignoreBack then
169 self.adv:backBlockChange(roomId, blockId) 174 self.adv:backBlockChange(roomId, blockId)
170 end 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 end 187 end
172 end 188 end
173 189
@@ -244,6 +260,20 @@ function Map:getBlocksBySize(roomId, blockId, size) @@ -244,6 +260,20 @@ function Map:getBlocksBySize(roomId, blockId, size)
244 return blocks 260 return blocks
245 end 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 -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入 279 -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入
src/adv/AdvPlayer.lua
@@ -527,8 +527,7 @@ function Enemy:ctor(battle, mId, monsterId, roomId, blockId, lock, enemy, mapIdx @@ -527,8 +527,7 @@ function Enemy:ctor(battle, mId, monsterId, roomId, blockId, lock, enemy, mapIdx
527 self.mapIdx = mapIdx 527 self.mapIdx = mapIdx
528 self:initData(enemy) 528 self:initData(enemy)
529 end 529 end
530 -function Enemy:unlock(id)  
531 - self.id = id 530 +function Enemy:unlock()
532 self.lock = nil 531 self.lock = nil
533 end 532 end
534 533