diff --git a/src/adv/AdvBattle.lua b/src/adv/AdvBattle.lua index 6de10e8..a03f699 100644 --- a/src/adv/AdvBattle.lua +++ b/src/adv/AdvBattle.lua @@ -97,13 +97,18 @@ end function Battle:playerAtk(roomId, blockId) local enemy = self:getEnemy(roomId, blockId) if enemy then + self.player:battleBgein() + enemy:battleBgein() while not enemy.isDead and not self.player.isDead do + -- 玩家先出手 self.adv:backAtk(nil, enemy.id) enemy:hurt(self.player:getHurtValue(), self.player, {hurtType = 1}) + self.player:afterTurn() --是否无法反击 if not enemy.isDead and not enemy:hadBuff(Buff.CANT_BACK_ATK) then self.adv:backAtk(enemy.id, nil) self.player:hurt(enemy:getHurtValue(), enemy, {hurtType = 1}) + enemy:afterTurn() end end end diff --git a/src/adv/AdvPassive.lua b/src/adv/AdvPassive.lua index 649d340..ff765c5 100644 --- a/src/adv/AdvPassive.lua +++ b/src/adv/AdvPassive.lua @@ -199,7 +199,10 @@ function Passive:ctor(owner, data) self.passiveData = csvdb["adv_skill_passiveCsv"][self.id][self.level] self.isDel = false self.round = data.round or 0 --触发剩余回合数 - self.count = data.count or 0 --触发剩余次数 + self.count = data.count or self.passiveData.count --触发剩余次数 + self.delay = data.delay or self.passiveData.delayRound --触发延迟回合数 + self.turn = 0 --战斗内回合数 + self.delayturn = 0 --战斗内延迟回合数 self.effects = self.passiveData.effect:toTableArray(true) self.filters = {} @@ -247,7 +250,26 @@ function Passive:effect(trigger) end if self.count > 0 then self.count = self.count - 1 - self.round = self.passiveData.space + self.round = self.passiveData.round + end +end + +function Passive:battleBegin() + if self.isDel or self.owner.isDead then return end + self.turn = 0 + self.delayTurn = self.passiveData.delayTurn +end + +function Passive:afterTurn() + if self.isDel or self.owner.isDead then return end + if self._afterTurn then + self:_afterTurn() --有的触发自己检测在这里检查 + end + if self.turn > 0 then --战斗内回合 + self.turn = self.turn - 1 + end + if self.delayTurn > 0 then + self.delayTurn = self.delayTurn - 1 end end @@ -258,22 +280,22 @@ function Passive:afterRound() end if self.round > 0 then --回合触发的 self.round = self.round - 1 - if self.round == 0 then - self:effect() - end + end + if self.delay > 0 then + self.delay = self.delay - 1 end end --- 正在触发中 -function Passive:isActive( ) - return self.count > 0 or self.round > 0 +-- 可以触发 +function Passive:canTrigger( ) + return self.count > 0 and self.delay <= 0 and self.delayTurn <= 0 end function Passive:trigger(condType, params) --触发检查 params = params or {} if self.isDel or self.owner.isDead then return end if self:getCondType() ~= condType then return end - if self:isActive() then return end + if not self:canTrigger() then return end if self._trigger then if not self:_trigger(params) then return end --检查 end @@ -283,12 +305,10 @@ function Passive:trigger(condType, params) --触发检查 if math.randomInt(1, 100) > self.passiveData.chance then return end - self.round = self.passiveData.delay --首次 - self.count = self.passiveData.count --次数 - -- 没有延迟就直接触发 - if self.round == 0 then - self:effect(params.trigger) + if self.round > 0 and self.turn > 0 then -- cd + return end + self:effect(params.trigger) end function Passive:filter(params) @@ -309,6 +329,7 @@ function Passive:getDB() db.level = self.level db.round = self.round db.count = self.count + db.delay = self.delay return db end diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index 7fec597..bfd8317 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -40,6 +40,15 @@ function BaseObject:initAfter(data) end end +function BaseObject:afterTurn() + for _, passive in ipairs(self.passives) do + passive:afterTurn() + end + -- for _, buff in ipairs(self.buffs) do + -- buff:afterTurn(self) + -- end +end + function BaseObject:afterRound() for _, passive in ipairs(self.passives) do passive:afterRound(self) @@ -69,6 +78,15 @@ function BaseObject:clear() self.passives = {} end +function BaseObject:battleBgein() + for _, passive in ipairs(self.passives) do + passive:battleBgein() + end + -- for _, buff in ipairs(self.buffs) do + -- buff:afterRound(self) + -- end +end + function BaseObject:addPassive(params) local skillId = params.id local skillData = csvdb["adv_skill_passiveCsv"][skillId] -- libgit2 0.21.2