ro-webgl/Assets/Lua/Managers/LuaGameMgr.lua

592 lines
22 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local LuaGameMgr = class("LuaGameMgr", function()
return GameMgr.Instance
end)
function LuaGameMgr:ctor()
self:SetOnSceneLoadedLuaFunc(self.OnSceneLoadedInLua)
self:SetLuaPlayStoryFunc(self.PlayStory)
self:SdkInitFunc(self.SdkInitResult)
self:SdkLoginFunc(self.SdkLoginResult)
self:SdkLogoutFunc(self.SdkLogoutResult)
self:SdkPayFunc(self.SdkPayResult)
self:SdkQuestionFunc(self.UrlQuestionRewardResult)
self:UIBattle_streamer_act_Func(self.UIBattle_streamer_act)
self.newbieActors = nil
self.IsCreateRole = false
self.loadingPageOk = false
self.IsActivationCodeMode = false
self.showNiewbieLoading = false
self.registerEvents = false
self.isPreloadedFellow = false
self.sdkInited = Enum.ParamState.None
self.sdkLogined = Enum.ParamState.None
self.token = ''
self.openId = ''
self.platform = ''
self.channelName = ''
self.serverData = {}
self.killSmallMonsterCount = 0
end
function LuaGameMgr:SendBattleRecordReq(recordType,params)
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_PLAYER_BATTLE_RECORD_REQ, {record_type = recordType, param_list = params})
end
function LuaGameMgr:OnSceneLoadedInLua(sceneType,mode)
if sceneType == SceneType.CreateRoleScene then
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.CreateRoleState.stateId)
elseif sceneType == SceneType.NormalBattleScene then
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.BattleState.stateId)
elseif sceneType == SceneType.GuildLobbyScene then
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.GuildLobbyState.stateId)
elseif sceneType == SceneType.TowerBattleScene then
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.DojoState.stateId, mode)
elseif sceneType == SceneType.BossBattleScene then
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.BossBattleState.stateId,mode)
elseif sceneType == SceneType.TimeBattleScene then
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.TimeBattleState.stateId,mode)
end
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Close)
end
function LuaGameMgr:Destroy()
if tolua.getpeer(self) ~= nil then
tolua.setpeer(self, nil)
end
end
function LuaGameMgr:SdkInitResult(success,platformName)
self.platform = platformName
self.sdkInited = (success and Enum.ParamState.Success or Enum.ParamState.Fail)
end
function LuaGameMgr:SdkLoginResult(success,openId,token,isSwitchAccount)
local lastSdkLogined = self.sdkLogined
self.sdkLogined = (success and Enum.ParamState.Success or Enum.ParamState.Fail)
self.token = token or ''
self.openId = openId or ''
if success then
if isSwitchAccount then
if lastSdkLogined == Enum.ParamState.Success then
if ManagerContainer.DataMgr.UserData:IsInitedOver() then
ManagerContainer.DataMgr.UserData:SDKExitGame()
end
self:ClearServerData()
self:ReLogin()
end
end
end
end
function LuaGameMgr:SdkLogoutResult()
if ManagerContainer.DataMgr.UserData:IsInitedOver() then
ManagerContainer.DataMgr.UserData:SDKExitGame()
end
local lastSdkLogined = self.sdkLogined
self.sdkLogined = Enum.ParamState.Fail
self.token = ''
self.openId = ''
if lastSdkLogined == Enum.ParamState.Success then
self:ClearServerData()
self:ReLogin()
end
end
function LuaGameMgr:SdkPayResult(success)
ManagerContainer.PayMgr:SdkPayResult(success)
end
function LuaGameMgr:InitServerData(id, name, ip, ports, state)
self.serverData.id = id
self.serverData.name = name
self.serverData.ip = ip
self.serverData.ports = ports
self.serverData.state = state
self.serverData.portidx = nil
end
function LuaGameMgr:ClearServerData()
self.serverData = {}
end
function LuaGameMgr:ComposeCommonServerInfo(url)
local openId = self.openId
if openId and openId ~= '' then
url = url .. '&openid=' .. tostring(openId)
end
local platform = self.platform
if platform and platform ~= '' then
url = url .. '&platform=' .. tostring(platform)
end
local subplatform = self.channelName
if subplatform and subplatform ~= '' then
url = url .. '&sub_platform=' .. tostring(subplatform)
end
local resVer = self.ResVersion
if resVer and resVer ~= '' then
url = url .. '&resver=' .. tostring(resVer)
end
url = url .. '&timesamp=' .. tostring(os.time())
return url
end
--进入创建角色场景
function LuaGameMgr:EnterCreateRole(activedCode)
self.IsCreateRole = true
self.IsActivationCodeMode = activedCode
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ENTER_CREATE_ROLE)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.CreateRoleScene)
end
--进入战斗
function LuaGameMgr:EnterBattle(first)
if ManagerContainer.FSMMgr:IsBattleState() then
--ManagerContainer.LuaUIMgr:HideAllPagesExceptId(Enum.UIPageName.UIBattle)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattle)
return;
end
if first == false then
local nloadingId = 3
if self.showNiewbieLoading then
nloadingId = 2
self.showNiewbieLoading = false
end
self:OpenLoading(Enum.UIPageName.UILoading,{loadingId = nloadingId})
end
--ManagerContainer.LuaActorAttributeMgr:SyncServerActorDataToLocal()
--清空断线后 返回巡游 残留的远征BUFF
ManagerContainer.LuaActorDataMgr:ResetData()
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.NormalBattleScene,first)
end
--进入公会大厅
function LuaGameMgr:EnterGuildLobby()
if ManagerContainer.FSMMgr:IsGuildLobbyState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.GuildLobbyScene)
end
--进入道场
function LuaGameMgr:EnterDojo(sceneName, ourActors, enemyActors,OurMarks, IsPresspoint,nPresspoint,battleEndConds)
if ManagerContainer.FSMMgr:IsDojoState() then
return;
end
local param = {}
param["mode"] = BattleSubMode.Arena
param["sceneName"] = sceneName
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["battleEndConds"] = battleEndConds
param["OurBattleMarks"] = OurMarks
param["IsPresspoint"] = IsPresspoint
param["nPresspoint"] = nPresspoint
-- self:OpenLoading(Enum.UIPageName.UILoading)
self:OpenLoading(Enum.UIPageName.UIDojoMatch, param)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TowerBattleScene, param)
end
function LuaGameMgr:EnterHundredDojo(sceneName, ourActors, enemyActors, maxFightingTime,OurMarks,IsPresspoint,nPresspoint, battleEndConds)
if ManagerContainer.FSMMgr:IsDojoState() then
return;
end
local param = {}
param["mode"] = BattleSubMode.HundredDojo
param["sceneName"] = sceneName
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["maxFightingTime"] = maxFightingTime
param["OurBattleMarks"] = OurMarks
param["IsPresspoint"] = IsPresspoint
param["nPresspoint"] = nPresspoint
param["battleEndConds"] = battleEndConds
self:OpenLoading(Enum.UIPageName.UIDojoMatch, param)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TowerBattleScene, param)
end
--工会战
function LuaGameMgr:EnterGvGBattle(sceneName, ourActors, enemyActors, maxFightingTime, battleEndConds,OurMarksDatas,EnemyMarksDatas,IsPresspoint,nPresspoint)
if ManagerContainer.FSMMgr:IsDojoState() then
return;
end
local param = {}
param["mode"] = BattleSubMode.GvG
param["sceneName"] = sceneName
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["maxFightingTime"] = maxFightingTime
param["battleEndConds"] = battleEndConds
param["OurBattleMarks"] = OurMarksDatas
param["EnemyBattleMarks"] = EnemyMarksDatas
param["IsPresspoint"] = IsPresspoint
param["nPresspoint"] = nPresspoint
self:OpenLoading(Enum.UIPageName.UIDojoMatch, param)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TowerBattleScene, param)
end
function LuaGameMgr:EnterVoyageBattle(sceneName, ourActors, enemyActors, maxFightingTime, ourMarks,IsPresspoint,nPresspoint, battleEndConds)
if ManagerContainer.FSMMgr:IsDojoState() then
return;
end
local param = {}
param["mode"] = BattleSubMode.Voyage
param["sceneName"] = sceneName
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["maxFightingTime"] = maxFightingTime
param["battleEndConds"] = battleEndConds
param["OurBattleMarks"] = ourMarks
param["IsPresspoint"] = IsPresspoint
param["nPresspoint"] = nPresspoint
self:OpenLoading(Enum.UIPageName.UIDojoMatch, param)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TowerBattleScene, param)
end
-- 进入资源副本战斗
function LuaGameMgr:EnterResourceBattle(sceneName,bgmMusic,maxFightingTime,ourActors,enemyActors,battleEndConds)
if ManagerContainer.FSMMgr:IsTimeBattleState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading)
local param = {}
param["mode"] = BattleSubMode.Resource
param["sceneName"] = sceneName
param["bgmMusic"] = bgmMusic
param["maxFightingTime"] = maxFightingTime
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["battleEndConds"] = battleEndConds
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TimeBattleScene, param)
end
-- 进入公会狩猎boss战斗
function LuaGameMgr:EnterGuildHuntBattle(sceneName, bgmMusic, maxFightingTime, ourActors, enemyActors, battleEndConds)
if ManagerContainer.FSMMgr:IsTimeBattleState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading)
local param = {}
param["mode"] = BattleSubMode.Guild
param["sceneName"] = sceneName
param["bgmMusic"] = bgmMusic
param["maxFightingTime"] = maxFightingTime
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["battleEndConds"] = battleEndConds
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TimeBattleScene, param)
end
-- 进入公会魔王boss战斗
function LuaGameMgr:EnterGuildHuntExBattle(sceneName, bgmMusic, maxFightingTime, ourActors, enemyActors, battleEndConds)
if ManagerContainer.FSMMgr:IsTimeBattleState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading)
local param = {}
param["mode"] = BattleSubMode.GuildEx
param["sceneName"] = sceneName
param["bgmMusic"] = bgmMusic
param["maxFightingTime"] = maxFightingTime
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["battleEndConds"] = battleEndConds
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TimeBattleScene, param)
end
-- 进入爬塔战斗
function LuaGameMgr:EnterClimbingTowerBattle(sceneName,bgmMusic,maxFightingTime,ourActors,enemyActors,battleEndConds,recordStr,battleFactors,replayername)
if ManagerContainer.FSMMgr:IsTimeBattleState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading)
local param = {}
param["mode"] = BattleSubMode.ClimbingTower
param["sceneName"] = sceneName
param["bgmMusic"] = bgmMusic
param["maxFightingTime"] = maxFightingTime
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["battleEndConds"] = battleEndConds
param["battleRecordStr"] = recordStr
param["battleFactors"] = battleFactors
if param["battleRecordStr"] ~= nil then
param["replayername"] = replayername
end
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TimeBattleScene, param)
end
--PVP 爬塔
function LuaGameMgr:EnterClimbingTowerBattlePvP(sceneName, bgmMusic,maxFightingTime,ourActors, enemyActors,OurMarks, IsPresspoint,nPresspoint,battleEndConds)
if ManagerContainer.FSMMgr:IsDojoState() then
return;
end
self:OpenLoading(Enum.UIPageName.UILoading)
local param = {}
param["mode"] = BattleSubMode.PvPClimbinglower
param["sceneName"] = sceneName
param["bgmMusic"] = bgmMusic
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["maxFightingTime"] = maxFightingTime
param["OurBattleMarks"] = OurMarks
param["IsPresspoint"] = IsPresspoint
param["nPresspoint"] = nPresspoint
param["battleEndConds"] = battleEndConds
--self:OpenLoading(Enum.UIPageName.UIDojoMatch, param)
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TowerBattleScene, param)
end
-- 进入远征之门战斗
function LuaGameMgr:EnterExpeditionBattle(sceneName,bgmMusic,maxFightingTime,ourActors,enemyActors,nloadingId,serverActorData,battleEndConds,RestoreSp)
if ManagerContainer.FSMMgr:IsTimeBattleState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading,{loadingId = nloadingId})
local param = {}
param["mode"] = BattleSubMode.Expedition
param["sceneName"] = sceneName
param["bgmMusic"] = bgmMusic
param["maxFightingTime"] = maxFightingTime
param["ourActors"] = ourActors
param["enemyActors"] = enemyActors
param["battleEndConds"] = battleEndConds
param["serverActorData"] = serverActorData
param['RestoreSp'] = RestoreSp
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.TimeBattleScene, param)
end
--- 进入世界boss
---@param actorDatas Array<ActorData> 进入挑战的其它玩家信息
---@param summonId boss等配置Id
---@param summonScene 战斗场景配置Id
function LuaGameMgr:EnterWorldBoss(actorDatas, summonId, summonScene,battleEndConds)
if ManagerContainer.FSMMgr:IsBossBattleState() then
return
end
self:OpenLoading(Enum.UIPageName.UILoading)
local param ={}
param["actors"] = actorDatas
param["bossId"] = summonId
param["sceneId"] = summonScene
param["bossMode"] = BattleSubMode.WorldBoss
param["battleEndConds"] = battleEndConds
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.BossBattleScene, param)
end
function LuaGameMgr:EnterNewbie()
if ManagerContainer.FSMMgr:IsBossBattleState() then
return
end
if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UILanuch) == false then
self:OpenLoading(Enum.UIPageName.UILoading,{loadingId = 1})
end
-- local param ={}
-- param["sceneId"] = 2
-- param["bossMode"] = BattleSubMode.NewbieBoss
-- ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.LoadingState.stateId, SceneType.BossBattleScene, param)
-- self:ShowNewbieLoading()
self:EnterBattle(true)
end
-- TODO在这里检查是否要播放剧情
function LuaGameMgr:CheckPlayCurrLevelStory(checkRecord)
local levelUniqueId = ManagerContainer.LuaBattleMgr:GetCurLevelUniqueId()
local storyCfg = ManagerContainer.CfgMgr:GetStoryCfgV2ByLevelId(levelUniqueId)
if storyCfg and storyCfg.Type == 0 then
if checkRecord then
local record = ManagerContainer.DataMgr.StoryData:IsStoryPlay(storyCfg.StoryId)
if record then
return
end
end
FrameTimer.New(function()
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayStory, storyCfg)
end, 5):Start()
end
--local levelCfgData = ManagerContainer.CfgMgr:GetLevelDataById(levelUniqueId)
-- if levelCfgData['DlgContentId'] and levelCfgData['DlgContentId'] > 0 then
-- local storyId = levelCfgData['DlgContentId']
-- local condition = levelUniqueId
-- LogError("LuaGameMgr:CheckPlayCurrLevelStory levelUniqueId="..levelUniqueId.." storyId="..storyId)
-- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UISTORY_CONDITION_TRIGGER, Enum.UIStoryCondType.LevelStory, condition, storyId)
-- end
end
--- 播放剧情动画
local storyTimer = nil
function LuaGameMgr:PlayStory(storyType, storyId)
--[[
LogError("[LuaGameMgr] 1. PlayStory storyType="..storyType..", storyId="..storyId)
if storyType == Enum.StoryType.Dlg then
if storyId <= 0 then
storyId = self:GetCurStoryId()
end
if storyId then
ManagerContainer.UIStoryMgr:StartStoryByStoryId(tonumber(storyId)*10)
return
end
elseif storyType == Enum.StoryType.EnterNewMap then
if storyId <= 0 then
storyId = self:GetCurStoryId()
end
-- TODO: 把播放剧情的方式,好好梳理清楚!!!!!
-- TIP: here storyId is Chapter, config in LevelCfg.lua
-- 在StoryChapterCfg.lua中的DlgId中配置了真正的StoryId
-- local StoryChapterCfg = {
-- [1]={
-- ['Id']=1,
-- ['Name']='序章',
-- ['Content']='国王之怒',
-- ['Icon']='UIChapter/chapter_logo',
-- ['DlgId']=135,
-- ['CanSkip']=true,
-- ['ForceGuide']=1,
-- },
if storyId then
if storyTimer then
ManagerContainer.LuaTimerMgr:RemoveTimer(storyTimer)
end
storyTimer = ManagerContainer.LuaTimerMgr:AddTimer(500, 1, nil, function()
LogError("[LuaGameMgr] 2. PlayStory storyType="..storyType..", storyId="..storyId)
if ManagerContainer.StoryMgr:StartStoryChapterById(storyId) then
LogError("[LuaGameMgr] StartStoryChapterById success")
return
end
end, nil)
end
end
self:StopStory(storyType)
]]
self:StopStory(storyType)
end
function LuaGameMgr:GetCurStoryId()
local luaBattleMgr = ManagerContainer.LuaBattleMgr
if not luaBattleMgr then return nil end
local id = luaBattleMgr:GetCurLevelUniqueId()
if not id then return nil end
local cfgMgr = ManagerContainer.CfgMgr
if not cfgMgr then return nil end
local levelCfgData = cfgMgr:GetLevelDataById(id)
if not levelCfgData then return nil end
return levelCfgData.DlgContentId
end
function LuaGameMgr:StopStory(storyType)
LuaBattleBridge.CurStoryOver(storyType)
end
function LuaGameMgr:SetCreateRoleStatus(status)
self.IsCreateRole = status
end
function LuaGameMgr:OpenLoading(pageId,param)
self.loadingPageOk = false
ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_Loaded_Page_OK, self, self.OnLoadingPageOk)
ManagerContainer.LuaUIMgr:Open(pageId,param)
end
function LuaGameMgr:OnLoadingPageOk()
self.loadingPageOk = true
ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_Loaded_Page_OK, self, self.OnLoadingPageOk)
end
function LuaGameMgr:LoadCommonUIAssets()
ManagerContainer.ResMgr:LoadAssetGameObjects(Constants.EffectPath, ELoadType.OTHER, function()
end, unpack(Constant.Quality_FX))
ManagerContainer.ResMgr:InitCommonMats()
end
function LuaGameMgr:ShowNewbieLoading()
self.showNiewbieLoading = true
end
function LuaGameMgr:LuaSaveGameSpeed(speed)
self:SaveGameSpeed(speed)
local uid = ManagerContainer.DataMgr.UserData:GetUserId()
UnityEngine.PlayerPrefs.SetString(tostring(uid).."_GameSpeed",tostring(speed))
end
function LuaGameMgr:LoadGameSpeed()
local uid = ManagerContainer.DataMgr.UserData:GetUserId()
local speedStr = UnityEngine.PlayerPrefs.GetString(tostring(uid).."_GameSpeed")
if speedStr ~= nil and speedStr ~= "" then
self:SaveGameSpeed(tonumber(speedStr))
else
self:SaveGameSpeed(1)
end
end
function LuaGameMgr:PreloadFellowsModel()
if self.isPreloadedFellow == true then
return
end
local partnerDatas = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
local fellows = System.Array.CreateInstance(Enum.TypeInfo.ActorData,#partnerDatas)
local idx = 0
for _,v in pairs(partnerDatas) do
if v ~= nil and not v.isBattle then
local fellowActor = ActorData.CreateFellowActor(v.configId)
fellows[idx] = fellowActor
idx = idx + 1
end
end
self:PreloadAllFellows(fellows)
self.isPreloadedFellow = true
end
function LuaGameMgr:UrlQuestionRewardResult(success)
if success then
ManagerContainer.DataMgr.UserData:SendQuestionReward()
end
end
function LuaGameMgr:UIBattle_streamer_act()
LogWarning("tzy_uibattle_streamer_act")
-- 获取 UIBattle 页面的视图控制器
local battlePage = ManagerContainer.LuaUIMgr:GetPage(Enum.UIPageName.UIBattle)
if battlePage and battlePage.MLuaTable then
local battleView = battlePage.MLuaTable
-- 调用 UIBattleView 中的流媒体动作方法
battleView:Set_Streamer_Act()
else
LogWarning("UIBattle page is not open or not found")
end
end
function LuaGameMgr:EnterLiveRoom(liveRoomId)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UILiveRoom)
self:OpenLoading(Enum.UIPageName.UILoading)
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Progress, 1)
ManagerContainer.LuaTimerMgr:AddTimer(2000, 1, nil, function()
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Close)
end, nil)
end
return LuaGameMgr