随机技能机制
This commit is contained in:
parent
aae0f74648
commit
8316e48633
@ -490,8 +490,6 @@ function BattleUnitComp:changeState(state)
|
||||
self:enterAssistingAttackState()
|
||||
elseif state == UNIT_STATE.DEAD then
|
||||
self:enterDeadState()
|
||||
elseif state == UNIT_STATE.BORN then
|
||||
self:enterBornState()
|
||||
elseif state == UNIT_STATE.ENTER_BATTLEFIELD then
|
||||
self:enterEnterBattlefieldState()
|
||||
elseif state == UNIT_STATE.SWITCH_IN then
|
||||
|
||||
@ -9,6 +9,7 @@ local BattleController = class("BattleController")
|
||||
local BATTLE_BOARD_SKILL_HANDLE = require "app/module/battle/skill/battle_board_skill_handle"
|
||||
local BATTLE_ROGUE_SKILL_HANDLE = require "app/module/battle/skill/battle_rogue_skill_handle"
|
||||
local BATTLE_GRID_EFFECT_HANDLE = require "app/module/battle/skill/battle_grid_effect_handle"
|
||||
local BATTLE_INSTRUCTIONS_HELPER = require "app/module/battle/helper/battle_instructions_helper"
|
||||
local BattleBuffHandle = require "app/module/battle/helper/battle_buff_handle"
|
||||
|
||||
local ELIMINATION_TOUCH_EVENT = GConst.ELIMINATION_TOUCH_EVENT
|
||||
@ -1164,163 +1165,7 @@ function BattleController:onFillBoardOver(isRoundBeginCheck)
|
||||
end
|
||||
|
||||
function BattleController:generateInstructions(skillEntity, elementType, lineCount, influenceElementTypeMap, elementTypeMap)
|
||||
local elementTypeCount = 0
|
||||
-- local assistingList = nil
|
||||
---- 援助
|
||||
for element, count in pairs(elementTypeMap) do
|
||||
-- if element == elementType then
|
||||
elementTypeCount = elementTypeCount + count
|
||||
-- else
|
||||
-- if assistingList == nil then
|
||||
-- assistingList = {}
|
||||
-- end
|
||||
-- local obj = {
|
||||
-- count = count,
|
||||
-- skillMatch = element,
|
||||
-- }
|
||||
-- table.insert(assistingList, obj)
|
||||
-- end
|
||||
end
|
||||
|
||||
---- 技能
|
||||
if skillEntity then
|
||||
if elementType == skillEntity:getPosition() then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.PLAY_SKILL,
|
||||
skillMatch = elementType,
|
||||
count = elementTypeCount,
|
||||
})
|
||||
else
|
||||
if skillEntity:getEffect() ~= nil then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.PLAY_SKILL,
|
||||
skillMatch = skillEntity:getPosition(),
|
||||
count = 0,
|
||||
})
|
||||
end
|
||||
if elementTypeCount > 0 then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.GENERAL_ATTACK,
|
||||
skillMatch = elementType,
|
||||
count = elementTypeCount,
|
||||
})
|
||||
end
|
||||
end
|
||||
else
|
||||
---- 普攻
|
||||
if elementTypeCount > 0 then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.GENERAL_ATTACK,
|
||||
skillMatch = elementType,
|
||||
count = elementTypeCount,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- if assistingList then
|
||||
-- table.insert(self.instructions, {
|
||||
-- name = BattleConst.INSTRUCTION_NAME.ASSISTING,
|
||||
-- assistingList = assistingList,
|
||||
-- })
|
||||
-- end
|
||||
|
||||
---- 加buff
|
||||
if skillEntity then
|
||||
local eliminateEffects = skillEntity:getEliminateEffects(self)
|
||||
if eliminateEffects then
|
||||
local effectList
|
||||
for _, buffEntity in ipairs(eliminateEffects) do
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
if effectList then
|
||||
local unit = {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
}
|
||||
table.insert(self.instructions, unit)
|
||||
end
|
||||
end
|
||||
if skillEntity:getLinkEffects() and elementType then
|
||||
local effectList
|
||||
for type, buffEntities in pairs(skillEntity:getLinkEffects()) do
|
||||
local buffEntity = buffEntities[elementType]
|
||||
if buffEntity then
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
local unit = {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
}
|
||||
table.insert(self.instructions, unit)
|
||||
end
|
||||
end
|
||||
|
||||
if skillEntity:getInInfluenceEffects() and influenceElementTypeMap then
|
||||
for influenceElementType , _ in pairs(influenceElementTypeMap) do
|
||||
local effectList
|
||||
for type, buffEntities in pairs(skillEntity:getInInfluenceEffects()) do
|
||||
local buffEntity = buffEntities[influenceElementType]
|
||||
if buffEntity then
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if skillEntity:getElementCountEffect() and elementType then
|
||||
local effectList
|
||||
for type, buffEntities in pairs(skillEntity:getElementCountEffect()) do
|
||||
local originBuffEntity = buffEntities.origin
|
||||
local useBuffEntity = buffEntities.use
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
local newNum = originBuffEntity:getEffectNum() * lineCount
|
||||
useBuffEntity:setEffectNum(newNum)
|
||||
table.insert(effectList, useBuffEntity)
|
||||
end
|
||||
if effectList then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
if skillEntity:getSkillAttackBeforeEffects() and elementType then
|
||||
local effectList
|
||||
for type, buffEntity in pairs(skillEntity:getSkillAttackBeforeEffects()) do
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
if effectList then
|
||||
table.insert(self.instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
self.instructions = BATTLE_INSTRUCTIONS_HELPER.generateInstructions(skillEntity, elementType, lineCount, influenceElementTypeMap, elementTypeMap, self)
|
||||
end
|
||||
|
||||
function BattleController:exeInstructions(callback)
|
||||
@ -1792,7 +1637,8 @@ function BattleController:getRandomSkillList(getCount, onlyCommonSkill)
|
||||
for _, skillId in ipairs(list) do
|
||||
local skillCfg = cfg[skillId]
|
||||
if skillCfg and (not skillCfg.limit_times or self.battleData:getSkillCount(skillId) < skillCfg.limit_times) then
|
||||
if not map[skillId] then
|
||||
|
||||
if not map[skillId] and (not skillCfg.unlock or self.battleData:getSkillCount(skillCfg.unlock) > 0) then
|
||||
table.insert(newSkillPool, skillId)
|
||||
table.insert(skillWeight, skillCfg.weight)
|
||||
count = count + 1
|
||||
|
||||
253
lua/app/module/battle/helper/battle_instructions_helper.lua
Normal file
253
lua/app/module/battle/helper/battle_instructions_helper.lua
Normal file
@ -0,0 +1,253 @@
|
||||
local BattleConst = GConst.BattleConst
|
||||
local BattleInstructionsHelper = {}
|
||||
|
||||
BattleInstructionsHelper._generateAttackInstructions = function(instructions, skillEntity, elementType, elementTypeCount)
|
||||
if skillEntity then
|
||||
if elementType == skillEntity:getPosition() then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.PLAY_SKILL,
|
||||
skillMatch = elementType,
|
||||
count = elementTypeCount,
|
||||
})
|
||||
else
|
||||
if skillEntity:getEffect() ~= nil then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.PLAY_SKILL,
|
||||
skillMatch = skillEntity:getPosition(),
|
||||
count = 0,
|
||||
})
|
||||
end
|
||||
if elementTypeCount > 0 then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.GENERAL_ATTACK,
|
||||
skillMatch = elementType,
|
||||
count = elementTypeCount,
|
||||
})
|
||||
end
|
||||
end
|
||||
else
|
||||
---- 普攻
|
||||
if elementTypeCount > 0 then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.GENERAL_ATTACK,
|
||||
skillMatch = elementType,
|
||||
count = elementTypeCount,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- if assistingList then
|
||||
-- table.insert(self.instructions, {
|
||||
-- name = BattleConst.INSTRUCTION_NAME.ASSISTING,
|
||||
-- assistingList = assistingList,
|
||||
-- })
|
||||
-- end
|
||||
end
|
||||
|
||||
local generateEliminateEffects = function(instructions, skillEntity, battleController)
|
||||
local eliminateEffects = skillEntity:getEliminateEffects(battleController)
|
||||
if not eliminateEffects then
|
||||
return
|
||||
end
|
||||
local effectList
|
||||
for _, buffEntity in ipairs(eliminateEffects) do
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
if effectList then
|
||||
local unit = {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
}
|
||||
table.insert(instructions, unit)
|
||||
end
|
||||
end
|
||||
|
||||
local generateLinkEffects = function(instructions, skillEntity, elementType)
|
||||
if not skillEntity:getLinkEffects() or not elementType then
|
||||
return
|
||||
end
|
||||
|
||||
local effectList
|
||||
for type, buffEntities in pairs(skillEntity:getLinkEffects()) do
|
||||
local buffEntity = buffEntities[elementType]
|
||||
if buffEntity then
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
local unit = {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
}
|
||||
table.insert(instructions, unit)
|
||||
end
|
||||
end
|
||||
|
||||
local generateInfluenceEffects = function(instructions, skillEntity, influenceElementTypeMap)
|
||||
if not skillEntity:getInInfluenceEffects() or not influenceElementTypeMap then
|
||||
return
|
||||
end
|
||||
for influenceElementType , _ in pairs(influenceElementTypeMap) do
|
||||
local effectList
|
||||
for type, buffEntities in pairs(skillEntity:getInInfluenceEffects()) do
|
||||
local buffEntity = buffEntities[influenceElementType]
|
||||
if buffEntity then
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local generateElementCountEffect = function(instructions, skillEntity, elementType, lineCount)
|
||||
if not skillEntity:getElementCountEffect() or not elementType then
|
||||
return
|
||||
end
|
||||
|
||||
local effectList
|
||||
for rogueSkill, list in pairs(skillEntity:getElementCountEffect()) do
|
||||
for index, buffEntities in pairs(list) do
|
||||
local originBuffEntity = buffEntities.origin
|
||||
local useBuffEntity = buffEntities.use
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
local newNum = originBuffEntity:getEffectNum() * lineCount
|
||||
useBuffEntity:setEffectNum(newNum)
|
||||
table.insert(effectList, useBuffEntity)
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local generateSkillAttackBeforeEffects = function(instructions, skillEntity)
|
||||
if not skillEntity:getSkillAttackBeforeEffects() then
|
||||
return
|
||||
end
|
||||
|
||||
local effectList
|
||||
for rogueSkill, list in pairs(skillEntity:getSkillAttackBeforeEffects()) do
|
||||
for index, buffEntity in pairs(list) do
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, buffEntity)
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local generateLinkCountMoreEffects = function(instructions, skillEntity, lineCount)
|
||||
if not skillEntity:getLinkCountMoreEffects() then
|
||||
return
|
||||
end
|
||||
|
||||
local effectList
|
||||
for rogueSkill, list in pairs(skillEntity:getLinkCountMoreEffects()) do
|
||||
for index, info in pairs(list) do
|
||||
if info.paramsCount and info.paramsCount <= lineCount then
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, info.buffEntity)
|
||||
end
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local generateLinkCountPowerEffects = function(instructions, skillEntity, lineCount)
|
||||
if not skillEntity:getLinkCountMoreEffects() then
|
||||
return
|
||||
end
|
||||
|
||||
local effectList
|
||||
for rogueSkill, list in pairs(skillEntity:getLinkCountMoreEffects()) do
|
||||
for index, info in pairs(list) do
|
||||
if info.paramsCount and info.paramsCount <= lineCount then
|
||||
local poser = lineCount // info.paramsCount
|
||||
for i = 1, poser do
|
||||
if not effectList then
|
||||
effectList = {}
|
||||
end
|
||||
table.insert(effectList, info.buffEntity)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if effectList then
|
||||
table.insert(instructions, {
|
||||
name = BattleConst.INSTRUCTION_NAME.ADD_CUR_ROUND_ATTR,
|
||||
effectList = effectList
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
BattleInstructionsHelper._generateBuffInstructions = function(instructions, skillEntity, elementType, lineCount, influenceElementTypeMap, battleController)
|
||||
if skillEntity then
|
||||
generateEliminateEffects(instructions, skillEntity, battleController)
|
||||
generateLinkEffects(instructions, skillEntity, elementType)
|
||||
generateInfluenceEffects(instructions, skillEntity, influenceElementTypeMap)
|
||||
generateElementCountEffect(instructions, skillEntity, elementType, lineCount)
|
||||
generateSkillAttackBeforeEffects(instructions, skillEntity)
|
||||
generateLinkCountMoreEffects(instructions, skillEntity, lineCount)
|
||||
generateLinkCountPowerEffects(instructions, skillEntity, lineCount)
|
||||
end
|
||||
end
|
||||
|
||||
BattleInstructionsHelper.generateInstructions = function(skillEntity, elementType, lineCount, influenceElementTypeMap, elementTypeMap, battleController)
|
||||
local elementTypeCount = 0
|
||||
local instructions = {}
|
||||
-- local assistingList = nil
|
||||
---- 援助
|
||||
for element, count in pairs(elementTypeMap) do
|
||||
-- if element == elementType then
|
||||
elementTypeCount = elementTypeCount + count
|
||||
-- else
|
||||
-- if assistingList == nil then
|
||||
-- assistingList = {}
|
||||
-- end
|
||||
-- local obj = {
|
||||
-- count = count,
|
||||
-- skillMatch = element,
|
||||
-- }
|
||||
-- table.insert(assistingList, obj)
|
||||
-- end
|
||||
end
|
||||
|
||||
-- 攻击
|
||||
BattleInstructionsHelper._generateAttackInstructions(instructions, skillEntity, elementType, elementTypeCount)
|
||||
---- 加buff
|
||||
BattleInstructionsHelper._generateBuffInstructions(instructions, skillEntity, elementType, lineCount, influenceElementTypeMap, battleController)
|
||||
end
|
||||
|
||||
return BattleInstructionsHelper
|
||||
@ -4,7 +4,7 @@ local BattleBuffEntity = require "app/userdata/battle/skill/battle_buff_entity"
|
||||
|
||||
local BattleRogueSkillHandle = {}
|
||||
|
||||
local _changeBaseSkill = function(skillInfo, battleData, battleController)
|
||||
local _changeBaseSkill = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.parameter then
|
||||
return
|
||||
@ -27,7 +27,7 @@ local _changeBaseSkill = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _addEliminationRange = function(skillInfo, battleData, battleController)
|
||||
local _addEliminationRange = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.boardrange then
|
||||
return
|
||||
@ -39,7 +39,7 @@ local _addEliminationRange = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _canLinkAnyElement = function(skillInfo, battleData, battleController)
|
||||
local _canLinkAnyElement = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType then
|
||||
return
|
||||
@ -51,7 +51,7 @@ local _canLinkAnyElement = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _addLinkAtkp = function(skillInfo, battleData, battleController)
|
||||
local _addLinkAtkp = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.effect then
|
||||
return
|
||||
@ -74,7 +74,7 @@ local _addLinkAtkp = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _changeElementType = function(skillInfo, battleData, battleController)
|
||||
local _changeElementType = function(skillId, skillInfo, battleData, battleController)
|
||||
if not skillInfo.boardrange or not skillInfo.parameter then
|
||||
return
|
||||
end
|
||||
@ -88,7 +88,7 @@ local _changeElementType = function(skillInfo, battleData, battleController)
|
||||
battleController:changeElementType(count, elementType)
|
||||
end
|
||||
|
||||
local _addAttr = function(skillInfo, battleData, battleController, value)
|
||||
local _addAttr = function(skillId, skillInfo, battleData, battleController, value)
|
||||
if not skillInfo.attr then
|
||||
return
|
||||
end
|
||||
@ -99,7 +99,7 @@ local _addAttr = function(skillInfo, battleData, battleController, value)
|
||||
battleController:addHeroAttr(skillInfo.attr.type, value)
|
||||
end
|
||||
|
||||
local _unlockSkill = function(skillInfo, battleData, battleController, value)
|
||||
local _unlockSkill = function(skillId, skillInfo, battleData, battleController, value)
|
||||
if not skillInfo.skill_position then
|
||||
return
|
||||
end
|
||||
@ -107,7 +107,7 @@ local _unlockSkill = function(skillInfo, battleData, battleController, value)
|
||||
battleData:unlockSkillEntity(skillInfo.skill_position)
|
||||
end
|
||||
|
||||
local _addSkillEffectParams = function(skillInfo, battleData, battleController)
|
||||
local _addSkillEffectParams = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.parameter then
|
||||
return
|
||||
@ -144,7 +144,7 @@ local _addSkillEffectParams = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _addSkillRound = function(skillInfo, battleData, battleController)
|
||||
local _addSkillRound = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.parameter then
|
||||
return
|
||||
@ -182,7 +182,7 @@ local _addSkillRound = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _addSkillEffect = function(skillInfo, battleData, battleController)
|
||||
local _addSkillEffect = function(skillId, skillInfo, battleData, battleController)
|
||||
if not skillInfo.effect then
|
||||
return
|
||||
end
|
||||
@ -222,7 +222,7 @@ local _addSkillEffect = function(skillInfo, battleData, battleController)
|
||||
end
|
||||
end
|
||||
|
||||
local _addSkillInInfluenceAtkp = function(skillInfo, battleData, battleController)
|
||||
local _addSkillInInfluenceAtkp = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.effect then
|
||||
return
|
||||
@ -243,7 +243,7 @@ local _addSkillInInfluenceAtkp = function(skillInfo, battleData, battleControlle
|
||||
end
|
||||
end
|
||||
|
||||
local _addSkillAttackBeforeEffect = function(skillInfo, battleData, battleController)
|
||||
local _addSkillAttackBeforeEffect = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.effect then
|
||||
return
|
||||
@ -260,13 +260,16 @@ local _addSkillAttackBeforeEffect = function(skillInfo, battleData, battleContro
|
||||
|
||||
local entity = battleData:getSkillEntityByElement(elementType)
|
||||
if entity then
|
||||
if skillInfo.cover_unlock then
|
||||
entity:removeSkillAttackBeforeEffect(skillInfo.cover_unlock)
|
||||
end
|
||||
for k, effect in ipairs(skillInfo.effect) do
|
||||
entity:addSkillAttackBeforeEffect(k, effect, unitEntity, skillInfo.obj)
|
||||
entity:addSkillAttackBeforeEffect(skillId, k, effect, unitEntity, skillInfo.obj)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local _addSkillElementCountEffect = function(skillInfo, battleData, battleController)
|
||||
local _addSkillElementCountEffect = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.effect then
|
||||
return
|
||||
@ -283,8 +286,69 @@ local _addSkillElementCountEffect = function(skillInfo, battleData, battleContro
|
||||
|
||||
local entity = battleData:getSkillEntityByElement(elementType)
|
||||
if entity then
|
||||
for _, effect in ipairs(skillInfo.effect) do
|
||||
entity:addElementCountEffect(effect, unitEntity, skillInfo.obj)
|
||||
if skillInfo.cover_unlock then
|
||||
entity:removeElementCountEffect(skillInfo.cover_unlock)
|
||||
end
|
||||
for k, effect in ipairs(skillInfo.effect) do
|
||||
entity:addElementCountEffect(skillId, k, effect, unitEntity, skillInfo.obj)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local _addLinkCountMoreEffect = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.effect or not skillInfo.parameter then
|
||||
return
|
||||
end
|
||||
|
||||
if not battleController.battleData or not battleController.battleData.atkTeam then
|
||||
return
|
||||
end
|
||||
|
||||
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
|
||||
if not unitEntity then
|
||||
return
|
||||
end
|
||||
|
||||
local entity = battleData:getSkillEntityByElement(elementType)
|
||||
if entity then
|
||||
if skillInfo.cover_unlock then
|
||||
entity:removeLinkCountMoreEffects(skillInfo.cover_unlock)
|
||||
end
|
||||
for k, effect in ipairs(skillInfo.effect) do
|
||||
local paramsCount = skillInfo.parameter[k]
|
||||
if paramsCount then
|
||||
entity:addLinkCountMoreEffects(skillId, k, effect, unitEntity, skillInfo.obj, paramsCount)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local _addLinkCountPowerEffect = function(skillId, skillInfo, battleData, battleController)
|
||||
local elementType = skillInfo.skill_position
|
||||
if not elementType or not skillInfo.effect or not skillInfo.parameter then
|
||||
return
|
||||
end
|
||||
|
||||
if not battleController.battleData or not battleController.battleData.atkTeam then
|
||||
return
|
||||
end
|
||||
|
||||
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
|
||||
if not unitEntity then
|
||||
return
|
||||
end
|
||||
|
||||
local entity = battleData:getSkillEntityByElement(elementType)
|
||||
if entity then
|
||||
if skillInfo.cover_unlock then
|
||||
entity:removeLinkCountPowerEffects(skillInfo.cover_unlock)
|
||||
end
|
||||
for k, effect in ipairs(skillInfo.effect) do
|
||||
local paramsCount = skillInfo.parameter[k]
|
||||
if paramsCount then
|
||||
entity:addLinkCountPowerEffects(skillId, k, effect, unitEntity, skillInfo.obj, paramsCount)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -303,6 +367,8 @@ BattleRogueSkillHandle._effectOn = {
|
||||
[11] = _addSkillInInfluenceAtkp, -- 技能消除的增加伤害
|
||||
[12] = _addSkillAttackBeforeEffect, -- 技能触发前的技能效果
|
||||
[13] = _addSkillElementCountEffect, -- 技能链接中每一个元素累加的技能效果
|
||||
[14] = _addLinkCountMoreEffect, -- 链接超过x元素获得一次技能效果
|
||||
[15] = _addLinkCountPowerEffect, -- 链接超过x元素获得倍数技能效果
|
||||
}
|
||||
|
||||
function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value)
|
||||
@ -313,7 +379,7 @@ function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController
|
||||
|
||||
local func = BattleRogueSkillHandle._effectOn[cfg.type]
|
||||
if func then
|
||||
func(cfg, battleData, battleController, value)
|
||||
func(skillId, cfg, battleData, battleController, value)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -5,11 +5,12 @@ function BattleBoardSkillEntity:ctor(skillId)
|
||||
self:refreshSkillId(skillId)
|
||||
self.curEnergy = 0
|
||||
self.addRange = {}
|
||||
self.linkEffectEntities = {}
|
||||
self.inInfluenceEntities = {}
|
||||
self.skillAttackBeforeEffectEntities = {}
|
||||
self.elementCountEffectEntities = {}
|
||||
self.cacheBuffEntities = {}
|
||||
self.linkEffectEntities = {} -- 链接攻击伤害 type = 3
|
||||
self.inInfluenceEntities = {} -- 技能消除攻击伤害 type = 11
|
||||
self.skillAttackBeforeEffectEntities = {} -- 战斗开始前获得技能效果 type = 12
|
||||
self.elementCountEffectEntities = {} -- 根据消除数量获得次数的技能效果 type = 13
|
||||
self.linkCountMoreEffects = {} -- 链接超过x元素获得一次技能效果 type = 14
|
||||
self.linkCountPowerEffects = {} -- 链接超过x元素获得倍数技能效果 type = 15
|
||||
|
||||
self.upSkillIdMap = {}
|
||||
self.getUpSkillKind = 0
|
||||
@ -280,27 +281,38 @@ function BattleBoardSkillEntity:addInInfluenceEffect(effect, unitEntity, targetS
|
||||
end
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:addSkillAttackBeforeEffect(index, effect, unitEntity, targetSide)
|
||||
local buffEntity = self.skillAttackBeforeEffectEntities[index]
|
||||
function BattleBoardSkillEntity:addSkillAttackBeforeEffect(rogueSkill, index, effect, unitEntity, targetSide)
|
||||
if not self.skillAttackBeforeEffectEntities[rogueSkill] then
|
||||
self.skillAttackBeforeEffectEntities[rogueSkill] = {}
|
||||
end
|
||||
local buffEntity = self.skillAttackBeforeEffectEntities[rogueSkill][index]
|
||||
if not buffEntity then
|
||||
buffEntity = BattleBuffEntity:create()
|
||||
buffEntity:init(effect, unitEntity)
|
||||
self.skillAttackBeforeEffectEntities[index] = buffEntity
|
||||
self.skillAttackBeforeEffectEntities[rogueSkill][index] = buffEntity
|
||||
else
|
||||
buffEntity:init(effect, unitEntity)
|
||||
end
|
||||
buffEntity:setTargetSide(targetSide)
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:removeSkillAttackBeforeEffect(rogueSkill)
|
||||
self.skillAttackBeforeEffectEntities[rogueSkill] = nil
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:getSkillAttackBeforeEffects()
|
||||
return self.skillAttackBeforeEffectEntities
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:addElementCountEffect(effect, unitEntity, targetSide)
|
||||
local buffEntities = self.elementCountEffectEntities[effect.type]
|
||||
function BattleBoardSkillEntity:addElementCountEffect(rogueSkill, index, effect, unitEntity, targetSide)
|
||||
if not self.elementCountEffectEntities[rogueSkill] then
|
||||
self.elementCountEffectEntities[rogueSkill] = {}
|
||||
end
|
||||
local buffEntities = self.elementCountEffectEntities[rogueSkill][index]
|
||||
if not buffEntities then
|
||||
self.elementCountEffectEntities[effect.type] = {}
|
||||
buffEntities = self.elementCountEffectEntities[effect.type]
|
||||
self.elementCountEffectEntities[rogueSkill][index] = {}
|
||||
buffEntities = self.elementCountEffectEntities[rogueSkill][index]
|
||||
|
||||
local originBuffEntity = BattleBuffEntity:create()
|
||||
originBuffEntity:init(effect, unitEntity)
|
||||
originBuffEntity:setTargetSide(targetSide)
|
||||
@ -325,27 +337,14 @@ function BattleBoardSkillEntity:addElementCountEffect(effect, unitEntity, target
|
||||
end
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:removeElementCountEffect(rogueSkill)
|
||||
self.elementCountEffectEntities[rogueSkill] = nil
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:getElementCountEffect()
|
||||
return self.elementCountEffectEntities
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:addBuffEffect(buff, unitEntity)
|
||||
local buffEntity = self.cacheBuffEntities[buff.type]
|
||||
if not buffEntity then
|
||||
buffEntity = BattleBuffEntity:create()
|
||||
buffEntity:init(buff, unitEntity)
|
||||
self.cacheBuffEntities[buff.type] = buffEntity
|
||||
else
|
||||
local buffNum = buffEntity:getEffectNum()
|
||||
buffEntity:init(buff, unitEntity)
|
||||
buffEntity:setEffectNum(buffEntity:getEffectNum() + buffNum)
|
||||
end
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:getBuffEffects()
|
||||
return self.cacheBuffEntities
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:getEliminateEffects(battleController)
|
||||
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[self:getPosition()]
|
||||
if not unitEntity or not self.config.eliminate_effect then
|
||||
@ -390,4 +389,52 @@ function BattleBoardSkillEntity:gotUpSKill(skillId)
|
||||
return true
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:addLinkCountMoreEffects(rogueSkill, index, effect, unitEntity, targetSide, paramsCount)
|
||||
if not self.linkCountMoreEffects[rogueSkill] then
|
||||
self.linkCountMoreEffects[rogueSkill] = {}
|
||||
end
|
||||
local info = self.linkCountMoreEffects[rogueSkill][index]
|
||||
if not info then
|
||||
info = {paramsCount = paramsCount}
|
||||
info.buffEntity = BattleBuffEntity:create()
|
||||
info.buffEntity:init(effect, unitEntity)
|
||||
self.linkCountMoreEffects[rogueSkill][index] = info
|
||||
else
|
||||
info.buffEntity:init(effect, unitEntity)
|
||||
end
|
||||
info.buffEntity:setTargetSide(targetSide)
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:removeLinkCountMoreEffects(rogueSkill)
|
||||
self.linkCountMoreEffects[rogueSkill] = nil
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:getLinkCountMoreEffects()
|
||||
return self.linkCountMoreEffects
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:addLinkCountPowerEffects(rogueSkill, index, effect, unitEntity, targetSide, paramsCount)
|
||||
if not self.linkCountPowerEffects[rogueSkill] then
|
||||
self.linkCountPowerEffects[rogueSkill] = {}
|
||||
end
|
||||
local info = self.linkCountPowerEffects[rogueSkill][index]
|
||||
if not info then
|
||||
info = {paramsCount = paramsCount}
|
||||
info.buffEntity = BattleBuffEntity:create()
|
||||
info.buffEntity:init(effect, unitEntity)
|
||||
self.linkCountPowerEffects[rogueSkill][index] = info
|
||||
else
|
||||
info.buffEntity:init(effect, unitEntity)
|
||||
end
|
||||
info.buffEntity:setTargetSide(targetSide)
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:removeLinkCountPowerEffects(rogueSkill)
|
||||
self.linkCountPowerEffects[rogueSkill] = nil
|
||||
end
|
||||
|
||||
function BattleBoardSkillEntity:getLinkCountPowerEffects()
|
||||
return self.linkCountPowerEffects
|
||||
end
|
||||
|
||||
return BattleBoardSkillEntity
|
||||
@ -240,13 +240,15 @@ end
|
||||
function HeroEntity:getRogueSkillList()
|
||||
if not self.rogueSkillList then
|
||||
self.rogueSkillList = {}
|
||||
for i = 1, 3 do
|
||||
local id = self.config["rouge_skill_" .. i]
|
||||
local count = 1
|
||||
while true do
|
||||
local id = self.config["rouge_skill_" .. count]
|
||||
if id then
|
||||
table.insert(self.rogueSkillList, id)
|
||||
else
|
||||
break
|
||||
end
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user