From 7a7bde728efcecafaa22be2f76989f70fee94f0b Mon Sep 17 00:00:00 2001 From: xiekaidong Date: Thu, 11 May 2023 17:21:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E7=81=AD=E9=9A=8F=E6=9C=BA1=E7=A7=8D?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E7=9A=84=E6=A3=8B=E5=AD=90=E5=B9=B6=E5=9B=9E?= =?UTF-8?q?=E8=A1=80=E6=8A=80=E8=83=BD=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/module/battle/battle_const.lua | 2 + .../skill/battle_board_skill_handle.lua | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+) 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)