Commit 7b2dc17cfcec7bdf38fda812c174f8a7377f849d

Authored by zhouhaihai
1 parent cb071e8d

地图 层 buff passive

src/adv/Adv.lua
... ... @@ -157,6 +157,11 @@ function Adv:initByChapter(params)
157 157 self.battle.player:afterLayer() -- 玩家的buff 清理一下
158 158 end
159 159  
  160 + -- 不是中继层 加上 层 和 地图的buff和被动
  161 + if not self.isRelay then
  162 + self.battle:initMapEffect()
  163 + end
  164 +
160 165 -- 中继进入奖励
161 166 if relayData and isEnter then
162 167 self:awardRelay(relayData, notNotify)
... ... @@ -1440,6 +1445,7 @@ local function clickLayer(self, room, block, params)
1440 1445  
1441 1446 self.maps[mapIdx] = AdvMap.new(self, mapIdx, mapId)
1442 1447 self.battle:initMapEnemys(mapIdx, true)
  1448 + self.battle:initMapEffect(true)
1443 1449 self.maps[mapIdx]:initBattleAfter()
1444 1450 self:checkAchievement(Adv.AchievType.EnterILayer, 1, mapId)
1445 1451 end
... ... @@ -1648,7 +1654,7 @@ function Adv:doActive(activeId, target)
1648 1654 doActiveEffect[5] = function(_)
1649 1655 for _, target in ipairs(targers) do
1650 1656 if not target.lock and not target.isDead then
1651   - target.isDead = true
  1657 + target:kill()
1652 1658 self:backBlockChange(target.roomId, target.blockId)
1653 1659 end
1654 1660 end
... ...
src/adv/AdvBattle.lua
... ... @@ -125,7 +125,7 @@ function Battle:initMapEnemys(mapIdx, after)
125 125 if map then
126 126 for _, room in pairs(map.rooms) do
127 127 for _, block in pairs(room.blocks) do
128   - self:addEnemy(room, block, mapIdx)
  128 + self:addEnemy(room, block, mapIdx, true)
129 129 end
130 130 end
131 131 end
... ... @@ -146,9 +146,10 @@ function Battle:initMapEnemys(mapIdx, after)
146 146 self.cachePassiveEvent[mapIdx] = nil
147 147 end
148 148  
149   -function Battle:addEnemy(room, block, mapIdx)
  149 +function Battle:addEnemy(room, block, mapIdx, init)
150 150 mapIdx = mapIdx or self.adv:getCurMapIdx()
151 151  
  152 + local isNew, player, data
152 153 if block:isMonster() then
153 154 if not block.event.enemy then
154 155 local enemyCsv = csvdb["event_monsterCsv"][block.event.id]
... ... @@ -162,14 +163,15 @@ function Battle:addEnemy(room, block, mapIdx)
162 163 table.insert(enemy.passives, {id = id})
163 164 end
164 165 block.event.enemy = enemy
  166 + isNew = true
165 167 end
166 168 if not block.event.mId then
167 169 block.event.mId = self.adv.lastEnemyId
168 170 self.adv.lastEnemyId = self.adv.lastEnemyId + 1
169 171 end
170   - local player = Enemy.new(self, block.event.mId, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx)
  172 + data = block.event.enemy
  173 + player = Enemy.new(self, block.event.mId, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx)
171 174 table.insert(self.enemys[mapIdx], player)
172   - return player
173 175 elseif block:isBuild() then
174 176 if not block.event.build then
175 177 local buildCsv = csvdb["event_buildingCsv"][block.event.id]
... ... @@ -179,11 +181,28 @@ function Battle:addEnemy(room, block, mapIdx)
179 181 table.insert(build.passives, {id = id})
180 182 end
181 183 block.event.build = build
  184 + isNew = true
182 185 end
183   - local player = Build.new(self, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.build, mapIdx)
  186 + data = block.event.build
  187 + player = Build.new(self, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.build, mapIdx)
184 188 table.insert(self.builds[mapIdx], player)
185   - return player
186 189 end
  190 + if not init then
  191 + player:initAfter(data)
  192 +
  193 + -- 游戏中新创建的 加上地图 floor 效果
  194 + if isNew then
  195 + local passives, buffs = self:getMapEffect(2, true, mapIdx)
  196 + for _, passive in ipairs(passives) do
  197 + player:addPassive({id = passive})
  198 + end
  199 +
  200 + for _, buff in ipairs(buffs) do
  201 + enemy:addBuff(buff)
  202 + end
  203 + end
  204 + end
  205 + return player
