pvp战斗概念引入

This commit is contained in:
xiekaidong 2023-06-26 15:28:40 +08:00
parent eb7d04a5dc
commit a623c25f6f
21 changed files with 6433 additions and 741 deletions

View File

@ -13,6 +13,7 @@ function DataManager:init()
self:initManager("HeroData", "app/userdata/hero/hero_data")
self:initManager("BagData", "app/userdata/bag/bag_data")
self:initManager("BattleData", "app/userdata/battle/battle_data")
self:initManager("BattlePVPData", "app/userdata/battle/battle_pvp_data")
self:initManager("FormationData", "app/userdata/formation/formation_data")
self:initManager("TutorialData", "app/userdata/tutorial/tutorial_data")
self:initManager("MailData", "app/userdata/mail/mail_data")
@ -33,7 +34,7 @@ function DataManager:initManager(name, path)
self._cacheManager[name] = self[name]
end
if name == "BattleData" and self._cacheManager[name] then
if (name == "BattleData" or name == "BattlePVPData") and self._cacheManager[name] then
else
self[name] = require(path):create()
end

View File

@ -1,8 +1,8 @@
local BattleConst = {}
BattleConst.ROW_COUNT = 7
BattleConst.PVP_ROW_COUNT = 10
BattleConst.COLUMN_COUNT = 7
BattleConst.PVP_COLUMN_COUNT = 10
BattleConst.HALF_ROW_COUNT = 4 -- 计算偏移 math.ceil(ROW_COUNT / 2)
BattleConst.HALF_COLUMN_COUNT = 4 -- 计算偏移 math.ceil(COLUMN_COUNT / 2)
BattleConst.GRID_STEP_H = 94

View File

