local RebelStrike_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') private.rewardConfigList = nil private.targetLine = 0 private.findingTarget = false private.rebelStrikeDuration = 0 function RebelStrike_Controller.OnStartup() EventSystem.Regist(EventID.UI_ChangeLineDone, private.OnReadyToTarget) EventSystem.Regist(EventID.AfterTownLevelBegin, private.OnReadyToTarget) private.rebelStrikeDuration = DataSheetManager.ConstData:GetDataByID("RebelStrikeDuration").IntValue end function RebelStrike_Controller.OpenMain() UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UIRebelStrikeMain) end function RebelStrike_Controller.OpenRewardPreview() UIManager.OpenView(Const_UI_Lua.UIEnum.UIRebelStrikeReward) end function RebelStrike_Controller.GetTimeToOpen() local data = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.RebelStrike) local timeData = data.Time_Table[1] local startTime = timeData.StartTime local endTime = timeData.EndTime if UTL.Time.IsServerInOpeningTime(startTime, endTime) then return UTL.Time.GetOffsetTimeFromHourWithSeconds(private.rebelStrikeDuration) else --今天过了活动时间,返回距离明天活动开启的时间 if UTL.Time.IsServerInEndAndRefreshTime(timeData) then return UTL.Time.GetServerIntervalNextTimeByTimeId(startTime) else --今天未到活动时间点,返回距离活动开启的时间 return UTL.Time.GetServerIntervalTimeByTimeId(startTime) end end end function RebelStrike_Controller.GetTimeToClose() return UTL.Time.DiffHMS(private.rebelStrikeDuration) end --是否在活动时间内 function private.IsInOpenTime() return RebelStrike_Controller.GetTimeToOpen() == 0 end function private.GetShowRewardList() if private.rewardConfigList == nil then private.rewardConfigList = {} local rewardList = DataSheetManager.ConstData:GetDataByID("RebelStrikeEliteReward").IntListValue for i, v in ipairs(rewardList) do local isSuccess, rewardInfo = DataSheetManager.TeamDungeonReward:TryGetDataByID(v) if isSuccess then private.rewardConfigList[i] = rewardInfo end end end return private.rewardConfigList end function RebelStrike_Controller.GetGurLevShowReward() local curLev = MDL.HeroSelect.GetTeamLevel() local list = private.GetShowRewardList() for _, v in ipairs(list) do if curLev >= v.LevelMin and curLev <= v.LevelMax then local reward = DataSheetManager.RewardClientShow:GetDataByClientShowID(v.RewardClientShowID) if reward then return DataSheetUtil.GetRewardClientShowItemTable(reward) end end end return nil end function RebelStrike_Controller.GetNextLevShowReward() local curLev = MDL.HeroSelect.GetTeamLevel() local list = private.GetShowRewardList() for _, v in ipairs(list) do if v.LevelMin > curLev then local reward = DataSheetManager.RewardClientShow:GetDataByClientShowID(v.RewardClientShowID) if reward then return DataSheetUtil.GetRewardClientShowItemTable(reward), v.LevelMin, v.LevelMax end end end return nil end --前往目标点 function RebelStrike_Controller.GoToTarget(mapId, lineId) --是否在CD内 if MDL.RebelStrike.IsInGoToTargetCD() then return end --是否在活动时间内 if private.IsInOpenTime() == false then CTL.Tips.AddTipsMsg(Const_IDS.IDS_RebelStrike_NotAtActivityTime) return end UIManager.RecoverTopView() CTL.HomeMain.CloseOpenView() MDL.RebelStrike.UpdateGoToTargetCD() private.findingTarget = true if lineId == SyncMoveManager.CurLine and mapId == LevelManager.GetCurInfoData().LevelID then --同线同场景 private.OnReadyToTarget() elseif lineId ~= SyncMoveManager.CurLine and mapId == LevelManager.GetCurInfoData().LevelID then --同场景不同线 NotSyncBattleSetter.SendChangeSceneLineRequest(lineId) elseif mapId ~= LevelManager.GetCurInfoData().LevelID then --不同场景 if lineId ~= SyncMoveManager.CurLine then CTL.Level.StartConveyProgress(mapId, lineId) else CTL.Level.StartConveyProgress(mapId) end end end --切场景/切线后前往目标点 function private.OnReadyToTarget() if private.findingTarget then private.findingTarget = false --随机一个目标点 local levelItemId = MDL.RebelStrike.GetRandLevelItemID() NotSyncBattleSetter.FindPathByLevelItemIDAndRide(LevelManager.GetCurInfoData().LevelID, levelItemId, private.OnArriveToTarget, LuaConst.ETownFindPathType.Rebel_Strike) end end function private.OnArriveToTarget() EventSystem.Dispatch(EventID.UI_MainShowDialogue, "Tip_WildBoss_MainCity01_01") end --进入战斗 function RebelStrike_Controller.EnterBattle() local unlockLev = MDL.Unlock.GetUnlockTeamLevel(MDL.Unlock.FunctionType.RebelStrike) if MDL.HeroSelect.GetTeamLevel() < unlockLev then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_RebelStrike_InsufficientLevel1, unlockLev)) return end if private.IsInOpenTime() == false then CTL.Tips.AddTipsMsg(Const_IDS.IDS_RebelStrike_NotAtActivityTime) return end if CTL.Team.IsInTeam() and CTL.Team.IsSelfLeader() == false then CTL.Tips.AddTipsMsg(Const_IDS.IDS_RebelStrike_NeedTeamLeader) return end --队员需要全部在队长场景(废弃跟随限制因客户端数据有未知bug,服务器也有判断跟随限制) local inSameScene, name = CTL.Team.SomeMemberNotInSameScene()--CTL.Team.SomeMemberNotFollowing() 偶尔数据有bug,不能全信成员的state数据 。故暂时只限制玩家没回到主城中。 if inSameScene then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_RebelStrike_NotFollowing, name)) return end --如果当前在传送,需要打断 CTL.Level.TryBreakConveyProgress() MDL.RebelStrike.RobRebelReq() end return RebelStrike_Controller