80af235e05
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
310 lines
12 KiB
Lua
310 lines
12 KiB
Lua
local RegionBossBattleLevel = class("RegionBossBattleLevel")
|
|
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
|
|
local AdventureModuleHelper = CS.AdventureModuleHelper
|
|
local TimerManager = require("GameCore.Timer.TimerManager")
|
|
local mapEventConfig = {
|
|
LoadLevelRefresh = "OnEvent_LoadLevelRefresh",
|
|
[EventId.AbandonBattle] = "OnEvent_AbandonBattle",
|
|
AdventureModuleEnter = "OnEvent_AdventureModuleEnter",
|
|
Region_Boss_Result = "LevelResultChange",
|
|
BattlePause = "OnEvnet_Pause"
|
|
}
|
|
function RegionBossBattleLevel:Init(parent, nLevelId, nBuildId, isWeekBoss)
|
|
self.parent = parent
|
|
self.nLevelId = nLevelId
|
|
self.nBuildId = nBuildId
|
|
self.isSettlement = false
|
|
local GetBuildCallback = function(mapBuildData)
|
|
self.mapBuildData = mapBuildData
|
|
self.tbCharId = {}
|
|
if mapBuildData == nil then
|
|
local sTip = ConfigTable.GetUIText("RegionBoss_Team_Delete")
|
|
EventManager.Hit(EventId.OpenMessageBox, sTip)
|
|
return
|
|
end
|
|
for _, mapChar in ipairs(self.mapBuildData.tbChar) do
|
|
table.insert(self.tbCharId, mapChar.nTid)
|
|
end
|
|
self.tbDiscId = {}
|
|
for _, nDiscId in ipairs(self.mapBuildData.tbDisc) do
|
|
if 0 < nDiscId then
|
|
table.insert(self.tbDiscId, nDiscId)
|
|
end
|
|
end
|
|
self.mapActorInfo = {}
|
|
for idx, nTid in ipairs(self.tbCharId) do
|
|
local stActorInfo = self:CalCharFixedEffect(nTid, idx == 1, self.tbDiscId)
|
|
self.mapActorInfo[nTid] = stActorInfo
|
|
end
|
|
local nFloorId = 0
|
|
if isWeekBoss == 1 then
|
|
PlayerData.RogueBoss:SetIsWeeklyCopies(false)
|
|
nFloorId = ConfigTable.GetData("RegionBossLevel", nLevelId).FloorId
|
|
elseif isWeekBoss == 2 then
|
|
PlayerData.RogueBoss:SetIsWeeklyCopies(true)
|
|
nFloorId = ConfigTable.GetData("WeekBossLevel", nLevelId).FloorId
|
|
end
|
|
PlayerData.nCurGameType = AllEnum.WorldMapNodeType.Rogueboss
|
|
CS.AdventureModuleHelper.EnterRogueBossMap(nFloorId, self.tbCharId, nLevelId, 0, isWeekBoss)
|
|
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
|
end
|
|
PlayerData.Build:GetBuildDetailData(GetBuildCallback, nBuildId)
|
|
self.nResultTime = 0
|
|
end
|
|
function RegionBossBattleLevel:RefreshCharDamageData()
|
|
self.tbCharDamage = UTILS.GetCharDamageResult(self.tbCharId)
|
|
end
|
|
function RegionBossBattleLevel:SettleRegionBoss(isWin)
|
|
if self.isSettlement then
|
|
return
|
|
end
|
|
self.isSettlement = true
|
|
self:RefreshCharDamageData()
|
|
local isWeeklyCopies = PlayerData.RogueBoss:GetIsWeeklyCopies()
|
|
print("is week " .. tostring(isWeeklyCopies))
|
|
if isWeeklyCopies then
|
|
local callback = function(mapMsgData, nPassStar)
|
|
local nExp = 0
|
|
local CacheRewardTab = {}
|
|
for i, v in ipairs(mapMsgData.FirstItems) do
|
|
v.rewardType = AllEnum.RewardType.First
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
for i, v in ipairs(mapMsgData.AwardItems) do
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
if isWin then
|
|
self:PlaySuccessPerform(ConfigTable.GetData("WeekBossLevel", self.nLevelId).FloorId, self.nBuildId, nExp, CacheRewardTab, mapMsgData.Change, true)
|
|
else
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossResult, 2, self.nResultTime, self.nBuildId, nExp, CacheRewardTab, mapMsgData.Change, self.tbCharDamage)
|
|
end
|
|
self:UnBindEvent()
|
|
self.parent:LevelEnd()
|
|
end
|
|
self.parent:WeeklyCopiesLevelSettleReq(isWin, self.nResultTime, callback)
|
|
else
|
|
local callback = function(mapMsgData, nPassStar)
|
|
self.passStar = nPassStar
|
|
local nExp = mapMsgData.Exp
|
|
local CacheRewardTab = {}
|
|
for i, v in ipairs(mapMsgData.FirstItems) do
|
|
v.rewardType = AllEnum.RewardType.First
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
for i, v in ipairs(mapMsgData.ThreeStarItems) do
|
|
v.rewardType = AllEnum.RewardType.Three
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
for i, v in ipairs(mapMsgData.SurpriseItems) do
|
|
v.rewardType = AllEnum.RewardType.Extra
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
for i, v in ipairs(mapMsgData.AwardItems) do
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
for i, v in ipairs(mapMsgData.DoubleItems) do
|
|
v.rewardType = AllEnum.RewardType.Double
|
|
table.insert(CacheRewardTab, v)
|
|
end
|
|
if isWin then
|
|
self:PlaySuccessPerform(ConfigTable.GetData("RegionBossLevel", self.nLevelId).FloorId, self.nBuildId, nExp, CacheRewardTab, mapMsgData.Change, false)
|
|
else
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.BossInstanceResultPanel, false, 0, CacheRewardTab, nExp, self.nLevelId, self.tbCharId, mapMsgData.Change, self.tbCharDamage)
|
|
end
|
|
self:UnBindEvent()
|
|
self.parent:LevelEnd()
|
|
end
|
|
self.parent:RegionBossLevelSettleReq(isWin, self.nResultTime, callback)
|
|
end
|
|
end
|
|
function RegionBossBattleLevel:OnEvent_LoadLevelRefresh()
|
|
local mapAllEft, mapDiscEft, mapNoteEffect, tbNoteInfo = PlayerData.Build:GetBuildAllEft(self.mapBuildData.nBuildId)
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetNoteInfo, tbNoteInfo)
|
|
self.mapEftData = UTILS.AddBuildEffect(mapAllEft, mapDiscEft, mapNoteEffect)
|
|
end
|
|
function RegionBossBattleLevel:OnEvent_AbandonBattle()
|
|
self:SettleRegionBoss(false)
|
|
end
|
|
function RegionBossBattleLevel:OnEvent_AdventureModuleEnter()
|
|
local isWeeklyCopies = PlayerData.RogueBoss:GetIsWeeklyCopies()
|
|
if isWeeklyCopies then
|
|
PlayerData.Achievement:SetSpecialBattleAchievement(GameEnum.levelType.WeeklyCopies)
|
|
else
|
|
PlayerData.Achievement:SetSpecialBattleAchievement(GameEnum.levelType.RegionBoss)
|
|
end
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.RegionBossBattlePanel, self.tbCharId)
|
|
self:SetPersonalPerk()
|
|
self:SetDiscInfo()
|
|
for idx, nCharId in ipairs(self.tbCharId) do
|
|
local stActorInfo = self:CalCharFixedEffect(nCharId, idx == 1, self.tbDiscId)
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, nCharId, stActorInfo)
|
|
end
|
|
end
|
|
function RegionBossBattleLevel:OnEvent_OpenChest()
|
|
local wait = function()
|
|
self:SettleRegionBoss(true)
|
|
end
|
|
TimerManager.Add(1, 1, self, wait, true, true, true, nil)
|
|
end
|
|
function RegionBossBattleLevel:LevelResultChange(isWin, totaltime)
|
|
self.nResultTime = totaltime
|
|
self:SettleRegionBoss(isWin)
|
|
end
|
|
function RegionBossBattleLevel: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 RegionBossBattleLevel: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 RegionBossBattleLevel:PlaySuccessPerform(nMapId, buildId, nExp, tbReward, mapChangeInfo, isWeekBoss)
|
|
local func_SettlementFinish = function(bSuccess)
|
|
end
|
|
local tbChar = self.tbCharId
|
|
local function levelEndCallback()
|
|
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
|
if isWeekBoss then
|
|
local nType = ConfigTable.GetData("WeekBossFloor", nMapId).Theme
|
|
local sName = ConfigTable.GetData("EndSceneType", nType).EndSceneName
|
|
print("sceneName:" .. sName)
|
|
local tbSkin = {}
|
|
for _, nCharId in ipairs(tbChar) do
|
|
local nSkinId = PlayerData.Char:GetCharSkinId(nCharId)
|
|
table.insert(tbSkin, nSkinId)
|
|
end
|
|
CS.AdventureModuleHelper.PlaySettlementPerform(sName, "", tbSkin, func_SettlementFinish)
|
|
else
|
|
local nType = ConfigTable.GetData("RegionBossFloor", nMapId).Theme
|
|
local sName = ConfigTable.GetData("EndSceneType", nType).EndSceneName
|
|
print("sceneName:" .. sName)
|
|
local tbSkin = {}
|
|
for _, nCharId in ipairs(tbChar) do
|
|
local nSkinId = PlayerData.Char:GetCharSkinId(nCharId)
|
|
table.insert(tbSkin, nSkinId)
|
|
end
|
|
CS.AdventureModuleHelper.PlaySettlementPerform(sName, "", tbSkin, func_SettlementFinish)
|
|
end
|
|
end
|
|
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
|
local function openBattleResultPanel()
|
|
EventManager.Remove("SettlementPerformLoadFinish", self, openBattleResultPanel)
|
|
if self.passStar == nil then
|
|
self.passStar = 1
|
|
end
|
|
if isWeekBoss then
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossResult, 1, self.nResultTime, buildId, nExp, tbReward, mapChangeInfo, self.tbCharDamage)
|
|
else
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.BossInstanceResultPanel, true, self.passStar, tbReward, nExp, self.nLevelId, self.tbCharId, mapChangeInfo, self.tbCharDamage)
|
|
end
|
|
end
|
|
EventManager.Add("SettlementPerformLoadFinish", self, openBattleResultPanel)
|
|
CS.AdventureModuleHelper.LevelStateChanged(true)
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.BattleResultMask)
|
|
end
|
|
function RegionBossBattleLevel:SetTempActorAttribute(nCharId)
|
|
local mapChar = {nLevel = 1, nAdvance = 0}
|
|
local nLevel = mapChar.nLevel
|
|
local nAdvance = mapChar.nAdvance
|
|
local nAttrId = UTILS.GetCharacterAttributeId(nCharId, nAdvance, nLevel)
|
|
local mapCharAttr = ConfigTable.GetData_Attribute(tostring(nAttrId))
|
|
if mapCharAttr == nil then
|
|
printError("属性配置不存在:" .. nAttrId)
|
|
return {}
|
|
end
|
|
local stActorInfo = CS.Lua2CSharpInfo_CharAttribute()
|
|
stActorInfo.Atk = mapCharAttr.Atk
|
|
stActorInfo.Def = mapCharAttr.Def
|
|
stActorInfo.MDef = mapCharAttr.Mdef
|
|
stActorInfo.ShieldBonus = mapCharAttr.ShieldBonus
|
|
stActorInfo.IncomingShieldBonus = mapCharAttr.IncomingShieldBonus
|
|
stActorInfo.Evd = mapCharAttr.Evd
|
|
stActorInfo.CritRate = mapCharAttr.CritRate
|
|
stActorInfo.CritResistance = mapCharAttr.CritResistance
|
|
stActorInfo.CritPower = mapCharAttr.CritPower
|
|
stActorInfo.HitRate = mapCharAttr.HitRate
|
|
stActorInfo.DefPierce = mapCharAttr.DefPierce
|
|
stActorInfo.WEE = mapCharAttr.WEE
|
|
stActorInfo.FEE = mapCharAttr.FEE
|
|
stActorInfo.SEE = mapCharAttr.SEE
|
|
stActorInfo.AEE = mapCharAttr.AEE
|
|
stActorInfo.LEE = mapCharAttr.LEE
|
|
stActorInfo.DEE = mapCharAttr.DEE
|
|
stActorInfo.WEP = mapCharAttr.WEP
|
|
stActorInfo.FEP = mapCharAttr.FEP
|
|
stActorInfo.AEP = mapCharAttr.AEP
|
|
stActorInfo.SEP = mapCharAttr.SEP
|
|
stActorInfo.LEP = mapCharAttr.LEP
|
|
stActorInfo.DEP = mapCharAttr.DEP
|
|
stActorInfo.WER = mapCharAttr.WER
|
|
stActorInfo.FER = mapCharAttr.FER
|
|
stActorInfo.AER = mapCharAttr.AER
|
|
stActorInfo.SER = mapCharAttr.SER
|
|
stActorInfo.LER = mapCharAttr.LER
|
|
stActorInfo.DER = mapCharAttr.DER
|
|
stActorInfo.Hp = mapCharAttr.Hp
|
|
stActorInfo.Suppress = mapCharAttr.Suppress
|
|
stActorInfo.SkillLevel = {
|
|
1,
|
|
1,
|
|
1
|
|
}
|
|
stActorInfo.skinId = PlayerData.Char:GetCharSkinId(nCharId)
|
|
stActorInfo.attrId = mapCharAttr.sAttrId
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, nCharId, stActorInfo)
|
|
end
|
|
function RegionBossBattleLevel:SetCharFixedAttribute()
|
|
for nCharId, stActorInfo in pairs(self.mapActorInfo) do
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, nCharId, stActorInfo)
|
|
end
|
|
end
|
|
function RegionBossBattleLevel:CalCharFixedEffect(nCharId, bMainChar, tbDiscId)
|
|
local stActorInfo = CS.Lua2CSharpInfo_CharAttribute()
|
|
PlayerData.Char:CalCharacterAttrBattle(nCharId, stActorInfo, bMainChar, tbDiscId, self.mapBuildData.nBuildId)
|
|
return stActorInfo
|
|
end
|
|
function RegionBossBattleLevel:SetPersonalPerk()
|
|
if self.mapBuildData ~= nil then
|
|
for nCharId, tbPerk in pairs(self.mapBuildData.tbPotentials) do
|
|
local mapAddLevel = PlayerData.Char:GetCharEnhancedPotential(nCharId)
|
|
local tbPerkInfo = {}
|
|
for _, mapPerkInfo in ipairs(tbPerk) do
|
|
local nAddLv = mapAddLevel[mapPerkInfo.nPotentialId] or 0
|
|
local stPerkInfo = CS.Lua2CSharpInfo_TPPerkInfo()
|
|
stPerkInfo.perkId = mapPerkInfo.nPotentialId
|
|
stPerkInfo.nCount = mapPerkInfo.nLevel + nAddLv
|
|
table.insert(tbPerkInfo, stPerkInfo)
|
|
end
|
|
safe_call_cs_func(CS.AdventureModuleHelper.ChangePersonalPerkIds, tbPerkInfo, nCharId)
|
|
end
|
|
end
|
|
end
|
|
function RegionBossBattleLevel:SetDiscInfo()
|
|
local tbDiscInfo = {}
|
|
for k, nDiscId in ipairs(self.mapBuildData.tbDisc) do
|
|
if k <= 3 then
|
|
local discInfo = PlayerData.Disc:CalcDiscInfoInBuild(nDiscId, self.mapBuildData.tbSecondarySkill)
|
|
table.insert(tbDiscInfo, discInfo)
|
|
end
|
|
end
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetDiscInfo, tbDiscInfo)
|
|
end
|
|
function RegionBossBattleLevel:OnEvnet_Pause()
|
|
EventManager.Hit("OpenRegionBossPause", self.nLevelId, self.tbCharId)
|
|
end
|
|
return RegionBossBattleLevel
|