187 206 end
188 207  
189 208 function Battle:getEnemy(roomId, blockId, mapIdx)
... ... @@ -323,7 +342,7 @@ function Battle:battleBegin(roomId, blockId, params)
323 342 if not player then return end
324 343 -- 玩家没死就是怪死了
325 344 if player.hp > 0 then
326   - enemy:hurt(enemy.hp, self.player, {hurtType = 5})
  345 + enemy:kill()
327 346 self.player:effectBattleBuff()
328 347  
329 348 self.adv.owner:checkTaskEnter("AdvBattleWin", {id = self.adv.chapterId})
... ... @@ -341,6 +360,63 @@ function Battle:battleBegin(roomId, blockId, params)
341 360 end
342 361  
343 362  
  363 +function Battle:getMapEffect(ctype, ilayer, mapIdx)
  364 + mapIdx = mapIdx or self.adv:getCurMapIdx()
  365 + local mapData = self.adv.maps[mapIdx]:getMapInfoCsv() or {}
  366 + local floorData = self.adv:getCurFloorData() or {}
  367 +
  368 + local passives = {}
  369 + local buffs = {}
  370 +
  371 + for _type, temp in ipairs({mapData, floorData}) do
  372 + for _, one in ipairs((temp.passive or ""):toTableArray(true)) do
  373 + passives[one[1]] = passives[one[1]] or {}
  374 + if ilayer and one[1] == 1 and _type == 2 then
  375 + else
  376 + table.insert(passives[one[1]], one[2])
  377 + end
  378 + end
  379 + for _, one in ipairs((temp.buff or ""):toTableArray(true)) do
  380 + buffs[one[1]] = buffs[one[1]] or {}
  381 + if ilayer and one[1] == 1 and _type == 2 then
  382 + else
  383 + table.insert(buffs[one[1]], one[2])
  384 + end
  385 + end
  386 + end
  387 + if ctype then
  388 + passives = passives[ctype] or {}
  389 + buffs = buffs[ctype] or {}
  390 + end
  391 + return passives, buffs
  392 +end
  393 +-- 夹层玩家 不重复加 floor
  394 +function Battle:initMapEffect(ilayer)
  395 + local passives, buffs = self:getMapEffect(nil, ilayer)
  396 + local mapIdx = self.adv:getCurMapIdx()
  397 +
  398 + for _, passive in ipairs(passives[1] or {}) do
  399 + self.player:addPassive({id = passive})
  400 + end
  401 +
  402 + for _, passive in ipairs(passives[2] or {}) do
  403 + for _, enemy in ipairs(self.enemys[mapIdx]) do
  404 + enemy:addPassive({id = passive})
  405 + end
  406 + end
  407 +
  408 + for _, buff in ipairs(buffs[1] or {}) do
  409 + self.palyer:addBuff(buff)
  410 + end
  411 +
  412 + for _, buff in ipairs(buffs[2] or {}) do
  413 + for _, enemy in ipairs(self.enemys[mapIdx]) do
  414 + enemy:addBuff(buff)
  415 + end
  416 + end
  417 +end
  418 +
  419 +
344 420 --写入数据
345 421 function Battle:saveDB()
346 422 for idx, mapEnemys in pairs(self.enemys) do
... ...
src/adv/AdvBlock.lua
... ... @@ -63,7 +63,6 @@ function Block:randomEvent()
63 63 enemy:unlock()
64 64 else
65 65 enemy = adv.battle:addEnemy(room, self, map.mapIdx)
66   - enemy:initAfter(self.event.enemy)
67 66 end
68 67 enemy:triggerPassive(Passive.BORN_ONCE)
69 68  
... ... @@ -146,7 +145,6 @@ function Block:randomEvent()
146 145 build:unlock()
147 146 else
148 147 build = adv.battle:addEnemy(room, self, map.mapIdx)
149   - build:initAfter(self.event.build)
150 148 end
151 149 build:triggerPassive(Passive.BORN_ONCE)
152 150 end
... ...
src/adv/AdvBuff.lua
... ... @@ -570,7 +570,7 @@ end
570 570  
571 571 function Buff:afterLayer()
572 572 -- 持续一层
573   - if self.buffData.round == 0 then
  573 + if self.buffData.round == 0 or self.buffData.mapLock == 1 then
