c1_lua/lua/app/module/battle/helper/battle_instructions_helper.lua
2023-05-19 16:27:54 +08:00

257 lines
8.7 KiB
Lua

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)
Logger.logHighlight("generateLinkCountPowerEffects " .. table.nums(skillEntity:getLinkCountPowerEffects()))
if not skillEntity:getLinkCountPowerEffects() then
return
end
local effectList
for rogueSkill, list in pairs(skillEntity:getLinkCountPowerEffects()) do
for index, info in pairs(list) do
if info.paramsCount and info.paramsCount <= lineCount then
local power = lineCount // info.paramsCount
if not effectList then
effectList = {}
end
local newNum = info.originBuffEntity:getEffectNum() * power
info.useBuffEntity:setEffectNum(newNum)
table.insert(effectList, info.useBuffEntity)
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)
return instructions
end
return BattleInstructionsHelper