forked from endernon/PGRData
365 lines
No EOL
15 KiB
Lua
365 lines
No EOL
15 KiB
Lua
--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 |