Commit 65de8cf12206fab580133ce973f68512db71d048

Authored by suhongyang
1 parent 1cb78a24

被动逻辑进一步修缮

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]