Commit 65de8cf12206fab580133ce973f68512db71d048
1 parent
1cb78a24
被动逻辑进一步修缮
Showing
3 changed files
with
58 additions
and
14 deletions
Show diff stats
src/adv/AdvBattle.lua
| ... | ... | @@ -97,13 +97,18 @@ end |
| 97 | 97 | function Battle:playerAtk(roomId, blockId) |
| 98 | 98 | local enemy = self:getEnemy(roomId, blockId) |
| 99 | 99 | if enemy then |
| 100 | + self.player:battleBgein() | |
| 101 | + enemy:battleBgein() | |
| 100 | 102 | while not enemy.isDead and not self.player.isDead do |
| 103 | + -- 玩家先出手 | |
| 101 | 104 | self.adv:backAtk(nil, enemy.id) |
| 102 | 105 | enemy:hurt(self.player:getHurtValue(), self.player, {hurtType = 1}) |
| 106 | + self.player:afterTurn() | |
| 103 | 107 | --是否无法反击 |
| 104 | 108 | if not enemy.isDead and not enemy:hadBuff(Buff.CANT_BACK_ATK) then |
| 105 | 109 | self.adv:backAtk(enemy.id, nil) |
| 106 | 110 | self.player:hurt(enemy:getHurtValue(), enemy, {hurtType = 1}) |
| 111 | + enemy:afterTurn() | |
| 107 | 112 | end |
| 108 | 113 | end |
| 109 | 114 | end | ... | ... |
src/adv/AdvPassive.lua
| ... | ... | @@ -199,7 +199,10 @@ function Passive:ctor(owner, data) |
| 199 | 199 | self.passiveData = csvdb["adv_skill_passiveCsv"][self.id][self.level] |
| 200 | 200 | self.isDel = false |
| 201 | 201 | self.round = data.round or 0 --触发剩余回合数 |
| 202 | - self.count = data.count or 0 --触发剩余次数 | |
| 202 | + self.count = data.count or self.passiveData.count --触发剩余次数 | |
| 203 | + self.delay = data.delay or self.passiveData.delayRound --触发延迟回合数 | |
| 204 | + self.turn = 0 --战斗内回合数 | |
| 205 | + self.delayturn = 0 --战斗内延迟回合数 | |
| 203 | 206 | |
| 204 | 207 | self.effects = self.passiveData.effect:toTableArray(true) |
| 205 | 208 | self.filters = {} |
| ... | ... | @@ -247,7 +250,26 @@ function Passive:effect(trigger) |
| 247 | 250 | end |
| 248 | 251 | if self.count > 0 then |
| 249 | 252 | self.count = self.count - 1 |
| 250 | - self.round = self.passiveData.space | |
| 253 | + self.round = self.passiveData.round | |
| 254 | + end | |
| 255 | +end | |
| 256 | + | |
| 257 | +function Passive:battleBegin() | |
| 258 | + if self.isDel or self.owner.isDead then return end | |
| 259 | + self.turn = 0 | |
| 260 | + self.delayTurn = self.passiveData.delayTurn | |
| 261 | +end | |
| 262 | + | |
| 263 | +function Passive:afterTurn() | |
| 264 | + if self.isDel or self.owner.isDead then return end | |
| 265 | + if self._afterTurn then | |
| 266 | + self:_afterTurn() --有的触发自己检测在这里检查 | |
| 267 | + end | |
| 268 | + if self.turn > 0 then --战斗内回合 | |
| 269 | + self.turn = self.turn - 1 | |
| 270 | + end | |
| 271 | + if self.delayTurn > 0 then | |
| 272 | + self.delayTurn = self.delayTurn - 1 | |
| 251 | 273 | end |
| 252 | 274 | end |
| 253 | 275 | |
| ... | ... | @@ -258,22 +280,22 @@ function Passive:afterRound() |
| 258 | 280 | end |
| 259 | 281 | if self.round > 0 then --回合触发的 |
| 260 | 282 | self.round = self.round - 1 |
| 261 | - if self.round == 0 then | |
| 262 | - self:effect() | |
| 263 | - end | |
| 283 | + end | |
| 284 | + if self.delay > 0 then | |
| 285 | + self.delay = self.delay - 1 | |
| 264 | 286 | end |
| 265 | 287 | end |
| 266 | 288 | |
| 267 | --- 正在触发中 | |
| 268 | -function Passive:isActive( ) | |
| 269 | - return self.count > 0 or self.round > 0 | |
| 289 | +-- 可以触发 | |
| 290 | +function Passive:canTrigger( ) | |
| 291 | + return self.count > 0 and self.delay <= 0 and self.delayTurn <= 0 | |
| 270 | 292 | end |
| 271 | 293 | |
| 272 | 294 | function Passive:trigger(condType, params) --触发检查 |
| 273 | 295 | params = params or {} |
| 274 | 296 | if self.isDel or self.owner.isDead then return end |
| 275 | 297 | if self:getCondType() ~= condType then return end |
| 276 | - if self:isActive() then return end | |
| 298 | + if not self:canTrigger() then return end | |
| 277 | 299 | if self._trigger then |
| 278 | 300 | if not self:_trigger(params) then return end --检查 |
| 279 | 301 | end |
| ... | ... | @@ -283,12 +305,10 @@ function Passive:trigger(condType, params) --触发检查 |
| 283 | 305 | if math.randomInt(1, 100) > self.passiveData.chance then |
| 284 | 306 | return |
| 285 | 307 | end |
| 286 | - self.round = self.passiveData.delay --首次 | |
| 287 | - self.count = self.passiveData.count --次数 | |
| 288 | - -- 没有延迟就直接触发 | |
| 289 | - if self.round == 0 then | |
| 290 | - self:effect(params.trigger) | |
| 308 | + if self.round > 0 and self.turn > 0 then -- cd | |
| 309 | + return | |
| 291 | 310 | end |
| 311 | + self:effect(params.trigger) | |
| 292 | 312 | end |
| 293 | 313 | |
| 294 | 314 | function Passive:filter(params) |
| ... | ... | @@ -309,6 +329,7 @@ function Passive:getDB() |
| 309 | 329 | db.level = self.level |
| 310 | 330 | db.round = self.round |
| 311 | 331 | db.count = self.count |
| 332 | + db.delay = self.delay | |
| 312 | 333 | return db |
| 313 | 334 | end |
| 314 | 335 | ... | ... |
src/adv/AdvPlayer.lua
| ... | ... | @@ -40,6 +40,15 @@ function BaseObject:initAfter(data) |
| 40 | 40 | end |
| 41 | 41 | end |
| 42 | 42 | |
| 43 | +function BaseObject:afterTurn() | |
| 44 | + for _, passive in ipairs(self.passives) do | |
| 45 | + passive:afterTurn() | |
| 46 | + end | |
| 47 | + -- for _, buff in ipairs(self.buffs) do | |
| 48 | + -- buff:afterTurn(self) | |
| 49 | + -- end | |
| 50 | +end | |
| 51 | + | |
| 43 | 52 | function BaseObject:afterRound() |
| 44 | 53 | for _, passive in ipairs(self.passives) do |
| 45 | 54 | passive:afterRound(self) |
| ... | ... | @@ -69,6 +78,15 @@ function BaseObject:clear() |
| 69 | 78 | self.passives = {} |
| 70 | 79 | end |
| 71 | 80 | |
| 81 | +function BaseObject:battleBgein() | |
| 82 | + for _, passive in ipairs(self.passives) do | |
| 83 | + passive:battleBgein() | |
| 84 | + end | |
| 85 | + -- for _, buff in ipairs(self.buffs) do | |
| 86 | + -- buff:afterRound(self) | |
| 87 | + -- end | |
| 88 | +end | |
| 89 | + | |
| 72 | 90 | function BaseObject:addPassive(params) |
| 73 | 91 | local skillId = params.id |
| 74 | 92 | local skillData = csvdb["adv_skill_passiveCsv"][skillId] | ... | ... |