8c4bd41668
EN: 1.13.0.124 CN: 1.13.0.124 JP: 1.13.0.128 KR: 1.13.0.130
210 lines
6.4 KiB
Lua
210 lines
6.4 KiB
Lua
local SoldierBattle = class("SoldierBattle")
|
|
local AdventureModuleHelper = CS.AdventureModuleHelper
|
|
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
|
local mapEventConfig = {
|
|
LoadLevelRefresh = "OnEvent_LoadLevelRefresh",
|
|
AdventureModuleEnter = "OnEvent_AdventureModuleEnter",
|
|
BattlePause = "OnEvent_Pause",
|
|
ADVENTURE_LEVEL_UNLOAD_COMPLETE = "OnEvent_UnloadComplete",
|
|
InputEnable = "OnEvent_InputEnable",
|
|
Soldier_Result = "OnEvent_Result",
|
|
SettleSoldierBattle = "OnEvent_SettleSoldierBattle",
|
|
RestartSoldier = "OnEvent_RestartSoldier",
|
|
LeaveSoldier = "OnEvent_LeaveSoldier",
|
|
SoldierLevel_Gameplay_Time = "OnEvent_GamePlayTime",
|
|
EnemyBattle_TotalHP = "OnEvent_EnemyHp",
|
|
SoldierLevel_AddItem = "OnEvent_AddItem",
|
|
Soldier_CastSkill = "OnEvent_CastSkill",
|
|
SoldierActor_Spawn = "OnEvent_ActorSpawn",
|
|
Soldier_DamageValue = "OnEvent_Damage"
|
|
}
|
|
function SoldierBattle:EnterLevel()
|
|
self.nTotalHp = 0
|
|
self.tbItems = {}
|
|
self.nBattleTime = 0
|
|
self.bRestart = false
|
|
for _, v in ipairs(self.tbChess) do
|
|
v.nUId = 0
|
|
v.nDamage = 0
|
|
end
|
|
local sJson = self:GetSoldierLevelMsg()
|
|
AdventureModuleHelper.EnterDynamic(self.nFloorId, {}, GameEnum.dynamicLevelType.SoldierChess, {
|
|
tostring(self.nTemplateId),
|
|
sJson
|
|
})
|
|
end
|
|
function SoldierBattle:Init(parent, tbChess, nFloorId, nTemplateId)
|
|
self:BindEvent()
|
|
self.parent = parent
|
|
self.tbChess = tbChess
|
|
self.nFloorId = nFloorId
|
|
self.nTemplateId = nTemplateId
|
|
self.tbCharDamage = {}
|
|
self.tbPartner = SoldierAttrData.CalcActivePartners(tbChess)
|
|
self:EnterLevel()
|
|
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
|
end
|
|
function SoldierBattle:Exit()
|
|
self:UnBindEvent()
|
|
end
|
|
function SoldierBattle:BindEvent()
|
|
if type(mapEventConfig) ~= "table" then
|
|
return
|
|
end
|
|
for nEventId, sCallbackName in pairs(mapEventConfig) do
|
|
local callback = self[sCallbackName]
|
|
if type(callback) == "function" then
|
|
EventManager.Add(nEventId, self, callback)
|
|
end
|
|
end
|
|
end
|
|
function SoldierBattle:UnBindEvent()
|
|
if type(mapEventConfig) ~= "table" then
|
|
return
|
|
end
|
|
for nEventId, sCallbackName in pairs(mapEventConfig) do
|
|
local callback = self[sCallbackName]
|
|
if type(callback) == "function" then
|
|
EventManager.Remove(nEventId, self, callback)
|
|
end
|
|
end
|
|
end
|
|
function SoldierBattle:GetSoldierLevelMsg()
|
|
local soldierLevelMsg = CS.SoldierLevelController.SoldierLevelMsg(1)
|
|
local tbServerBuff = self.parent:GetClientBuffList()
|
|
local mapAll = SoldierAttrData.CalcAttrForBattle(self.tbChess, self.tbPartner, tbServerBuff)
|
|
for _, v in ipairs(self.tbChess) do
|
|
local mapAttr = CS.SoldierLevelController.SoldierAttr()
|
|
if v.nId ~= 0 then
|
|
mapAttr = mapAll[v.nId]
|
|
end
|
|
local bMain = v.nPositionType == GameEnum.SoldierPositionType.FightPosition
|
|
local nIndex = v.nIndex
|
|
if not bMain then
|
|
nIndex = v.nIndex + 3
|
|
end
|
|
soldierLevelMsg.SoldierData:Add(CS.SoldierLevelController.SoldierMsg(v.nId, bMain, nIndex, v.nStar, mapAttr))
|
|
end
|
|
for _, nId in pairs(self.tbPartner) do
|
|
if 0 < nId then
|
|
soldierLevelMsg.PartnerArr:Add(nId)
|
|
end
|
|
end
|
|
return soldierLevelMsg:ToJson()
|
|
end
|
|
function SoldierBattle:OnEvent_LoadLevelRefresh()
|
|
EventManager.Hit("OpenSoldierRoomInfo", self.nFloorId)
|
|
end
|
|
function SoldierBattle:OnEvent_AdventureModuleEnter()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierBattlePanel, self.tbChess, self.tbPartner)
|
|
end
|
|
function SoldierBattle:OnEvent_UnloadComplete()
|
|
if self.bRestart then
|
|
self:EnterLevel()
|
|
end
|
|
end
|
|
function SoldierBattle:OnEvent_Result(bResult)
|
|
local tbDamage = {}
|
|
for nId, nValue in pairs(self.tbCharDamage) do
|
|
local nStar = 0
|
|
for _, v in ipairs(self.tbChess) do
|
|
if v.nId == nId then
|
|
nStar = v.nStar
|
|
break
|
|
end
|
|
end
|
|
tbDamage[nId] = {nStar = nStar, nDamage = nValue}
|
|
end
|
|
local nCoin = self.tbItems[AllEnum.CoinItemId.SoldierCurrency] or 0
|
|
nCoin = math.min(nCoin, ConfigTable.GetConfigNumber("SoldierSkillCoinMax"))
|
|
self.parent:BattleEnd(bResult, {
|
|
nTime = self.nBattleTime,
|
|
tbDamage = tbDamage,
|
|
nCoin = nCoin
|
|
})
|
|
end
|
|
function SoldierBattle:OnEvent_SettleSoldierBattle()
|
|
local tbDamage = {}
|
|
for nId, nValue in pairs(self.tbCharDamage) do
|
|
local nStar = 0
|
|
for _, v in ipairs(self.tbChess) do
|
|
if v.nId == nId then
|
|
nStar = v.nStar
|
|
break
|
|
end
|
|
end
|
|
tbDamage[nId] = {nStar = nStar, nDamage = nValue}
|
|
end
|
|
local nCoin = self.tbItems[AllEnum.CoinItemId.SoldierCurrency] or 0
|
|
nCoin = math.min(nCoin, ConfigTable.GetConfigNumber("SoldierSkillCoinMax"))
|
|
self.parent:BattleEnd(false, {
|
|
nTime = self.nBattleTime,
|
|
tbDamage = tbDamage,
|
|
nCoin = nCoin
|
|
})
|
|
end
|
|
function SoldierBattle:OnEvent_RestartSoldier()
|
|
self.bRestart = true
|
|
AdventureModuleHelper.LevelStateChanged(false)
|
|
EventManager.Hit("ResetBossHUD")
|
|
end
|
|
function SoldierBattle:OnEvent_LeaveSoldier()
|
|
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
|
|
EventManager.Hit(EventId.CloesCurPanel)
|
|
PlayerData.Base:OnBackToMainMenuModule()
|
|
else
|
|
local function levelEndCallback()
|
|
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
|
NovaAPI.EnterModule("MainMenuModuleScene", true, 17)
|
|
end
|
|
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
|
CS.AdventureModuleHelper.LevelStateChanged(true, 0, true)
|
|
end
|
|
end
|
|
function SoldierBattle:OnEvent_ActorSpawn(nDataId, nUId)
|
|
for _, v in ipairs(self.tbChess) do
|
|
if v.nId == nDataId then
|
|
v.nUId = nUId
|
|
EventManager.Hit("SoldierCharSpawn", nDataId, nUId)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
function SoldierBattle:OnEvent_Damage(nUId, nDamage)
|
|
for _, v in ipairs(self.tbChess) do
|
|
if v.nUId == nUId then
|
|
v.nDamage = nDamage
|
|
self.tbCharDamage[v.nId] = v.nDamage
|
|
EventManager.Hit("RefreshChessDamage", v.nId, v.nDamage)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
function SoldierBattle:OnEvent_GamePlayTime(nTime)
|
|
self.nBattleTime = nTime
|
|
if 0 < nTime then
|
|
EventManager.Hit("RefreshSoldierBattleTime", nTime)
|
|
end
|
|
end
|
|
function SoldierBattle:OnEvent_EnemyHp(nHp)
|
|
if self.nTotalHp == 0 then
|
|
self.nTotalHp = nHp
|
|
end
|
|
EventManager.Hit("RefreshSoldierProgress", self.nTotalHp, nHp)
|
|
end
|
|
function SoldierBattle:OnEvent_AddItem(nId, nCount)
|
|
if self.tbItems[nId] == nil then
|
|
self.tbItems[nId] = 0
|
|
end
|
|
self.tbItems[nId] = self.tbItems[nId] + nCount
|
|
local nCount = self.tbItems[AllEnum.CoinItemId.SoldierCurrency] or 0
|
|
EventManager.Hit("RefreshSoldierCoin", nCount)
|
|
if nId == AllEnum.CoinItemId.SoldierCurrency then
|
|
printError("[Soldier]战斗内技能获得金币数量:" .. nCount)
|
|
end
|
|
end
|
|
function SoldierBattle:OnEvent_CastSkill(nUId, nId, nSkillId)
|
|
EventManager.Hit("SoldierSkillDisPlay", nId, nSkillId)
|
|
end
|
|
return SoldierBattle
|