PGRData/Script/matrix/xmanager/XHitMouseManager.lua

385 lines
13 KiB
Lua
Raw Normal View History

--===================
--2022年元旦预热小游戏打地鼠活动
--===================
XHitMouseManagerCreator = function()
local HitMouseManager = {}
local ActivityId
local function GetActivityConfig()
if not ActivityId or (ActivityId <= 0) then return end
return XHitMouseConfigs.GetCfgByIdKey(
XHitMouseConfigs.TableKey.Activity,
ActivityId
)
end
local StageScores
--================
--已接受奖励的下标注意后端接受的下标从0开始要+1处理
--================
local RewardIndexReceived
--================
--请求协议名称
--================
local REQUEST_NAMES = { --请求名称
StageUnlock = "HitMouseUnlockRequest",
GameFinish = "FinishHitMouseRequest",
GetRewards = "HitMouseGetAwardRequest",
}
--=====================================
--临时Test方法 Start
--=====================================
function HitMouseManager.TestStageUnlock()
HitMouseManager.StageUnlock(2)
end
function HitMouseManager.TestGameFinish()
HitMouseManager.GameFinish(2, 0)
end
function HitMouseManager.TestGetRewards()
HitMouseManager.GetRewards()
end
--=====================================
--临时Test方法 End
--=====================================
function HitMouseManager.Init()
ActivityId = 1--nil
StageScores = {}
RewardIndexReceived = {}
end
function HitMouseManager.InitData(data)
if data.ActivityId == 0 then
if ActivityId and ActivityId > 0 then
XEventManager.DispatchEvent(XEventId.EVENT_HIT_MOUSE_ACTIVITY_END)
end
ActivityId = nil
return
end
ActivityId = data.ActivityId
for _, stageScoreData in pairs(data.LevelScores or {}) do
--stageScoreData = { int StageId; int Scores}
StageScores[stageScoreData.StageId] = stageScoreData.Scores
end
for _, rewardIndex in pairs(data.GetRewardIndex or {}) do
RewardIndexReceived[rewardIndex + 1] = true
end
end
function HitMouseManager.GetGameConfig()
if not ActivityId then
return
end
local cfg = XHitMouseConfigs.GetCfgByIdKey(
XHitMouseConfigs.TableKey.Game,
ActivityId
)
return cfg
end
--==============
--获取关卡列表
--==============
function HitMouseManager.GetStageCfgs()
if not ActivityId then
return {}
end
return XHitMouseConfigs.GetCfgByIdKey(
XHitMouseConfigs.TableKey.Activity2Stage,
ActivityId
)
end
--==============
--获取小游戏规则标题和规则描述
--==============
function HitMouseManager.GetRuleText()
if not ActivityId then
return "NoData", "NoData"
end
local config = HitMouseManager.GetGameConfig()
return config and config.RuleTitle, config and config.RuleText
end
function HitMouseManager.GetComboSizeDic()
if not ActivityId then
return "NoData", "NoData"
end
local config = HitMouseManager.GetGameConfig()
local dic = {}
for index, textNum in pairs(config.ComboTextNum or {}) do
table.insert(dic,
{
Count = textNum,
Size = config.ComboTextSize and config.ComboTextSize[index]
}
)
end
return dic
end
function HitMouseManager.GetStartEffect()
if not ActivityId then
return
end
local config = HitMouseManager.GetGameConfig()
return config and config.StartEffect
end
--==============
--获取小游戏地鼠坑位数量
--==============
function HitMouseManager.GetMoleMaxNum()
if not ActivityId then
return 0
end
local config = HitMouseManager.GetGameConfig()
return config and config.MoleNum
end
--==============
--获取小游戏奖励Id列表
--==============
function HitMouseManager.GetRewardIds()
if not ActivityId then
return {}
end
local config = GetActivityConfig()
return config and config.RewardIds or {}
end
--==============
--获取小游戏奖励分数列表
--==============
function HitMouseManager.GetRewardScores()
if not ActivityId then
return {}
end
local config = GetActivityConfig()
return config and config.RewardScores or {}
end
--==============
--获取小游戏现在获得的合计分数
--==============
function HitMouseManager.GetCurrentScores()
local total = 0
for _, score in pairs(StageScores) do
total = total + score
end
return total
end
--==============
--获取小游戏关卡获得的分数
--==============
function HitMouseManager.GetStageScore(stageId)
return StageScores[stageId] or 0
end
--==============
--检查小游戏关卡是否已解锁
--@param stageId:关卡Id
--==============
function HitMouseManager.CheckStageUnlock(stageId)
local activityConfig = GetActivityConfig()
if not activityConfig then return end
local haveUnlock = StageScores[stageId] ~= nil
return haveUnlock
end
--==============
--检查小游戏前置关卡是否已解锁
--@param stageId:关卡Id
--==============
function HitMouseManager.CheckPreStageUnlock(stageId)
local cfg = XHitMouseConfigs.GetCfgByIdKey(
XHitMouseConfigs.TableKey.Stage,
stageId
)
if not cfg then return false end
if cfg.PreStageId == 0 then return true end
return HitMouseManager.CheckStageUnlock(cfg.PreStageId)
end
function HitMouseManager.CheckPreStageClear(stageId)
local cfg = XHitMouseConfigs.GetCfgByIdKey(
XHitMouseConfigs.TableKey.Stage,
stageId
)
if not cfg then return false end
if cfg.PreStageId == 0 then return true end
return StageScores[cfg.PreStageId] and StageScores[cfg.PreStageId] > 0
end
--==============
--获取解锁关卡的道具Id
--==============
function HitMouseManager.GetUnlockItemId()
local cfg = GetActivityConfig()
return cfg and cfg.UseItem or 0
end
--==============
--检查小游戏奖励是否已领取
--@param index:奖励序号
--==============
function HitMouseManager.CheckRewardIsGet(index)
return RewardIndexReceived[index]
end
--==============
--检查小游戏奖励是否可领取
--@param index:奖励序号
--==============
function HitMouseManager.CheckRewardCanGet(index)
local currentScore = HitMouseManager.GetCurrentScores()
local scores = HitMouseManager.GetRewardScores()
local score = scores[index] or 0
return (currentScore >= score) and (not HitMouseManager.CheckRewardIsGet(index))
end
--=====================================
--请求协议 Start
--=====================================
--=================
--进入关卡时请求
--@param stageId:关卡Id
--@param callBack:回调
--=================
function HitMouseManager.StageUnlock(stageId, callBack)
if StageScores[stageId] ~= nil then return end
XNetwork.Call(REQUEST_NAMES.StageUnlock,
{ StageId = stageId },
function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
StageScores[stageId] = 0
if callBack then callBack() end
end)
end
--=================
--结束关卡时请求
--@param stageId:关卡Id
--@param score:分数
--@param callBack:回调
--=================
function HitMouseManager.GameFinish(stageId, score, callBack)
XNetwork.Call(REQUEST_NAMES.GameFinish,
{ StageId = stageId, Scores = score },
function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
if score > StageScores[stageId] then
StageScores[stageId] = score
XEventManager.DispatchEvent(XEventId.EVENT_HIT_MOUSE_STAGE_REFRESH)
end
if callBack then callBack() end
end)
end
--=================
--领取奖励时请求
--@param callBack:回调
--=================
function HitMouseManager.GetRewards(callBack)
XNetwork.Call(REQUEST_NAMES.GetRewards,
{},
function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
for _, rewardIndex in pairs(reply.GetRewardIndex or {}) do
RewardIndexReceived[rewardIndex + 1] = true
end
XUiManager.OpenUiObtain(reply.RewardGoods, nil, nil)
XEventManager.DispatchEvent(XEventId.EVENT_HIT_MOUSE_REWARD_REFRESH)
if callBack then callBack() end
end)
end
--=====================================
--请求协议 End
--=====================================
--=====================================
--跳转和活动时间方法集 Start
--=====================================
function HitMouseManager.JumpTo()
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.HitMouse) then
local canGoTo, notStart = HitMouseManager.CheckCanGoTo()
if canGoTo then
XLuaUiManager.Open("UiHitMouseMain")
elseif notStart then
XUiManager.TipMsg(CS.XTextManager.GetText("CommonActivityNotStart"))
else
XUiManager.TipMsg(CS.XTextManager.GetText("CommonActivityEnd"))
end
end
end
--===============
--检查当前活动是否在开放时间内
--===============
function HitMouseManager.CheckActivityIsInTime()
local now = XTime.GetServerNowTimestamp()
return (now >= HitMouseManager.GetActivityStartTime())
and (now < HitMouseManager.GetActivityEndTime())
end
--===============
--获取当前活动开始时间戳(根据TimeId)
--===============
function HitMouseManager.GetActivityStartTime()
local Config = GetActivityConfig()
if not Config then return 0 end
return XFunctionManager.GetStartTimeByTimeId(Config.TimeId)
end
--===============
--获取当前活动结束时间戳(根据TimeId)
--===============
function HitMouseManager.GetActivityEndTime()
local Config = GetActivityConfig()
if not Config then return 0 end
return XFunctionManager.GetEndTimeByTimeId(Config.TimeId)
end
--===============
--获取当前活动剩余时间(秒)
--===============
function HitMouseManager.GetActivityLeftTime()
local now = XTime.GetServerNowTimestamp()
local endTime = HitMouseManager.GetActivityEndTime()
local leftTime = endTime - now
return leftTime
end
--================
--检查是否能进入玩法
--@return1 :是否在活动时间内(true为在活动时间内)
--@return2 :是否未开始活动(true为未开始活动)
--================
function HitMouseManager.CheckCanGoTo()
local isActivityEnd, notStart = HitMouseManager.CheckIsEnd()
return not isActivityEnd, notStart
end
--================
--检查玩法是否关闭(用于判断玩法入口,进入活动条件等)
--@return1 :玩法是否关闭
--@return2 :是否活动未开启
--================
function HitMouseManager.CheckIsEnd()
local timeNow = XTime.GetServerNowTimestamp()
local startTime = HitMouseManager.GetActivityStartTime()
local endTime = HitMouseManager.GetActivityEndTime()
local isEnd = timeNow >= endTime
local isStart = timeNow >= startTime
local inActivity = (not isEnd) and (isStart)
return not inActivity, timeNow < startTime
end
--================
--玩法关闭时弹出主界面
--================
function HitMouseManager.OnActivityEndHandler()
XLuaUiManager.RunMain()
XUiManager.TipMsg(CS.XTextManager.GetText("CommonActivityEnd"))
end
--=====================================
--跳转和活动时间方法集 End
--=====================================
HitMouseManager.Init()
return HitMouseManager
end
XRpc.NotifyHitMouseData = function(data)
XDataCenter.HitMouseManager.InitData(data)
end