d51057c7f3
EN: 1.5.0.78 CN: 1.5.0.80 JP: 1.5.0.82 KR: 1.5.0.85
258 lines
9.6 KiB
Lua
258 lines
9.6 KiB
Lua
local TrialLevel = class("TrialLevel")
|
|
local TimerManager = require("GameCore.Timer.TimerManager")
|
|
local mapEventConfig = {
|
|
LoadLevelRefresh = "OnEvent_LoadLevelRefresh",
|
|
[EventId.AbandonBattle] = "OnEvent_AbandonBattle",
|
|
TrialGameEnd = "OnEvent_LevelResult",
|
|
AdventureModuleEnter = "OnEvent_AdventureModuleEnter",
|
|
BattlePause = "OnEvent_Pause",
|
|
TrialDepot = "OnEvent_Depot",
|
|
TaskLevel_InitTask = "OnEvent_InitQuest",
|
|
Trial_QuestComplete = "OnEvent_QuestComplete",
|
|
Trial_Time = "OnEvent_Time"
|
|
}
|
|
function TrialLevel:Init(parent, nLevelId)
|
|
self.parent = parent
|
|
self.nLevelId = nLevelId
|
|
self.mapChangeInfo = {}
|
|
self.mapLevelCfg = ConfigTable.GetData("TrialFloor", nLevelId)
|
|
if not self.mapLevelCfg then
|
|
return
|
|
end
|
|
self.mapBuildData = PlayerData.Build:GetTrialBuild(self.mapLevelCfg.TrialBuild)
|
|
self.tbCharId, self.tbCharTrialId, self.mapCharData, self.mapTalentAddLevel = {}, {}, {}, {}
|
|
for _, mapChar in ipairs(self.mapBuildData.tbChar) do
|
|
table.insert(self.tbCharId, mapChar.nTid)
|
|
self.tbCharTrialId[mapChar.nTid] = mapChar.nTrialId
|
|
self.mapCharData[mapChar.nTid] = PlayerData.Char:GetTrialCharById(mapChar.nTrialId)
|
|
self.mapTalentAddLevel[mapChar.nTid] = PlayerData.Talent:GetTrialEnhancedPotential(mapChar.nTrialId)
|
|
end
|
|
self.tbDiscId, self.mapDiscData = {}, {}
|
|
for _, nDiscId in ipairs(self.mapBuildData.tbDisc) do
|
|
if 0 < nDiscId then
|
|
table.insert(self.tbDiscId, nDiscId)
|
|
local mapCfg = ConfigTable.GetData("TrialDisc", nDiscId)
|
|
if mapCfg then
|
|
self.mapDiscData[mapCfg.DiscId] = PlayerData.Disc:GetTrialDiscById(nDiscId)
|
|
end
|
|
end
|
|
end
|
|
self:ParseDepotData()
|
|
self.mapActorInfo = {}
|
|
for idx, nTid in ipairs(self.tbCharId) do
|
|
local stActorInfo = self:CalCharFixedEffect(self.tbCharTrialId[nTid], idx == 1, self.tbDiscId)
|
|
self.mapActorInfo[nTid] = stActorInfo
|
|
end
|
|
PlayerData.nCurGameType = AllEnum.WorldMapNodeType.Trial
|
|
local params = NovaAPI.GetDynamicLevelParamsBootConfig()
|
|
CS.AdventureModuleHelper.EnterDynamic(nLevelId, self.tbCharId, GameEnum.dynamicLevelType.Trial, params)
|
|
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
|
end
|
|
function TrialLevel:ParseDepotData()
|
|
self.tbDepotPotential = {}
|
|
for nCharId, tbPerk in pairs(self.mapBuildData.tbPotentials) do
|
|
if self.tbCharTrialId[nCharId] then
|
|
if not self.tbDepotPotential[nCharId] then
|
|
self.tbDepotPotential[nCharId] = {}
|
|
end
|
|
for _, v in ipairs(tbPerk) do
|
|
self.tbDepotPotential[nCharId][v.nPotentialId] = v.nLevel
|
|
end
|
|
else
|
|
printError("体验build内,有多余角色的潜能" .. nCharId)
|
|
end
|
|
end
|
|
end
|
|
function TrialLevel:OnEvent_LoadLevelRefresh()
|
|
local mapAllEft, mapDiscEft, mapNoteEffect, tbNoteInfo = PlayerData.Build:GetTrialBuildAllEft()
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetNoteInfo, tbNoteInfo)
|
|
self.mapEftData = UTILS.AddBuildEffect(mapAllEft, mapDiscEft, mapNoteEffect)
|
|
EventManager.Hit("OpenTrialInfo", self.nQuestId)
|
|
end
|
|
function TrialLevel:RefreshCharDamageData()
|
|
self.tbCharDamage = UTILS.GetCharDamageResult(self.tbCharId)
|
|
for i, v in ipairs(self.tbCharDamage) do
|
|
self.tbCharDamage[i].nSkinId = PlayerData.Char:GetCharSkinId(v.nCharId)
|
|
end
|
|
end
|
|
function TrialLevel:OnEvent_LevelResult(nLevelTime)
|
|
self:RefreshCharDamageData()
|
|
local bReceived = PlayerData.Trial:CheckGroupReceived()
|
|
local bAbandon = not bReceived
|
|
EventManager.Hit("TrialBattleEnd")
|
|
if self.parent:GetSettlementState() then
|
|
printError("试玩关结算流程重复进入,本次退出")
|
|
return
|
|
end
|
|
self.parent:SetSettlementState(true)
|
|
if bAbandon then
|
|
EventManager.Hit("TrialLevelEnd", self.nLevelId)
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.BtnTips)
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.TrialResult, false, nLevelTime or 0, self.tbCharId, self.parent.nActId, {}, self.tbCharDamage)
|
|
self.parent:LevelEnd()
|
|
return
|
|
end
|
|
EventManager.Hit("TrialLevelEnd", self.nLevelId)
|
|
self:PlaySuccessPerform(nLevelTime)
|
|
end
|
|
function TrialLevel:OnEvent_AbandonBattle()
|
|
self:OnEvent_LevelResult(self.nLevelTime)
|
|
end
|
|
function TrialLevel:OnEvent_AdventureModuleEnter()
|
|
self:SetPersonalPerk()
|
|
self:SetDiscInfo()
|
|
for idx, nCharId in ipairs(self.tbCharId) do
|
|
local stActorInfo = self:CalCharFixedEffect(self.tbCharTrialId[nCharId], idx == 1, self.tbDiscId)
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, nCharId, stActorInfo)
|
|
end
|
|
local tbDisc = {}
|
|
for _, v in ipairs(self.tbDiscId) do
|
|
local mapCfg = ConfigTable.GetData("TrialDisc", v)
|
|
if mapCfg then
|
|
table.insert(tbDisc, mapCfg.DiscId)
|
|
end
|
|
end
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.TrialBattlePanel, self.tbCharId, tbDisc, self.mapCharData, self.mapDiscData, self.mapTalentAddLevel)
|
|
end
|
|
function TrialLevel: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 TrialLevel: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 TrialLevel:PlaySuccessPerform(nLevelTime)
|
|
local func_SettlementFinish = function(bSuccess)
|
|
end
|
|
local tbChar = self.tbCharId
|
|
local function levelEndCallback()
|
|
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
|
local nType = self.mapLevelCfg.Theme
|
|
local sName = ConfigTable.GetData("EndSceneType", nType).EndSceneName
|
|
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
|
|
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
|
local function openBattleResultPanel()
|
|
EventManager.Remove("SettlementPerformLoadFinish", self, openBattleResultPanel)
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.TrialResult, true, nLevelTime or 0, self.tbCharId, self.parent.nActId, self.mapChangeInfo, self.tbCharDamage)
|
|
self.bSettle = false
|
|
self.parent:LevelEnd()
|
|
self:UnBindEvent()
|
|
end
|
|
EventManager.Add("SettlementPerformLoadFinish", self, openBattleResultPanel)
|
|
CS.AdventureModuleHelper.LevelStateChanged(true)
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.BattleResultMask)
|
|
end
|
|
function TrialLevel:SetCharFixedAttribute()
|
|
for nCharId, stActorInfo in pairs(self.mapActorInfo) do
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, nCharId, stActorInfo)
|
|
end
|
|
end
|
|
function TrialLevel:CalCharFixedEffect(nTrialId, bMainChar, tbDiscId)
|
|
local stActorInfo = CS.Lua2CSharpInfo_CharAttribute()
|
|
PlayerData.Char:CalCharacterTrialAttrBattle(nTrialId, stActorInfo, bMainChar, tbDiscId, self.mapLevelCfg.TrialBuild)
|
|
return stActorInfo
|
|
end
|
|
function TrialLevel:SetPersonalPerk()
|
|
if self.mapBuildData ~= nil then
|
|
for nCharId, tbPerk in pairs(self.mapBuildData.tbPotentials) do
|
|
local mapTalentAddLevel = {}
|
|
if self.tbCharTrialId[nCharId] then
|
|
mapTalentAddLevel = PlayerData.Talent:GetTrialEnhancedPotential(self.tbCharTrialId[nCharId])
|
|
else
|
|
printError("体验build内,有多余角色的潜能" .. nCharId)
|
|
end
|
|
local tbPerkInfo = {}
|
|
for _, mapPerkInfo in ipairs(tbPerk) do
|
|
local nAddLv = mapTalentAddLevel[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 TrialLevel:SetDiscInfo()
|
|
local tbDiscInfo = {}
|
|
for k, nDiscId in ipairs(self.mapBuildData.tbDisc) do
|
|
if k <= 3 then
|
|
local discInfo = PlayerData.Disc:CalcTrialInfoInBuild(nDiscId, self.mapBuildData.tbSecondarySkill)
|
|
table.insert(tbDiscInfo, discInfo)
|
|
end
|
|
end
|
|
safe_call_cs_func(CS.AdventureModuleHelper.SetDiscInfo, tbDiscInfo)
|
|
end
|
|
function TrialLevel:OnEvent_InitQuest(nQuestId)
|
|
self.nQuestId = nQuestId
|
|
end
|
|
function TrialLevel:OnEvent_QuestComplete()
|
|
local bOpen = false
|
|
local actData = PlayerData.Activity:GetActivityDataById(self.parent.nActId)
|
|
if actData then
|
|
bOpen = actData:CheckActivityOpen()
|
|
end
|
|
if not bOpen then
|
|
EventManager.Hit(EventId.OpenMessageBox, {
|
|
nType = AllEnum.MessageBox.Alert,
|
|
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_3")
|
|
})
|
|
end
|
|
local bReceived = PlayerData.Trial:CheckGroupReceived()
|
|
if not bReceived and bOpen then
|
|
PanelManager.InputDisable()
|
|
local callback = function(mapChangeInfo)
|
|
PanelManager.InputEnable()
|
|
self.mapChangeInfo = mapChangeInfo or {}
|
|
end
|
|
self.parent:SendReceiveTrialRewardReq(callback)
|
|
end
|
|
self:ShowTeleportIndicator()
|
|
end
|
|
function TrialLevel:ShowTeleportIndicator()
|
|
local tbTeleports = CS.AdventureModuleHelper.GetLevelTeleporters()
|
|
if tbTeleports ~= nil then
|
|
for i = 0, tbTeleports.Count - 1 do
|
|
EventManager.Hit("SetIndicator", 2, tbTeleports[i], Vector3.zero, nil)
|
|
end
|
|
end
|
|
end
|
|
function TrialLevel:OnEvent_Time(nTime)
|
|
self.nLevelTime = nTime
|
|
end
|
|
function TrialLevel:OnEvent_Pause()
|
|
EventManager.Hit("OpenTrialPause", self.tbCharId, self.mapCharData, self.mapLevelCfg.TrialChar)
|
|
end
|
|
function TrialLevel:OnEvent_Depot()
|
|
local tbDisc = {}
|
|
for _, v in ipairs(self.tbDiscId) do
|
|
local mapCfg = ConfigTable.GetData("TrialDisc", v)
|
|
if mapCfg then
|
|
table.insert(tbDisc, mapCfg.DiscId)
|
|
end
|
|
end
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.TrialDepot, self.tbCharId, tbDisc, self.mapCharData, self.mapDiscData, self.mapTalentAddLevel, self.tbDepotPotential, self.mapBuildData.tbNotes, true)
|
|
end
|
|
return TrialLevel
|