forked from endernon/PGRData
328 lines
13 KiB
Lua
328 lines
13 KiB
Lua
XNewRegressionManagerCreator = function()
|
||
local DAY_SECOND = 24 * 60 * 60
|
||
local XNewRegressionManager = {}
|
||
local Config = nil
|
||
-- 签到管理
|
||
local SignInManager = nil
|
||
-- 邀请管理
|
||
local InviteManager = nil
|
||
-- 受邀管理
|
||
local FettersManager = nil
|
||
-- 抽奖管理字典
|
||
-- 和服务器对过,在时间较长的情况下理论存在两种抽奖
|
||
local GachaManagerDic = nil
|
||
-- 任务管理
|
||
local TaskManager = nil
|
||
-- 优惠商店管理
|
||
local ShopManager = nil
|
||
-- 玩家自身活动开启时间
|
||
local BeginTime = nil
|
||
-- 活动状态 XNewRegressionConfigs.ActivityState
|
||
local ActivityState = XNewRegressionConfigs.ActivityState.None
|
||
-- 激活的子活动管理器
|
||
local EnableChildManagers = nil
|
||
|
||
-- data : XRegression2DataDb
|
||
function XNewRegressionManager.InitWithServerData(data)
|
||
-- 活动数据
|
||
local activityData = data.ActivityData
|
||
-- 防御服务器推送空数据
|
||
if activityData == nil then return end
|
||
Config = XNewRegressionConfigs.GetActivityConfig(activityData.Id)
|
||
BeginTime = activityData.BeginTime
|
||
ActivityState = activityData.State
|
||
-- 清空子活动管理器
|
||
EnableChildManagers = {}
|
||
-- 签到数据
|
||
if data.SignInData then
|
||
XNewRegressionManager.GetSignInManager():InitWithServerData(data.SignInData)
|
||
XNewRegressionManager.GetSignInManager():SetContinueDay(Config.ContinueDays)
|
||
XNewRegressionManager.GetSignInManager():SetBeginTime(BeginTime)
|
||
table.insert(EnableChildManagers, XNewRegressionManager.GetSignInManager())
|
||
end
|
||
-- 邀请数据
|
||
if data.InviteData then
|
||
XNewRegressionManager.GetInviteManager():InitWithServerData(data.InviteData)
|
||
table.insert(EnableChildManagers, XNewRegressionManager.GetInviteManager())
|
||
table.insert(EnableChildManagers, XNewRegressionManager.GetFettersManager())
|
||
end
|
||
-- 抽奖数据
|
||
if data.GachaDatas then
|
||
for _, gachaData in ipairs(data.GachaDatas) do
|
||
if XNewRegressionConfigs.GetGachaConfig(gachaData.Id) ~= nil then
|
||
XNewRegressionManager.GetGachaManager(gachaData.Id):InitWithServerData(gachaData)
|
||
XNewRegressionManager.GetGachaManager(gachaData.Id):SetBeginTime(BeginTime)
|
||
table.insert(EnableChildManagers, XNewRegressionManager.GetGachaManager(gachaData.Id))
|
||
end
|
||
end
|
||
end
|
||
-- 任务数据
|
||
-- 回归玩家的任务
|
||
if ActivityState == XNewRegressionConfigs.ActivityState.InRegression and Config.InRegressionTaskId > 0 then
|
||
XNewRegressionManager.GetTaskManager():InitWithConfigId(Config.InRegressionTaskId)
|
||
table.insert(EnableChildManagers, XNewRegressionManager.GetTaskManager())
|
||
-- 活跃玩家的任务
|
||
elseif ActivityState == XNewRegressionConfigs.ActivityState.NotInRegression and Config.NotInRegressionTaskId > 0 then
|
||
XNewRegressionManager.GetTaskManager():InitWithConfigId(Config.NotInRegressionTaskId)
|
||
table.insert(EnableChildManagers, XNewRegressionManager.GetTaskManager())
|
||
end
|
||
-- --优惠商店
|
||
local shopManager = XNewRegressionManager.GetShopManager()
|
||
table.insert(EnableChildManagers, shopManager)
|
||
end
|
||
|
||
-- 检查是否需要自动弹窗
|
||
function XNewRegressionManager.CheckIsNeedAutoWindow()
|
||
if ActivityState ~= XNewRegressionConfigs.ActivityState.InRegression then
|
||
return false
|
||
end
|
||
if XSaveTool.GetData(XNewRegressionManager.GetLocalSaveKey() .. "CheckIsNeedAutoWindow") then
|
||
return false
|
||
end
|
||
XSaveTool.SaveData(XNewRegressionManager.GetLocalSaveKey() .. "CheckIsNeedAutoWindow", true)
|
||
return true
|
||
end
|
||
|
||
function XNewRegressionManager.GetLocalSaveKey()
|
||
return Config.Id .. XPlayer.Id .. "XNewRegressionManager"
|
||
end
|
||
|
||
function XNewRegressionManager.GetSignInManager()
|
||
if SignInManager == nil then
|
||
local script = require("XEntity/XNewRegression/Sign/XSignInManager")
|
||
SignInManager = script.New(Config.Id)
|
||
end
|
||
return SignInManager
|
||
end
|
||
|
||
function XNewRegressionManager.GetInviteManager()
|
||
if InviteManager == nil then
|
||
local script = require("XEntity/XNewRegression/Invite/XInviteManager")
|
||
InviteManager = script.New()
|
||
end
|
||
return InviteManager
|
||
end
|
||
|
||
function XNewRegressionManager.GetFettersManager()
|
||
if FettersManager == nil then
|
||
local script = require("XEntity/XNewRegression/Invite/XFettersManager")
|
||
FettersManager = script.New()
|
||
end
|
||
return FettersManager
|
||
end
|
||
|
||
function XNewRegressionManager.GetGachaManager(id)
|
||
GachaManagerDic = GachaManagerDic or {}
|
||
if GachaManagerDic[id] == nil then
|
||
local script = require("XEntity/XNewRegression/Gacha/XGachaManager")
|
||
GachaManagerDic[id] = script.New(id)
|
||
end
|
||
return GachaManagerDic[id]
|
||
end
|
||
|
||
function XNewRegressionManager.GetTaskManager()
|
||
if TaskManager == nil then
|
||
local script = require("XEntity/XNewRegression/Task/XTaskManager")
|
||
TaskManager = script.New()
|
||
end
|
||
return TaskManager
|
||
end
|
||
|
||
function XNewRegressionManager.GetShopManager()
|
||
if ShopManager == nil then
|
||
local script = require("XEntity/XNewRegression/Discount/XDiscountManager")
|
||
ShopManager = script.New()
|
||
end
|
||
return ShopManager
|
||
end
|
||
|
||
function XNewRegressionManager.OpenMainUi()
|
||
if not XNewRegressionManager.GetIsOpen(true) then
|
||
return
|
||
end
|
||
XLuaUiManager.Open("UiReturnActivity")
|
||
end
|
||
|
||
function XNewRegressionManager.GetAssetItemIds()
|
||
local result = {}
|
||
-- 避免重复的情况
|
||
local hashMap = {}
|
||
local consumeId
|
||
for id, manager in pairs(GachaManagerDic or {}) do
|
||
consumeId = manager:GetConsumeId()
|
||
if hashMap[consumeId] == nil then
|
||
table.insert(result, consumeId)
|
||
end
|
||
hashMap[consumeId] = true
|
||
end
|
||
return result
|
||
end
|
||
|
||
-- 获取活动状态
|
||
function XNewRegressionManager.GetActivityState()
|
||
return ActivityState
|
||
end
|
||
|
||
function XNewRegressionManager.HandleActivityEndTime()
|
||
XLuaUiManager.RunMain()
|
||
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
|
||
end
|
||
|
||
-- 获取活动开始时间
|
||
function XNewRegressionManager.GetStartTime(activityState)
|
||
if activityState == nil then activityState = ActivityState end
|
||
-- 回归用户
|
||
if activityState == XNewRegressionConfigs.ActivityState.InRegression then
|
||
return BeginTime
|
||
-- 活跃用户
|
||
elseif activityState == XNewRegressionConfigs.ActivityState.NotInRegression then
|
||
return XNewRegressionManager.GetInviteManager():GetStartTime()
|
||
end
|
||
return 0
|
||
end
|
||
|
||
-- 获取活动结束时间
|
||
function XNewRegressionManager.GetEndTime(activityState)
|
||
if activityState == nil then activityState = ActivityState end
|
||
-- 回归用户,下一天的时间为上午5点
|
||
if activityState == XNewRegressionConfigs.ActivityState.InRegression then
|
||
local continueDay = Config and Config.ContinueDays or 0
|
||
local biginTime = BeginTime or 0
|
||
local endTime = biginTime + continueDay * DAY_SECOND
|
||
return XTime.GetTimeDayFreshTime(endTime)
|
||
-- 活跃用户和结束回归的用户
|
||
elseif activityState == XNewRegressionConfigs.ActivityState.NotInRegression or activityState == XNewRegressionConfigs.ActivityState.RegressionEnded then
|
||
return XNewRegressionManager.GetInviteManager():GetEndTime()
|
||
end
|
||
return 0
|
||
end
|
||
|
||
-- 获取活动剩余时间描述
|
||
function XNewRegressionManager.GetLeaveTimeStr(timeFormatType, activityState)
|
||
timeFormatType = timeFormatType or XUiHelper.TimeFormatType.NEW_REGRESSION
|
||
local activityState = activityState or XNewRegressionManager.GetActivityState()
|
||
local endTime = XNewRegressionManager.GetEndTime(activityState)
|
||
return XUiHelper.GetTime(endTime - XTime.GetServerNowTimestamp(), timeFormatType)
|
||
end
|
||
|
||
function XNewRegressionManager.GetIsOpen(showTip)
|
||
if Config and XPlayer.GetLevel() < Config.Level then
|
||
if showTip then
|
||
XUiManager.TipErrorWithKey("LevelNotEnough")
|
||
end
|
||
return false
|
||
end
|
||
|
||
local activityState = XNewRegressionManager.GetActivityState()
|
||
if activityState ~= XNewRegressionConfigs.ActivityState.InRegression and
|
||
activityState ~= XNewRegressionConfigs.ActivityState.NotInRegression and
|
||
activityState ~= XNewRegressionConfigs.ActivityState.RegressionEnded then
|
||
if showTip then
|
||
XUiManager.TipErrorWithKey("ActivityAlreadyOver")
|
||
end
|
||
return false
|
||
end
|
||
|
||
if not XNewRegressionManager.GetIsInTime(activityState) then
|
||
if showTip then
|
||
XUiManager.TipErrorWithKey("ActivityAlreadyOver")
|
||
end
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
function XNewRegressionManager.GetIsOpenByActivityState(state, showTip)
|
||
local activityState = XNewRegressionManager.GetActivityState()
|
||
if activityState ~= state then
|
||
return false
|
||
end
|
||
return XNewRegressionManager.GetIsOpen(showTip)
|
||
end
|
||
|
||
-- 获取活动是否在开启时间内
|
||
function XNewRegressionManager.GetIsInTime(activityState)
|
||
if activityState == nil then activityState = ActivityState end
|
||
if activityState == XNewRegressionConfigs.ActivityState.NotInRegression or activityState == XNewRegressionConfigs.ActivityState.RegressionEnded then
|
||
return XNewRegressionManager.GetInviteManager():IsActivityOpen()
|
||
end
|
||
|
||
local endTime = XNewRegressionManager.GetEndTime(activityState)
|
||
return endTime > XTime.GetServerNowTimestamp()
|
||
end
|
||
|
||
-- 获取活动帮助id
|
||
function XNewRegressionManager.GetHelpId()
|
||
return XHelpCourseConfig.GetHelpCourseTemplateById(Config.HelpId).Function
|
||
end
|
||
|
||
function XNewRegressionManager.GetEnableChildManagers()
|
||
if EnableChildManagers == nil then return {} end
|
||
local result = {}
|
||
local manager
|
||
-- 排除掉没有开启的
|
||
for i = #EnableChildManagers, 1, -1 do
|
||
manager = EnableChildManagers[i]
|
||
if manager:GetIsOpen() then
|
||
table.insert(result, manager)
|
||
end
|
||
end
|
||
table.sort(result, function(managerA, managerB)
|
||
return managerA:GetButtonWeight() < managerB:GetButtonWeight()
|
||
end)
|
||
return result
|
||
end
|
||
|
||
function XNewRegressionManager.GetStoryId()
|
||
return Config.StoryId
|
||
end
|
||
|
||
function XNewRegressionManager.GetActivityContinueDays()
|
||
return Config and Config.ContinueDays or 0
|
||
end
|
||
|
||
------------------回归自动播放剧情 begin-------------------
|
||
local GetLocalSavedStoryKey = function()
|
||
local id = Config.Id or 0
|
||
local beginTime = BeginTime or 0
|
||
return string.format("%s%d%d%d", "NewRegressionAutoStory", XPlayer.Id, id, beginTime)
|
||
end
|
||
|
||
function XNewRegressionManager.CheckAutoPlayStory()
|
||
local activityState = XNewRegressionManager.GetActivityState()
|
||
if activityState ~= XNewRegressionConfigs.ActivityState.InRegression then
|
||
return
|
||
end
|
||
|
||
local localSavedKey = GetLocalSavedStoryKey()
|
||
if XSaveTool.GetData(localSavedKey) then
|
||
return
|
||
end
|
||
|
||
local storyId = XNewRegressionManager.GetStoryId()
|
||
if XTool.IsNumberValid(storyId) then
|
||
XDataCenter.MovieManager.PlayMovie(storyId)
|
||
XSaveTool.SaveData(localSavedKey, true)
|
||
end
|
||
end
|
||
------------------回归自动播放剧情 end---------------------
|
||
|
||
return XNewRegressionManager
|
||
end
|
||
|
||
XRpc.NotifyRegression2Data = function(data)
|
||
XDataCenter.NewRegressionManager.InitWithServerData(data.Data)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_NEW_REGRESSION_OPEN_STATUS_UPDATE)
|
||
end
|
||
|
||
XRpc.NotifyRegression2SignInData = function(data)
|
||
XDataCenter.NewRegressionManager.GetSignInManager():UpdateWithServerData(data)
|
||
end
|
||
|
||
XRpc.NotifyRegression2InvitePoint = function(data)
|
||
XDataCenter.NewRegressionManager.GetInviteManager():UpdateWithServerData(data)
|
||
end
|
||
|
||
XRpc.NotifyRegression2GachaChangedGroupDatas = function(data)
|
||
XDataCenter.NewRegressionManager.GetGachaManager(data.Id):UpdateWithServerData(data)
|
||
end
|