local XSCRoleSkill = require("XEntity/XSameColorGame/Skill/XSCRoleSkill") -- 三消游戏活动管理器 XSameColorGameActivityManagerCreator = function() local XSameColorGameActivityManager = { DEBUG = false } local METHOD_NAME = { SameColorGameEnterStageRequest = "SameColorGameEnterStageRequest",--进入关卡 SameColorGameSwapItemRequest = "SameColorGameSwapItemRequest",--交换 SameColorGameUseItemRequest = "SameColorGameUseItemRequest",--使用技能 SameColorGameOpenRankRequest = "SameColorGameOpenRankRequest",--打开排行榜 SameColorGameGiveUpRequest = "SameColorGameGiveUpRequest",--中途放弃 SameColorGameCancelUseItemRequest = "SameColorGameCancelUseItemRequest",--放弃使用技能(只有多步操作型技能使用(例:进行n次交换,直到造成消除),且需要使用过一次以上) } local BossManager = nil local RoleManager = nil local BattleManager = nil local RoleShowSkillDic = {} local Config = nil local FirstOpenObtainKey = "FirstOpenObtainKey" -- 初始化 function XSameColorGameActivityManager.Init() Config = XSameColorGameConfigs.GetCurrentConfig() local script = require("XEntity/XSameColorGame/Boss/XSCBossManager") BossManager = script.New() script = require("XEntity/XSameColorGame/Role/XSCRoleManager") RoleManager = script.New() script = require("XEntity/XSameColorGame/Battle/XSCBattleManager") BattleManager = script.New() end -- data { ActivityId, BossRecords : List } function XSameColorGameActivityManager.InitWithServerData(data) -- 不相等重新初始化 if Config.Id ~= data.ActivityId then XSameColorGameActivityManager.Init() end BossManager:InitWithServerData(data.BossRecords) end function XSameColorGameActivityManager.GetInitRoleIds() return Config.InitRoleId end function XSameColorGameActivityManager.GetAvailableChapters() local result = {} if not XSameColorGameActivityManager.GetIsInTime() then return result end table.insert(result, { Id = Config.Id, Type = XDataCenter.FubenManager.ChapterType.SameColor, Name = XSameColorGameActivityManager.GetName(), Icon = XSameColorGameActivityManager.GetBannerIcon() }) return result end -- 打开活动主界面 function XSameColorGameActivityManager.OpenMainUi() if not XSameColorGameActivityManager.GetIsOpen(true) then return end XLuaUiManager.Open("UiSameColorGameBossMain") end function XSameColorGameActivityManager.OpenShopUi(callback) if not XSameColorGameActivityManager.GetIsOpen(true) then return end XLuaUiManager.Open("UiShop", XShopManager.ShopType.SameColorGame, callback) end function XSameColorGameActivityManager.GetIsFirstOpenRoleObtainUi() return not XSaveTool.GetData(XSameColorGameActivityManager.GetLocalSaveKey() .. FirstOpenObtainKey) end function XSameColorGameActivityManager.SetIsFirstOpenRoleObtainUi() XSaveTool.SaveData(XSameColorGameActivityManager.GetLocalSaveKey() .. FirstOpenObtainKey, true) end -- 检查是否为初始角色 function XSameColorGameActivityManager.CheckIsInitRole(id) for _, v in ipairs(Config.InitRoleId) do if v == id then return true end end return false end -- 获取活动开始时间 function XSameColorGameActivityManager.GetStartTime() return XFunctionManager.GetStartTimeByTimeId(Config.TimerId) end -- 获取活动结束时间 function XSameColorGameActivityManager.GetEndTime() -- if XSameColorGameActivityManager.DEBUG then -- if XSameColorGameActivityManager.__DEBUG_END_TIME == nil then -- XSameColorGameActivityManager.__DEBUG_END_TIME = XTime.GetServerNowTimestamp() + 10 -- end -- return XSameColorGameActivityManager.__DEBUG_END_TIME -- end return XFunctionManager.GetEndTimeByTimeId(Config.TimerId) end -- 获取活动名称 function XSameColorGameActivityManager.GetName() return XSameColorGameConfigs.GetActivityConfigValue("Name")[1] end function XSameColorGameActivityManager.GetBannerIcon() return XSameColorGameConfigs.GetActivityConfigValue("BannerIcon")[1] end -- 获取活动剩余时间描述 function XSameColorGameActivityManager.GetLeaveTimeStr() local endTime = XSameColorGameActivityManager.GetEndTime() return XUiHelper.GetTime(endTime - XTime.GetServerNowTimestamp() , XUiHelper.TimeFormatType.ACTIVITY) end -- 获取活动是否在开启时间内 function XSameColorGameActivityManager.GetIsInTime() if XSameColorGameActivityManager.DEBUG then return true end return XFunctionManager.CheckInTimeByTimeId(Config.TimerId) end function XSameColorGameActivityManager.GetIsOpen(showTip) -- 未满足功能条件 if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.SameColor, nil, not showTip) then return end -- 未满足开放时间 if not XSameColorGameActivityManager.GetIsInTime() then if showTip then XUiManager.TipError(CS.XTextManager.GetText("FunctionNotDuringOpening")) end return end return true end function XSameColorGameActivityManager.GetRoleShowSkill(skillGroupId) local result = RoleShowSkillDic[skillGroupId] if result == nil then result = XSCRoleSkill.New(skillGroupId) RoleShowSkillDic[skillGroupId] = result end return result end -- 获取活动帮助id function XSameColorGameActivityManager.GetHelpId() local helpId = tonumber(XSameColorGameConfigs.GetActivityConfigValue("HelpId")[1]) return XHelpCourseConfig.GetHelpCourseTemplateById(helpId).Function end -- 获取活动资源id数组 function XSameColorGameActivityManager.GetAssetItemIds() local result = {} for _, v in ipairs(XSameColorGameConfigs.GetActivityConfigValue("AssetItemIds")) do table.insert(result, tonumber(v)) end return result end function XSameColorGameActivityManager.GetShopId() return XSameColorGameConfigs.GetActivityConfigValue("ShopId")[1] end function XSameColorGameActivityManager.GetRankIcons() return XSameColorGameConfigs.GetActivityConfigValue("RankIcons") end -- taskType : XSameColorGameConfigs.TaskType function XSameColorGameActivityManager.GetTaskDatas(taskType, isSort) taskType = taskType or XSameColorGameConfigs.TaskType local groupId = nil if taskType == XSameColorGameConfigs.TaskType.Day then groupId = tonumber(XSameColorGameConfigs.GetActivityConfigValue("TaskGroupId")[1]) elseif taskType == XSameColorGameConfigs.TaskType.Reward then groupId = tonumber(XSameColorGameConfigs.GetActivityConfigValue("TaskGroupId")[2]) end return XDataCenter.TaskManager.GetTimeLimitTaskListByGroupId(groupId, isSort) end -- 获取boss管理器 function XSameColorGameActivityManager.GetBossManager() return BossManager end -- 获取角色管理器 function XSameColorGameActivityManager.GetRoleManager() return RoleManager end -- 获取战斗管理器 function XSameColorGameActivityManager.GetBattleManager() return BattleManager end function XSameColorGameActivityManager.GetLocalSaveKey() return Config.Id .. XPlayer.Id .. "XSameColorGameActivityManager" end -- 获取当前能够使用的技能数据 function XSameColorGameActivityManager.GetAllUsableSkillGroupIds() local result = {} local itemManager = XDataCenter.ItemManager local configDic = XSameColorGameConfigs.GetSkillGroupConfigDic() for _, config in pairs(configDic) do if itemManager.GetCount(config.ShopItemId) > 0 then table.insert(result, config.Id) end end table.sort(result, function(a, b) return a < b end) return result end function XSameColorGameActivityManager.HandleActivityEndTime() if XSameColorGameActivityManager.DEBUG then return end XLuaUiManager.RunMain() XUiManager.TipMsg(XUiHelper.GetText("SCBossActivityTimeOut")) end function XSameColorGameActivityManager.SetMainUiModelInfo(UiModel, UiModelGo, UiSceneInfo) XSameColorGameActivityManager.UiModel = UiModel XSameColorGameActivityManager.UiModelGo = UiModelGo XSameColorGameActivityManager.UiSceneInfo = UiSceneInfo end function XSameColorGameActivityManager.GetMainUiModelInfo() return XSameColorGameActivityManager.UiModel , XSameColorGameActivityManager.UiModelGo , XSameColorGameActivityManager.UiSceneInfo end function XSameColorGameActivityManager.ClearMainUiModelInfo() if XSameColorGameActivityManager.UiSceneInfo then XSameColorGameActivityManager.UiSceneInfo.GameObject:SetActiveEx(false) end XSameColorGameActivityManager.UiModel = nil XSameColorGameActivityManager.UiModelGo = nil XSameColorGameActivityManager.UiSceneInfo = nil end --######################## 请求 ######################## -- bossId : 为0时是总榜的数据 function XSameColorGameActivityManager.RequestRankData(bossId, callback) XNetwork.Call(METHOD_NAME.SameColorGameOpenRankRequest, { BossId = bossId }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end -- XSameColorGameRankInfo local myRankInfo = res.MyRankInfo -- List local rankList = res.RankList -- for i = #rankList, 1, -1 do -- if rankList[i].RoleId <= 0 then -- table.remove(rankList, i) -- end -- end if callback then callback(rankList, myRankInfo) end end) end function XSameColorGameActivityManager.RequestEnterStage(roleId, bossId, skillGroupIds, callback) local requestBody = { BossId = bossId, RoleId = roleId, SkillIds = skillGroupIds } -- res : { List Actions } XNetwork.Call(METHOD_NAME.SameColorGameEnterStageRequest, requestBody, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end BossManager:SetCurrentChallengeBoss(BossManager:GetBoss(bossId)) BattleManager:SetActionList(res.Actions) if callback then callback() end end) end function XSameColorGameActivityManager.RequestSwapBall(startPos, endPos, callback) -- res : { List Actions } local serverStartPos = {PositionX = startPos.PositionX - 1, PositionY = startPos.PositionY - 1} local serverEndPos = {PositionX = endPos.PositionX - 1, PositionY = endPos.PositionY - 1} XNetwork.Call(METHOD_NAME.SameColorGameSwapItemRequest, {Source = serverStartPos,Destination = serverEndPos}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end BattleManager:SetActionList(res.Actions) if callback then callback() end end) end function XSameColorGameActivityManager.RequestUseItem(skillGroupId, skillId, useItemParam, callback) -- res : { List Actions } local serverUseItemParam = {} for key,item in pairs(useItemParam or {}) do local serverItem = {} if next(item) then serverItem = {ItemId = item.ItemId, PositionX = item.PositionX - 1, PositionY = item.PositionY - 1} end serverUseItemParam[key] = serverItem end XNetwork.Call(METHOD_NAME.SameColorGameUseItemRequest, {GroupId = skillGroupId, ItemId = skillId,UseItemParam = serverUseItemParam}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end BattleManager:SetActionList(res.Actions) if callback then callback() end local IsInCD = false for _,action in pairs(res.Actions or {}) do if action.ActionType == XSameColorGameConfigs.ActionType.ActionCdChange and action.SkillId == skillGroupId then IsInCD = true break end end local skill = BattleManager:GetBattleRoleSkill(skillGroupId) if IsInCD then skill:ClearUsedCount() BattleManager:ShowEnergyChange(XSameColorGameConfigs.EnergyChangeFrom.UseSkill,1)--技能耗能 XEventManager.DispatchEvent(XEventId.EVENT_SC_SKILL_USED) else skill:AddUsedCount() end BattleManager:CheckActionList() end) end function XSameColorGameActivityManager.RequestCancelUseItem(skillGroupId, skillId, callback) XNetwork.Call(METHOD_NAME.SameColorGameCancelUseItemRequest, {GroupId = skillGroupId, ItemId = skillId}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end BattleManager:SetActionList(res.Actions) if callback then callback() end local skill = BattleManager:GetBattleRoleSkill(skillGroupId) skill:ClearUsedCount() XEventManager.DispatchEvent(XEventId.EVENT_SC_SKILL_USED) BattleManager:CheckActionList() end) end function XSameColorGameActivityManager.RequestGiveUp(bossId, callback) XNetwork.Call(METHOD_NAME.SameColorGameGiveUpRequest, {BossId = bossId}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end if callback then callback() end end) end -- 初始化 XSameColorGameActivityManager.Init() return XSameColorGameActivityManager end XRpc.NotifySameColorGameData = function(data) XDataCenter.SameColorActivityManager.InitWithServerData(data) end