Initial version - 1.2.0.60
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
This commit is contained in:
@@ -0,0 +1,470 @@
|
||||
local MainlinePrologueLevel = class("MainlinePrologueLevel")
|
||||
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
|
||||
local LocalData = require("GameCore.Data.LocalData")
|
||||
local RapidJson = require("rapidjson")
|
||||
local mapFloor = {
|
||||
[1] = "Game.Adventure.MainlineLevel.PrologueFloor.DesertFloor",
|
||||
[2] = "Game.Adventure.MainlineLevel.PrologueFloor.BattleFloor"
|
||||
}
|
||||
local mapEventConfig = {
|
||||
LevelStateChanged = "OnEvent_LevelStateChanged",
|
||||
LoadLevelRefresh = "OnEvent_LoadLevelRefresh",
|
||||
ExitModule = "OnEvent_ExitModule",
|
||||
AfterEnterModule = "OnEvent_AfterEnterModule",
|
||||
PrologueBattleReload = "OnEvent_PrologueBattleReload",
|
||||
PrologueBattleArchive = "OnEvent_PrologueBattleArchive",
|
||||
AdventureModuleEnter = "OnEvent_AdventureModuleEnter",
|
||||
EnterModule = "OnEvent_EnterModule"
|
||||
}
|
||||
local enterFloorForTest = 0
|
||||
local PrologueSceneId = 1200103
|
||||
local tbAfterDesertFloor = {1200104, 1200106}
|
||||
local tbTrialCharacter = {
|
||||
{
|
||||
1200201,
|
||||
1200203,
|
||||
1200202
|
||||
},
|
||||
{
|
||||
1200201,
|
||||
1200203,
|
||||
1200202
|
||||
}
|
||||
}
|
||||
local tbSelectPerks = {
|
||||
{
|
||||
500501,
|
||||
500801,
|
||||
500101
|
||||
}
|
||||
}
|
||||
local mapBoxReward = {
|
||||
[1] = {
|
||||
500501,
|
||||
500801,
|
||||
500101
|
||||
}
|
||||
}
|
||||
local tbTheme = {
|
||||
GameEnum.rglTheme.ChainLightning,
|
||||
GameEnum.rglTheme.WindBlade,
|
||||
GameEnum.rglTheme.FireRing
|
||||
}
|
||||
function MainlinePrologueLevel:Init(parent)
|
||||
self.curFloor = nil
|
||||
self.sAfterBattleAvg = "ST1001"
|
||||
local lastAccount = LocalData.GetLocalData("LoginUIData", "LastUserName_All")
|
||||
local sJson = LocalData.GetLocalData(lastAccount, "MainlinePrologueLevel")
|
||||
if sJson ~= nil then
|
||||
local tb = decodeJson(sJson)
|
||||
self.isThreePlayer = tb.isThreePlayer
|
||||
self.revivalPoint = Vector3(tb.revivalPoint[1], tb.revivalPoint[2], tb.revivalPoint[3])
|
||||
self.btnNames = tb.btnNames
|
||||
self.tbSelectPerks = tb.tbSelectPerks
|
||||
self.curFloorIdx = tb.curFloorIdx
|
||||
self.bDesertComplete = tb.bDesertComplete
|
||||
self.nCurAvgCmdIdx = tb.nCurAvgCmdIdx
|
||||
self.bBattleEnd = tb.bBattleEnd
|
||||
self.curCharId = tb.curCharId
|
||||
self.curNpcRewardIdx = tb.curNpcRewardIdx
|
||||
self.nBoxId = tb.nBoxId
|
||||
else
|
||||
self.isThreePlayer = false
|
||||
self.revivalPoint = Vector3.zero
|
||||
self.btnNames = nil
|
||||
self.tbSelectPerks = {}
|
||||
self.curFloorIdx = 1
|
||||
self.bDesertComplete = false
|
||||
self.nCurAvgCmdIdx = 0
|
||||
self.bBattleEnd = false
|
||||
self.curCharId = 0
|
||||
self.curNpcRewardIdx = 1
|
||||
self.nBoxId = 0
|
||||
end
|
||||
EventManager.Hit("MainlinePrologueLevelNextModule", self)
|
||||
self:BindEvent()
|
||||
self.parent = parent
|
||||
self.bSettle = false
|
||||
self.tbTrialId = {}
|
||||
self.tbChar = {}
|
||||
if not self.bDesertComplete then
|
||||
CS.AdventureModuleHelper.EnterProloguelMap(PrologueSceneId)
|
||||
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
||||
elseif self.bBattleEnd then
|
||||
self:OnEvent_LevelStateChanged()
|
||||
else
|
||||
if #tbTrialCharacter[self.curFloorIdx] > 0 then
|
||||
PlayerData.Char:CreateTrialChar(tbTrialCharacter[self.curFloorIdx])
|
||||
for _, nTrialId in pairs(tbTrialCharacter[self.curFloorIdx]) do
|
||||
if 0 < nTrialId then
|
||||
local mapTrialChar = PlayerData.Char:GetTrialCharById(nTrialId)
|
||||
table.insert(self.tbChar, mapTrialChar.nId)
|
||||
table.insert(self.tbTrialId, nTrialId)
|
||||
end
|
||||
end
|
||||
end
|
||||
for _, nTrialId in ipairs(self.tbTrialId) do
|
||||
if 0 < nTrialId then
|
||||
local mapTrialChar = PlayerData.Char:GetTrialCharById(nTrialId)
|
||||
local tbstInfo, stActorInfo, nHeartStoneLevel = self.CalCharFixedEffectTrial(nTrialId)
|
||||
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, mapTrialChar.nId, stActorInfo)
|
||||
end
|
||||
end
|
||||
self:SetFloor(2)
|
||||
CS.AdventureModuleHelper.EnterProloguelBattleMap(tbAfterDesertFloor[self.curFloorIdx], self.tbChar, {}, self.isThreePlayer, self.revivalPoint, self.btnNames)
|
||||
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
||||
end
|
||||
end
|
||||
function MainlinePrologueLevel:SetLocalData()
|
||||
local mapLocalData = {
|
||||
isThreePlayer = self.isThreePlayer,
|
||||
revivalPoint = {
|
||||
self.revivalPoint.x,
|
||||
self.revivalPoint.y,
|
||||
self.revivalPoint.z
|
||||
},
|
||||
btnNames = self.btnNames,
|
||||
tbSelectPerks = self.tbSelectPerks,
|
||||
curFloorIdx = self.curFloorIdx,
|
||||
bDesertComplete = self.bDesertComplete,
|
||||
nCurAvgCmdIdx = self.nCurAvgCmdIdx,
|
||||
bBattleEnd = self.bBattleEnd,
|
||||
curCharId = self.curCharId,
|
||||
curNpcRewardIdx = self.curNpcRewardIdx,
|
||||
nBoxId = self.nBoxId
|
||||
}
|
||||
local sJson = RapidJson.encode(mapLocalData)
|
||||
local lastAccount = LocalData.GetLocalData("LoginUIData", "LastUserName_All")
|
||||
LocalData.SetLocalData(lastAccount, "MainlinePrologueLevel", sJson)
|
||||
end
|
||||
function MainlinePrologueLevel:SetFloor(nType)
|
||||
if self.curFloor ~= nil then
|
||||
self.curFloor:Exit()
|
||||
end
|
||||
self.curFloor = nil
|
||||
local luaPath = mapFloor[nType]
|
||||
if luaPath == nil then
|
||||
printError("no exist type:" .. nType)
|
||||
luaPath = mapFloor[1]
|
||||
end
|
||||
local luaFile = require(luaPath)
|
||||
local luaClass = luaFile.new(self)
|
||||
luaClass:Enter()
|
||||
self.curFloor = luaClass
|
||||
end
|
||||
function MainlinePrologueLevel:UnsetFloor()
|
||||
if self.curFloor ~= nil then
|
||||
self.curFloor:Exit()
|
||||
end
|
||||
self.curFloor = nil
|
||||
end
|
||||
function MainlinePrologueLevel: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 MainlinePrologueLevel: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 MainlinePrologueLevel.CalCharFixedEffectTrial(nTrialId)
|
||||
local tbstInfo = {}
|
||||
local tbEffectId = {}
|
||||
local mapTrialChar = PlayerData.Char:GetTrialCharById(nTrialId)
|
||||
local stActorInfo = CS.Lua2CSharpInfo_CharAttribute()
|
||||
local nHeartStoneLevel = PlayerData.Char:CalCharacterTrialAttrBattle(nTrialId, tbstInfo, stActorInfo)
|
||||
return tbstInfo, stActorInfo, nHeartStoneLevel
|
||||
end
|
||||
function MainlinePrologueLevel:SetTheme()
|
||||
safe_call_cs_func(CS.AdventureModuleHelper.SetRglTheme, tbTheme)
|
||||
end
|
||||
function MainlinePrologueLevel:SetThemePerk()
|
||||
local tbThemePerkInfo = {}
|
||||
local stPerkInfo = CS.Lua2CSharpInfo_TPPerkInfo()
|
||||
for _, nPerkId in ipairs(self.tbSelectPerks) do
|
||||
stPerkInfo.perkId = nPerkId
|
||||
stPerkInfo.nCount = 1
|
||||
table.insert(tbThemePerkInfo, stPerkInfo)
|
||||
end
|
||||
if 0 < #tbThemePerkInfo then
|
||||
safe_call_cs_func(CS.AdventureModuleHelper.ChangeThemePerkIds, tbThemePerkInfo)
|
||||
end
|
||||
end
|
||||
function MainlinePrologueLevel:GetRewardNpc(nNpcId, nNpcUid)
|
||||
local function SelectPerkCallBack(_, tbResult)
|
||||
EventManager.Remove(EventId.SelectPerk, self, SelectPerkCallBack)
|
||||
self.curNpcRewardIdx = self.curNpcRewardIdx + 1
|
||||
table.insert(self.tbSelectPerks, tbResult[1])
|
||||
local tbThemePerkInfo = {}
|
||||
local stPerkInfo = CS.Lua2CSharpInfo_TPPerkInfo()
|
||||
stPerkInfo.perkId = tbResult[1]
|
||||
stPerkInfo.nCount = 1
|
||||
table.insert(tbThemePerkInfo, stPerkInfo)
|
||||
safe_call_cs_func(CS.AdventureModuleHelper.ChangeThemePerkIds, tbThemePerkInfo)
|
||||
local mapNpc = ConfigTable.GetData("NPC", nNpcId)
|
||||
if mapNpc.completeDestroy then
|
||||
safe_call_cs_func(CS.InteractiveManager.Instance.setInteractiveNpcState, CS.InteractiveManager.Instance, nNpcUid)
|
||||
end
|
||||
NovaAPI.DispatchEventWithData("PROLOGUELEVEL_SELECTPERK")
|
||||
end
|
||||
if tbSelectPerks[self.curNpcRewardIdx] == nil then
|
||||
printError(string.format("没有第%d个奖励", self.curNpcRewardIdx))
|
||||
return
|
||||
end
|
||||
local tbPerks = {}
|
||||
for _, nPerkId in ipairs(tbSelectPerks[self.curNpcRewardIdx]) do
|
||||
table.insert(tbPerks, {
|
||||
Id = nPerkId,
|
||||
Level = 1,
|
||||
nMaxLevel = 3
|
||||
})
|
||||
end
|
||||
local mapBag = {
|
||||
mapPerk = {},
|
||||
mapItem = {},
|
||||
mapSlotPerk = {
|
||||
[1] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
},
|
||||
[2] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
},
|
||||
[3] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
},
|
||||
[4] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
EventManager.Add(EventId.SelectPerk, self, SelectPerkCallBack)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.FRThemePerkSelect, {
|
||||
{Perks = tbPerks, Theme = 0}
|
||||
}, 0, mapBag, {}, true, true)
|
||||
end
|
||||
function MainlinePrologueLevel:GetRewardBox(nBoxId)
|
||||
local function SelectPerkCallBack(_, tbResult)
|
||||
EventManager.Remove(EventId.SelectPerk, self, SelectPerkCallBack)
|
||||
self.curNpcRewardIdx = self.curNpcRewardIdx + 1
|
||||
table.insert(self.tbSelectPerks, tbResult[1])
|
||||
local tbThemePerkInfo = {}
|
||||
local stPerkInfo = CS.Lua2CSharpInfo_TPPerkInfo()
|
||||
stPerkInfo.perkId = tbResult[1]
|
||||
stPerkInfo.nCount = 1
|
||||
table.insert(tbThemePerkInfo, stPerkInfo)
|
||||
safe_call_cs_func(CS.AdventureModuleHelper.ChangeThemePerkIds, tbThemePerkInfo)
|
||||
local mapNpc = ConfigTable.GetData("NPC", nNpcId)
|
||||
if mapNpc.completeDestroy then
|
||||
safe_call_cs_func(CS.InteractiveManager.Instance.setInteractiveNpcState, CS.InteractiveManager.Instance, nNpcUid)
|
||||
end
|
||||
NovaAPI.DispatchEventWithData("PROLOGUELEVEL_SELECTPERK")
|
||||
end
|
||||
if mapBoxReward[self.nBoxId] == nil then
|
||||
printError(string.format("没有配置宝箱id为%d的奖励", self.nBoxId))
|
||||
return
|
||||
end
|
||||
local tbPerks = {}
|
||||
for _, nPerkId in ipairs(mapBoxReward[self.nBoxId]) do
|
||||
table.insert(tbPerks, {
|
||||
Id = nPerkId,
|
||||
Level = 1,
|
||||
nMaxLevel = 3
|
||||
})
|
||||
end
|
||||
local mapBag = {
|
||||
mapPerk = {},
|
||||
mapItem = {},
|
||||
mapSlotPerk = {
|
||||
[1] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
},
|
||||
[2] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
},
|
||||
[3] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
},
|
||||
[4] = {
|
||||
nPerkId = 0,
|
||||
nQty = 0,
|
||||
nMaxLevel = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
EventManager.Add(EventId.SelectPerk, self, SelectPerkCallBack)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.FRThemePerkSelect, {
|
||||
{Perks = tbPerks, Theme = 0}
|
||||
}, 0, mapBag, {}, true, true)
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_LevelStateChanged()
|
||||
self.bDesertComplete = true
|
||||
if 0 < #tbAfterDesertFloor and #tbAfterDesertFloor > self.curFloorIdx and not self.bBattleEnd then
|
||||
self:ChangeFloor()
|
||||
return
|
||||
end
|
||||
local function func_AvgEnd()
|
||||
EventManager.Remove("StoryDialog_DialogEnd", self, func_AvgEnd)
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true)
|
||||
self.parent:LevelEnd()
|
||||
end
|
||||
local function UnloadCallback()
|
||||
CS.GameCameraStackManager.Instance:CloseMainCamera(0.1)
|
||||
CS.ClientManager.Instance:CloseLoadingView(nil)
|
||||
PlayerData.Char:DeleteTrialChar()
|
||||
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, UnloadCallback)
|
||||
local ModuleManager = require("GameCore.Module.ModuleManager")
|
||||
if ModuleManager.GetIsAdventure() then
|
||||
NovaAPI.InputDisable()
|
||||
end
|
||||
if self.sAfterBattleAvg ~= "" then
|
||||
self.bBattleEnd = true
|
||||
self:SetLocalData()
|
||||
EventManager.Add("StoryDialog_DialogEnd", self, func_AvgEnd)
|
||||
EventManager.Hit("StoryDialog_DialogStart", self.sAfterBattleAvg, nil, self.nCurAvgCmdIdx)
|
||||
else
|
||||
func_AvgEnd()
|
||||
end
|
||||
end
|
||||
self:UnsetFloor()
|
||||
local ModuleManager = require("GameCore.Module.ModuleManager")
|
||||
if ModuleManager.GetIsAdventure() then
|
||||
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, UnloadCallback)
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true)
|
||||
NovaAPI.InputDisable()
|
||||
else
|
||||
UnloadCallback()
|
||||
end
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_ExitModule(_, sEnterModuleName)
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_AfterEnterModule(sEnterModuleName)
|
||||
if sEnterModuleName == "EmptyModuleScene" then
|
||||
local wait = function()
|
||||
self.bDesertComplete = true
|
||||
self:SetLocalData()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self.tbChar = {}
|
||||
self.tbTrialId = {}
|
||||
if #tbTrialCharacter[self.curFloorIdx] > 0 then
|
||||
PlayerData.Char:CreateTrialChar(tbTrialCharacter[self.curFloorIdx])
|
||||
for _, nTrialId in pairs(tbTrialCharacter[self.curFloorIdx]) do
|
||||
if 0 < nTrialId then
|
||||
local mapTrialChar = PlayerData.Char:GetTrialCharById(nTrialId)
|
||||
table.insert(self.tbChar, mapTrialChar.nId)
|
||||
table.insert(self.tbTrialId, nTrialId)
|
||||
end
|
||||
end
|
||||
end
|
||||
for _, nTrialId in ipairs(self.tbTrialId) do
|
||||
if 0 < nTrialId then
|
||||
local mapTrialChar = PlayerData.Char:GetTrialCharById(nTrialId)
|
||||
local tbstInfo, stActorInfo, nHeartStoneLevel = self.CalCharFixedEffectTrial(nTrialId)
|
||||
safe_call_cs_func(CS.AdventureModuleHelper.SetActorAttribute, mapTrialChar.nId, stActorInfo)
|
||||
end
|
||||
end
|
||||
self:SetFloor(2)
|
||||
CS.AdventureModuleHelper.EnterProloguelBattleMap(tbAfterDesertFloor[self.curFloorIdx], self.tbChar, {}, self.isThreePlayer, self.revivalPoint, self.btnNames)
|
||||
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
EventManager.Hit(EventId.CloesCurPanel)
|
||||
end
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_PrologueBattleReload()
|
||||
local function levelUnloadCallback()
|
||||
NovaAPI.EnterModule("EmptyModuleScene", true)
|
||||
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelUnloadCallback)
|
||||
end
|
||||
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelUnloadCallback)
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true)
|
||||
end
|
||||
function MainlinePrologueLevel:ChangeFloor()
|
||||
local function levelUnloadCallback()
|
||||
PlayerData.Char:DeleteTrialChar()
|
||||
self.curFloorIdx = self.curFloorIdx + 1
|
||||
NovaAPI.EnterModule("EmptyModuleScene", true)
|
||||
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelUnloadCallback)
|
||||
self.btnNames = {}
|
||||
self.revivalPoint = Vector3.zero
|
||||
self:SetLocalData()
|
||||
end
|
||||
local id = CS.AdventureModuleHelper.GetCurrentActivePlayer()
|
||||
self.curCharId = CS.AdventureModuleHelper.GetCharacterId(id)
|
||||
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelUnloadCallback)
|
||||
self:UnsetFloor()
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true)
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_LoadLevelRefresh()
|
||||
if self.curFloorIdx > 0 then
|
||||
for _, nTrialId in ipairs(self.tbTrialId) do
|
||||
if 0 < nTrialId then
|
||||
local tbstInfo, stActorInfo, nHeartStoneLevel = self.CalCharFixedEffectTrial(nTrialId)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_PrologueBattleArchive(isThreePlayer, revivalPoint, btnNames, nCmdId, nBoxId)
|
||||
if nCmdId == -1 then
|
||||
local lastAccount = LocalData.GetLocalData("LoginUIData", "LastUserName_All")
|
||||
LocalData.SetLocalData(lastAccount, "MainlinePrologueLevel", "")
|
||||
end
|
||||
self.nBoxId = nBoxId
|
||||
if isThreePlayer == nil then
|
||||
end
|
||||
self.isThreePlayer = isThreePlayer
|
||||
self.revivalPoint = revivalPoint == nil and Vector3.zero or revivalPoint
|
||||
btnNames = btnNames == nil and {
|
||||
[0] = "",
|
||||
Count = 1
|
||||
} or btnNames
|
||||
self.nCurAvgCmdIdx = nCmdId
|
||||
local tbNames = {}
|
||||
local nCount = btnNames.Count - 1
|
||||
for i = 0, nCount do
|
||||
table.insert(tbNames, btnNames[i])
|
||||
end
|
||||
self.btnNames = tbNames
|
||||
self:SetLocalData()
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_AdventureModuleEnter()
|
||||
if self.bDesertComplete then
|
||||
self:SetTheme()
|
||||
self:SetThemePerk()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Hud)
|
||||
end
|
||||
end
|
||||
function MainlinePrologueLevel:OnEvent_EnterModule()
|
||||
if not self.bDesertComplete then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Prologue, self.tbChar)
|
||||
else
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.PrologueAdventurePanel, self.tbChar)
|
||||
end
|
||||
end
|
||||
return MainlinePrologueLevel
|
||||
Reference in New Issue
Block a user