Commit 9687f887fe71e95705a97a5e1ef6282fd346a5a1
1 parent
e852b350
建筑被动
Showing
3 changed files
with
123 additions
and
1 deletions
Show diff stats
src/adv/AdvBattle.lua
| @@ -7,6 +7,7 @@ function Battle:ctor(adv) | @@ -7,6 +7,7 @@ function Battle:ctor(adv) | ||
| 7 | self.player = nil --玩家 | 7 | self.player = nil --玩家 |
| 8 | self.isNewPlayer = false | 8 | self.isNewPlayer = false |
| 9 | self.enemys = {} --怪 | 9 | self.enemys = {} --怪 |
| 10 | + self.builds = {} -- 建筑 | ||
| 10 | self.cachePassiveEvent = {} | 11 | self.cachePassiveEvent = {} |
| 11 | self:initPlayer() | 12 | self:initPlayer() |
| 12 | self:initEnemys() | 13 | self:initEnemys() |
| @@ -23,6 +24,11 @@ function Battle:initAfter() | @@ -23,6 +24,11 @@ function Battle:initAfter() | ||
| 23 | for _, enemy in ipairs(mapEnemys) do | 24 | for _, enemy in ipairs(mapEnemys) do |
| 24 | enemy:initAfter(self.adv:getBlock(enemy.roomId, enemy.blockId, idx).event.enemy) | 25 | enemy:initAfter(self.adv:getBlock(enemy.roomId, enemy.blockId, idx).event.enemy) |
| 25 | end | 26 | end |
| 27 | + end | ||
| 28 | + for idx, mapBuilds in pairs(self.builds) do | ||
| 29 | + for _, build in ipairs(mapBuilds) do | ||
| 30 | + build:initAfter(self.adv:getBlock(build.roomId, build.blockId, idx).event.build) | ||
| 31 | + end | ||
| 26 | end | 32 | end |
| 27 | end | 33 | end |
| 28 | --[[ | 34 | --[[ |
| @@ -98,6 +104,7 @@ function Battle:initEnemys() | @@ -98,6 +104,7 @@ function Battle:initEnemys() | ||
| 98 | end | 104 | end |
| 99 | end | 105 | end |
| 100 | 106 | ||
| 107 | + | ||
| 101 | function Battle:initMapEnemys(mapIdx) | 108 | function Battle:initMapEnemys(mapIdx) |
| 102 | self.enemys[mapIdx] = {} | 109 | self.enemys[mapIdx] = {} |
| 103 | local map = self.adv.maps[mapIdx] | 110 | local map = self.adv.maps[mapIdx] |
| @@ -113,6 +120,10 @@ function Battle:initMapEnemys(mapIdx) | @@ -113,6 +120,10 @@ function Battle:initMapEnemys(mapIdx) | ||
| 113 | for _, enemy in ipairs(self.enemys[mapIdx]) do | 120 | for _, enemy in ipairs(self.enemys[mapIdx]) do |
| 114 | enemy:triggerPassive(passiveC[1], passiveC[2]) | 121 | enemy:triggerPassive(passiveC[1], passiveC[2]) |
| 115 | end | 122 | end |
| 123 | + | ||
| 124 | + for _, build in ipairs(self.builds[mapIdx]) do | ||
| 125 | + build:triggerPassive(passiveC[1], passiveC[2]) | ||
| 126 | + end | ||
| 116 | end | 127 | end |
| 117 | end | 128 | end |
| 118 | self.cachePassiveEvent[mapIdx] = nil | 129 | self.cachePassiveEvent[mapIdx] = nil |
| @@ -138,6 +149,19 @@ function Battle:addEnemy(room, block, mapIdx) | @@ -138,6 +149,19 @@ function Battle:addEnemy(room, block, mapIdx) | ||
| 138 | local player = Enemy.new(self, block.event.mId or 999, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx) | 149 | local player = Enemy.new(self, block.event.mId or 999, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx) |
| 139 | table.insert(self.enemys[mapIdx], player) | 150 | table.insert(self.enemys[mapIdx], player) |
| 140 | return player | 151 | return player |
| 152 | + elseif block:isBuild() then | ||
| 153 | + if not block.event.build then | ||
| 154 | + local buildCsv = csvdb["event_buildCsv"][block.event.id] | ||
| 155 | + local build = {} | ||
| 156 | + build.passives = {} | ||
| 157 | + for _, id in ipairs(buildCsv.passive:toArray(true, "=")) do | ||
| 158 | + table.insert(build.passives, {id = id}) | ||
| 159 | + end | ||
| 160 | + block.event.build = build | ||
| 161 | + end | ||
| 162 | + local player = Build.new(self, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.build, mapIdx) | ||
| 163 | + table.insert(self.builds[mapIdx], player) | ||
| 164 | + return player | ||
| 141 | end | 165 | end |
| 142 | end | 166 | end |
| 143 | 167 | ||
| @@ -150,6 +174,15 @@ function Battle:getEnemy(roomId, blockId, mapIdx) | @@ -150,6 +174,15 @@ function Battle:getEnemy(roomId, blockId, mapIdx) | ||
| 150 | end | 174 | end |
| 151 | end | 175 | end |
| 152 | 176 | ||
| 177 | +function Battle:getBuild(roomId, blockId, mapIdx) | ||
| 178 | + mapIdx = mapIdx or self.adv:getCurMapIdx() | ||
| 179 | + for _, build in ipairs(self.builds[mapIdx] or {}) do | ||
| 180 | + if build.roomId == roomId and build.blockId == blockId then | ||
| 181 | + return build | ||
| 182 | + end | ||
| 183 | + end | ||
| 184 | +ends | ||
| 185 | + | ||
| 153 | function Battle:getEnemyById(id) | 186 | function Battle:getEnemyById(id) |
| 154 | for idx, mapEnemys in pairs(self.enemys) do | 187 | for idx, mapEnemys in pairs(self.enemys) do |
| 155 | for _, enemy in ipairs(mapEnemys) do | 188 | for _, enemy in ipairs(mapEnemys) do |
| @@ -178,6 +211,9 @@ function Battle:triggerPassive(condType, params, mapIdx) | @@ -178,6 +211,9 @@ function Battle:triggerPassive(condType, params, mapIdx) | ||
| 178 | for _, enemy in ipairs(self.enemys[mapIdx]) do | 211 | for _, enemy in ipairs(self.enemys[mapIdx]) do |
| 179 | enemy:triggerPassive(condType, params) | 212 | enemy:triggerPassive(condType, params) |
| 180 | end | 213 | end |
| 214 | + for _, build in ipairs(self.builds[mapIdx]) do | ||
| 215 | + build:triggerPassive(condType, params) | ||
| 216 | + end | ||
| 181 | end | 217 | end |
| 182 | end | 218 | end |
| 183 | 219 | ||
| @@ -207,6 +243,9 @@ function Battle:afterRound() | @@ -207,6 +243,9 @@ function Battle:afterRound() | ||
| 207 | for _, enemy in ipairs(self.enemys[mapIdx]) do | 243 | for _, enemy in ipairs(self.enemys[mapIdx]) do |
| 208 | enemy:clearRound() | 244 | enemy:clearRound() |
| 209 | end | 245 | end |
| 246 | + for _, build in ipairs(self.builds[mapIdx]) do | ||
| 247 | + build:clearRound() | ||
| 248 | + end | ||
| 210 | for i = #self.enemys[mapIdx], 1, -1 do | 249 | for i = #self.enemys[mapIdx], 1, -1 do |
| 211 | if self.enemys[mapIdx][i].isDead then | 250 | if self.enemys[mapIdx][i].isDead then |
| 212 | local enemy = table.remove(self.enemys[mapIdx], i) | 251 | local enemy = table.remove(self.enemys[mapIdx], i) |
| @@ -214,6 +253,12 @@ function Battle:afterRound() | @@ -214,6 +253,12 @@ function Battle:afterRound() | ||
| 214 | enemy:clear() | 253 | enemy:clear() |
| 215 | end | 254 | end |
| 216 | end | 255 | end |
| 256 | + for i = #self.builds[mapIdx], 1, -1 do | ||
| 257 | + if self.builds[mapIdx][i].isDead then | ||
| 258 | + local build = table.remove(self.builds[mapIdx], i) | ||
| 259 | + build:clear() | ||
| 260 | + end | ||
| 261 | + end | ||
| 217 | 262 | ||
| 218 | self.player:triggerPassive(Passive.AFTER_ROUND) | 263 | self.player:triggerPassive(Passive.AFTER_ROUND) |
| 219 | 264 |
src/adv/AdvBlock.lua
| @@ -21,6 +21,10 @@ function Block:isMonster() | @@ -21,6 +21,10 @@ function Block:isMonster() | ||
| 21 | return (self:getEventType() == AdvEventType.BOSS or self:getEventType() == AdvEventType.Monster) | 21 | return (self:getEventType() == AdvEventType.BOSS or self:getEventType() == AdvEventType.Monster) |
| 22 | end | 22 | end |
| 23 | 23 | ||
| 24 | +function Block:isBuild() | ||
| 25 | + return self:getEventType() == AdvEventType.Build | ||
| 26 | +end | ||
| 27 | + | ||
| 24 | function Block:getEventType() | 28 | function Block:getEventType() |
| 25 | return self.event and self.event.etype | 29 | return self.event and self.event.etype |
| 26 | end | 30 | end |
| @@ -83,7 +87,13 @@ function Block:randomEvent() | @@ -83,7 +87,13 @@ function Block:randomEvent() | ||
| 83 | end | 87 | end |
| 84 | --建筑 | 88 | --建筑 |
| 85 | randomFunc[AdvEventType.Build] = function() | 89 | randomFunc[AdvEventType.Build] = function() |
| 86 | - | 90 | + local build = adv.battle:getBuild(room.roomId, self.blockId, map.mapIdx) |
| 91 | + if build then | ||
| 92 | + build:unlock() | ||
| 93 | + else | ||
| 94 | + build = adv.battle:addEnemy(room, self, map.mapIdx) | ||
| 95 | + end | ||
| 96 | + build:triggerPassive(Passive.BORN_ONCE) | ||
| 87 | end | 97 | end |
| 88 | 98 | ||
| 89 | randomFunc[AdvEventType.Trap] = function() | 99 | randomFunc[AdvEventType.Trap] = function() |
src/adv/AdvPlayer.lua
| @@ -652,6 +652,73 @@ function Player:getDB() | @@ -652,6 +652,73 @@ function Player:getDB() | ||
| 652 | return db | 652 | return db |
| 653 | end | 653 | end |
| 654 | 654 | ||
| 655 | +-- 建筑 拥有被动技 | ||
| 656 | +local Build = class("Build", BaseObject) | ||
| 657 | + | ||
| 658 | +function Build:ctor(battle, id, roomId, blockId, lock, build, mapIdx) | ||
| 659 | + Enemy.super.ctor(self, battle) | ||
| 660 | + self.id = id | ||
| 661 | + self.monsterId = monsterId --数据id | ||
| 662 | + self.roomId = roomId | ||
| 663 | + self.blockId = blockId | ||
| 664 | + self.lock = lock | ||
| 665 | + self.mapIdx = mapIdx | ||
| 666 | + self:initData(build) | ||
| 667 | +end | ||
| 668 | + | ||
| 669 | +function Build:initData(data) | ||
| 670 | +end | ||
| 671 | + | ||
| 672 | +function Build:addBuff(buffId, releaser) | ||
| 673 | +end | ||
| 674 | + | ||
| 675 | +function Build:hurt() | ||
| 676 | +end | ||
| 677 | + | ||
| 678 | +--0 全部 1 怪物 2 玩家 | ||
| 679 | +function Build:getTeam(nType, noSelf, mapIdx, includeLock) | ||
| 680 | + noSelf = false -- 不管怎么都取不到自己 | ||
| 681 | + mapIdx = mapIdx or self.battle.adv:getCurMapIdx() | ||
| 682 | + nType = nType or 0 | ||
| 683 | + local team = {} | ||
| 684 | + local function addPlayer() | ||
| 685 | + if not noSelf or self.battle.player ~= self then | ||
| 686 | + if not self.battle.player.isDead then | ||
| 687 | + table.insert(team, self.battle.player) | ||
| 688 | + end | ||
| 689 | + end | ||
| 690 | + end | ||
| 691 | + local function addEnemy() | ||
| 692 | + for _, enemy in pairs(self.battle.enemys[mapIdx]) do | ||
| 693 | + if not noSelf or enemy ~= self then | ||
| 694 | + if not enemy.isDead and (includeLock or not enemy.lock) then -- 已经翻开的 | ||
| 695 | + table.insert(team, enemy) | ||
| 696 | + end | ||
| 697 | + end | ||
| 698 | + end | ||
| 699 | + end | ||
| 700 | + if nType == 0 then | ||
| 701 | + addPlayer() | ||
| 702 | + addEnemy() | ||
| 703 | + elseif nType == 1 then | ||
| 704 | + addEnemy() | ||
| 705 | + elseif nType == 2 then | ||
| 706 | + addPlayer() | ||
| 707 | + end | ||
| 708 | + return team | ||
| 709 | +end | ||
| 710 | +function Enemy:unlock() | ||
| 711 | + self.lock = nil | ||
| 712 | +end | ||
| 713 | + | ||
| 714 | +function Enemy:getDB() | ||
| 715 | + local db = {} | ||
| 716 | + db.passives = {} | ||
| 717 | + for _, passive in ipairs(self.passives) do | ||
| 718 | + table.insert(db.passives, passive:getDB()) | ||
| 719 | + end | ||
| 720 | + return db | ||
| 721 | +end | ||
| 655 | 722 | ||
| 656 | 723 | ||
| 657 | return table.pack(Player, Enemy) | 724 | return table.pack(Player, Enemy) |
| 658 | \ No newline at end of file | 725 | \ No newline at end of file |