@ -47,6 +47,7 @@ function BattleManager:isInBattle()
return self.battleController ~= nil
end
-- params = {atkFormation= {elementType = heroEntity}, defFormation= ?}
function BattleManager:playBattle(battleType, params, returnFunc)
UIManager:showLoading(UIManager.LOADING_TYPE.CLOUD, function()
params = params or {}
@ -61,6 +62,16 @@ end
function BattleManager:_play(battleType, params)
params.battleType = battleType
if not params.atkFormation then
params.atkFormation = {}
local formation = DataManager.FormationData:getStageFormation()
for elementType, heroId in pairs(formation) do
local heroEntity = DataManager.HeroData:getHeroById(heroId)
if heroEntity then
params.atkFormation[elementType] = heroEntity
end
end
end
local controllerPath = BATTLE_CONTROLLER[battleType] or BATTLE_CONTROLLER_BASE
self.battleController = require(controllerPath):create()
self.battleController:init(params)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 06696c742e709a642ba2189a9c75b45a
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -418,7 +418,7 @@ function BattleController:init(params)
self.delayEffectTextList = {}
self.delayEffectTextCount = 0
self.time = 0
self.battleData:init()
self.battleData:init(params)
BattleScheduler:init()
BattlePool:init()
BattleHelper:init()
@ -2034,7 +2034,7 @@ end
function BattleController:onSelectSkill(skillId, value, pos)
self.battleData:addSkillCount(skillId, value)
BATTLE_ROGUE_SKILL_HANDLE.takeEffect(skillId, self.battleData, self, value)
BATTLE_ROGUE_SKILL_HANDLE.takeEffect(skillId, self.battleData, self, value, BattleConst.SIDE_ATK)
local skillEntities = self.battleData:getSkillEntities()
for _, entity in pairs(skillEntities) do

View File

@ -0,0 +1,173 @@
local BattleHelper = require "app/module/battle/helper/battle_helper"
local BattleBaseController = require "app/module/battle/controller/battle_base_controller"
local BattleControllerPVP = class("BattleControllerPVP", BattleBaseController)
local BattleConst = GConst.BattleConst
-- *************各个子模块的战斗需要重写的方法 START*************
function BattleControllerPVP:getBoardConfig()
return {}
end
function BattleControllerPVP:getChapterConfig()
return {}
end
function BattleControllerPVP:getChapterId()
return 0
end
function BattleControllerPVP:getBuffs()
return {}
end
-- 战斗对应的ui
function BattleControllerPVP:getBattleUIPath()
return "app/ui/battle/battle_ui_pvp"
end
-- 战斗结束
function BattleControllerPVP:controllBattleEnd()
end
-- 一共有多少波
function BattleControllerPVP:getMaxWave()
return 1
end
function BattleControllerPVP:findNextDefUnit()
self:enterRoundEnd(true)
end
function BattleControllerPVP:onLinkChange()
self.battleUI:hideAllSfxLine()
self.linkChangeNeedFalsePosMap = table.clearOrCreate(self.linkChangeNeedFalsePosMap)
for posId, entity in pairs(self.battleData:getGridEnties()) do
if entity:getCell() then
self.linkChangeNeedFalsePosMap[posId] = entity:getCell()
end
end
local sequence = self.battleData:getGridSequence()
local mainElementType
for index, info in ipairs(sequence) do
local entity = self.battleData:getGridEntity(info.posId)
if not mainElementType then
local skillId = entity:getSkillId()
if not skillId then
mainElementType = entity:getElementType()
break
end
end
end
local count = #sequence
for index, info in ipairs(sequence) do
local entity = self.battleData:getGridEntity(info.posId)
if entity:getCell() then
entity:getCell():showHighLight(true, mainElementType, self.battleUI)
end
if self.linkChangeNeedFalsePosMap[info.posId] then
self.linkChangeNeedFalsePosMap[info.posId] = nil
end
if index < count then
local nextPosId = sequence[index + 1].posId
self.battleUI:getSfxLine(index, function(obj)
local curPos = ModuleManager.BattleManager:getPosInfo(info.posId)
local nextPos = ModuleManager.BattleManager:getPosInfo(nextPosId)
local pos, z = ModuleManager.BattleManager:getPosCenterAndDir(curPos, nextPos)
obj:setLocalScale(25, 25, 25)
obj:setLocalPosition(pos.x, pos.y, 0)
obj:setEulerAngles(0, 0, z)
end)
end
if index == count then
if entity:getCell() then
entity:getCell():showAni()
end
end
end
for posId, cell in pairs(self.linkChangeNeedFalsePosMap) do
cell:showHighLight(false)
end
for posId, info in pairs(self.battleData:getSkillInfluenceGrids()) do
local entity = self.battleData:getGridEntity(posId)
if info.direction ~= BattleConst.BOARD_RANGE_TYPE.RANDOM then
if entity:getCell() then
entity:getCell():showCircle(true)
end
end
end
if not self.atkTeam:getMainUnit().unitEntity:getActiveSkillLimit() then
local aniSequence, influenceElementType, lineCount, elementTypeMap, linkElementType = self:calculateCurElimination(true)
self.battleUI:refreshSkill(elementTypeMap, count > 0)
end
if mainElementType then
self.atkTeam:changeMainUnit(mainElementType)
end
end
function BattleControllerPVP:postWaveOver(atkDead, isQuit)
end
function BattleControllerPVP:postFightStart()
end
function BattleControllerPVP:onEliminationBegin()
end
function BattleControllerPVP:refreshWave()
if not self.battleUI then
return
end
self.battleUI:refreshWave(self.waveIndex)
end
-- *************各个子模块的战斗需要重写的方法 END*************
function BattleControllerPVP:ctor()
self.battleData = DataManager.BattlePVPData
end
function BattleControllerPVP:initDefUnits(callback)
local defTeamEntity = self.battleData:getDefTeam()
local count = 0
local totalCount = defTeamEntity:getMembersCount()
local function onloadFinished()
count = count + 1
if count == totalCount then
self.battleUI:refreshAtkHp(defTeamEntity:getHp(), defTeamEntity:getHpPercent())
callback()
end
end
local members = defTeamEntity:getAllMembers()
for k, v in pairs(members) do
local modelId = v:getModelId()
BattleHelper:loadBattleHeroModel(modelId, self.battleUI:getBattleNode(), function(spineObject)
local heroComp = spineObject:addLuaComponent(BattleConst.TYPEOF_LUA_COMP.BATTLE_HERO_COMPONENT)
heroComp:initWithEntity(modelId, v, self)
if v:getIsMainUnit() then
self.defTeam:addUnit(heroComp, true)
else
self.defTeam:addUnit(heroComp)
heroComp:hideOutsideScreen()
end
onloadFinished()
end)
end
if totalCount == 0 then
callback()
end
end
return BattleControllerPVP

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: cf144ebf0bb8b7b46b1341ca0f899c3e
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -4,7 +4,7 @@ local BattleBuffEntity = require "app/userdata/battle/skill/battle_buff_entity"
local BattleRogueSkillHandle = {}
local _changeBaseSkill = function(skillId, skillInfo, battleData, battleController)
local _changeBaseSkill = function(skillId, skillInfo, battleBaseData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.parameter then
return
@ -14,14 +14,14 @@ local _changeBaseSkill = function(skillId, skillInfo, battleData, battleControll
return
end
local skillEntity = battleData:getSkillEntityByElement(elementType)
local skillEntity = battleBaseData:getSkillEntityByElement(elementType, side)
if skillEntity then
local skillId = skillEntity:getSkillId()
battleData:changeSkillId(elementType, newSkillId)
if not battleData.atkTeam then
battleBaseData:changeSkillId(elementType, newSkillId, side)
if not battleBaseData.atkTeam then
return
end
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleBaseData.atkTeam:getAllMembers()[elementType]
if unitEntity then
unitEntity:changeSkillId(skillId, newSkillId)
for effectType, effect in pairs(skillEntity:getSkillRoundAdd()) do -- 技能回合数
@ -39,54 +39,54 @@ local _changeBaseSkill = function(skillId, skillInfo, battleData, battleControll
end
end
local _addEliminationRange = function(skillId, skillInfo, battleData, battleController)
local _addEliminationRange = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.boardrange then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
entity:addBoardRange(skillInfo.boardrange)
end
end
local _canLinkAnyElement = function(skillId, skillInfo, battleData, battleController)
local _canLinkAnyElement = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
entity:setIgnoreElementType(true)
end
end
local _addLinkAtkp = function(skillId, skillInfo, battleData, battleController)
local _addLinkAtkp = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.effect then
return
end
if not battleController.battleData or not battleController.battleData.atkTeam then
if not battleData.atkTeam then
return
end
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
if not unitEntity then
return
end
for _, effect in ipairs(skillInfo.effect) do
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
entity:addLinkEffect(effect, unitEntity, skillInfo.obj)
end
end
end
local _changeElementType = function(skillId, skillInfo, battleData, battleController)
local _changeElementType = function(skillId, skillInfo, battleData, battleController, value, side)
if not skillInfo.boardrange or not skillInfo.parameter then
return
end
@ -100,7 +100,7 @@ local _changeElementType = function(skillId, skillInfo, battleData, battleContro
battleController:changeElementType(count, elementType)
end
local _addAttr = function(skillId, skillInfo, battleData, battleController, value)
local _addAttr = function(skillId, skillInfo, battleData, battleController, value, side)
if not skillInfo.attr then
return
end
@ -111,15 +111,15 @@ local _addAttr = function(skillId, skillInfo, battleData, battleController, valu
battleController:addHeroAttr(skillInfo.attr.type, value)
end
local _unlockSkill = function(skillId, skillInfo, battleData, battleController, value)
local _unlockSkill = function(skillId, skillInfo, battleData, battleController, value, side)
if not skillInfo.skill_position then
return
end
battleData:unlockSkillEntity(skillInfo.skill_position)
battleData:unlockSkillEntity(skillInfo.skill_position, side)
end
local _addSkillEffectParams = function(skillId, skillInfo, battleData, battleController)
local _addSkillEffectParams = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.parameter then
return
@ -131,7 +131,7 @@ local _addSkillEffectParams = function(skillId, skillInfo, battleData, battleCon
end
local effect
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity and entity:getEffect() then
local effectCfg = entity:getEffect()[index]
if effectCfg then
@ -144,7 +144,7 @@ local _addSkillEffectParams = function(skillId, skillInfo, battleData, battleCon
return
end
local skillEntity = battleData:getSkillEntityByElement(elementType)
local skillEntity = battleData:getSkillEntityByElement(elementType, side)
if skillEntity then
local skillId = skillEntity:getSkillId()
skillEntity:addSkillEffecuNumAdd(effect)
@ -157,7 +157,7 @@ local _addSkillEffectParams = function(skillId, skillInfo, battleData, battleCon
end
end
local _addSkillRound = function(skillId, skillInfo, battleData, battleController)
local _addSkillRound = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.parameter then
return
@ -170,7 +170,7 @@ local _addSkillRound = function(skillId, skillInfo, battleData, battleController
end
local effect
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity and entity:getEffect() then
local effectCfg = entity:getEffect()[index]
if effectCfg then
@ -183,7 +183,7 @@ local _addSkillRound = function(skillId, skillInfo, battleData, battleController
return
end
local skillEntity = battleData:getSkillEntityByElement(elementType)
local skillEntity = battleData:getSkillEntityByElement(elementType, side)
if skillEntity then
local skillId = skillEntity:getSkillId()
skillEntity:addSkillRoundAdd(effect)
@ -196,7 +196,7 @@ local _addSkillRound = function(skillId, skillInfo, battleData, battleController
end
end
local _addSkillEffect = function(skillId, skillInfo, battleData, battleController)
local _addSkillEffect = function(skillId, skillInfo, battleData, battleController, value, side)
if not skillInfo.effect then
return
end
@ -236,43 +236,43 @@ local _addSkillEffect = function(skillId, skillInfo, battleData, battleControlle
end
end
local _addSkillInInfluenceAtkp = function(skillId, skillInfo, battleData, battleController)
local _addSkillInInfluenceAtkp = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.effect then
return
end
if not battleController.battleData or not battleController.battleData.atkTeam then
if not battleData.atkTeam then
return
end
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
if not unitEntity then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
for _, effect in ipairs(skillInfo.effect) do
entity:addInInfluenceEffect(effect, unitEntity, skillInfo.obj)
end
end
local _addSkillAttackBeforeEffect = function(skillId, skillInfo, battleData, battleController)
local _addSkillAttackBeforeEffect = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.effect then
return
end
if not battleController.battleData or not battleController.battleData.atkTeam then
if not battleData.atkTeam then
return
end
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
if not unitEntity then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
if skillInfo.cover_unlock then
entity:removeSkillAttackBeforeEffect(skillInfo.cover_unlock)
@ -283,22 +283,22 @@ local _addSkillAttackBeforeEffect = function(skillId, skillInfo, battleData, bat
end
end
local _addSkillElementCountEffect = function(skillId, skillInfo, battleData, battleController)
local _addSkillElementCountEffect = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.effect then
return
end
if not battleController.battleData or not battleController.battleData.atkTeam then
if not battleData.atkTeam then
return
end
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
if not unitEntity then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
if skillInfo.cover_unlock then
entity:removeElementCountEffect(skillInfo.cover_unlock)
@ -309,22 +309,22 @@ local _addSkillElementCountEffect = function(skillId, skillInfo, battleData, bat
end
end
local _addLinkCountMoreEffect = function(skillId, skillInfo, battleData, battleController)
local _addLinkCountMoreEffect = function(skillId, skillInfo, battleData, battleController, value, side)
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
if not battleData.atkTeam then
return
end
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
if not unitEntity then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
if skillInfo.cover_unlock then
entity:removeLinkCountMoreEffects(skillInfo.cover_unlock)
@ -338,22 +338,22 @@ local _addLinkCountMoreEffect = function(skillId, skillInfo, battleData, battleC
end
end
local _addLinkCountPowerEffect = function(skillId, skillInfo, battleData, battleController)
local _addLinkCountPowerEffect = function(skillId, skillInfo, battleData, battleController, value, side)
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
if not battleData.atkTeam then
return
end
local unitEntity = battleController.battleData.atkTeam:getAllMembers()[elementType]
local unitEntity = battleData.atkTeam:getAllMembers()[elementType]
if not unitEntity then
return
end
local entity = battleData:getSkillEntityByElement(elementType)
local entity = battleData:getSkillEntityByElement(elementType, side)
if entity then
if skillInfo.cover_unlock then
entity:removeLinkCountPowerEffects(skillInfo.cover_unlock)
@ -367,7 +367,7 @@ local _addLinkCountPowerEffect = function(skillId, skillInfo, battleData, battle
end
end
local _addSkillRatio = function(skillId, skillInfo, battleData, battleController)
local _addSkillRatio = function(skillId, skillInfo, battleData, battleController, value, side)
local elementType = skillInfo.skill_position
if not elementType or not skillInfo.parameter then
return
@ -380,7 +380,7 @@ local _addSkillRatio = function(skillId, skillInfo, battleData, battleController
end
local effect
local skillEntity = battleData:getSkillEntityByElement(elementType)
local skillEntity = battleData:getSkillEntityByElement(elementType, side)
if skillEntity and skillEntity:getEffect() then
local effectCfg = skillEntity:getEffect()[index]
if effectCfg then
@ -424,7 +424,7 @@ BattleRogueSkillHandle._effectOn = {
[16] = _addSkillRatio, -- 增加技能效果概率
}
function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value)
function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value, side)
local cfg = SKILL_ROGUE_CFG[skillId]
if not cfg or not cfg.type then
return
@ -432,7 +432,7 @@ function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController
local func = BattleRogueSkillHandle._effectOn[cfg.type]
if func then
func(skillId, cfg, battleData, battleController, value)
func(skillId, cfg, battleData, battleController, value, side)
end
end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 700cd627202b40748b9047674c4628fa
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,224 @@
local BattleBaseUI = require "app/ui/battle/battle_base_ui"
local BattleUIPVP = class("BattleUIPVP", BattleBaseUI)
local DEFAULT_X = 10000
local BOARD_POS_UP = BF.Vector2(0, 47)
local BOARD_POS_DOWN = BF.Vector2(0, -740)
---------------------------------必须重写的方法----------------------------------
function BattleBaseUI:initBaseInfo()
local uiMap = self.root:genAllChildren()
self.uiMap = uiMap
self.gridNode = uiMap["battle_ui_pvp.board_root_node.board_node_atk.grid_node"]
self.boardNode = uiMap["battle_ui_pvp.board_root_node.board_node_atk"]
self.boardNode:setAnchoredPositionX(DEFAULT_X)
self.boardMask2D = self.gridNode:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_RECT_MASK_2D)
self.boardMask = uiMap["battle_ui_pvp.board_root_node.board_node_atk.grid_node.board_mask"]
self.boardMask:setVisible(false)
self.boardCacheNode = uiMap["battle_ui.bg_2.board_cache_node"]
self.boardCacheNode:setVisible(false)
self.boardCacheBox = uiMap["battle_ui.bg_2.board_cache_node.skill_box"]
self.boardCacheBox:setAnchoredPositionX(DEFAULT_X)
self.battleRoot = uiMap["battle_ui.battle_root"]
self.maxLayerNode = uiMap["battle_ui.battle_root.battle_node.max_layer_show_node"]
end
function BattleUIPVP:initBg()
self.bg = self.uiMap["battle_ui.battle_root.bg"]
self.bg:setLocalScale(0, 0, 0)
local width = self.bg:fastGetSizeDelta()
self.bg:setAnchoredPositionX(width/4)
end
function BattleUIPVP:initSkill()
local uiMap = self.root:genAllChildren()
local atkNode = uiMap["battle_ui_pvp.bottom_node.skill_node"]
local defNode = uiMap["battle_ui_pvp.top_node.skill_node"]
local atkCellPrefix = "battle_ui_pvp.bottom_node.skill_node.skill_node_cell_"
local defCellPrefix = "battle_ui_pvp.top_node.skill_node.skill_node_cell_"
self:_initSkill(atkNode, atkCellPrefix, defNode, defCellPrefix)
end
function BattleUIPVP:initBuff()
local atkBuffPrefix = "battle_ui_pvp.bottom_node.buff.tiny_buff_cell_"
local defBuffPrefix = "battle_ui_pvp.top_node.buff.tiny_buff_cell_"
local battleBuffTipsRoot = self.uiMap["battle_ui_pvp.battle_buff_tips"]
local battleBuffTipsMask = self.uiMap["battle_ui_pvp.battle_buff_tips.mask"]
local battleBuffTipsBg = self.uiMap["battle_ui_pvp.battle_buff_tips.bg"]
local battleBuffTipsBuff = self.uiMap["battle_ui_pvp.battle_buff_tips.bg.buff"]
self:_initBuff(atkBuffPrefix, defBuffPrefix, battleBuffTipsRoot, battleBuffTipsMask, battleBuffTipsBg, battleBuffTipsBuff)
end
function BattleUIPVP:initBattlefield()
self.battleNode = self.uiMap["battle_ui.battle_root.battle_node"]
end
function BattleUIPVP:initNumberNode()
self.battleNumberNode = self.uiMap["battle_ui_pvp.battle_root.battle_number_node"]
self.battleNumberRed = self.uiMap["battle_ui_pvp.cache_node.battle_number_red"]
self.battleNumberGreen = self.uiMap["battle_ui_pvp.cache_node.battle_number_green"]
self.battleNumberBlue = self.uiMap["battle_ui_pvp.cache_node.battle_number_blue"]
self.battleNumberWhite = self.uiMap["battle_ui_pvp.cache_node.battle_number_white"]
self.battleNumberSpecial = self.uiMap["battle_ui_pvp.cache_node.battle_number_special"]
end
function BattleBaseUI:initComboNode()
self.comboNode = self.uiMap["battle_ui_pvp.battle_root.combo"]
self.comboBg1 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.bg_1"]
self.comboTx1 = self.uiMap["battle_ui_pvp.battle_root.combo.number.text.text_1"]
self.comboTx2 = self.uiMap["battle_ui_pvp.battle_root.combo.number.text.text_2"]
self.comboFx1 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.vfx_ui_hit_b01"]
self.comboFx2 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.vfx_ui_hit_b02"]
self.comboFx3 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.vfx_ui_hit_b03"]
self:_initComboNode()
end
function BattleBaseUI:initHpNode()
self.hpProgressLeft = self.uiMap["battle_ui_pvp.bottom_node.hp_node.hp_progress"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self.hpProgressRight = self.uiMap["battle_ui_pvp.top_node.hp_node.hp_progress"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self.hpTextLeft = self.uiMap["battle_ui_pvp.bottom_node.hp_node.hp"]
self.hpTextRight = self.uiMap["battle_ui_pvp.top_node.hp_node.hp"]
self.hpProgressYellowLeft = self.uiMap["battle_ui_pvp.bottom_node.hp_node.hp_progress_yellow"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self.hpProgressYellowRight = self.uiMap["battle_ui_pvp.top_node.hp_node.hp_progress_yellow"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self:_initHpNode()
end
function BattleUIPVP:initFxNode()
self.fxNode = self.uiMap["battle_ui.battle_root.batttle_fx_node"]
end
function BattleUIPVP:hideGenerateSkillGridCells()
local generateSkillCellPrefix = "battle_ui_pvp.board_root_node.ani_node.grid_cell_"
self:_hideGenerateSkillGridCells(generateSkillCellPrefix)
end
function BattleBaseUI:initSkillLineSfx()
if not self.skillLineSfxs then
self.skillLineSfxs = {}
self.skillLineSfxs[13] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1h"]
self.skillLineSfxs[11] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1v"]
self.skillLineSfxs[15] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1l"]
self.skillLineSfxs[17] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1r"]
self.skillLineSfxs[23] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2h"]
self.skillLineSfxs[21] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2v"]
self.skillLineSfxs[25] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2l"]
self.skillLineSfxs[27] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2r"]
self.skillLineSfxs[33] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3h"]
self.skillLineSfxs[31] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3v"]
self.skillLineSfxs[35] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3l"]
self.skillLineSfxs[37] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3r"]
end
if not self.skillLightSfxs then
self.skillLightSfxs = {}
self.skillLightSfxs.point = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b03"]
self.skillLightSfxs[11] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b04_1"]
self.skillLightSfxs[12] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b04_2"]
self.skillLightSfxs[13] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b04_3"]
self.skillLightSfxs[14] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b04_4"]
self.skillLightSfxs[15] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b04_5"]
self.skillLightSfxs[21] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b05_1"]
self.skillLightSfxs[22] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b05_2"]
self.skillLightSfxs[23] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b05_3"]
self.skillLightSfxs[24] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b05_4"]
self.skillLightSfxs[25] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b05_5"]
end
end
function BattleUIPVP:initGenerateSkillEffect()
local generateSkillEffecPrefix = "battle_ui_pvp.board_root_node.ani_node.grid_cell_"
self:_initGenerateSkillEffect(generateSkillEffecPrefix)
end
function BattleUIPVP:initCounterAttack()
self.counterAttackNode = self.uiMap["battle_ui_pvp.battle_root.counter_attack"]
self.counterTx = self.uiMap["battle_ui_pvp.battle_root.counter_attack.text_number"]
self.counterTxbgComp = self.uiMap["battle_ui_pvp.battle_root.counter_attack.bg"]
self.counterTxTmp = self.counterTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
self.counterAttackNode:setVisible(false)
end
--------------------------------end必须重写的方法--------------------------------
function BattleUIPVP:getPrefabPath()
return "assets/prefabs/ui/battle/battle_ui_pvp.prefab"
end
function BattleUIPVP:getBGMId()
return AudioManager.BGM_ID.BATTLE
end
function BattleUIPVP:_display()
BattleBaseUI._display(self)
self:refreshAvatar()
end
function BattleUIPVP:_addListeners()
local uiMap = self.root:genAllChildren()
uiMap["battle_ui.top_node.close_btn"]:addClickListener(function()
ModuleManager.BattleManager:showPauseUI(self.battleController.battleType)
end)
end
function BattleUIPVP:refreshAvatar()
-- 等数据
end
function BattleUIPVP:showLeftBuffTips(buffList, autoClose)
local addY = self:showBuffTips(buffList, autoClose)
self.battleBuffTipsBg:setAnchoredPosition(-175, -1018 + addY)
end
function BattleUIPVP:showRightBuffTips(buffList, autoClose)
self:showBuffTips(buffList, autoClose)
self.battleBuffTipsBg:setAnchoredPosition(175, -188)
end
function BattleUIPVP:switchBoard(downCallback, callback, isFirst)
if self.switchBoardSeq then
self.switchBoardSeq:Kill()
self.switchBoardSeq = nil
end
if isFirst then
if downCallback then
downCallback()
end
if callback then
callback()
end
self.boardNode:setAnchoredPositionY(BOARD_POS_UP.y)
return
end
self.switchBoardSeq = self.root:createBindTweenSequence()
self.switchBoardSeq:Append(self.boardNode:getTransform():DOAnchorPos(BOARD_POS_DOWN, 0.5))
self.switchBoardSeq:AppendCallback(function()
if downCallback then
downCallback()
end
end)
self.switchBoardSeq:Append(self.boardNode:getTransform():DOAnchorPos(BOARD_POS_UP, 0.5))
self.switchBoardSeq:AppendCallback(function()
if callback then
callback()
end
end)
end
function BattleUIPVP:refreshWave(wave, iconAtlas, iconName)
local uiMap = self.root:genAllChildren()
local icon = uiMap["battle_ui_pvp.bottom_node.round_icon"]
local desc = uiMap["battle_ui_pvp.bottom_node.round_text"]
desc:setText(wave)
GFunc.centerImgAndTx(icon, desc, 10)
iconAtlas = iconAtlas or GConst.ATLAS_PATH.COMMON
iconName = iconName or "common_dec_3"
icon:setSprite(iconAtlas, iconName)
end
return BattleUIPVP

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 00c01ea12e6e5c34aa6c429a97788617
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,15 @@
local TinyBuffCell = class("TinyBuffCell", BaseCell)
function TinyBuffCell:refresh(buffName, round)
if round <= 1 or round > 9 then
round:setText(GConst.EMPTY_STRING)
else
round:setText(tostring(round))
end
local uiMap = self:getUIMap()
uiMap["tiny_buff_cell.buff_icon"]:setSprite(GConst.ATLAS_PATH.ICON_BUFF, buffName)
uiMap["tiny_buff_cell.round_text"]:setText(round)
end
return TinyBuffCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 1356c2d5313eee54ebd648608b523117
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,720 @@
local BattleTeamEntity = require "app/userdata/battle/team/battle_team_entity"
local BattleSkillEntity = require "app/userdata/battle/skill/battle_skill_entity"
local BattleBaseData = class("BattleBaseData", BaseData)
local SKILL_CFG = ConfigManager:getConfig("skill")
local BattleConst = GConst.BattleConst
local BATTLE_GRID_ENTITY = require "app/userdata/battle/battle_grid_entity"
local BATTLE_BOARD_SKILL_ENTITY = require "app/userdata/battle/skill/battle_board_skill_entity"
local ATTR_TYPE = GConst.ATTR_TYPE
local DEFAULT_FACTOR = BattleConst.DEFAULT_FACTOR
local TIME_SPEED_LEVEL_0 = 0
local TIME_SPEED_LEVEL_1 = 1
local TIME_SPEED_LEVEL_2 = 2
local TIME_SPEED_LEVEL_3 = 3
local TIME_SPEED_LEVEL_SKILL = 100
local SIDE_ATK = BattleConst.SIDE_ATK
local SIDE_DEF = BattleConst.SIDE_DEF
----------------------------------按需重写的方法-------------------------------
function BattleBaseData:getRowCount()
return BattleConst.PVP_ROW_COUNT
end
---------------------------------end按需重写的方法-------------------------------
function BattleBaseData:init(params)
self:clear()
self.battleLv = 1
self.curBattleExp = 0
self.needBattleExp = self:getLvNeedExp()
self.addLvCount = 0
self.commonSelectSkillCount = 0
self.timeScale = BattleConst.TIME_SCALE.LEVEL_1
self.lockElementMap = {}
self.data.timeSpeed = 1
self.data.lvDirty = false
self.adRefreshSkillCount = 0
self.refreshSkillCount = 0
BattleSkillEntity.sid = 0
self.atkTeam = self:initTeam(SIDE_ATK, params.atkFormation)
self.defTeam = self:initTeam(SIDE_DEF, params.defFormation)
self:initRogueSkills(SIDE_ATK, params.atkFormation)
self:initRogueSkills(SIDE_DEF, params.defFormation)
end
function BattleBaseData:getTimeScale()
return self.timeScale
end
function BattleBaseData:pauseBattle()
self.cacheSpeed = self.data.timeSpeed
self.cacheTimeScale = self.timeScale
self:setTimeSpeed(TIME_SPEED_LEVEL_0)
end
function BattleBaseData:resumeBattle()
if self.cacheSpeed == nil then
return
end
if self.data.timeSpeed ~= TIME_SPEED_LEVEL_0 then
return
end
self:setTimeSpeed(self.cacheSpeed or TIME_SPEED_LEVEL_1, self.cacheTimeScale)
end
function BattleBaseData:resetTimeSpeed()
if self.cacheSpeed then -- 目前处于暂停状态
self.cacheSpeed = TIME_SPEED_LEVEL_1
return
end
if self.data.timeSpeed <= TIME_SPEED_LEVEL_1 then
return
end
self:setTimeSpeed(TIME_SPEED_LEVEL_1)
end
function BattleBaseData:addTimeSpeed()
if self.data.timeSpeed >= TIME_SPEED_LEVEL_3 then
return
end
if self.cacheSpeed then -- 目前处于暂停状态
if self.cacheSpeed < TIME_SPEED_LEVEL_3 then
self.cacheSpeed = self.cacheSpeed + 1
end
return
end
local timeSpeed = self.data.timeSpeed + 1
self:setTimeSpeed(timeSpeed)
end
function BattleBaseData:setSkillTimeSpeed(timeScale)
self:setTimeSpeed(TIME_SPEED_LEVEL_SKILL, timeScale)
end
function BattleBaseData:setTimeSpeed(timeSpeed, timeScale)
if timeSpeed == self.data.timeSpeed then
return
end
if timeSpeed == TIME_SPEED_LEVEL_0 then
self.timeScale = 0
elseif timeSpeed == TIME_SPEED_LEVEL_1 then
self.timeScale = BattleConst.TIME_SCALE.LEVEL_1
elseif timeSpeed == TIME_SPEED_LEVEL_2 then
self.timeScale = BattleConst.TIME_SCALE.LEVEL_2
elseif timeSpeed == TIME_SPEED_LEVEL_3 then
self.timeScale = BattleConst.TIME_SCALE.LEVEL_3
else
self.timeScale = timeScale or BattleConst.TIME_SCALE.LEVEL_1
end
self.data.timeSpeed = timeSpeed
end
function BattleBaseData:initRogueSkills(side, formation)
if not self.skillPool then
self.skillPool = {}
self.skillMap = {}
end
if not self.skillPool[side] then
self.skillPool[side] = {}
end
if not self.skillMap[side] then
self.skillMap[side] = {}
end
if not formation then
return
end
local skillmap = {}
for matchType, heroEntity in pairs(formation) do
local skillId = heroEntity:getBaseSkill()
local cfg = SKILL_CFG[skillId]
self.skillMap[side][cfg.position] = BATTLE_BOARD_SKILL_ENTITY:create(skillId)
self.skillMap[side][cfg.position]:addUpSkills(heroEntity:getRogueSkillList())
self.skillMap[side][cfg.position]:setUnlockId(heroEntity:getUnlockRogueId())
for _, id in ipairs(heroEntity:getActiveRogueSkills()) do
if not skillmap[id] then
if not self.skillPool[side][cfg.position] then
self.skillPool[side][cfg.position] = {}
end
table.insert(self.skillPool[side][cfg.position], id)
skillmap[id] = true
end
end
end
end
function BattleBaseData:refreshBoard(board, blockIcon)
local r = 1
local c = 1
for i, info in ipairs(board) do
if c > BattleConst.COLUMN_COUNT then
c = c - BattleConst.COLUMN_COUNT
r = r + 1
end
local posId = ModuleManager.BattleManager:getPosId(r, c)
local data = {
posId = posId,
gridType = info[1] or BattleConst.GRID_TYPE.EMPTY,
elementType = info[2] or BattleConst.ELEMENT_TYPE.RED
}
if not self.gridEntities then
self.gridEntities = {}
end
if self.gridEntities[data.posId] then
self.gridEntities[data.posId]:clear()
self.gridEntities[data.posId]:setGridType(data.gridType)
self.gridEntities[data.posId]:setElementType(data.elementType)
else
self.gridEntities[data.posId] = BATTLE_GRID_ENTITY:create(data)
end
self.gridEntities[data.posId]:determineIdleStatus()
self.gridEntities[data.posId]:setObstacleIcon(blockIcon)
c = c + 1
end
end
function BattleBaseData:getNewGridEntity(posId, gridType, elementType)
local data = {
posId = posId or 0,
gridType = gridType or BattleConst.GRID_TYPE.EMPTY,
elementType = elementType or BattleConst.ELEMENT_TYPE.RED
}
return BATTLE_GRID_ENTITY:create(data)
end
function BattleBaseData:clear()
self:clearGridSequence()
self:clearCacheBoardSkill()
self.gridEntities = {}
self.skillMap = {}
self.selectSkillMap = {}
end
function BattleBaseData:getElementTypeMap()
local elementTypeMap = {}
if self.gridEntities then
for posId, entity in pairs(self.gridEntities) do
if entity:canLink() then
local elementType = entity:getElementType()
elementTypeMap[elementType] = (elementTypeMap[elementType] or 0) + 1
end
end
end
return elementTypeMap
end
function BattleBaseData:getGridSequence()
return self.gridSequence
end
function BattleBaseData:alreadyInsertSequence(posId)
return self.gridSequenceMap[posId] == true
end
function BattleBaseData:getIsVirtual()
return self.isVirtual
end
function BattleBaseData:getSequenceHadSkill()
for _, info in ipairs(self:getGridSequence()) do
local entity = self.gridEntities[info.posId]
if entity and entity:getSkillId() then
return entity:getSkillId(), entity:getPosId()
end
end
return
end
function BattleBaseData:insertGridSequence(posId, snapshot, isVirtual)
if self:alreadyInsertSequence(posId) then
return false
end
self.gridSequenceMap[posId] = true
self.isVirtual = isVirtual
table.insert(self.gridSequence, {posId = posId, snapshot = snapshot})
return true
end
function BattleBaseData:removeGridSequence(posId)
if not self:alreadyInsertSequence(posId) then
return
end
local count = #self.gridSequence
local lastPosId = self.gridSequence[count].posId
local snapshot = self.gridSequence[count].snapshot
if lastPosId ~= posId then
return
end
table.remove(self.gridSequence, count)
self.gridSequenceMap[lastPosId] = false
return snapshot
end
function BattleBaseData:getFirstSequenceSnapshot()
if not self.gridSequence[1] then
return
end
local snapshot = self.gridSequence[1].snapshot
return snapshot
end
function BattleBaseData:cacheSkillInfluenceGrids(grids)
if not self.skillInfluenceGrids then
self.skillInfluenceGrids = {}
end
for posId, info in pairs(grids) do
self.skillInfluenceGrids[posId] = info
end
end
function BattleBaseData:getSkillInfluenceGrids()
return self.skillInfluenceGrids or {}
end
function BattleBaseData:clearSkillInfluenceGrids()
local grids = self:getSkillInfluenceGrids()
self.skillInfluenceGrids = {} -- 技能影响的格子
return grids
end
function BattleBaseData:clearGridSequence()
self.gridSequence = {} -- 格子队列
self.gridSequenceMap = {} -- 格子队列对应的map方面查找
self.isVirtual = nil
self:clearSkillInfluenceGrids()
end
function BattleBaseData:getGridEnties()
return self.gridEntities or {}
end
function BattleBaseData:getGridEntity(posId)
return self.gridEntities[posId]
end
function BattleBaseData:exchangeGridEntities(posId1, posId2)
local e1 = self.gridEntities[posId1]
local e2 = self.gridEntities[posId2]
e1:setPosId(posId2)
e2:setPosId(posId1)
e2:setIsIdle(false)
self.gridEntities[posId1] = e2
self.gridEntities[posId2] = e1
end
function BattleBaseData:setGridEntitiesPosId(changeInfo)
local map = {}
for posId, targetPosId in pairs(changeInfo) do
local entity = self.gridEntities[posId]
entity:setPosId(targetPosId)
map[targetPosId] = entity
end
for posId, entity in pairs(map) do
self.gridEntities[posId] = entity
end
end
function BattleBaseData:setGridInfo(posId, gridInfo)
local entity = self.gridEntities[posId]
if not entity then
return
end
if gridInfo.gridType then
entity:setGridType(gridInfo.gridType)
end
if gridInfo.elementType then
entity:setElementType(gridInfo.elementType)
end
entity:setSkilId() -- 清除skillId
entity:determineIdleStatus()
end
function BattleBaseData:setInfoBySnapshop(posId, snapInfo)
local entity = self.gridEntities[posId]
if not entity then
return
end
entity:setInfoBySnapshop(snapInfo)
end
function BattleBaseData:setGridType(posId, gridType, noDirty)
local entity = self.gridEntities[posId]
if not entity then
return
end
entity:setGridType(gridType, noDirty)
entity:determineIdleStatus()
end
function BattleBaseData:setGridDirty(posId)
local entity = self.gridEntities[posId]
if not entity then
return
end
entity:setDirty()
end
function BattleBaseData:lockAllSkillGrid(lock)
if not self.gridEntities then
return
end
for posId, entity in pairs(self.gridEntities) do
if entity:getSkillId() then
local gridType = GConst.BattleConst.GRID_TYPE.EMPTY
if lock then
gridType = GConst.BattleConst.GRID_TYPE.LOCK
end
self:setGridType(posId, gridType)
end
end
end
function BattleBaseData:getSkillEntities(side)
side = side or SIDE_ATK
if self.skillMap then
return self.skillMap[side] or {}
end
end
function BattleBaseData:getSkillEntityByElement(elementType, side)
local skillMap = self:getSkillEntities(side)
if not skillMap then
return
end
return skillMap[elementType]
end
function BattleBaseData:getSkillEntityBySkillId(skillId, side)
local skillMap = self:getSkillEntities(side)
if not skillMap or not skillId then
return
end
local cfg = SKILL_CFG[skillId]
if not cfg then
return
end
return skillMap[cfg.position]
end
function BattleBaseData:unlockSkillEntity(elementType, side)
local skillMap = self:getSkillEntities(side)
if skillMap and skillMap[elementType] then
skillMap[elementType]:setUnlock()
end
end
function BattleBaseData:isUnlockedSkillElementType(elementType, side)
local skillMap = self:getSkillEntities(side)
if not skillMap or not skillMap[elementType] then
return false
end
return skillMap[elementType]:getUnlocked()
end
function BattleBaseData:addSkillEnergy(elementMap, side)
local skillMap = self:getSkillEntities(side)
if not skillMap then
return
end
for elementType, entity in pairs(skillMap) do
if entity:getUnlocked() then
entity:addEnergy(elementMap[elementType] or 0)
end
end
end
function BattleBaseData:addSkillCount(skillId, value, side)
side = side or SIDE_ATK
if not self.selectSkillMap then
self.selectSkillMap = {}
end
if not self.selectSkillMap[side] then
self.selectSkillMap[side] = {}
end
if not self.selectSkillMap[side][skillId] then
self.selectSkillMap[side][skillId] = {
count = 0,
value = 0
}
end
self.selectSkillMap[side][skillId].count = self.selectSkillMap[side][skillId].count + 1
if value then
self.selectSkillMap[side][skillId].value = (self.selectSkillMap[side][skillId].value) + value
end
end
function BattleBaseData:getSkillCount(skillId, side)
side = side or SIDE_ATK
if self.selectSkillMap[side] and self.selectSkillMap[side][skillId] then
return self.selectSkillMap[side][skillId].count
end
return 0
end
function BattleBaseData:getSelectSkillMap(side)
side = side or SIDE_ATK
return self.selectSkillMap and self.selectSkillMap[side] or {}
end
function BattleBaseData:getSkillPool(side)
side = side or SIDE_ATK
return self.skillPool and self.skillPool[side] or {}
end
function BattleBaseData:changeSkillId(elementType, newId, side)
if not newId then
return
end
local entity = self:getSkillEntityByElement(elementType, side)
if entity then
entity:refreshSkillId(newId)
end
end
function BattleBaseData:cacheLockElement(elementType, status)
self.lockElementMap[elementType] = status
end
function BattleBaseData:getCacheLockedElement(elementType)
return self.lockElementMap[elementType]
end
function BattleBaseData:cacheBoardSkill()
self.cacheSkillList = {}
self.cacheSkillCount = 0
local list
local count = 0
for posId, entity in pairs(self:getGridEnties()) do
if entity:getSkillId() then
if not list then
list = {}
end
table.insert(list, {skillId = entity:getSkillId(), posId = posId})
count = count + 1
end
end
if list then
if count > BattleConst.MAX_CACHE_SKILL_COUNT then
count = BattleConst.MAX_CACHE_SKILL_COUNT
end
for i = 1, count do
if not list[1] then
break
end
local info = table.remove(list, math.random(1, #list))
table.insert(self.cacheSkillList, info)
self.cacheSkillCount = self.cacheSkillCount + 1
end
end
end
function BattleBaseData:getCacheBoardSkill()
if not self.cacheSkillList then
return self.cacheSkillList, 0
end
return self.cacheSkillList, self.cacheSkillCount
end
function BattleBaseData:clearCacheBoardSkill()
self.cacheSkillList = {}
self.cacheSkillCount = 0
end
function BattleBaseData:getBattleLv()
return self.battleLv
end
function BattleBaseData:getBattleExp()
return self.curBattleExp
end
function BattleBaseData:getBattleNeedExp()
return self.needBattleExp
end
function BattleBaseData:getLvNeedExp(lv)
lv = lv or self.battleLv
local cfg = ConfigManager:getConfig("battle_exp")
if not cfg[lv] then
return cfg[ConfigManager:getConfigNum("battle_exp")].exp
end
return cfg[lv].exp
end
function BattleBaseData:addExp(exp)
self.curBattleExp = self.curBattleExp + exp
while self.curBattleExp >= self.needBattleExp do
self.curBattleExp = self.curBattleExp - self.needBattleExp
self.addLvCount = self.addLvCount + 1
self.battleLv = self.battleLv + 1
self.needBattleExp = self:getLvNeedExp()
end
self.data.lvDirty = not self.data.lvDirty
end
function BattleBaseData:useAddlvCount()
if self.addLvCount <= 0 then
self.addLvCount = 0
return false
end
self.addLvCount = self.addLvCount - 1
return true
end
function BattleBaseData:addCommonSelectSkillCount(count)
self.commonSelectSkillCount = self.commonSelectSkillCount + (count or 1)
end
function BattleBaseData:useCommonSelectSkillCount()
if self.commonSelectSkillCount <= 0 then
self.commonSelectSkillCount = 0
return false
end
self.commonSelectSkillCount = self.commonSelectSkillCount - 1
return true
end
function BattleBaseData:addRefreshSkillCount(isAd)
if isAd then
self.adRefreshSkillCount = self.adRefreshSkillCount + 1
end
self.refreshSkillCount = self.refreshSkillCount + 1
end
function BattleBaseData:getRefreshSkillCount()
return self.refreshSkillCount
end
function BattleBaseData:getADRefreshSkillCount()
return self.adRefreshSkillCount
end
function BattleBaseData:initTeam(side, formation)
local data = nil
data = self:initHeroData(formation)
local team = BattleTeamEntity:create()
team:init(side, data)
return team
end
function BattleBaseData:getAtkTeam()
return self.atkTeam
end
function BattleBaseData:getDefTeam()
return self.defTeam
end
function BattleBaseData:initHeroData(formation)
local units = {}
if formation then
local skillCfg = ConfigManager:getConfig("skill")
for matchType, heroEntity in pairs(formation) do
local heroAttr = heroEntity:getAllAttr()
local skillId = heroEntity:getBaseSkill()
local hp = heroAttr[ATTR_TYPE.hp] // DEFAULT_FACTOR
local unitData = {
id = heroEntity:getCfgId(),
modelId = heroEntity:getModelId(),
matchType = matchType,
normalSkills = heroEntity:getHurtSkill(),
assistingSkill = heroEntity:getAssistingSkill(),
body = 2, -- 英雄默认是中体型
attr = {
hp = hp,
max_hp = hp,
atk = 0,
atk_red = heroAttr[ATTR_TYPE.atk_red] // DEFAULT_FACTOR,
atk_yellow = heroAttr[ATTR_TYPE.atk_yellow] // DEFAULT_FACTOR,
atk_green = heroAttr[ATTR_TYPE.atk_green] // DEFAULT_FACTOR,
atk_blue = heroAttr[ATTR_TYPE.atk_blue] // DEFAULT_FACTOR,
atk_purple = heroAttr[ATTR_TYPE.atk_purple] // DEFAULT_FACTOR,
}
}
local skillInfo = skillCfg[skillId]
if skillInfo then
if skillInfo.effect_type == 1 then -- 主动
unitData.activeSkills = {skillId}
elseif skillInfo.effect_type == 2 then -- 被动
unitData.passiveSkills = {skillId}
end
end
table.insert(units, unitData)
end
end
local data = {
units = units
}
return data
end
function BattleBaseData:addMonster(monsterId, newTeam, battleController)
local monsterInfo = ConfigManager:getConfig("monster")[monsterId]
local hp = monsterInfo.hp // DEFAULT_FACTOR
local atk = monsterInfo.atk // DEFAULT_FACTOR
if battleController then
hp = hp * (DEFAULT_FACTOR + battleController:getMonsterHpAddition()) // DEFAULT_FACTOR
atk = atk * (DEFAULT_FACTOR + battleController:getMonsterAtkAddition()) // DEFAULT_FACTOR
end
local unitData = {
id = monsterId,
modelId = monsterInfo.model_id,
matchType = 0,
normalSkills = monsterInfo.hurt_skill,
normalSkillCount = monsterInfo.atk_times or 0,
activeSkills = monsterInfo.skill,
passiveSkills = monsterInfo.passive_skill,
assistingSkill = nil,
isBoss = monsterInfo.is_boss,
exp = monsterInfo.monster_exp or 0,
body = monsterInfo.body,
hpSkinHp = monsterInfo.monster_hp,
hpSkinSkin = monsterInfo.monster_hp_skin,
hpExp = monsterInfo.monster_hp_exp,
attr = {
hp = hp,
max_hp = hp,
atk = atk,
atk_red = 0,
atk_yellow = 0,
atk_green = 0,
atk_blue = 0,
atk_purple = 0,
}
}
if newTeam then
self.defTeam:init(BattleConst.SIDE_DEF)
end
return self.defTeam:addUnit(unitData)
end
function BattleBaseData:getNormalAttackName(index)
if self.normalAttackName == nil then
self.normalAttackName = {}
end
local name = self.normalAttackName[index]
if name == nil then
name = string.format("attack%02d", index)
self.normalAttackName[index] = name
end
return name
end
return BattleBaseData

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 837e21ae713803145940e1f74b06f5fd
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -1,694 +1,10 @@
local BattleTeamEntity = require "app/userdata/battle/team/battle_team_entity"
local BattleSkillEntity = require "app/userdata/battle/skill/battle_skill_entity"
local BattleBaseData = require "app/userdata/battle/battle_base_data"
local BattleData = class("BattleData", BattleBaseData)
local BattleData = class("BattleData", BaseData)
local SKILL_CFG = ConfigManager:getConfig("skill")
local BattleConst = GConst.BattleConst
local BATTLE_GRID_ENTITY = require "app/userdata/battle/battle_grid_entity"
local BATTLE_BOARD_SKILL_ENTITY = require "app/userdata/battle/skill/battle_board_skill_entity"
local ATTR_TYPE = GConst.ATTR_TYPE
local DEFAULT_FACTOR = BattleConst.DEFAULT_FACTOR
local TIME_SPEED_LEVEL_0 = 0
local TIME_SPEED_LEVEL_1 = 1
local TIME_SPEED_LEVEL_2 = 2
local TIME_SPEED_LEVEL_3 = 3
local TIME_SPEED_LEVEL_SKILL = 100
function BattleData:init()
self:clear()
self.battleLv = 1
self.curBattleExp = 0
self.needBattleExp = self:getLvNeedExp()
self.addLvCount = 0
self.commonSelectSkillCount = 0
self.timeScale = BattleConst.TIME_SCALE.LEVEL_1
self.lockElementMap = {}
self.data.timeSpeed = 1
self.data.lvDirty = false
self.adRefreshSkillCount = 0
self.refreshSkillCount = 0
BattleSkillEntity.sid = 0
self.atkTeam = self:initTeam(BattleConst.SIDE_ATK)
self.defTeam = self:initTeam(BattleConst.SIDE_DEF)
self:initRogueSkills()
end
function BattleData:getTimeScale()
return self.timeScale
end
function BattleData:pauseBattle()
self.cacheSpeed = self.data.timeSpeed
self.cacheTimeScale = self.timeScale
self:setTimeSpeed(TIME_SPEED_LEVEL_0)
end
function BattleData:resumeBattle()
if self.cacheSpeed == nil then
return
end
if self.data.timeSpeed ~= TIME_SPEED_LEVEL_0 then
return
end
self:setTimeSpeed(self.cacheSpeed or TIME_SPEED_LEVEL_1, self.cacheTimeScale)
end
function BattleData:resetTimeSpeed()
if self.cacheSpeed then -- 目前处于暂停状态
self.cacheSpeed = TIME_SPEED_LEVEL_1
return
end
if self.data.timeSpeed <= TIME_SPEED_LEVEL_1 then
return
end
self:setTimeSpeed(TIME_SPEED_LEVEL_1)
end
function BattleData:addTimeSpeed()
if self.data.timeSpeed >= TIME_SPEED_LEVEL_3 then
return
end
if self.cacheSpeed then -- 目前处于暂停状态
if self.cacheSpeed < TIME_SPEED_LEVEL_3 then
self.cacheSpeed = self.cacheSpeed + 1
end
return
end
local timeSpeed = self.data.timeSpeed + 1
self:setTimeSpeed(timeSpeed)
end
function BattleData:setSkillTimeSpeed(timeScale)
self:setTimeSpeed(TIME_SPEED_LEVEL_SKILL, timeScale)
end
function BattleData:setTimeSpeed(timeSpeed, timeScale)
if timeSpeed == self.data.timeSpeed then
return
end
if timeSpeed == TIME_SPEED_LEVEL_0 then
self.timeScale = 0
elseif timeSpeed == TIME_SPEED_LEVEL_1 then
self.timeScale = BattleConst.TIME_SCALE.LEVEL_1
elseif timeSpeed == TIME_SPEED_LEVEL_2 then
self.timeScale = BattleConst.TIME_SCALE.LEVEL_2
elseif timeSpeed == TIME_SPEED_LEVEL_3 then
self.timeScale = BattleConst.TIME_SCALE.LEVEL_3
else
self.timeScale = timeScale or BattleConst.TIME_SCALE.LEVEL_1
end
self.data.timeSpeed = timeSpeed
end
function BattleData:initRogueSkills()
self.skillPool = {}
self.skillMap = {}
local skillmap = {}
local formation = DataManager.FormationData:getStageFormation()
for matchType, heroId in pairs(formation) do
if heroId > 0 then
local heroEntity = DataManager.HeroData:getHeroById(heroId)
if heroEntity then
local skillId = heroEntity:getBaseSkill()
local cfg = SKILL_CFG[skillId]
self.skillMap[cfg.position] = BATTLE_BOARD_SKILL_ENTITY:create(skillId)
self.skillMap[cfg.position]:addUpSkills(heroEntity:getRogueSkillList())
self.skillMap[cfg.position]:setUnlockId(heroEntity:getUnlockRogueId())
for _, id in ipairs(heroEntity:getActiveTogueSkills()) do
if not skillmap[id] then
if not self.skillPool[cfg.position] then
self.skillPool[cfg.position] = {}
end
table.insert(self.skillPool[cfg.position], id)
skillmap[id] = true
end
end
end
end
end
end
function BattleData:refreshBoard(board, blockIcon)
for i, info in ipairs(board) do
local r = 1
local c = 1
local zheng = i // BattleConst.ROW_COUNT
local yu = i % BattleConst.ROW_COUNT
if yu > 0 then
r = zheng + 1
c = yu
else
r = zheng
c = BattleConst.ROW_COUNT
end
local posId = ModuleManager.BattleManager:getPosId(r, c)
local data = {
posId = posId,
gridType = info[1] or BattleConst.GRID_TYPE.EMPTY,
elementType = info[2] or BattleConst.ELEMENT_TYPE.RED
}
if self.gridEntities[data.posId] then
self.gridEntities[data.posId]:clear()
self.gridEntities[data.posId]:setGridType(data.gridType)
self.gridEntities[data.posId]:setElementType(data.elementType)
else
self.gridEntities[data.posId] = BATTLE_GRID_ENTITY:create(data)
end
self.gridEntities[data.posId]:determineIdleStatus()
self.gridEntities[data.posId]:setObstacleIcon(blockIcon)
end
end
function BattleData:getNewGridEntity(posId, gridType, elementType)
local data = {
posId = posId or 0,
gridType = gridType or BattleConst.GRID_TYPE.EMPTY,
elementType = elementType or BattleConst.ELEMENT_TYPE.RED
}
return BATTLE_GRID_ENTITY:create(data)
end
function BattleData:clear()
self:clearGridSequence()
self:clearCacheBoardSkill()
self.gridEntities = {}
self.skillMap = {}
self.selectSkillMap = {}
end
function BattleData:getElementTypeMap()
local elementTypeMap = {}
if self.gridEntities then
for posId, entity in pairs(self.gridEntities) do
if entity:canLink() then
local elementType = entity:getElementType()
elementTypeMap[elementType] = (elementTypeMap[elementType] or 0) + 1
end
end
end
return elementTypeMap
end
function BattleData:getGridSequence()
return self.gridSequence
end
function BattleData:alreadyInsertSequence(posId)
return self.gridSequenceMap[posId] == true
end
function BattleData:getIsVirtual()
return self.isVirtual
end
function BattleData:getSequenceHadSkill()
for _, info in ipairs(self:getGridSequence()) do
local entity = self.gridEntities[info.posId]
if entity and entity:getSkillId() then
return entity:getSkillId(), entity:getPosId()
end
end
return
end
function BattleData:insertGridSequence(posId, snapshot, isVirtual)
if self:alreadyInsertSequence(posId) then
return false
end
self.gridSequenceMap[posId] = true
self.isVirtual = isVirtual
table.insert(self.gridSequence, {posId = posId, snapshot = snapshot})
return true
end
function BattleData:removeGridSequence(posId)
if not self:alreadyInsertSequence(posId) then
return
end
local count = #self.gridSequence
local lastPosId = self.gridSequence[count].posId
local snapshot = self.gridSequence[count].snapshot
if lastPosId ~= posId then
return
end
table.remove(self.gridSequence, count)
self.gridSequenceMap[lastPosId] = false
return snapshot
end
function BattleData:getFirstSequenceSnapshot(posId)
if not self.gridSequence[1] then
return
end
local snapshot = self.gridSequence[1].snapshot
return snapshot
end
function BattleData:cacheSkillInfluenceGrids(grids)
if not self.skillInfluenceGrids then
self.skillInfluenceGrids = {}
end
for posId, info in pairs(grids) do
self.skillInfluenceGrids[posId] = info
end
end
function BattleData:getSkillInfluenceGrids()
return self.skillInfluenceGrids or {}
end
function BattleData:clearSkillInfluenceGrids()
local grids = self:getSkillInfluenceGrids()
self.skillInfluenceGrids = {} -- 技能影响的格子
return grids
end
function BattleData:clearGridSequence()
self.gridSequence = {} -- 格子队列
self.gridSequenceMap = {} -- 格子队列对应的map方面查找
self.isVirtual = nil
self:clearSkillInfluenceGrids()
end
function BattleData:getGridEnties()
return self.gridEntities or {}
end
function BattleData:getGridEntity(posId)
return self.gridEntities[posId]
end
function BattleData:exchangeGridEntities(posId1, posId2)
local e1 = self.gridEntities[posId1]
local e2 = self.gridEntities[posId2]
e1:setPosId(posId2)
e2:setPosId(posId1)
e2:setIsIdle(false)
self.gridEntities[posId1] = e2
self.gridEntities[posId2] = e1
end
function BattleData:setGridEntitiesPosId(changeInfo)
local map = {}
for posId, targetPosId in pairs(changeInfo) do
local entity = self.gridEntities[posId]
entity:setPosId(targetPosId)
map[targetPosId] = entity
end
for posId, entity in pairs(map) do
self.gridEntities[posId] = entity
end
end
function BattleData:setGridInfo(posId, gridInfo)
local entity = self.gridEntities[posId]
if not entity then
return
end
if gridInfo.gridType then
entity:setGridType(gridInfo.gridType)
end
if gridInfo.elementType then
entity:setElementType(gridInfo.elementType)
end
entity:setSkilId() -- 清除skillId
entity:determineIdleStatus()
end
function BattleData:setInfoBySnapshop(posId, snapInfo)
local entity = self.gridEntities[posId]
if not entity then
return
end
entity:setInfoBySnapshop(snapInfo)
end
function BattleData:setGridType(posId, gridType, noDirty)
local entity = self.gridEntities[posId]
if not entity then
return
end
entity:setGridType(gridType, noDirty)
entity:determineIdleStatus()
end
function BattleData:setGridDirty(posId)
local entity = self.gridEntities[posId]
if not entity then
return
end
entity:setDirty()
end
function BattleData:lockAllSkillGrid(lock)
if not self.gridEntities then
return
end
for posId, entity in pairs(self.gridEntities) do
if entity:getSkillId() then
local gridType = GConst.BattleConst.GRID_TYPE.EMPTY
if lock then
gridType = GConst.BattleConst.GRID_TYPE.LOCK
end
self:setGridType(posId, gridType)
end
end
end
function BattleData:getSkillEntities()
return self.skillMap
end
function BattleData:getSkillEntityByElement(elementType)
if not self.skillMap then
return
end
return self.skillMap[elementType]
end
function BattleData:getSkillEntityBySkillId(skillId)
if not self.skillMap or not skillId then
return
end
local cfg = SKILL_CFG[skillId]
if not cfg then
return
end
return self.skillMap[cfg.position]
end
function BattleData:unlockSkillEntity(elementType)
if self.skillMap[elementType] then
self.skillMap[elementType]:setUnlock()
end
end
function BattleData:isUnlockedSkillElementType(elementType)
if not self.skillMap[elementType] then
return false
end
return self.skillMap[elementType]:getUnlocked()
end
function BattleData:addSkillEnergy(elementMap)
if not self.skillMap then
return
end
for elementType, entity in pairs(self.skillMap) do
if entity:getUnlocked() then
entity:addEnergy(elementMap[elementType] or 0)
end
end
end
function BattleData:addSkillCount(skillId, value)
if not self.selectSkillMap[skillId] then
self.selectSkillMap[skillId] = {
count = 0,
value = 0
}
end
self.selectSkillMap[skillId].count = self.selectSkillMap[skillId].count + 1
if value then
self.selectSkillMap[skillId].value = (self.selectSkillMap[skillId].value) + value
end
end
function BattleData:getSkillCount(skillId)
if self.selectSkillMap[skillId] then
return self.selectSkillMap[skillId].count
end
return 0
end
function BattleData:getSelectSkillMap()
return self.selectSkillMap
end
function BattleData:getSkillPool()
return self.skillPool
end
function BattleData:changeSkillId(elementType, newId)
if not newId then
return
end
local entity = self:getSkillEntityByElement(elementType)
if entity then
entity:refreshSkillId(newId)
end
end
function BattleData:cacheLockElement(elementType, status)
self.lockElementMap[elementType] = status
end
function BattleData:getCacheLockedElement(elementType)
return self.lockElementMap[elementType]
end
function BattleData:cacheBoardSkill()
self.cacheSkillList = {}
self.cacheSkillCount = 0
local list
local count = 0
for posId, entity in pairs(self:getGridEnties()) do
if entity:getSkillId() then
if not list then
list = {}
end
table.insert(list, {skillId = entity:getSkillId(), posId = posId})
count = count + 1
end
end
if list then
if count > BattleConst.MAX_CACHE_SKILL_COUNT then
count = BattleConst.MAX_CACHE_SKILL_COUNT
end
for i = 1, count do
if not list[1] then
break
end
local info = table.remove(list, math.random(1, #list))
table.insert(self.cacheSkillList, info)
self.cacheSkillCount = self.cacheSkillCount + 1
end
end
end
function BattleData:getCacheBoardSkill()
if not self.cacheSkillList then
return self.cacheSkillList, 0
end
return self.cacheSkillList, self.cacheSkillCount
end
function BattleData:clearCacheBoardSkill()
self.cacheSkillList = {}
self.cacheSkillCount = 0
end
function BattleData:getBattleLv()
return self.battleLv
end
function BattleData:getBattleExp()
return self.curBattleExp
end
function BattleData:getBattleNeedExp()
return self.needBattleExp
end
function BattleData:getLvNeedExp(lv)
lv = lv or self.battleLv
local cfg = ConfigManager:getConfig("battle_exp")
if not cfg[lv] then
return cfg[ConfigManager:getConfigNum("battle_exp")].exp
end
return cfg[lv].exp
end
function BattleData:addExp(exp)
self.curBattleExp = self.curBattleExp + exp
while self.curBattleExp >= self.needBattleExp do
self.curBattleExp = self.curBattleExp - self.needBattleExp
self.addLvCount = self.addLvCount + 1
self.battleLv = self.battleLv + 1
self.needBattleExp = self:getLvNeedExp()
end
self.data.lvDirty = not self.data.lvDirty
end
function BattleData:useAddlvCount()
if self.addLvCount <= 0 then
self.addLvCount = 0
return false
end
self.addLvCount = self.addLvCount - 1
return true
end
function BattleData:addCommonSelectSkillCount(count)
self.commonSelectSkillCount = self.commonSelectSkillCount + (count or 1)
end
function BattleData:useCommonSelectSkillCount()
if self.commonSelectSkillCount <= 0 then
self.commonSelectSkillCount = 0
return false
end
self.commonSelectSkillCount = self.commonSelectSkillCount - 1
return true
end
function BattleData:addRefreshSkillCount(isAd)
if isAd then
self.adRefreshSkillCount = self.adRefreshSkillCount + 1
end
self.refreshSkillCount = self.refreshSkillCount + 1
end
function BattleData:getRefreshSkillCount()
return self.refreshSkillCount
end
function BattleData:getADRefreshSkillCount()
return self.adRefreshSkillCount
end
function BattleData:initTeam(side)
local data = nil
if side == BattleConst.SIDE_ATK then
data = self:initHeroData()
end
local team = BattleTeamEntity:create()
team:init(side, data)
return team
end
function BattleData:getAtkTeam()
return self.atkTeam
end
function BattleData:getDefTeam()
return self.defTeam
end
function BattleData:initHeroData()
local units = {}
local skillCfg = ConfigManager:getConfig("skill")
local formation = DataManager.FormationData:getStageFormation()
for matchType, heroId in pairs(formation) do
if heroId > 0 then
local heroEntity = DataManager.HeroData:getHeroById(heroId)
if heroEntity then
local heroAttr = heroEntity:getAllAttr()
local skillId = heroEntity:getBaseSkill()
local hp = heroAttr[ATTR_TYPE.hp] // DEFAULT_FACTOR
local unitData = {
id = heroId,
modelId = heroEntity:getModelId(),
matchType = matchType,
normalSkills = heroEntity:getHurtSkill(),
assistingSkill = heroEntity:getAssistingSkill(),
body = 2, -- 英雄默认是中体型
attr = {
hp = hp,
max_hp = hp,
atk = 0,
atk_red = heroAttr[ATTR_TYPE.atk_red] // DEFAULT_FACTOR,
atk_yellow = heroAttr[ATTR_TYPE.atk_yellow] // DEFAULT_FACTOR,
atk_green = heroAttr[ATTR_TYPE.atk_green] // DEFAULT_FACTOR,
atk_blue = heroAttr[ATTR_TYPE.atk_blue] // DEFAULT_FACTOR,
atk_purple = heroAttr[ATTR_TYPE.atk_purple] // DEFAULT_FACTOR,
}
}
local skillInfo = skillCfg[skillId]
if skillInfo then
if skillInfo.effect_type == 1 then -- 主动
unitData.activeSkills = {skillId}
elseif skillInfo.effect_type == 2 then -- 被动
unitData.passiveSkills = {skillId}
end
end
table.insert(units, unitData)
end
end
end
local data = {
units = units
}
return data
end
function BattleData:addMonster(monsterId, newTeam, battleController)
local monsterInfo = ConfigManager:getConfig("monster")[monsterId]
local hp = monsterInfo.hp // DEFAULT_FACTOR
local atk = monsterInfo.atk // DEFAULT_FACTOR
if battleController then
hp = hp * (DEFAULT_FACTOR + battleController:getMonsterHpAddition()) // DEFAULT_FACTOR
atk = atk * (DEFAULT_FACTOR + battleController:getMonsterAtkAddition()) // DEFAULT_FACTOR
end
local unitData = {
id = monsterId,
modelId = monsterInfo.model_id,
matchType = 0,
normalSkills = monsterInfo.hurt_skill,
normalSkillCount = monsterInfo.atk_times or 0,
activeSkills = monsterInfo.skill,
passiveSkills = monsterInfo.passive_skill,
assistingSkill = nil,
isBoss = monsterInfo.is_boss,
exp = monsterInfo.monster_exp or 0,
body = monsterInfo.body,
hpSkinHp = monsterInfo.monster_hp,
hpSkinSkin = monsterInfo.monster_hp_skin,
hpExp = monsterInfo.monster_hp_exp,
attr = {
hp = hp,
max_hp = hp,
atk = atk,
atk_red = 0,
atk_yellow = 0,
atk_green = 0,
atk_blue = 0,
atk_purple = 0,
}
}
if newTeam then
self.defTeam:init(BattleConst.SIDE_DEF)
end
return self.defTeam:addUnit(unitData)
end
function BattleData:getNormalAttackName(index)
if self.normalAttackName == nil then
self.normalAttackName = {}
end
local name = self.normalAttackName[index]
if name == nil then
name = string.format("attack%02d", index)
self.normalAttackName[index] = name
end
return name
function BattleBaseData:getRowCount()
return BattleConst.PVP_ROW_COUNT
end
return BattleData

View File

@ -0,0 +1,9 @@
local BattleBaseData = require "app/userdata/battle/battle_base_data"
local BattlePVPData = class("BattlePVPData", BattleBaseData)
local BattleConst = GConst.BattleConst
function BattlePVPData:getRowCount()
return BattleConst.PVP_ROW_COUNT
end
return BattlePVPData

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: b35afc8876bdb8043912672742db5042
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -264,7 +264,7 @@ function HeroEntity:getRogueSkillList()
return self.rogueSkillList
end
function HeroEntity:getActiveTogueSkills()
function HeroEntity:getActiveRogueSkills()
local list = {}
for i = 1, self:getActiveRogueCount() do
local id = self:getRogueSkillList()[i]