diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index 9834052f..c90b971a 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -215,7 +215,7 @@ BattleConst.PASSIVE_EVENT = { HP_LOWER_THAN = 4, -- 血量低于X% USE_NORMAL_SKILL = 5, -- 使用普攻 ACTIVE_SKILL_HIT = 6, -- 主动技能命中 - ON_NORAML_SKILL_OVER = 7, -- 普攻结束后 + ON_ACTIVE_SKILL_BEFORE = 7, -- 主动技能释放前 ON_DEAD_BY_BURN = 8, -- 有敌人死于灼烧伤害时触发 ON_DEAD_BY_SKILL = 9, -- 有敌人死于技能时触发 ON_DEAD = 10, -- 死亡时 @@ -694,6 +694,8 @@ BattleConst.SKILL_TYPE = { RANDOM_KILL_ROW_OR_COLUMN = 8, KILL_MAX_ELEMENT_AND_HEAL = 9, KILL_ROW_AND_COLUMN = 10, + ADD_SKILL_ENERGY = 11, + CHANGE_ELEMENT_TYPE = 12, } BattleConst.ATTACK_OVER_ACTIVE_SKILL_TYPE = { @@ -704,6 +706,8 @@ BattleConst.ATTACK_OVER_ACTIVE_SKILL_TYPE = { [BattleConst.SKILL_TYPE.RANDOM_KILL_ROW_OR_COLUMN] = true, [BattleConst.SKILL_TYPE.KILL_MAX_ELEMENT_AND_HEAL] = true, [BattleConst.SKILL_TYPE.KILL_ROW_AND_COLUMN] = true, + [BattleConst.SKILL_TYPE.ADD_SKILL_ENERGY] = true, + [BattleConst.SKILL_TYPE.CHANGE_ELEMENT_TYPE] = true, } BattleConst.SKILL_METHOD_TYPE = { diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index 711d34a7..cd934bd3 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -363,7 +363,7 @@ function BattleUnitComp:useSkill(index, count, callback) self:playSwitchIn() else if count <= 0 then - self:checkPassiveEvent(PASSIVE_EVENT.ON_NORAML_SKILL_OVER, self) + self:checkPassiveEvent(PASSIVE_EVENT.ON_ACTIVE_SKILL_BEFORE, self) end if not self:changeState(UNIT_STATE.SKILL_ATTACK) then self.actionOverCallback = nil @@ -520,7 +520,7 @@ function BattleUnitComp:updateSwitchInState(dt) if self.switchTime < 0 then if self.actionOverCallback then if self.currActiveSkill then - self:checkPassiveEvent(PASSIVE_EVENT.ON_NORAML_SKILL_OVER, self) + self:checkPassiveEvent(PASSIVE_EVENT.ON_ACTIVE_SKILL_BEFORE, self) if not self:changeState(UNIT_STATE.SKILL_ATTACK) then local callback = self.actionOverCallback self.actionOverCallback = nil @@ -858,7 +858,7 @@ function BattleUnitComp:updateSkillAttack(dt) else self.currActiveSkill:startUse() self:doNextSkillAttack() - self:checkPassiveEvent(PASSIVE_EVENT.ON_NORAML_SKILL_OVER, self) + self:checkPassiveEvent(PASSIVE_EVENT.ON_ACTIVE_SKILL_BEFORE, self) end else -- 继续普攻 self:doNextNormalAttack() diff --git a/lua/app/module/battle/controller/battle_controller.lua b/lua/app/module/battle/controller/battle_controller.lua index 0394cd29..daeff18d 100644 --- a/lua/app/module/battle/controller/battle_controller.lua +++ b/lua/app/module/battle/controller/battle_controller.lua @@ -1151,7 +1151,9 @@ function BattleController:onFillBoardOver(isRoundBeginCheck) if isRoundBeginCheck then EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BOARD_FILL_OVER) self:popBoardCacheSkill(function() - self:enterElimination(true) + self:generateSkill(function() + self:enterElimination(true) + end) end) else self:generateSkill(function() diff --git a/lua/app/module/battle/helper/battle_passive.lua b/lua/app/module/battle/helper/battle_passive.lua index 278879b4..4d64f3cf 100644 --- a/lua/app/module/battle/helper/battle_passive.lua +++ b/lua/app/module/battle/helper/battle_passive.lua @@ -49,7 +49,7 @@ local function _checkActiveSkillHit(unitComp, skill, targetComp) return 1 end -local function _checkOnNormalSkillOver(unitComp, skill, targetComp) +local function _checkOnActiveSkillBefore(unitComp, skill, targetComp) return 1 end @@ -71,7 +71,7 @@ BattlePassive.checkTrigger = { [PASSIVE_EVENT.HP_LOWER_THAN] = _checkhpLowerThan, [PASSIVE_EVENT.USE_NORMAL_SKILL] = _checkUseNormalSkill, [PASSIVE_EVENT.ACTIVE_SKILL_HIT] = _checkActiveSkillHit, - [PASSIVE_EVENT.ON_NORAML_SKILL_OVER] = _checkOnNormalSkillOver, + [PASSIVE_EVENT.ON_ACTIVE_SKILL_BEFORE] = _checkOnActiveSkillBefore, [PASSIVE_EVENT.ON_DEAD_BY_BURN] = _checkOnDeadByBurn, [PASSIVE_EVENT.ON_DEAD_BY_SKILL] = _checkOnDeadBySkill, [PASSIVE_EVENT.ON_DEAD] = _checkOnDead, diff --git a/lua/app/module/battle/skill/battle_board_skill_handle.lua b/lua/app/module/battle/skill/battle_board_skill_handle.lua index ba82316c..787dccf6 100644 --- a/lua/app/module/battle/skill/battle_board_skill_handle.lua +++ b/lua/app/module/battle/skill/battle_board_skill_handle.lua @@ -324,6 +324,47 @@ local function _takeKillRowAndColumn(atkUnitComp, skillEntity, battleController) battleController:killRowOrColumn(infoList) end +local function _takeAddSkillEnergy(atkUnitComp, skillEntity, battleController) + local params = skillEntity:getEliminateSkillParameter() + if not params[2] or params[2] <= 0 then + return + end + local elementType = params[1] + local addEnergy = params[2] + local elementTypeMap + if elementType == BattleConst.ELEMENT_TYPE.NONE then + local boardSkills + local count = 0 + for eType, entity in pairs(battleController.battleData:getSkillEntities()) do + if not boardSkills then + boardSkills = {} + end + table.insert(boardSkills, eType) + count = count + 1 + end + if count <= 0 then + return + end + elementType = boardSkills[math.random(1, count)] + end + + elementTypeMap = {[elementType] = addEnergy} + battleController.battleData:addSkillEnergy(elementTypeMap) + battleController.battleUI:refreshSkill() +end + +local function _takeChangeElementType(atkUnitComp, skillEntity, battleController) + local params = skillEntity:getEliminateSkillParameter() + if not params[2] or params[2] <= 0 then + return + end + local elementType = params[1] + local changeCount = params[2] + + battleController:changeElementType(changeCount, elementType) +end + + BattleBoardSkillHandle._activeBoardSkill = { [SKILL_TYPE.ELIMINATION] = _takeElimination, [SKILL_TYPE.CHANGE_AROUND] = _takeChangeAround, @@ -338,6 +379,8 @@ BattleBoardSkillHandle._activeAttackOverSkill = { [SKILL_TYPE.RANDOM_KILL_ROW_OR_COLUMN] = _takeRandomKillRowOrColumn, [SKILL_TYPE.KILL_MAX_ELEMENT_AND_HEAL] = _takeKillMaxElementAndHeal, [SKILL_TYPE.KILL_ROW_AND_COLUMN] = _takeKillRowAndColumn, + [SKILL_TYPE.ADD_SKILL_ENERGY] = _takeAddSkillEnergy, + [SKILL_TYPE.CHANGE_ELEMENT_TYPE] = _takeChangeElementType, } function BattleBoardSkillHandle.activeBoardSkill(posId, skillEntity, gridEntities, sequenceEntities, battleController) diff --git a/lua/app/userdata/battle/skill/battle_skill_entity.lua b/lua/app/userdata/battle/skill/battle_skill_entity.lua index b83c7a05..6a1c93f4 100644 --- a/lua/app/userdata/battle/skill/battle_skill_entity.lua +++ b/lua/app/userdata/battle/skill/battle_skill_entity.lua @@ -24,7 +24,7 @@ function BattleSkillEntity:init() end self:initSkillEffect() self:initEffectBlock() - if self.skillInfo.effect or self.skillInfo.name_act then + if self.skillInfo.effect or self.skillInfo.name_act or self.skillInfo.skill_type then self.available = true else self.available = false