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,13 +97,18 @@ end | ||
97 | function Battle:playerAtk(roomId, blockId) | 97 | function Battle:playerAtk(roomId, blockId) |
98 | local enemy = self:getEnemy(roomId, blockId) | 98 | local enemy = self:getEnemy(roomId, blockId) |
99 | if enemy then | 99 | if enemy then |
100 | + self.player:battleBgein() | ||
101 | + enemy:battleBgein() | ||
100 | while not enemy.isDead and not self.player.isDead do | 102 | while not enemy.isDead and not self.player.isDead do |
103 | + -- 玩家先出手 | ||
101 | self.adv:backAtk(nil, enemy.id) | 104 | self.adv:backAtk(nil, enemy.id) |
102 | enemy:hurt(self.player:getHurtValue(), self.player, {hurtType = 1}) | 105 | enemy:hurt(self.player:getHurtValue(), self.player, {hurtType = 1}) |
106 | + self.player:afterTurn() | ||
103 | --是否无法反击 | 107 | --是否无法反击 |
104 | if not enemy.isDead and not enemy:hadBuff(Buff.CANT_BACK_ATK) then | 108 | if not enemy.isDead and not enemy:hadBuff(Buff.CANT_BACK_ATK) then |
105 | self.adv:backAtk(enemy.id, nil) | 109 | self.adv:backAtk(enemy.id, nil) |
106 | self.player:hurt(enemy:getHurtValue(), enemy, {hurtType = 1}) | 110 | self.player:hurt(enemy:getHurtValue(), enemy, {hurtType = 1}) |
111 | + enemy:afterTurn() | ||
107 | end | 112 | end |
108 | end | 113 | end |
109 | end | 114 | end |
src/adv/AdvPassive.lua
@@ -199,7 +199,10 @@ function Passive:ctor(owner, data) | @@ -199,7 +199,10 @@ function Passive:ctor(owner, data) | ||
199 | self.passiveData = csvdb["adv_skill_passiveCsv"][self.id][self.level] | 199 | self.passiveData = csvdb["adv_skill_passiveCsv"][self.id][self.level] |
200 | self.isDel = false | 200 | self.isDel = false |
201 | self.round = data.round or 0 --触发剩余回合数 | 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 | self.effects = self.passiveData.effect:toTableArray(true) | 207 | self.effects = self.passiveData.effect:toTableArray(true) |
205 | self.filters = {} | 208 | self.filters = {} |
@@ -247,7 +250,26 @@ function Passive:effect(trigger) | @@ -247,7 +250,26 @@ function Passive:effect(trigger) | ||
247 | end | 250 | end |
248 | if self.count > 0 then | 251 | if self.count > 0 then |
249 | self.count = self.count - 1 | 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 | end | 273 | end |
252 | end | 274 | end |
253 | 275 | ||
@@ -258,22 +280,22 @@ function Passive:afterRound() | @@ -258,22 +280,22 @@ function Passive:afterRound() | ||
258 | end | 280 | end |
259 | if self.round > 0 then --回合触发的 | 281 | if self.round > 0 then --回合触发的 |
260 | self.round = self.round - 1 | 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 | end | 286 | end |
265 | end | 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 | end | 292 | end |
271 | 293 | ||
272 | function Passive:trigger(condType, params) --触发检查 | 294 | function Passive:trigger(condType, params) --触发检查 |
273 | params = params or {} | 295 | params = params or {} |
274 | if self.isDel or self.owner.isDead then return end | 296 | if self.isDel or self.owner.isDead then return end |
275 | if self:getCondType() ~= condType then return end | 297 | if self:getCondType() ~= condType then return end |
276 | - if self:isActive() then return end | 298 | + if not self:canTrigger() then return end |
277 | if self._trigger then | 299 | if self._trigger then |
278 | if not self:_trigger(params) then return end --检查 | 300 | if not self:_trigger(params) then return end --检查 |
279 | end | 301 | end |
@@ -283,12 +305,10 @@ function Passive:trigger(condType, params) --触发检查 | @@ -283,12 +305,10 @@ function Passive:trigger(condType, params) --触发检查 | ||
283 | if math.randomInt(1, 100) > self.passiveData.chance then | 305 | if math.randomInt(1, 100) > self.passiveData.chance then |
284 | return | 306 | return |
285 | end | 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 | end | 310 | end |
311 | + self:effect(params.trigger) | ||
292 | end | 312 | end |
293 | 313 | ||
294 | function Passive:filter(params) | 314 | function Passive:filter(params) |
@@ -309,6 +329,7 @@ function Passive:getDB() | @@ -309,6 +329,7 @@ function Passive:getDB() | ||
309 | db.level = self.level | 329 | db.level = self.level |
310 | db.round = self.round | 330 | db.round = self.round |
311 | db.count = self.count | 331 | db.count = self.count |
332 | + db.delay = self.delay | ||
312 | return db | 333 | return db |
313 | end | 334 | end |
314 | 335 |
src/adv/AdvPlayer.lua
@@ -40,6 +40,15 @@ function BaseObject:initAfter(data) | @@ -40,6 +40,15 @@ function BaseObject:initAfter(data) | ||
40 | end | 40 | end |
41 | end | 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 | function BaseObject:afterRound() | 52 | function BaseObject:afterRound() |
44 | for _, passive in ipairs(self.passives) do | 53 | for _, passive in ipairs(self.passives) do |
45 | passive:afterRound(self) | 54 | passive:afterRound(self) |
@@ -69,6 +78,15 @@ function BaseObject:clear() | @@ -69,6 +78,15 @@ function BaseObject:clear() | ||
69 | self.passives = {} | 78 | self.passives = {} |
70 | end | 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 | function BaseObject:addPassive(params) | 90 | function BaseObject:addPassive(params) |
73 | local skillId = params.id | 91 | local skillId = params.id |
74 | local skillData = csvdb["adv_skill_passiveCsv"][skillId] | 92 | local skillData = csvdb["adv_skill_passiveCsv"][skillId] |