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] | ... | ... |