574 574 self.isDel = true
575 575 end
576 576 end
... ...
src/adv/AdvMap.lua
... ... @@ -49,6 +49,11 @@ function Map:initBattleAfter()
49 49 end
50 50 end
51 51  
  52 +
  53 +function Map:getMapInfoCsv()
  54 + return csvdb["mapCsv"][self.mapId]
  55 +end
  56 +
52 57 function Map:getDB()
53 58 local map = {}
54 59 map.mapId = self.mapId
... ... @@ -124,7 +129,6 @@ function Map:addNewMonsterRand(monsterId, where)
124 129 block:updateEvent(event)
125 130  
126 131 local enemy = self.adv.battle:addEnemy(room, block)
127   - enemy:initAfter(event.enemy)
128 132 enemy:triggerPassive(Passive.BORN_ONCE)
129 133  
130 134 return room, block
... ...
src/adv/AdvPassive.lua
... ... @@ -316,7 +316,7 @@ function Passive:effect(triggerPms)
316 316 self.round = self.passiveData.round
317 317 end
318 318  
319   - if self.count <= 0 and self.passiveData.refresh == 1 then -- 次数 <= 0 并且一次冒险内不刷新,被动可以直接移除
  319 + if self.count <= 0 then -- 次数 <= 0 并且一次冒险内不刷新,被动可以直接移除
320 320 self.isDel = true
321 321 end
322 322 end
... ... @@ -334,6 +334,12 @@ function Passive:afterRound()
334 334 end
335 335 end
336 336  
  337 +function Passive:afterLayer()
  338 + if self.passiveData.mapLock == 1 or self.passiveData.floorType == 1 then
  339 + self.isDel = true
  340 + end
  341 +end
  342 +
337 343 -- 可以触发
338 344 function Passive:canTrigger( )
339 345 return self.count > 0 and self.delay <= 0
... ...
src/adv/AdvPlayer.lua
... ... @@ -85,27 +85,26 @@ function BaseObject:clear()
85 85 self.passives = {}
86 86 end
87 87  
88   -function BaseObject:battleBegin()
89   - for _, passive in ipairs(self.passives) do
90   - passive:battleBegin()
91   - end
92   -end
93   -
94   -function BaseObject:battleEnd()
95   - for _, buff in ipairs(self.buffs) do
96   - buff:battleEnd()
97   - end
98   -end
99   -
100 88 function BaseObject:addPassive(params)
101 89 local skillId = params.id
102 90 local skillData = csvdb["adv_map_passiveCsv"][skillId]
103 91 if not skillData then return end
104 92 local level = params.level or 1
105 93 if not skillData[level] then return end
  94 +
  95 + if self:getPassiveById(skillId) then return end -- 被动技不能重复
  96 +
106 97 table.insert(self.passives, Passive.new(self, { id = skillId, level = level }))
107 98 end
108 99  
  100 +function BaseObject:getPassiveById(bId)
  101 + for idx, passive in ipairs(self.passives) do
  102 + if passive.id == bId then
  103 + return passive
  104 + end
  105 + end
  106 +end
  107 +
109 108 function BaseObject:getPassiveIdx(passive)
110 109 for idx, passive_ in ipairs(self.passives) do
111 110 if passive_ == passive then
... ... @@ -535,6 +534,10 @@ function Enemy:isEnemy()
535 534 return true
536 535 end
537 536  
  537 +function Enemy:kill()
  538 + self:hurt(self.hp, self.battle.player, {hurtType = 5})
  539 +end
  540 +
538 541 local Player = class("Player", BaseObject)
539 542 function Player:ctor(battle, data)
540 543 Player.super.ctor(self, battle)
... ... @@ -648,11 +651,18 @@ function Player:effectBattleBuff()
648 651 end
649 652  
650 653 function Player:afterLayer()
  654 + for _, passive in ipairs(self.passives) do
  655 + if not passive.isDel then
  656 + passive:afterLayer()
  657 + end
  658 + end
651 659 for _, buff in ipairs(self.buffs) do
652 660 if not buff.isDel then
653 661 buff:afterLayer()
654 662 end
655 663 end
  664 +
  665 + self:clearRound()
656 666 end
657 667  
658 668 function Player:addBuff(buffId, releaser)
... ...