diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index 44179db1..43042a31 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -688,6 +688,7 @@ BattleConst.SKILL_TYPE = { RANDOM_KILL_SKILL_GRID = 6, SHUFFLE_BOARD = 7, RANDOM_KILL_ROW_OR_COLUMN = 8, + RANDOM_KILL_ELEMENT_AND_HEAL = 9, } BattleConst.ATTACK_OVER_ACTIVE_SKILL_TYPE = { @@ -696,6 +697,7 @@ BattleConst.ATTACK_OVER_ACTIVE_SKILL_TYPE = { [BattleConst.SKILL_TYPE.RANDOM_KILL_SKILL_GRID] = true, [BattleConst.SKILL_TYPE.SHUFFLE_BOARD] = true, [BattleConst.SKILL_TYPE.RANDOM_KILL_ROW_OR_COLUMN] = true, + [BattleConst.SKILL_TYPE.RANDOM_KILL_ELEMENT_AND_HEAL] = true, } BattleConst.SKILL_METHOD_TYPE = { 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 f7f03b16..d4f61ced 100644 --- a/lua/app/module/battle/skill/battle_board_skill_handle.lua +++ b/lua/app/module/battle/skill/battle_board_skill_handle.lua @@ -201,6 +201,43 @@ local function _takeRandomKillRowOrColumn(atkUnitComp, skillEntity, battleContro battleController:killRowOrColumn(infoList) end +local function _takeRandomKillElementAndHeal(atkUnitComp, skillEntity, battleController) + local battleData = battleController.battleData + if not battleData or not battleData:getGridEnties() or not skillEntity:getEliminateSkillParameter() then + return + end + + local effectNum = skillEntity:getEliminateSkillParameter()[1] + if not effectNum or effectNum <= 0 then + return + end + + local elementMap = {} + local list = {} + for posId, entity in pairs(battleData:getGridEnties()) do + if entity:isEmptyIdle() then + local elementType = entity:getElementType() + if not elementMap[elementType] then + elementMap[elementType] = {} + table.insert(list, elementType) + end + table.insert(elementMap[elementType], posId) + end + end + + if not list[1] then + return + end + + local elementType = list[math.random(1, #list)] + list = elementMap[elementType] + local count = #list + local heal = count * effectNum * atkUnitComp.unitEntity:getAtk() // GConst.BattleConst.DEFAULT_FACTOR + atkUnitComp:takeDamageOrCure(atkUnitComp, heal, BattleConst.EFFECT_TYPE.HEAL, 0) + + battleController:killGrids(list) +end + BattleBoardSkillHandle._activeBoardSkill = { [SKILL_TYPE.ELIMINATION] = _takeElimination, [SKILL_TYPE.CHANGE_AROUND] = _takeChangeAround, @@ -213,6 +250,7 @@ BattleBoardSkillHandle._activeAttackOverSkill = { [SKILL_TYPE.RANDOM_KILL_SKILL_GRID] = _takeRandomKillSkillGrid, [SKILL_TYPE.SHUFFLE_BOARD] = _takeShuffleBoard, [SKILL_TYPE.RANDOM_KILL_ROW_OR_COLUMN] = _takeRandomKillRowOrColumn, + [SKILL_TYPE.RANDOM_KILL_ELEMENT_AND_HEAL] = _takeRandomKillElementAndHeal, } function BattleBoardSkillHandle.activeBoardSkill(posId, skillEntity, gridEntities, sequenceEntities, battleController)