--=================== --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