local XPokemonMonster = require("XEntity/XPokemon/XPokemonMonster") local XPokemonTeamPosData = require("XEntity/XPokemon/XPokemonTeamPosData") local NORMAL_SPEED = 1 local DOUBLE_SPEED = 2 XPokemonManagerCreator = function() local tableInsert = table.insert local pairs = pairs local tonumber = tonumber local XPokemonManager = {} function XPokemonManager.GetSpeedUpSaveKey() return string.format("%s_%s","PokemonSpeedUp",XPlayer.Id) end function XPokemonManager.IsSpeedUp() return XSaveTool.GetData(XPokemonManager.GetSpeedUpSaveKey()) == 1 end function XPokemonManager.SetSpeedUp(isSpeedUp) if isSpeedUp then XSaveTool.SaveData(XPokemonManager.GetSpeedUpSaveKey(),1) else XSaveTool.SaveData(XPokemonManager.GetSpeedUpSaveKey(),0) end end function XPokemonManager.ChangeSpeed() CS.UnityEngine.Time.timeScale = DOUBLE_SPEED end function XPokemonManager.ResetSpeed() if CS.UnityEngine.Time.timeScale ~= NORMAL_SPEED then CS.UnityEngine.Time.timeScale = NORMAL_SPEED end end function XPokemonManager.CloseFightLoading() XDataCenter.FubenManager.CloseFightLoading() if XPokemonManager.IsSpeedUp() then XPokemonManager.ChangeSpeed() end end function XPokemonManager.CallFinishFight() XPokemonManager.ResetSpeed() XDataCenter.FubenManager.CallFinishFight() end -----------------怪物相关 begin---------------- local _Monsters = {} local _NewMonsterIds = {} local function GetMonster(monsterId) return _Monsters[monsterId] end local function UpdateMonster(data, checkNew) if not data then return end local monsterId = data.Id local monster = GetMonster(monsterId) if not monster then monster = XPokemonMonster.New(monsterId) _Monsters[monsterId] = monster local newMonsterId = checkNew and monsterId if newMonsterId then tableInsert(_NewMonsterIds, newMonsterId) end end monster:UpdateData(data) end local function UpdateMonsters(datas, checkNew) if not datas then return end for _, data in pairs(datas) do UpdateMonster(data, checkNew) end CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_MONSTERS_DATA_CHANGE) end function XPokemonManager.NotifyPokemonMonster(data) UpdateMonsters(data.MonsterList, true) end function XPokemonManager.CheckNewMonsterIds() if XTool.IsTableEmpty(_NewMonsterIds) then return end local monsterIds = XTool.Clone(_NewMonsterIds) XLuaUiManager.Open("UiPokemonMonsterObtain", monsterIds) _NewMonsterIds = {} end function XPokemonManager.GetOwnMonsterIds(monsterType) local monsterIdList = {} for monsterId in pairs(_Monsters) do if monsterType then if XPokemonConfigs.CheckMonsterType(monsterId, monsterType) then tableInsert(monsterIdList, monsterId) end else tableInsert(monsterIdList, monsterId) end end return monsterIdList end function XPokemonManager.GetOwnMonsterIdsByCareer(career) local monsterIdList = {} for monsterId in pairs(_Monsters) do if career then if XPokemonConfigs.CheckMonsterCareer(monsterId, career) then tableInsert(monsterIdList, monsterId) end else tableInsert(monsterIdList, monsterId) end end return monsterIdList end function XPokemonManager.CheckOwnMonsterEmptyByCareer(career) local isEmpty = true for monsterId in pairs(_Monsters) do if career then if XPokemonConfigs.CheckMonsterCareer(monsterId, career) then isEmpty = false break end else isEmpty = false break end end return isEmpty end function XPokemonManager.CheckBagMonsterEmptyByCareer(career) local isEmpty = true local teamMonsterDic = XPokemonManager.GetTeamMonstersIdDic() for monsterId in pairs(_Monsters) do if career then if XPokemonConfigs.CheckMonsterCareer(monsterId, career) and not teamMonsterDic[monsterId] then isEmpty = false break end else isEmpty = false break end end return isEmpty end function XPokemonManager.CheckOwnMonsterEmpty(monsterType) local isEmpty = true for monsterId in pairs(_Monsters) do if monsterType then if XPokemonConfigs.CheckMonsterType(monsterId, monsterType) then isEmpty = false break end else isEmpty = false break end end return isEmpty end function XPokemonManager.CheckBagMonsterEmpty(monsterType) local isEmpty = true local teamMonsterDic = XPokemonManager.GetTeamMonstersIdDic() for monsterId in pairs(_Monsters) do if monsterType then if XPokemonConfigs.CheckMonsterType(monsterId, monsterType) and not teamMonsterDic[monsterId] then isEmpty = false break end else isEmpty = false break end end return isEmpty end function XPokemonManager.GetMonsterStar(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetStar() or 0 end function XPokemonManager.GetMonsterLevel(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetLevel() or 0 end function XPokemonManager.GetMonsterAbility(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetAbility() or 0 end function XPokemonManager.GetMonsterHp(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetHp() or 0 end function XPokemonManager.GetMonsterAttack(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetAttack() or 0 end --获取升级后预览属性 ---@param 预览等级 ---@return 生命, 攻击 function XPokemonManager.GetMonsterPreHpAndPreAttack(monsterId, preLevel) local monster = GetMonster(monsterId) if not monster then return 0, 0 end return monster:GetPreHpAndPreAttack(preLevel) end function XPokemonManager.IsMonsterMaxLevel(monsterId) local monster = GetMonster(monsterId) return monster and monster:IsMaxLevel() or false end function XPokemonManager.GetMonsterMaxLevel(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetMaxLevel() or 0 end function XPokemonManager.IsMonsterMaxStar(monsterId) local monster = GetMonster(monsterId) return monster and monster:IsMaxStar() or false end function XPokemonManager.GetMonsterLevelUpCostItemInfo(monsterId) local monster = GetMonster(monsterId) if not monster then return XPokemonConfigs.GetMonsterLevelCostItemInfo(monsterId, 1) end return monster:GetLevelUpCostItemInfo() end function XPokemonManager.GetMonsterStarUpCostItemInfo(monsterId) local monster = GetMonster(monsterId) if not monster then return XPokemonConfigs.GetMonsterStarCostItemInfo(monsterId, 1) end return monster:GetStarUpCostItemInfo() end function XPokemonManager.GetMonsterUsingSkillIdList(monsterId) local monster = GetMonster(monsterId) return monster and monster:GetUsingSkillIdList() or {} end function XPokemonManager.GetMonsterCanSwitchSkillIdList(monsterId, skillId) local monster = GetMonster(monsterId) return monster and monster:GetCanSwitchSkillIds(skillId) or {} end function XPokemonManager.IsMonsterSkillUnlock(monsterId, skillId) local monster = GetMonster(monsterId) return monster and monster:IsSkillUnlock(skillId) or false end function XPokemonManager.IsMonsterSkillUsing(monsterId, skillId) local monster = GetMonster(monsterId) return monster and monster:IsSkillUsing(skillId) or false end function XPokemonManager.IsMonsterSkillCanSwitch(monsterId, skillId) local monster = GetMonster(monsterId) return monster and monster:IsSkillCanSwitch(skillId) or false end --获取该星级可解锁技能Id列表 function XPokemonManager.GetMonsterStarUnlockSkillIds(monsterId, star) local monster = GetMonster(monsterId) return monster and monster:GetStarUnlockSkillIds(star) or {} end --获取当前拥有道具足够升级的最大次数 function XPokemonManager.GetMonsterCanLevelUpTimes(monsterId) local times = 0 local costItemDic = {} local bagItemDic = {} local curLevel = XPokemonManager.GetMonsterLevel(monsterId) local maxLevel = XPokemonManager.GetMonsterMaxLevel(monsterId) for level = curLevel, maxLevel - 1 do local costItemId, costItemCount = XPokemonConfigs.GetMonsterLevelCostItemInfo(monsterId, level) local haveItemCount = bagItemDic[costItemId] or XDataCenter.ItemManager.GetCount(costItemId) haveItemCount = haveItemCount - costItemCount if haveItemCount < 0 then break end bagItemDic[costItemId] = haveItemCount costItemDic[costItemId] = costItemDic[costItemId] and costItemDic[costItemId] + costItemCount or costItemCount times = times + 1 end return times, costItemDic end function XPokemonManager.OpenMonsterUi() if XDataCenter.PokemonManager.CheckOwnMonsterEmpty() then XLog.Error("XPokemonManager.OpenMonsterUi error: 尚未获得怪物,不能打开怪物培养UI") return end XLuaUiManager.Open("UiPokemonMonster") end --怪物升级 function XPokemonManager.PokemonLevelUpRequest(monsterId, times, cb) times = times or 1 local req = { MonsterId = monsterId, Times = times } XNetwork.Call("PokemonLevelUpRequest", req, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local monster = GetMonster(monsterId) monster:UpLevel(times) CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_MONSTERS_LEVEL_UP) XEventManager.DispatchEvent(XEventId.EVENT_POKEMON_MONSTERS_LEVEL_UP, monsterId) if cb then cb() end end) end --怪物升星 function XPokemonManager.PokemonStarUpRequest(monsterId, cb) local req = { MonsterId = monsterId } XNetwork.Call("PokemonStarUpRequest", req, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local monster = GetMonster(monsterId) local addStar = 1 monster:UpStar(addStar) CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_MONSTERS_STAR_UP) XEventManager.DispatchEvent(XEventId.EVENT_POKEMON_MONSTERS_STAR_UP, monsterId) if cb then cb() end end) end --怪物技能切换 function XPokemonManager.PokemonSetSkillRequest(monsterId, skillId, cb) local req = { MonsterId = monsterId, SkillId = skillId } XNetwork.Call("PokemonSetSkillRequest", req, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local monster = GetMonster(monsterId) monster:SwitchSkill(skillId) CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_MONSTERS_SKILL_SWITCH) if cb then cb() end end) end function XPokemonManager.PokemonResetUpgradeRequest(monsterId,cb) local req = {MonsterId = monsterId} local monster = _Monsters[monsterId] if monster then monster:InitSkillGroups() end XNetwork.Call("PokemonResetUpgradeRequest", req, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_MONSTERS_DATA_CHANGE) if cb then cb(res.RewardGoods) end end) end -----------------怪物相关 end---------------- -----------------队伍相关 begin---------------- local _MaxEnergy = 0 local _Team = {} local TEAM_MEMBER_NUM = XPokemonConfigs.TeamNum local _RandomMonsterList = {} local _RandomStageId = 1 local function GetTeamPosData(pos) return _Team[pos] end local function UpdateRandomMonsterData(randomStageData) if not randomStageData then return end _RandomMonsterList = {} _RandomStageId = randomStageData.StageId for _, npcGroupList in pairs(randomStageData.NpcGroupList) do if not npcGroupList.NpcList then break end for _, npcInfo in pairs(npcGroupList.NpcList) do table.insert(_RandomMonsterList, XPokemonConfigs.GetMonsterIdByNpcId(npcInfo.Id)) end end end local function UpdateMaxEnergy(maxEnergy) _MaxEnergy = maxEnergy or _MaxEnergy end local function UpdateUnlockedPositionList(unlockedPositionList) if not unlockedPositionList then return end for _, pos in pairs(unlockedPositionList) do local posData = GetTeamPosData(pos) posData:Unlock() end end local function UpdateTeam(mosnterIdDic) if not mosnterIdDic then return end for pos, monsterId in pairs(mosnterIdDic) do local posData = GetTeamPosData(pos) posData:SetMonsterId(monsterId) end end function XPokemonManager.InitTeam() _Team = {} for pos = 1, TEAM_MEMBER_NUM do _Team[pos] = XPokemonTeamPosData.New(pos) end end function XPokemonManager.IsTeamPosLock(pos) local posData = GetTeamPosData(pos) return posData and posData:IsLock() end function XPokemonManager.GetTeamMonsterIds() local monsterIds = {} for pos = 1, TEAM_MEMBER_NUM do local posData = GetTeamPosData(pos) local monsterId = posData and posData:GetMonsterId() or 0 monsterIds[pos] = monsterId end return monsterIds end function XPokemonManager.GetTeamMonstersIdDic() local monstersIdDic = {} for _, v in pairs(_Team) do monstersIdDic[v:GetMonsterId()] = v:GetMonsterId() end return monstersIdDic end function XPokemonManager.CheckMonsterIsInTeam(monsterId) local monsterDic = XPokemonManager.GetTeamMonstersIdDic() local monster = monsterDic[monsterId] or 0 return monster > 0 end function XPokemonManager.NotifyPokemonUnlock(data) UpdateMaxEnergy(data.MaxEnergy) UpdateUnlockedPositionList(data.UnlockedPositionList) UpdateRandomMonsterData(data.RandomStageData) end function XPokemonManager.GetMaxEnergy() return _MaxEnergy end function XPokemonManager.GetRandomMonsters() return _RandomMonsterList or {} end function XPokemonManager.GetRandomStageId() return _RandomStageId end --队伍信息同步 function XPokemonManager.PokemonSetFormationRequest(monsterIdList, cb) local req = { MonsterIdList = monsterIdList } XNetwork.Call("PokemonSetFormationRequest", req, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end UpdateTeam(monsterIdList) if cb then cb() end end) end -----------------队伍相关 end---------------- -----------------章节相关 begin-------------- function XPokemonManager.GetChapters() return XPokemonConfigs.GetChapters(XPokemonManager.GetCurrActivityId()) end function XPokemonManager.GetSelectChapterName() return XPokemonConfigs.GetChapterName(XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetSelectChapterDesc() return XPokemonConfigs.GetChapterDesc(XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetSelectChapterType() return XPokemonConfigs.GetChapterType(XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetSelectChapterTitleImage() return XPokemonConfigs.GetChapterTitleImage(XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetChapterScrollBg() return XPokemonConfigs.GetChapterScrollBg(XPokemonManager.GetSelectChapter()) end -----------------章节相关 end---------------- -----------------关卡相关 begin---------------- local _PassedStageDic = {} local _SkipStageInfo = {} local _RemainingTimes = XPokemonConfigs.GetDefaultStageTimes() local _IsSwitchToInfinity = false local _NextRecoverTime = 0 local _StageSkipTimes = 0 local _SelectChapter = 31 local function UpdateStageSkipTimes(data) if not data then return end _StageSkipTimes = data end function XPokemonManager.GetStageSkipTimes() return _StageSkipTimes end function XPokemonManager.CheckCanSkip() return _StageSkipTimes > 0 end local function UpdateSkipStageInfo(data) if not data then return end _SkipStageInfo = data end function XPokemonManager.GetSkipStageInfo() return _SkipStageInfo end function XPokemonManager.CheckIsSkip(stageId) for _,skipId in ipairs(_SkipStageInfo) do if skipId == stageId then return true end end return false end local function UpdateNextRecoverTime(time) _NextRecoverTime = time or 0 end function XPokemonManager.GetNextRecoverTime() return _NextRecoverTime end function XPokemonManager.SetSelectChapter(data) local chapters = XPokemonManager.GetChapters() _SelectChapter = chapters[data].Id end function XPokemonManager.GetSelectChapter() return _SelectChapter end local function UpdatePassedStage(data) data = data or {} for i = 1, #data do local value = data[i] if not _PassedStageDic[value] then _PassedStageDic[value] = value end end end local function UpdateRemainingTimes(times) if not times then return end _RemainingTimes = times CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_REMAINING_TIMES_CHANGE) end function XPokemonManager.GetIsSwitchToInfinity() return _IsSwitchToInfinity end function XPokemonManager.SetIsSwitchToInfinity(v) _IsSwitchToInfinity = v end function XPokemonManager.NotifyPokemonStagePassed(data) if data and data.StageId then _PassedStageDic[data.StageId] = data.StageId --if XPokemonManager.GetPassedCount() == XPokemonManager.GetStageCountByType(XPokemonConfigs.StageType.Normal) then -- XPokemonManager.SetIsSwitchToInfinity(true) --end CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_PASSED_STAGE_CHANGE) end end function XPokemonManager.NotifyPokemonRemainingTimesChange(data) if not data then return end _RemainingTimes = data.StageTimes or _RemainingTimes _NextRecoverTime = data.StageTimesNextRecoverTime or 0 CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_REMAINING_TIMES_CHANGE) end function XPokemonManager.CheckStageIsPassed(stageId) return _PassedStageDic[stageId] and true end function XPokemonManager.GetPassedCount() local count = 0 for k, v in pairs(_PassedStageDic) do count = count + 1 end return count end function XPokemonManager.GetPassedCountByChapterId(chapterId) local count = 0 for k, v in pairs(_PassedStageDic) do local cId = XPokemonConfigs.GetStageChapterIdByFightStageId(XDataCenter.PokemonManager.GetCurrActivityId(),k) if cId == chapterId then count = count + 1 end end for _,fightStageId in pairs(_SkipStageInfo) do local cId = XPokemonConfigs.GetStageChapterIdByFightStageId(XDataCenter.PokemonManager.GetCurrActivityId(),fightStageId) if cId == chapterId then count = count + 1 end end return count end function XPokemonManager.GetNextStage() local nextIndex = XPokemonManager.GetPassedCount() + 1 local totalCount = XPokemonManager.GetStageCountByType(XPokemonConfigs.StageType.Normal) + XPokemonManager.GetStageCountByType(XPokemonConfigs.StageType.Skip) nextIndex = XMath.Clamp(nextIndex, 1, totalCount) return nextIndex end function XPokemonManager.GetStageTotalCount() return XPokemonManager.GetStageCountByType(XPokemonConfigs.StageType.Normal) + XPokemonManager.GetStageCountByType(XPokemonConfigs.StageType.Skip) end function XPokemonManager.GetRemainingTimes() return _RemainingTimes end function XPokemonManager.CheckRemainingTimes() return true --return XPokemonManager.GetRemainingTimes() > 0 end function XPokemonManager.IsInfinity() return XPokemonManager.GetPassedCount() >= XPokemonManager.GetStageCountByType(XPokemonConfigs.StageType.Normal) end function XPokemonManager.GetPokemonStageId(index) return XPokemonConfigs.GetPokemonStageId(index, XPokemonManager.GetCurrActivityId(), XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageUnlockDesc(stageId) return XPokemonConfigs.GetStageUnlockDesc(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageFightStageId(stageId) return XPokemonConfigs.GetStageFightStageId(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageMonsterIds(stageId) return XPokemonConfigs.GetStageMonsterIds(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageIcon(stageId) return XPokemonConfigs.GetStageIcon(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageName(stageId) return XPokemonConfigs.GetStageName(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageBg(stageId) return XPokemonConfigs.GetStageBg(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageBossHeadIcon(stageId) return XPokemonConfigs.GetStageBossHeadIcon(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.IsBossStage(stageId) return XPokemonConfigs.IsBossStage(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.IsInfinityStage(stageId) return XPokemonConfigs.IsInfinityStage(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.IsCanSkipStage(stageId) return XPokemonConfigs.IsCanSkipStage(stageId, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageCountByType(type) return XPokemonConfigs.GetStageCountByType(type, XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetStageCountByChapter() return XPokemonConfigs.GetStageCountByChapter(XPokemonManager.GetCurrActivityId(),XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetShowAbility(stageId, pos) return XPokemonConfigs.GetShowAbility(stageId, XPokemonManager.GetCurrActivityId(), pos,XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetChapterPerPageStageCount() return XPokemonConfigs.GetChapterPerPageStageCount(XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetChapterUiTemplateCount() return XPokemonConfigs.GetUiTemplateCountByChapter(XPokemonManager.GetSelectChapter()) end function XPokemonManager.GetUiTemplate(index,type) return XPokemonConfigs.GetUiTemplate(XPokemonManager.GetSelectChapter(), index, type) end function XPokemonManager.PokemonSkipStageRequest(stageId,cb) local req = {StageId = stageId} XNetwork.Call("PokemonSkipStageRequest",req,function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end CsXGameEventManager.Instance:Notify(XEventId.EVENT_POKEMON_PASSED_STAGE_CHANGE) if cb then cb(res.RewardGoods) end end) end function XPokemonManager.NotifyPokemonStageSkipInfo(data) if not data then return end UpdateSkipStageInfo(data.SkipedStageIdList) UpdateStageSkipTimes(data.StageSkipTimes) end function XPokemonManager.NotifyPokemonRemoveStageSkiped(data) if not data then return end for i = #_SkipStageInfo, 1, -1 do if _SkipStageInfo[i] == data then table.remove(_SkipStageInfo, i) end end end -----------------关卡相关 end---------------- -----------------其他部分XXX begin---------------- local _TimeSupplyLastGetTime = 0 local _CurrActivityId = XPokemonConfigs.GetDefaultActivityId() function XPokemonManager.GetCurrActivityId() return _CurrActivityId end local function UpdateActivityId(activityId) if not XTool.IsNumberValid(activityId) then return end _CurrActivityId = activityId or XPokemonConfigs.GetDefaultActivityId() end function XPokemonManager.GetCurrTaskTimeLimitId() return XPokemonConfigs.GetActivityTaskTimeLimitId(XPokemonManager.GetCurrActivityId()) end function XPokemonManager.GetPokemonTimeLimitTask() local groupId = XPokemonManager.GetCurrTaskTimeLimitId() if groupId == 0 then return {} end return XDataCenter.TaskManager.GetTimeLimitTaskListByGroupId(groupId) end function XPokemonManager.GetActivityChapters() local chapters = {} if XPokemonConfigs.HasActivityInTime() then local tempChapter = {} tempChapter.Id = XPokemonManager.GetCurrActivityId() tempChapter.Type = XDataCenter.FubenManager.ChapterType.Pokemon tempChapter.BannerBg = XPokemonConfigs.GetActivityBg(tempChapter.Id) tableInsert(chapters, tempChapter) end return chapters end function XPokemonManager.IsOpen() local nowTime = XTime.GetServerNowTimestamp() local beginTime = XPokemonManager.GetStartTime() local endTime = XPokemonManager.GetEndTime() return beginTime <= nowTime and nowTime < endTime end function XPokemonManager.GetStartTime() return XPokemonConfigs.GetActivityStartTime(XPokemonManager.GetCurrActivityId()) or 0 end function XPokemonManager.GetEndTime() return XPokemonConfigs.GetActivityEndTime(XPokemonManager.GetCurrActivityId()) or 0 end function XPokemonManager.GetCurrActivityTime() return XPokemonManager.GetStartTime(), XPokemonManager.GetEndTime() end local function InitStageType(stageId) stageId = tonumber(stageId) local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId) if stageInfo then stageInfo.Type = XDataCenter.FubenManager.StageType.Pokemon end end function XPokemonManager.InitStageInfo() local stageIds = XPokemonConfigs.GetFightStageIds() for _, stageId in pairs(stageIds) do InitStageType(stageId) end end local function GetTimeSupplyLastGetTime() return _TimeSupplyLastGetTime or 0 end local function UpdateTimeSupplyLastGetTime(time) _TimeSupplyLastGetTime = time or 0 end function XPokemonManager.PokemonGetTimeSupplyRewardRequest(callback) XNetwork.Call("PokemonGetTimeSupplyRewardRequest", nil, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local rewardsList = res.RewardGoods or {} UpdateTimeSupplyLastGetTime(res.TimeSupplyLastGetTime) XEventManager.DispatchEvent(XEventId.EVENT_POKEMON_RED_POINT_TIME_SUPPLY) if callback then callback(rewardsList) end end) end function XPokemonManager.GetTimeSupplyOffsetTime() local now = XTime.GetServerNowTimestamp() local offset = now - GetTimeSupplyLastGetTime() offset = XMath.Clamp(offset, 0, XPokemonConfigs.GetTimeSupplyMaxCount() * XPokemonConfigs.GetTimeSupplyInterval()) return offset or 0 end function XPokemonManager.CheckCanGetTimeSupply() return XPokemonManager.GetTimeSupplyOffsetTime() >= XPokemonConfigs.GetTimeSupplyInterval() end -----------------其他部分XXX end------------------ local _IsFirstEnter = false local function ResetPokemonData(isReset) _Monsters = {} _NewMonsterIds = {} _MaxEnergy = 0 XPokemonManager.InitTeam() _PassedStageDic = {} _RemainingTimes = XPokemonConfigs.GetDefaultStageTimes() _TimeSupplyLastGetTime = 0 _IsFirstEnter = true _IsSwitchToInfinity = false _NextRecoverTime = 0 _SkipStageInfo = {} _StageSkipTimes = 0 end function XPokemonManager.OnActivityEnd() if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") or XLuaUiManager.IsUiLoad("UiSettleLose") or XLuaUiManager.IsUiLoad("UiSettleWin") then return end XUiManager.TipText("PokemonOver") XLuaUiManager.RunMain() end function XPokemonManager.OpenPokemonMainUi() if XPokemonManager.IsOpen() then local movieId = XPokemonConfigs.GetEnterMovieId() if _IsFirstEnter and (not string.IsNilOrEmpty(movieId))then XDataCenter.MovieManager.PlayMovie(movieId, function() XLuaUiManager.Open("UiPokemonMainLineBanner") end) _IsFirstEnter = false else XLuaUiManager.Open("UiPokemonMainLineBanner") end else XUiManager.TipText("PokemonOver") end end function XPokemonManager.CheckPokemonTaskRedPoint() return XDataCenter.TaskManager.CheckLimitTaskList(XPokemonManager.GetCurrTaskTimeLimitId()) end function XPokemonManager.CheckPokemonEnterRedPoint() if not XPokemonManager.IsOpen() then return false end local timeSupplyOffset = XPokemonManager.GetTimeSupplyOffsetTime() local maxTimeSupply = XPokemonConfigs.GetTimeSupplyMaxCount() * XPokemonConfigs.GetTimeSupplyInterval() return timeSupplyOffset >= maxTimeSupply end function XPokemonManager.NotifyPokemonData(data) local isReset = data.IsActivityReset if isReset then ResetPokemonData() end local checkNew = isReset and true --重置时获得的所有怪物均为新获得 UpdateMonsters(data.MonsterList, checkNew) UpdateMaxEnergy(data.MaxEnergy) UpdateUnlockedPositionList(data.UnlockedPositionList) UpdateTeam(data.FormationData and data.FormationData.MonsterIdList) UpdatePassedStage(data.PassedStageIdList) UpdateRemainingTimes(data.StageTimes) UpdateTimeSupplyLastGetTime(data.TimeSupplyLastGetTime) UpdateActivityId(data.ActivityId) UpdateRandomMonsterData(data.RandomStageData) UpdateNextRecoverTime(data.StageTimesNextRecoverTime) UpdateStageSkipTimes(data.StageSkipTimes) UpdateSkipStageInfo(data.SkipedStageIdList) end function XPokemonManager.Init() XPokemonManager.InitTeam() end XPokemonManager.Init() return XPokemonManager end ---------------------(服务器推送) begin------------------ XRpc.NotifyPokemonData = function(data) XDataCenter.PokemonManager.NotifyPokemonData(data) end XRpc.NotifyPokemonMonster = function(data) XDataCenter.PokemonManager.NotifyPokemonMonster(data) end XRpc.NotifyPokemonUnlock = function(data) XDataCenter.PokemonManager.NotifyPokemonUnlock(data) end XRpc.NotifyPokemonStagePassed = function(data) XDataCenter.PokemonManager.NotifyPokemonStagePassed(data) end XRpc.NotifyPokemonStageTimesInfo = function(data) XDataCenter.PokemonManager.NotifyPokemonRemainingTimesChange(data) end XRpc.NotifyPokemonStageSkipInfo = function(data) XDataCenter.PokemonManager.NotifyPokemonStageSkipInfo(data) end XRpc.NotifyPokemonRemoveStageSkiped = function(data) XDataCenter.PokemonManager.NotifyPokemonRemoveStageSkiped(data) end ---------------------(服务器推送)end------------------