PGRData/Script/matrix/xmanager/XFubenRepeatChallengeManager.lua
2024-09-01 22:49:41 +02:00

365 lines
No EOL
15 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.

--V2.1 复刷关玩法重做(如果想找回旧复刷关的代码请从V2.0分支获取。)
XFubenRepeatChallengeManagerCreator = function()
local METHOD_NAME = { --请求协议
Reward = "RepeatChallengeRewardRequest", --请求奖励
}
local pairs = pairs
local tableInsert = table.insert
local stringGsub = string.gsub
local CurActivityId = XFubenRepeatChallengeConfigs.GetDefaultActivityId()
local GotRewardIdCheckDic = {} -- 已领取奖励Id记录
-- 活动等级信息
local LevelInfo = {
Level = 0,
Exp = 0,
DayExp = 0,
}
local AddLevelTip -- 权限等级增加提示
local XFubenRepeatChallengeManager = {}
---是否要重设界面状态(不打开详细界面)
local resetPanelState=false
XFubenRepeatChallengeManager.ExCostItemId = CS.XGame.ClientConfig:GetInt("FubenRepeatChallengeExCostItemId") --复刷关门票Id(展示用)
local GetIsFirstAutoFightOpenCookieKey = function ()
local activityId = XFubenRepeatChallengeConfigs.GetDefaultActivityId()
return "FubenRepeatChallengeIsFirstAutoFightOpen" .. XPlayer.Id .. activityId
end
function XFubenRepeatChallengeManager.Init() end
--======== 活动 功能开启相关 begin ============
--region 活动 功能开启相关
--活动是否开启
function XFubenRepeatChallengeManager.IsOpen()
local nowTime = XTime.GetServerNowTimestamp()
local beginTime = XFubenRepeatChallengeManager.GetActivityBeginTime()
local endTime = XFubenRepeatChallengeManager.GetActivityEndTime()
return beginTime <= nowTime and nowTime < endTime
end
--获取活动开启时间
function XFubenRepeatChallengeManager.GetActivityBeginTime()
local config = XFubenRepeatChallengeManager.GetActivityConfig()
return XFunctionManager.GetStartTimeByTimeId(config.ActivityTimeId)
end
--获取挑战开启时间
function XFubenRepeatChallengeManager.GetActivityChallengeBeginTime()
local config = XFubenRepeatChallengeManager.GetActivityConfig()
return XFunctionManager.GetStartTimeByTimeId(config.ChallengeTimeId)
end
--获取战斗结束时间
function XFubenRepeatChallengeManager.GetFightEndTime()
local config = XFubenRepeatChallengeManager.GetActivityConfig()
return XFunctionManager.GetEndTimeByTimeId(config.FightTimeId)
end
--获取活动结束时间
function XFubenRepeatChallengeManager.GetActivityEndTime()
local config = XFubenRepeatChallengeManager.GetActivityConfig()
return XFunctionManager.GetEndTimeByTimeId(config.ActivityTimeId)
end
--判断当前是否挑战开始状态?
function XFubenRepeatChallengeManager.IsStatusEqualChallengeBegin()
local now = XTime.GetServerNowTimestamp()
local challengeBeginTime = XFubenRepeatChallengeManager.GetActivityChallengeBeginTime()
local endTime = XFubenRepeatChallengeManager.GetActivityEndTime()
return challengeBeginTime <= now and now < endTime
end
--判断当前是否挑战结束状态?
function XFubenRepeatChallengeManager.IsStatusEqualFightEnd()
local now = XTime.GetServerNowTimestamp()
local fightEndTime = XFubenRepeatChallengeManager.GetFightEndTime()
local endTime = XFubenRepeatChallengeManager.GetActivityEndTime()
return fightEndTime <= now and now < endTime
end
--结束活动
function XFubenRepeatChallengeManager.OnActivityEnd()
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
return
end
XUiManager.TipText("ActivityRepeatChallengeOver")
XLuaUiManager.RunMain()
end
--获取活动设置
function XFubenRepeatChallengeManager.GetActivityConfig()
return XFubenRepeatChallengeConfigs.GetActivityConfig(CurActivityId)
end
--endregion
--======== 活动 功能开启相关 end ============
--======== 活动UI相关 end ============
--region 活动UI
-- 获取进度提示
function XFubenRepeatChallengeManager.ExGetProgressTip()
if XFubenRepeatChallengeManager.IsAutoFightOpen() then
return CS.XTextManager.GetText("ActivityRepeatChallengeAutoOpen")
else
local level = XFubenRepeatChallengeManager.GetLevel()
local maxLevel = XFubenRepeatChallengeConfigs.GetMaxLevel()
return CS.XTextManager.GetText("ActivityRepeatChallengeLevelTitle", level, maxLevel)
end
end
--endregion
-- 重写限时活动界面里基类的方法 在FubenManagerEx.Init()里使用
function XFubenRepeatChallengeManager:ExOverrideBaseMethod()
return {
ExGetRunningTimeStr = function(proxy)
local time = XTime.GetServerNowTimestamp()
local fightEndTime = XFubenRepeatChallengeManager.GetFightEndTime()
local activityEndTime = XFubenRepeatChallengeManager.GetActivityEndTime()
local shopStr = CsXTextManagerGetText("ActivityBranchShopLeftTime")
local fightStr = CsXTextManagerGetText("ActivityBranchFightLeftTime")
if XFubenRepeatChallengeManager.IsStatusEqualFightEnd() then
return shopStr .. XUiHelper.GetTime(activityEndTime - time, XUiHelper.TimeFormatType.ACTIVITY)
else
return fightStr .. XUiHelper.GetTime(fightEndTime - time, XUiHelper.TimeFormatType.ACTIVITY)
end
end,
ExGetProgressTip = function(proxy)
return XFubenRepeatChallengeManager.ExGetProgressTip()
end,
}
end
--======== 活动UI相关 end ============
--======== UI操作 begin ==========
--region UI操作
-- v1.31 直接打开商店,不带播放效果
function XFubenRepeatChallengeManager.OpenShop()
local skipId = XDataCenter.FubenRepeatChallengeManager.GetActivityConfig().ShopSkipId
XFunctionManager.SkipInterface(skipId)
end
-- v1.31 打开商店,可回调播放动画
function XFubenRepeatChallengeManager.OpenShopByCB(closeCb, openCb)
if not XFubenRepeatChallengeManager.IsOpen() then
XUiManager.TipText("ShopIsNotOpen")
return
end
local isOpen, desc = XActivityBrieIsOpen.Get(XActivityBriefConfigs.ActivityGroupId.ActivityBriefShop)
if not isOpen then
XUiManager.TipMsg(desc)
return
end
local functionId = XFunctionManager.FunctionName.ShopActive
local isOpen = XFunctionManager.JudgeCanOpen(functionId)
if not isOpen then
XUiManager.TipError(XFunctionManager.GetFunctionOpenCondition(functionId))
return
end
XDataCenter.ActivityBriefManager.OpenShop(closeCb, openCb)
end
--endregion
--======== UI操作 end ==========
--======== 获取UI数据 begin =========
--region 获取UI数据
--获取章节(改版后只有一个章节)
function XFubenRepeatChallengeManager.GetChapterId()
local chapterId = XFubenRepeatChallengeConfigs.GetActivityChapterId(CurActivityId)
return chapterId
end
--获取战斗关卡ID(改版后只有一个关卡)
function XFubenRepeatChallengeManager.GetStageId()
local stageId = XFubenRepeatChallengeConfigs.GetActivityStageId(CurActivityId)
return stageId
end
--获取权限等级
function XFubenRepeatChallengeManager.GetLevel()
return LevelInfo.Level
end
--获取下一个需要展示升级UI的权限等级
function XFubenRepeatChallengeManager.GetNextShowLevel()
for i = LevelInfo.Level + 1, XFubenRepeatChallengeConfigs.GetMaxLevel() do
local levelConfig = XFubenRepeatChallengeConfigs.GetLevelConfig(i)
if levelConfig.NeedShow then return i end
end
end
--获取权限总经验值
function XFubenRepeatChallengeManager.GetOriginExp()
return LevelInfo.Exp
end
--获取当前权限等级的经验值
function XFubenRepeatChallengeManager.GetExp()
local totalExp = LevelInfo.Exp
local level = XFubenRepeatChallengeManager.GetLevel()
for lv = 1, level - 1 do
local levelConfig = XFubenRepeatChallengeConfigs.GetLevelConfig(lv)
totalExp = totalExp - levelConfig.UpExp
end
return totalExp
end
--获取当日经验值?
function XFubenRepeatChallengeManager.GetDayExp()
return LevelInfo.DayExp
end
--获取权限BUFF的描述
function XFubenRepeatChallengeManager.GetBuffDes(buffId)
local fightEventCfg = buffId and buffId ~= 0 and CS.XNpcManager.GetFightEventTemplate(buffId)
return fightEventCfg and fightEventCfg.Description
end
--判断是否到达等级
function XFubenRepeatChallengeManager.IsLevelReach(checkLevel)
local level = XFubenRepeatChallengeManager.GetLevel()
return level >= checkLevel
end
function XFubenRepeatChallengeManager.GetActDescription()
local config = XFubenRepeatChallengeManager.GetActivityConfig()
return stringGsub(config.ActDescription, "\\n", "\n")
end
--获取奖励数据
function XFubenRepeatChallengeManager.GetRewardsData()
local datas = {}
local rewardConfigs = XFubenRepeatChallengeConfigs.GetRewardConfigs()
for _,configs in pairs(rewardConfigs) do
local data = {}
data.RewardId = configs.Id
data.RewardItemListId = configs.RewardId
data.canObtain = XConditionManager.CheckCondition(configs.Condition)
data.Desc = XConditionManager.GetConditionDescById(configs.Condition)
data.Obtained = GotRewardIdCheckDic[configs.Id]
table.insert(datas, data)
end
return datas
end
--endregion
--======== 获取UI数据 end =========
--======== 红点 begin =========
--获取是否有奖励红点
function XFubenRepeatChallengeManager.GetRewardRed()
local datas = XFubenRepeatChallengeManager.GetRewardsData()
for _,data in ipairs(datas) do
if data.canObtain and not data.Obtained then
return true
end
end
return false
end
--======== 红点 end =========
--======== 自动战斗 begin =========
--region 自动战斗
--检查是否开启了自动战斗
function XFubenRepeatChallengeManager.IsAutoFightOpen()
local level = XFubenRepeatChallengeManager.GetLevel()
return level >= XFubenRepeatChallengeConfigs.GetMaxLevel()
end
--检查是否第一次开启自动战斗(用来播放教程?)
function XFubenRepeatChallengeManager.GetIsFirstAutoFightOpen()
local isFirstAutoFightOpen = GetIsFirstAutoFightOpenCookieKey()
return XSaveTool.GetData(isFirstAutoFightOpen) or false
end
-- 本地缓存是否第一次开启自动作战
function XFubenRepeatChallengeManager.SetAutoFightOpen()
local isFirstAutoFightOpen = GetIsFirstAutoFightOpenCookieKey()
return XSaveTool.SaveData(isFirstAutoFightOpen, true)
end
--endregion
--======== 自动战斗 end =========
--==========请求 Begin===========--
--region 请求
-- 初始化关卡数据 设置关卡类型 FubenManager调用
function XFubenRepeatChallengeManager.InitStageInfo()
local configs = XFubenRepeatChallengeConfigs.GetStageConfigs()
for stageId, config in pairs(configs) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
if stageInfo then
stageInfo.Type = XDataCenter.FubenManager.StageType.RepeatChallenge
end
end
end
--检查预战斗数据
function XFubenRepeatChallengeManager.CheckPreFight(stage, challengeCount)
if not XDataCenter.FubenRepeatChallengeManager.IsOpen() then
XUiManager.TipText("ActivityRepeatChallengeOver")
return false
end
if XDataCenter.FubenRepeatChallengeManager.IsStatusEqualFightEnd() then
XUiManager.TipText("ActivityRepeatChallengeOver")
return false
end
local itemId, itemNum = XDataCenter.FubenManager.GetStageExCost(stage.StageId)
if XDataCenter.ItemManager.GetCount(itemId) < itemNum * challengeCount then
XUiManager.TipText("ActivityRepeatChallengeCostNotEnough")
return false
end
return true
end
--显示胜利结算
function XFubenRepeatChallengeManager.ShowReward(winData)
if not winData then return end
XLuaUiManager.Open("UiRepeatChallengeSettleWin", winData, AddLevelTip)
end
--请求获取奖励
function XFubenRepeatChallengeManager.RequesetGetReward(rewardId, rewardCB)
if not rewardId or rewardId == 0 then return end
if GotRewardIdCheckDic[rewardId] then return end
XNetwork.Call(METHOD_NAME.Reward, { Id = rewardId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
GotRewardIdCheckDic[rewardId] = true
if next(res.RewardGoodsList) then
XUiManager.OpenUiObtain(res.RewardGoodsList, nil,rewardCB)
end
end)
end
--endregion
--==========请求 End===========--
--数据更新通知
function XFubenRepeatChallengeManager.NotifyRepeatChallengeData(data)
CurActivityId = data.Id
LevelInfo = data.ExpInfo
XFubenRepeatChallengeManager.UpdateChapterGotRewardIds(data.RewardIds)
end
function XFubenRepeatChallengeManager.UpdateChapterGotRewardIds(rewardIds)
GotRewardIdCheckDic = {}
if not rewardIds then return end
for _, rewardId in pairs(rewardIds) do
GotRewardIdCheckDic[rewardId] = true
end
end
--权限等级数据通知
function XFubenRepeatChallengeManager.NotifyRcExpChange(data)
local addExp = data.ExpInfo.Exp - LevelInfo.Exp
LevelInfo = data.ExpInfo
if addExp > 0 then
AddLevelTip = addExp
end
end
function XFubenRepeatChallengeManager.ClearAddLevelTip()
AddLevelTip = nil
end
function XFubenRepeatChallengeManager.ResetPanelState(bool)
resetPanelState=bool
end
function XFubenRepeatChallengeManager.IsResetPanelState()
return resetPanelState
end
XFubenRepeatChallengeManager.Init()
return XFubenRepeatChallengeManager
end
XRpc.NotifyRepeatChallengeData = function(data)
XDataCenter.FubenRepeatChallengeManager.NotifyRepeatChallengeData(data)
end
XRpc.NotifyRcExpChange = function(data)
XDataCenter.FubenRepeatChallengeManager.NotifyRcExpChange(data)
end