Commit 65de8cf12206fab580133ce973f68512db71d048

Authored by suhongyang
1 parent 1cb78a24

被动逻辑进一步修缮

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