local XUiMultiplayerRoom = XLuaUiManager.Register(XLuaUi, "UiMultiplayerRoom") local XUiGridMultiplayerRoomChar = require("XUi/XUiMultiplayerRoom/XUiGridMulitiplayerRoomChar") local XUiGridMultiplayerDifficultyItem = require("XUi/XUiMultiplayerRoom/XUiGridMultiplayerDifficultyItem") local XUiPanelChangeStage = require("XUi/XUiMultiplayerRoom/XUiPanelChangeStage") local XUiPanelActiveBuffMian = require("XUi/XUiMultiplayerRoom/XUiPanelActiveBuffMian") local XUiPanelActiveBuff = require("XUi/XUiMultiplayerRoom/XUiPanelActiveBuff") local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel") local XUiPanelMultiDimRoomReward = require("XUi/XUiMultiDim/XUiPanelMultiDimRoomReward") local XUiPanelMultiDimRecommendCareer = require("XUi/XUiMultiDim/XUiPanelMultiDimRecommendCareer") local CSXTextManagerGetText = CS.XTextManager.GetText local MAX_CHAT_WIDTH = 450 local CHAT_SUB_LENGTH = 18 local IsFirstFriendEffect = "LocalValue_IsFirstFriendEffect"--是否是第一次在联机页面开启队友特效 ------------------------------ tips类 --------------------------- local XUiTips = XClass(nil, "XUiTips") function XUiTips:Ctor(ui) self.GameObject = ui.gameObject self.Transform = ui.transform XTool.InitUiObject(self) end function XUiTips:SetText(desc) self.TxtTips.text = desc end function XUiTips:SetActiveEx(enable) self.GameObject:SetActiveEx(enable) end --------------------------------------------------------- local MAX_PLAYER_COUNT = 3 local ButtonState = { ["Waiting"] = 1, ["Fight"] = 2, ["Ready"] = 3, ["CancelReady"] = 4, } local DifficultyType = { ["Normal"] = 1, ["Hart"] = 2, ["Nightmare"] = 3, } local TipsType = { ["LevelTips"] = 1, --关卡提示 ["ChuzhanTips"] = 2, --出战提示 ["TongTiaoTips"] = 3, --同调提示 } function XUiMultiplayerRoom:OnAwake() self.RoomKickCountDownTime = CS.XGame.Config:GetInt("RoomKickCountDownTime") self.RoomKickCountDownShowTime = CS.XGame.Config:GetInt("RoomKickCountDownShowTime") local root = self.UiModelGo.transform self.RoleModelList = {} for i = 1, MAX_PLAYER_COUNT do self.RoleModelList[i] = {} local case = root:FindTransform("PanelModelCase" .. i) local effectObj = root:FindTransform("ImgEffectTongDiao" .. i) local roleModel = XUiPanelRoleModel.New(case, self.Name, nil, true) self.RoleModelList[i].RoleModel = roleModel self.RoleModelList[i].EffectObj = effectObj end self.InFSetAbilityLimit = self.InFSetAbilityLimit:GetComponent("InputField") self:RegisterClickEvent(self.ToggleQuickMatch, self.OnToggleQuickMatchClick) self:RegisterClickEvent(self.BtnFight, self.OnBtnFightClick) self:RegisterClickEvent(self.BtnCancelReady, self.OnBtnCancelReadyClick) self:RegisterClickEvent(self.BtnReady, self.OnBtnReadyClick) self:RegisterClickEvent(self.BtnChat, self.OnBtnChatClick) self:RegisterClickEvent(self.BtnChangeDifficulty, self.OnBtnChangeDifficultyClick) self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick) self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick) self:RegisterClickEvent(self.BtnDifficultySelect, self.OnBtnDifficultySelectClick) self:RegisterClickEvent(self.BtnCloseDifficulty, self.OnBtnCloseDifficultyClick) self:RegisterClickEvent(self.BtnMapSelect, self.OnBtnMapsSelectClick) self.BtnSetAbilityLimit.CallBack = handler(self, self.OnBtnSetAbilityLimitClick) self.BtnCloseAbilityLimit.CallBack = handler(self, self.OnBtnCloseAbilityLimitClick) self.BtnCancel.CallBack = handler(self, self.OnBtnCloseAbilityLimitClick) self.BtnConfirmSetAbilityLimit.CallBack = handler(self, self.OnBtnConfirmSetAbilityLimitClick) self.BtnAutoMatch.CallBack = handler(self, self.OnBtnAutoMatchClick) self.BtnSpecialEffects.CallBack = handler(self, self.OnBtnSpecialEffectsClick) self.BtnChangeStage.CallBack = handler(self, self.OnBtnChangeStageClick) self.BtnMusic.CallBack = handler(self, self.OnBtnMusicClick) self.BtnSnowGame.CallBack = handler(self, self.OnBtnSnowSelectClick) self.BtnYuanXiao.CallBack = handler(self, self.OnBtnRhythmSelectClick) self.BtnPattern.CallBack = handler(self, self.OnBtnPatternClick) local actionIcon = XDataCenter.ItemManager.GetItemIcon(XDataCenter.ItemManager.ItemId.ActionPoint) self.RImgActionIcon:SetRawImage(actionIcon) self.BtnGroup = { [ButtonState.Waiting] = self.BtnWaiting.gameObject, [ButtonState.Fight] = self.BtnFight.gameObject, [ButtonState.Ready] = self.BtnReady.gameObject, [ButtonState.CancelReady] = self.BtnCancelReady.gameObject, } self:InitCharItems() self:InitDifficultyButtons() self:InitSpecialEffectsButton() self:InitSummerEpisodeMapSelectBtn() self:InitSpecialTrainMusicBtn() self:InitSpecialTrainSnowBtn() self:InitSpecialTrainRhythmBtn() self.TipsList = { XUiTips.New(self.PanelTips) } self.PanelDifficulty.gameObject:SetActiveEx(false) self.PanelChangeDifficulty.gameObject:SetActiveEx(false) self.PanelAbilityLimit.gameObject:SetActiveEx(false) self.ChangeStagePanel = XUiPanelChangeStage.New(self.PanelChangeStage) self.ActiveBuffMainPanel = XUiPanelActiveBuffMian.New(self.PanelActiveBuffMain, self) self.ActiveBuffPanel = XUiPanelActiveBuff.New(self.PanelActiveBuff) self:InitFun() end function XUiMultiplayerRoom:OnStart() self.GridMap = {} self.TipsFuns = {} XEventManager.AddEventListener(XEventId.EVENT_ROOM_REFRESH, self.OnRoomRefresh, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_KICKOUT, self.OnKickOut, self) XEventManager.AddEventListener(XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XDataCenter.ItemManager.ItemId.ActionPoint, self.OnActionPointUpdate, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_PLAYER_ENTER, self.OnPlayerEnter, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_PLAYER_LEAVE, self.OnPlayerLevel, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_PLAYER_STAGE_REFRESH, self.OnPlayerStageRefresh, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_PLAYER_NPC_REFRESH, self.OnPlayerNpcRefresh, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_AUTO_MATCH_CHANGE, self.OnRoomAutoMatchChange, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_STAGE_LEVEL_CHANGE, self.OnRoomStageLevelChange, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_STAGE_CHANGE, self.OnRoomStageChange, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_STAGE_ABILITY_LIMIT_CHANGE, self.OnRoomAbilityLimitChange, self) XEventManager.AddEventListener(XEventId.EVENT_CHAT_RECEIVE_ROOM_MSG, self.RefreshChatMsg, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_CHANGE_STAGE, self.OnStageChange, self) XEventManager.AddEventListener(XEventId.EVENT_ARENAONLINE_WEEK_REFRESH, self.OnArenaOnlineWeekRefrsh, self) XEventManager.AddEventListener(XEventId.EVENT_ROOM_CHANGE_STAGE_SUMMER_EPISODE, self.OnStageChangeSummerEpisode, self) -- 开启自动关闭检查 local roomData = XDataCenter.RoomManager.RoomData if not roomData then return end if XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Rhythm) then local endTime = XDataCenter.FubenSpecialTrainManager.GetActivityEndTime() self:SetAutoCloseInfo(endTime, function(isClose) if isClose then XDataCenter.FubenSpecialTrainManager.HandleActivityEndTime() end end) end end function XUiMultiplayerRoom:OnEnable() XUiMultiplayerRoom.Super.OnEnable(self) self:Refresh() end function XUiMultiplayerRoom:OnDisable() XUiMultiplayerRoom.Super.OnDisable(self) end function XUiMultiplayerRoom:OnDestroy() self:StopTimer() self:StopCharTimer() self:CloseAllOperationPanel() self.IsAlreadyTip = nil XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_REFRESH, self.OnRoomRefresh, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_KICKOUT, self.OnKickOut, self) XEventManager.RemoveEventListener(XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XDataCenter.ItemManager.ItemId.ActionPoint, self.OnActionPointUpdate, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_PLAYER_ENTER, self.OnPlayerEnter, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_PLAYER_LEAVE, self.OnPlayerLevel, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_PLAYER_STAGE_REFRESH, self.OnPlayerStageRefresh, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_PLAYER_NPC_REFRESH, self.OnPlayerNpcRefresh, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_AUTO_MATCH_CHANGE, self.OnRoomAutoMatchChange, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_STAGE_LEVEL_CHANGE, self.OnRoomStageLevelChange, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_STAGE_CHANGE, self.OnRoomStageChange, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_STAGE_ABILITY_LIMIT_CHANGE, self.OnRoomAbilityLimitChange, self) XEventManager.RemoveEventListener(XEventId.EVENT_CHAT_RECEIVE_ROOM_MSG, self.RefreshChatMsg, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_CHANGE_STAGE, self.OnStageChange, self) XEventManager.RemoveEventListener(XEventId.EVENT_ARENAONLINE_WEEK_REFRESH, self.OnArenaOnlineWeekRefrsh, self) XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_CHANGE_STAGE_SUMMER_EPISODE, self.OnStageChangeSummerEpisode, self) end function XUiMultiplayerRoom:InitFun() self.RoomInfoActiveTipFun = function(arg) self:RoomInfoActiveTip(arg) end self.RoomInfoContenttextTipFun = function(arg) self:RoomInfoContenttextTip(arg) end self.RoomInfoFightSuccesstextTipFun = function(arg) self:RoomInfoFightSuccesstextTip(arg) end self.ShowRoomTipsFun = function() self:ShowRoomTips() end end function XUiMultiplayerRoom:OnRoomRefresh() self:RefreshChars() end function XUiMultiplayerRoom:OnKickOut() XLuaUiManager.Remove("UiDialog") XLuaUiManager.Remove("UiReport") XLuaUiManager.Remove("UiRoomCharacter") XLuaUiManager.Remove("UiPlayerInfo") XUiHelper.RemoveUiChatServeMain() if XUiManager.CheckTopUi(CsXUiType.Normal, self.Name) then self:Close() else self:Remove() end end function XUiMultiplayerRoom:OnActionPointUpdate() self.TxtActionPoint.text = XDataCenter.ItemManager.GetItem(XDataCenter.ItemManager.ItemId.ActionPoint).Count end -- 有玩家进入房间 function XUiMultiplayerRoom:OnPlayerEnter(playerData) local grid = self:GetGrid(playerData.Id) self.ActiveBuffMainPanel:Refresh() self:InitGridCharData(grid, playerData) self:RefreshButtonStatus() self:CheckLeaderCountDown() self:RefreshTips() self:RefreshSameCharTips() self:RefreshCharActiveEffct() self:RefreshCharacterLimit() end -- 有玩家离开房间 function XUiMultiplayerRoom:OnPlayerLevel(playerId) local grid = self:GetGrid(playerId) self.ActiveBuffMainPanel:Refresh() grid:InitEmpty() self:RefreshButtonStatus() self.GridMap[playerId] = nil self:CheckLeaderCountDown() self:RefreshTips() self:RefreshSameCharTips() self:RefreshCharActiveEffct() self:RefreshCharacterLimit() end -- 玩家状态刷新 function XUiMultiplayerRoom:OnPlayerStageRefresh(playerData) local grid = self:GetGrid(playerData.Id) self:RefreshGridPlayer(grid, playerData) self:RefreshButtonStatus() self:CheckLeaderCountDown() self:RefreshCharacterLimit() end -- 玩家Npc信息刷新 function XUiMultiplayerRoom:OnPlayerNpcRefresh(playerData) local grid = self:GetGrid(playerData.Id) self.ActiveBuffMainPanel:Refresh() self:InitGridCharData(grid, playerData) self:RefreshButtonStatus() self:CheckLeaderCountDown() self:RefreshTips() self:RefreshSameCharTips() self:RefreshCharActiveEffct() self:RefreshChangeStageBtn() self:RefreshCharacterLimit() end -- 刷新玩家同调特效 function XUiMultiplayerRoom:RefreshCharActiveEffct() local roomData = XDataCenter.RoomManager.RoomData if not roomData or not roomData.StageId then return end local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) if stageInfo.Type ~= XDataCenter.FubenManager.StageType.ArenaOnline then return end for _, grid in pairs(self.GridMap) do grid:CheckOpenEffctObje() end end -- 房间自动修改 function XUiMultiplayerRoom:OnRoomAutoMatchChange() self:RefreshButtonStatus() self:RefreshDifficultyPanel() self:CheckLeaderCountDown() end -- 房间难度等级修改 function XUiMultiplayerRoom:OnRoomStageLevelChange(lastLevel, curLevel) self:RefreshButtonStatus() self:RefreshDifficultyPanel() self:PlayStageLevelChange(lastLevel, curLevel) self.PanelDifficulty.gameObject:SetActiveEx(false) self:CheckLeaderCountDown() end -- 房间状态修改 function XUiMultiplayerRoom:OnRoomStageChange() self:CheckLeaderCountDown() end -- 房间战力限制修改 function XUiMultiplayerRoom:OnRoomAbilityLimitChange() self:RefreshAbilityLimit() end -- 夏活关卡改变 function XUiMultiplayerRoom:OnStageChangeSummerEpisode() local roomData = XDataCenter.RoomManager.RoomData self.TxtMap.text = XDataCenter.FubenManager.GetStageName(roomData.StageId) self.TxtTitle.text = XDataCenter.FubenManager.GetStageName(roomData.StageId) --todo aafasou 待接入地图更改后的动画 end function XUiMultiplayerRoom:PlayStageLevelChange(lastLevel, curLevel) local roomData = XDataCenter.RoomManager.RoomData local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(roomData.StageId, curLevel) self.TxtChangeAdditionDest.text = levelControl.AdditionDest local level local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) if stageInfo.Type == XDataCenter.FubenManager.StageType.ArenaOnline then level = roomData.ChallengeLevel else level = roomData.StageLevel end --设置显隐 for k, v in pairs(self.DifficultyIconGroup) do if k == lastLevel then v.gameObject:SetActiveEx(true) elseif k == level then v.gameObject:SetActiveEx(true) else v.gameObject:SetActiveEx(false) end end --设置位置 self.DifficultyIconGroup[lastLevel].localPosition = self.ChangeDifficultyCase1.localPosition self.DifficultyIconGroup[level].localPosition = self.ChangeDifficultyCase2.localPosition if XLuaUiManager.IsUiShow("UiMultiplayerRoom") then local begin = function() XLuaUiManager.SetMask(true) end local finished = function() XLuaUiManager.SetMask(false) self.PanelChangeDifficulty.gameObject:SetActiveEx(false) end self:PlayAnimation("AnimChangeDifficulty", finished, begin) end end ----------------------- 界面方法 ----------------------- function XUiMultiplayerRoom:SwitchButtonState(state) for k, v in pairs(self.BtnGroup) do v:SetActiveEx(k == state) end end function XUiMultiplayerRoom:SwitchDifficultyState(diff) local showBtn = false for k, v in pairs(self.DifficultyImageGroup) do v.gameObject:SetActiveEx(k == diff) if k == diff then showBtn = true end end self.BtnDifficultySelect.gameObject:SetActiveEx(showBtn) end function XUiMultiplayerRoom:GetCurRole() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return nil end for _, v in pairs(roomData.PlayerDataList) do if v.Id == XPlayer.Id then return v end end end function XUiMultiplayerRoom:CheckPeopleEnough() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return 0 end local count = 0 for _, v in pairs(roomData.PlayerDataList) do count = count + 1 end local stageId = roomData.StageId local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId) local leastPlayer = stageCfg.OnlinePlayerLeast <= 0 and 1 or stageCfg.OnlinePlayerLeast if count < leastPlayer then XUiManager.TipMsg(string.format(CS.XTextManager.GetText("OnlineRoomLeastPlayer"), leastPlayer)) return false end return true end function XUiMultiplayerRoom:GetLeaderRole() local roomData = XDataCenter.RoomManager.RoomData for _, v in pairs(roomData.PlayerDataList) do if v.Leader then return v end end end function XUiMultiplayerRoom:CheckAllReady() local roomData = XDataCenter.RoomManager.RoomData for _, v in pairs(roomData.PlayerDataList) do if not v.Leader and v.State ~= XDataCenter.RoomManager.PlayerState.Ready then return false end end return true end function XUiMultiplayerRoom:CheckListFullAndAllReady() local roomData = XDataCenter.RoomManager.RoomData return roomData.State == 0 and #roomData.PlayerDataList == MAX_PLAYER_COUNT and self:CheckAllReady() end -- 界面刷新 function XUiMultiplayerRoom:Refresh() local roomData = XDataCenter.RoomManager.RoomData local stageId = roomData.StageId local challengeId = roomData.ChallengeId local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId) local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId) self.TxtTitle.text = stageCfg.Name --体力&门票 if XDataCenter.FubenManager.CheckCanFlop(stageId) and stageInfo.Type == XDataCenter.FubenManager.StageType.BossOnline then self.TxtActionConsume.text = XDataCenter.FubenManager.GetStageActionPointConsume(stageId) local itemId = XDataCenter.FubenManager.GetFlopConsumeItemId(stageId) local item = XDataCenter.ItemManager.GetItem(itemId) local count = item and item:GetCount() or 0 self.TxtTicket.text = count local flopIcon = XDataCenter.ItemManager.GetItemIcon(itemId) self.RImgFlopIcon:SetRawImage(flopIcon) self.PanelFlopItem.gameObject:SetActiveEx(true) self.PanelStaminaCost.gameObject:SetActiveEx(false) self.PanelArenaOnlineTip.gameObject:SetActiveEx(false) self.TxtLv.gameObject:SetActiveEx(false) self.PanelConsume.gameObject:SetActiveEx(true) elseif stageInfo.Type == XDataCenter.FubenManager.StageType.ArenaOnline then self.PanelFlopItem.gameObject:SetActiveEx(false) self.PanelStaminaCost.gameObject:SetActiveEx(true) self.PanelArenaOnlineTip.gameObject:SetActiveEx(stageInfo.Passed) self.PanelConsume.gameObject:SetActiveEx(false) local arenaStageCfg = XDataCenter.ArenaOnlineManager.GetArenaOnlineStageCfgStageId(challengeId) local arenaChapterCfg = XDataCenter.ArenaOnlineManager.GetCurChapterCfg() local cost = stageInfo.Passed and 0 or arenaStageCfg.EnduranceCost self.TxtStamina.text = cost self.TxtLv.text = CS.XTextManager.GetText("ArenaOnlineChapterLevel", arenaChapterCfg.MinLevel, arenaChapterCfg.MaxLevel) self.ActiveBuffMainPanel:Show(stageId) elseif stageInfo.Type == XDataCenter.FubenManager.StageType.MultiDimOnline then local stage = XDataCenter.FubenManager.GetStageCfg(stageId) self.TxtActionConsume.text = stage.RequireActionPoint self.PanelFlopItem.gameObject:SetActiveEx(false) self.PanelStaminaCost.gameObject:SetActiveEx(false) self.PanelArenaOnlineTip.gameObject:SetActiveEx(false) self.TxtLv.gameObject:SetActiveEx(false) self.PanelConsume.gameObject:SetActiveEx(false) self.BtnSpecialEffects.gameObject:SetActiveEx(false) self.BtnIntelligenceMatch.gameObject:SetActiveEx(false) else local stage = XDataCenter.FubenManager.GetStageCfg(stageId) self.TxtActionConsume.text = stage.RequireActionPoint self.PanelFlopItem.gameObject:SetActiveEx(false) self.PanelStaminaCost.gameObject:SetActiveEx(false) self.PanelArenaOnlineTip.gameObject:SetActiveEx(false) self.TxtLv.gameObject:SetActiveEx(false) self.PanelConsume.gameObject:SetActiveEx(true) end self.TxtActionPoint.text = XDataCenter.ItemManager.GetItem(XDataCenter.ItemManager.ItemId.ActionPoint).Count --按钮状态 self:RefreshButtonStatus() self:RefreshChangeStageBtn() self:RefreshChars() self:RefreshTips() self:RefreshSameCharTips() self:RefreshDifficultyPanel() self:RefreshAbilityLimit() self:RefreshMusicBtnText() self:InitSpecialTrainSnowBtn() self:InitSpecialTrainRhythmBtn() self:InitSpecialEffectsButton() self:InitMultiDim() self:RoomInfoTip() self:RefreshCharacterLimit() end function XUiMultiplayerRoom:CloseAllOperationPanel(exceptIndex) for k, v in pairs(self.GridList) do if not exceptIndex or k ~= exceptIndex then v:CloseOperationPanelAndInvitePanel() end end end -- 角色面板初始化 function XUiMultiplayerRoom:InitCharItems() local caseList = { self.RoomCharCase1, self.RoomCharCase2, self.RoomCharCase3, } self.GridList = {} for i = 1, MAX_PLAYER_COUNT do local ui if i == 1 then ui = self.GridMulitiplayerRoomChar else ui = CS.UnityEngine.GameObject.Instantiate(self.GridMulitiplayerRoomChar) end ui.transform:SetParent(caseList[i], false) ui.transform:Reset() local params = {} local roomData = XDataCenter.RoomManager.RoomData local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) if stageInfo.Type == XDataCenter.FubenManager.StageType.MultiDimSingle or stageInfo.Type == XDataCenter.FubenManager.StageType.MultiDimOnline then params.IsMultiDim = true local recommendList = XMultiDimConfig.GetMultiDimRecommendCareerList(roomData.StageId) params.MultiDimCareer = recommendList[i] end local grid = XUiGridMultiplayerRoomChar.New(ui, self, i, self.RoleModelList[i].RoleModel, self.RoleModelList[i].EffectObj,params) self.GridList[i] = grid end end function XUiMultiplayerRoom:InitSpecialEffectsButton() local val = XSaveTool.GetData(XSetConfigs.FriendEffect) or XSetConfigs.FriendEffectEnum.Open if val == XSetConfigs.FriendEffectEnum.Open then self.BtnSpecialEffects:SetButtonState(XUiButtonState.Select) if not CS.UnityEngine.PlayerPrefs.HasKey(IsFirstFriendEffect) then CS.UnityEngine.PlayerPrefs.SetString(IsFirstFriendEffect, "false") XSaveTool.SaveData(XSetConfigs.IsFirstFriendEffect, nil) local title = CS.XTextManager.GetText("TipTitle") local friendEffectMsg = CS.XTextManager.GetText("OnlineFriendEffectMsg") XUiManager.DialogTip(title, friendEffectMsg, XUiManager.DialogType.Normal, nil, function() XDataCenter.SetManager.SaveFriendEffect(XSetConfigs.FriendEffectEnum.Close) XDataCenter.SetManager.SetAllyEffect(false) self.BtnSpecialEffects:SetButtonState(XUiButtonState.Normal) end) end else self.BtnSpecialEffects:SetButtonState(XUiButtonState.Normal) end end function XUiMultiplayerRoom:InitDifficultyButtons() self.DifficultyImageGroup = { [DifficultyType.Normal] = self.ImgDifficultyNormal, [DifficultyType.Hart] = self.ImgDifficultyHart, [DifficultyType.Nightmare] = self.ImgDifficultyNightmare, } self.DifficultyButtonGroup = { [DifficultyType.Normal] = XUiGridMultiplayerDifficultyItem.New(self.GridDifficultyNormal, DifficultyType.Normal, handler(self, self.SelectDifficulty)), [DifficultyType.Hart] = XUiGridMultiplayerDifficultyItem.New(self.GridDifficultyHart, DifficultyType.Hart, handler(self, self.SelectDifficulty)), [DifficultyType.Nightmare] = XUiGridMultiplayerDifficultyItem.New(self.GridDifficultyNightmare, DifficultyType.Nightmare, handler(self, self.SelectDifficulty)), } self.DifficultyIconGroup = { self.IconNormal, self.IconHart, self.IconNightmare } end function XUiMultiplayerRoom:InitSummerEpisodeMapSelectBtn() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return end self.TxtMap.text = XDataCenter.FubenManager.GetStageName(roomData.StageId) end function XUiMultiplayerRoom:InitSpecialTrainMusicBtn() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return end if not XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Music) then return end local stageName = XFubenConfigs.GetStageName(roomData.StageId) self.BtnMusic:SetName(stageName) local isHell = XFubenSpecialTrainConfig.IsHellStageId(roomData.StageId) self.BtnPattern:SetButtonState(isHell and XUiButtonState.Select or XUiButtonState.Normal) end function XUiMultiplayerRoom:InitSpecialTrainSnowBtn() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return end if not XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Snow) then return end local stageName = XDataCenter.FubenManager.GetStageName(roomData.StageId) self.BtnSnowGame:SetName(stageName) end function XUiMultiplayerRoom:InitSpecialTrainRhythmBtn() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return end if not XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Rhythm) then return end local stageName = XDataCenter.FubenManager.GetStageName(roomData.StageId) self.BtnYuanXiao:SetName(stageName) local isHell = XFubenSpecialTrainConfig.IsHellStageId(roomData.StageId) self.BtnPattern:SetButtonState(isHell and XUiButtonState.Select or XUiButtonState.Normal) end function XUiMultiplayerRoom:InitMultiDim() local roomData = XDataCenter.RoomManager.RoomData local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) local isMultiDim = stageInfo.Type == XDataCenter.FubenManager.StageType.MultiDimSingle or stageInfo.Type == XDataCenter.FubenManager.StageType.MultiDimOnline --if not self.MultiDimRewardPanel then -- self.MultiDimRewardPanel = XUiPanelMultiDimRoomReward.New(self.PanelMultiDimReward,self) --end if not self.MultiDimRecommendCareerPanel then self.MultiDimRecommendCareerPanel = XUiPanelMultiDimRecommendCareer.New(self.PanelRecommendType) end if isMultiDim then --self.MultiDimRewardPanel:Refresh(roomData.StageId) self.MultiDimRecommendCareerPanel:Refresh(roomData.StageId) local difficultyCfg = XMultiDimConfig.GetMultiDimDifficultyStageData(roomData.StageId) --local hasReward = XDataCenter.MultiDimManager.CheckThemeIsFirstPassOpen(difficultyCfg.ThemeId) self.PanelMultiDimReward.gameObject:SetActiveEx(false) self:RefreshMultiDimButton(roomData.StageId) self.BtnMultiDimDifficultySelect.CallBack = function() local leader = self:GetLeaderRole() if leader.Id == XPlayer.Id then XLuaUiManager.Open("UiMultiDimSelectDifficult", difficultyCfg.ThemeId, difficultyCfg.DifficultyId, function(difficultyId, stageId) XDataCenter.RoomManager.SetStageIdRequest(stageId, function(newStageId) self:RefreshMultiDimButton(newStageId) end) end) end end end self.MultiDimRecommendCareerPanel:SetActive(isMultiDim) self.PanelConsume.gameObject:SetActiveEx(not isMultiDim) self.BtnMultiDimDifficultySelect.gameObject:SetActiveEx(isMultiDim) end function XUiMultiplayerRoom:RefreshMultiDimButton(stageId) local difficultyCfg = XMultiDimConfig.GetMultiDimDifficultyStageData(stageId) self.DifficultyInfoDetail = XDataCenter.MultiDimManager.GetDifficultyDetailInfo(difficultyCfg.ThemeId, difficultyCfg.DifficultyId) self.BtnMultiDimDifficultySelect:SetNameByGroup(1, self.DifficultyInfoDetail.Name) for _,group in pairs(self.BtnMultiDimDifficultySelect.TxtGroupList) do for _,txtCom in pairs(group.TxtList) do txtCom.color = XUiHelper.Hexcolor2Color(self.DifficultyInfoDetail.Color) end end end function XUiMultiplayerRoom:GetGrid(playerId) local grid = self.GridMap[playerId] if not grid then if playerId == XPlayer.Id then grid = self.GridList[1] self.GridMap[playerId] = grid else for i = 2, MAX_PLAYER_COUNT do if not self.GridList[i].PlayerData then grid = self.GridList[i] self.GridMap[playerId] = grid break end end end end if not grid then XLog.Error("XUiMultiplayerRoom:GetGrid error, there is no empty grid") end return grid end function XUiMultiplayerRoom:RefreshButtonStatus() local roomData = XDataCenter.RoomManager.RoomData local role = self:GetCurRole() if role and role.Leader then if self:CheckAllReady() then self:SwitchButtonState(ButtonState.Fight) else self:SwitchButtonState(ButtonState.Waiting) end else if role.State == XDataCenter.RoomManager.PlayerState.Ready then self:SwitchButtonState(ButtonState.CancelReady) else self:SwitchButtonState(ButtonState.Ready) end end if XDataCenter.FubenManager.CheckMultiplayerLevelControl(roomData.StageId) then self:SwitchDifficultyState(roomData.StageLevel) else self:SwitchDifficultyState(0) end self.BtnMapSelect.gameObject:SetActiveEx(XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Photo)) local isShowSpecial = XDataCenter.FubenSpecialTrainManager.CheckSpecialTrainShowSpecial(roomData.StageId) local isMultiDim = XDataCenter.MultiDimManager.IsMultiDimStage(roomData.StageId) self.PanelLimit.gameObject:SetActiveEx(isShowSpecial) self.PanelConsume.gameObject:SetActiveEx(isShowSpecial and (not isMultiDim)) self.BtnMusic.gameObject:SetActiveEx(XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Music)) self.BtnPattern.gameObject:SetActiveEx(XDataCenter.FubenSpecialTrainManager.CheckSpecialTrainShowPattern(roomData.StageId)) self.BtnAutoMatch.ButtonState = roomData.AutoMatch and CS.UiButtonState.Select or CS.UiButtonState.Normal self.BtnSnowGame.gameObject:SetActiveEx(XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Snow)) self.BtnYuanXiao.gameObject:SetActiveEx(XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Rhythm)) end function XUiMultiplayerRoom:RefreshChars() local roomData = XDataCenter.RoomManager.RoomData for _, v in pairs(roomData.PlayerDataList) do local grid = self:GetGrid(v.Id) self:InitGridCharData(grid, v) end for _, v in pairs(self.GridList) do if not v.PlayerData then v:InitEmpty() end end self:RefreshCharacterLimit() end function XUiMultiplayerRoom:RefreshChangeStageBtn() local roomData = XDataCenter.RoomManager.RoomData local stageId = roomData.StageId local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId) if stageInfo.Type ~= XDataCenter.FubenManager.StageType.ArenaOnline then self.BtnChangeStage.gameObject:SetActiveEx(false) return end local leader = self:GetLeaderRole() if not leader then self.BtnChangeStage.gameObject:SetActiveEx(false) return end self.BtnChangeStage.gameObject:SetActiveEx(leader.Id == XPlayer.Id) end function XUiMultiplayerRoom:RefreshDifficultyPanel() local roomData = XDataCenter.RoomManager.RoomData if XDataCenter.FubenManager.CheckMultiplayerLevelControl(roomData.StageId) then local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) if stageInfo.Type == XDataCenter.FubenManager.StageType.ArenaOnline then local cfg = XArenaOnlineConfigs.GetStageById(roomData.ChallengeId) if cfg and cfg.Difficulty then local difficultyIds = cfg.Difficulty for k, id in pairs(difficultyIds) do local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id) if levelControl then local item = self.DifficultyButtonGroup[k] if item then item:Refresh(levelControl) item:SetSelected(roomData.ChallengeLevel == k) end end end end else for k, v in pairs(self.DifficultyButtonGroup) do local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(roomData.StageId, k) v:Refresh(levelControl) v:SetSelected(roomData.StageLevel == k) end end local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(roomData.StageId, roomData.StageLevel) self.TxtAdditionDest.text = levelControl.AdditionDest self.TxtRecommend.text = CS.XTextManager.GetText("MultiplayerRoomRecommendAbility", levelControl.RecommendAbility) else self.TxtAdditionDest.gameObject:SetActiveEx(false) self.TxtRecommend.gameObject:SetActiveEx(false) end end function XUiMultiplayerRoom:RefreshAbilityLimit() local roomData = XDataCenter.RoomManager.RoomData self.TxtAbilityLimit.text = roomData.AbilityLimit self.TxtCurAbilityLimit.text = roomData.AbilityLimit end function XUiMultiplayerRoom:RefreshAbilityLimitPanel() local roomData = XDataCenter.RoomManager.RoomData local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(roomData.StageId, roomData.StageLevel) local defaultAbilityLimit = roomData.AbilityLimit > 0 and roomData.AbilityLimit or levelControl and levelControl.RecommendAbility or 0 self.InFSetAbilityLimit.text = defaultAbilityLimit self.TxtCurAbilityLimit.text = roomData.AbilityLimit end function XUiMultiplayerRoom:CheckSameCharacterByMyself() local roomData = XDataCenter.RoomManager.RoomData local curRole = self:GetCurRole() if not curRole then return false end local isAllowRepeatChar = XDataCenter.FubenManager.CheckIsStageAllowRepeatChar(roomData.StageId) if isAllowRepeatChar then return false end for _, v in pairs(roomData.PlayerDataList) do if v.Id ~= curRole.Id and (v.Leader or v.State == XDataCenter.RoomManager.PlayerState.Ready) and v.FightNpcData.Character.Id == curRole.FightNpcData.Character.Id then return true end end end function XUiMultiplayerRoom:RefreshChatMsg(chatDataLua) local senderName = XDataCenter.SocialManager.GetPlayerRemark(chatDataLua.SenderId, chatDataLua.NickName) if chatDataLua.MsgType == ChatMsgType.Emoji then self.TxtMessageContent.text = string.format("%s:%s", senderName, CSXTextManagerGetText("EmojiText")) else self.TxtMessageContent.text = string.format("%s:%s", senderName, chatDataLua.Content) end if not string.IsNilOrEmpty(chatDataLua.CustomContent) then self.TxtMessageContent.supportRichText = true else self.TxtMessageContent.supportRichText = false end if XUiHelper.CalcTextWidth(self.TxtMessageContent) > MAX_CHAT_WIDTH then self.TxtMessageContent.text = string.Utf8Sub(self.TxtMessageContent.text, 1, CHAT_SUB_LENGTH) .. [[......]] end local grid = self:GetGrid(chatDataLua.SenderId) grid:RefreshChat(chatDataLua) end ----------------------- 职业提示 ----------------------- function XUiMultiplayerRoom:RefreshTips() for _, v in pairs(self.TipsList) do v:SetActiveEx(false) end local roomData = XDataCenter.RoomManager.RoomData local stageTemplate = XDataCenter.FubenManager.GetStageCfg(roomData.StageId) if stageTemplate.NeedJobType then local needJobCount = {} for _, v in pairs(stageTemplate.NeedJobType) do if not needJobCount[v] then needJobCount[v] = 0 end needJobCount[v] = needJobCount[v] + 1 end local index = 0 for k, v in pairs(needJobCount) do local jobCount = self:GetJopCount(k) if jobCount < v then index = index + 1 local tips = self.TipsList[index] if not tips then local ui = CS.UnityEngine.GameObject.Instantiate(self.PanelTips, self.PanelTipsContainer) tips = XUiTips.New(ui) self.TipsList[index] = tips end tips:SetActiveEx(true) tips:SetText(self:GetJobTips(k, v - jobCount)) end end end end function XUiMultiplayerRoom:RefreshSameCharTips() local roomData = XDataCenter.RoomManager.RoomData local isAllowRepeatChar = XDataCenter.FubenManager.CheckIsStageAllowRepeatChar(roomData.StageId) for _, v in pairs(roomData.PlayerDataList) do local grid = self:GetGrid(v.Id) grid:ShowSameCharTips(false) if not isAllowRepeatChar then for _, v2 in pairs(roomData.PlayerDataList) do if v.Id ~= v2.Id and v.FightNpcData.Character.Id == v2.FightNpcData.Character.Id then grid:ShowSameCharTips(true) break end end end end end function XUiMultiplayerRoom:RefreshMusicBtnText() local roomData = XDataCenter.RoomManager.RoomData if not roomData then return end if not XFubenSpecialTrainConfig.IsSpecialTrainStage(roomData.StageId, XFubenSpecialTrainConfig.StageType.Music) then return end local stageName = XFubenConfigs.GetStageName(roomData.StageId) self.BtnMusic:SetName(stageName) local isHell = XFubenSpecialTrainConfig.IsHellStageId(roomData.StageId) self.BtnPattern:SetButtonState(isHell and XUiButtonState.Select or XUiButtonState.Normal) end function XUiMultiplayerRoom:RefreshCharacterLimit() local roomData = XDataCenter.RoomManager.RoomData local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) if stageInfo.Type ~= XDataCenter.FubenManager.StageType.MultiDimOnline then self.PanelCharacterLimit.gameObject:SetActiveEx(false) return end local limitType = XFubenConfigs.GetStageCharacterLimitType(roomData.StageId) local isShow = XFubenConfigs.IsStageCharacterLimitConfigExist(limitType) self.PanelCharacterLimit.gameObject:SetActiveEx(isShow or false) if not isShow then return end -- 图标 self.ImgCharacterLimit:SetSprite(XFubenConfigs.GetStageCharacterLimitImageTeamEdit(limitType)) -- 文案 if limitType == XFubenConfigs.CharacterLimitType.IsomerDebuff or limitType == XFubenConfigs.CharacterLimitType.NormalDebuff then self.TxtCharacterLimit.text = XFubenConfigs.GetStageMixCharacterLimitTips(limitType , self:GetTeamCharacterTypes()) return end local limitBuffId = XFubenConfigs.GetStageCharacterLimitBuffId(roomData.StageId) self.TxtCharacterLimit.text = XFubenConfigs.GetStageCharacterLimitTextTeamEdit(limitType , nil, limitBuffId) end function XUiMultiplayerRoom:GetTeamCharacterTypes() local roomData = XDataCenter.RoomManager.RoomData local result = {} for _,playerData in pairs(roomData.PlayerDataList) do local characterType = XCharacterConfigs.GetCharacterType(playerData.FightNpcData.Character.Id) table.insert(result,characterType) end return result end function XUiMultiplayerRoom:StopCharTimer() for _, grid in pairs(self.GridMap) do grid:StopTimer() end end function XUiMultiplayerRoom:GetJopCount(type) local count = 0 local roomData = XDataCenter.RoomManager.RoomData for _, v in pairs(roomData.PlayerDataList) do local charId = v.FightNpcData.Character.Id local quality = v.FightNpcData.Character.Quality local npcId = XCharacterConfigs.GetCharNpcId(charId, quality) local tempType = XCharacterConfigs.GetCharacterCareerType(npcId) if type == tempType then count = count + 1 end end return count end function XUiMultiplayerRoom:GetJobTips(type, count) if type == 1 then return CS.XTextManager.GetText("CharacterLackDps", count) elseif type == 2 then return CS.XTextManager.GetText("CharacterLackTank", count) elseif type == 3 then return CS.XTextManager.GetText("CharacterLackCure", count) end end function XUiMultiplayerRoom:SelectDifficulty(diff) XDataCenter.RoomManager.SetStageLevel(diff) end ----------------------- 倒计时 ----------------------- function XUiMultiplayerRoom:CheckLeaderCountDown() if self.Timer then if not self:CheckListFullAndAllReady() then self:StopTimer() end else if self:CheckListFullAndAllReady() then self:StartTimer() end end end function XUiMultiplayerRoom:StartTimer() self.StartTime = XTime.GetServerNowTimestamp() self.Timer = XScheduleManager.ScheduleForever(handler(self, self.UpdateTimer), XScheduleManager.SECOND) local role = self:GetLeaderRole() self.CurCountDownGrid = self:GetGrid(role.Id) self:UpdateTimer() end function XUiMultiplayerRoom:StopTimer() if self.CurCountDownGrid then self.CurCountDownGrid:ShowCountDownPanel(false) self.CurCountDownGrid = nil end if self.Timer then XScheduleManager.UnSchedule(self.Timer) self.Timer = nil end end function XUiMultiplayerRoom:UpdateTimer() local elapseTime = XTime.GetServerNowTimestamp() - self.StartTime if elapseTime > self.RoomKickCountDownShowTime and elapseTime <= self.RoomKickCountDownTime then self.CurCountDownGrid:ShowCountDownPanel(true) local leftTime = self.RoomKickCountDownTime - elapseTime self.CurCountDownGrid:SetCountDownTime(leftTime) end end ----------------------- 按钮回调 ----------------------- function XUiMultiplayerRoom:OnToggleQuickMatchClick() XDataCenter.RoomManager.Ready() end function XUiMultiplayerRoom:OnBtnFightClick() local role = self:GetCurRole() if not role or not role.Leader then return end if not self:CheckPeopleEnough() then return end if self:CheckSameCharacterByMyself() then local msg = CS.XTextManager.GetText("MultiplayerRoomTeamHasSameCharacter") XUiManager.TipMsg(msg) return end XDataCenter.RoomManager.Enter(function(response) if response.Code ~= XCode.Success then XUiManager.TipCode(response.Code) return end end) end function XUiMultiplayerRoom:OnBtnCancelReadyClick() XDataCenter.RoomManager.CancelReady(function(code) XUiManager.TipCode(code) if code ~= XCode.Success then return end self.BtnReady.gameObject:SetActiveEx(true) self.BtnCancelReady.gameObject:SetActiveEx(false) end) end function XUiMultiplayerRoom:OnBtnReadyClick() if self:CheckSameCharacterByMyself() then local msg = CS.XTextManager.GetText("MultiplayerRoomTeamHasSameCharacter") XUiManager.TipMsg(msg) return end XDataCenter.RoomManager.Ready() end function XUiMultiplayerRoom:OnBtnChatClick() XUiHelper.OpenUiChatServeMain(false, ChatChannelType.Room, ChatChannelType.World) end function XUiMultiplayerRoom:OnBtnChangeDifficultyClick() end function XUiMultiplayerRoom:OnBtnBackClick() self:OnQuitRoomDialogTip(function() XDataCenter.RoomManager.CloseMultiPlayerRoom() end) end function XUiMultiplayerRoom:OnBtnMainUiClick() self:OnQuitRoomDialogTip(function() XLuaUiManager.RunMain() end) end function XUiMultiplayerRoom:OnQuitRoomDialogTip(cb) if not XDataCenter.RoomManager.RoomData then self:Close() return end self:CloseAllOperationPanel() local title = CS.XTextManager.GetText("TipTitle") local cancelMatchMsg local stageId = XDataCenter.RoomManager.RoomData.StageId local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId) if stageInfo.Type == XDataCenter.FubenManager.StageType.ArenaOnline then cancelMatchMsg = CS.XTextManager.GetText("ArenaOnlineInstanceQuitRoom") else cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceQuitRoom") end XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function() XDataCenter.RoomManager.Quit(cb) end) end function XUiMultiplayerRoom:OnBtnMapsSelectClick() local leader = self:GetLeaderRole() if leader.Id ~= XPlayer.Id then return end XLuaUiManager.Open("UiSummerEpisodeMap", XDataCenter.RoomManager.RoomData.StageId, function() self:PlayAnimation("BtnMapSelectEnable") end) end function XUiMultiplayerRoom:OnBtnDifficultySelectClick() self:CloseAllOperationPanel() local curRole = self:GetCurRole() if not curRole or not curRole.Leader then local msg = CS.XTextManager.GetText("MultiplayerRoomCanNotSelectDifficulty") XUiManager.TipMsg(msg) return end self.PanelDifficulty.gameObject:SetActiveEx(true) self:PlayAnimation("DifficultyEnable") self:RefreshDifficultyPanel() end function XUiMultiplayerRoom:OnBtnCloseDifficultyClick() self.PanelDifficulty.gameObject:SetActiveEx(false) end function XUiMultiplayerRoom:OnBtnSetAbilityLimitClick() self:CloseAllOperationPanel() local curRole = self:GetCurRole() if not curRole or not curRole.Leader then local msg = CS.XTextManager.GetText("MultiplayerRoomCanNotSetAbilityLimit") XUiManager.TipMsg(msg) return end self.PanelAbilityLimit.gameObject:SetActiveEx(true) self:PlayAnimation("AbilityLimitEnable") self:RefreshAbilityLimitPanel() end function XUiMultiplayerRoom:OnBtnCloseAbilityLimitClick() self.PanelAbilityLimit.gameObject:SetActiveEx(false) end --队友特效开关 function XUiMultiplayerRoom:OnBtnSpecialEffectsClick(val) if val > 0 then XDataCenter.SetManager.SaveFriendEffect(XSetConfigs.FriendEffectEnum.Open) XDataCenter.SetManager.SetAllyEffect(true) else XDataCenter.SetManager.SaveFriendEffect(XSetConfigs.FriendEffectEnum.Close) XDataCenter.SetManager.SetAllyEffect(false) end end function XUiMultiplayerRoom:OnBtnAutoMatchClick() self:CloseAllOperationPanel() local curRole = self:GetCurRole() if not curRole or not curRole.Leader then local msg = CS.XTextManager.GetText("MultiplayerRoomCanNotChangeAutoMatch") XUiManager.TipMsg(msg) -- 重置按钮状态 local roomData = XDataCenter.RoomManager.RoomData self.BtnAutoMatch.ButtonState = roomData.AutoMatch and CS.UiButtonState.Select or CS.UiButtonState.Normal return end local roomData = XDataCenter.RoomManager.RoomData XDataCenter.RoomManager.SetAutoMatch(not roomData.AutoMatch) end function XUiMultiplayerRoom:OnBtnConfirmSetAbilityLimitClick() local abilityLimit = tonumber(self.InFSetAbilityLimit.text) if not abilityLimit or abilityLimit < 0 then local msg = CS.XTextManager.GetText("MultiplayerRoomAbilityNotLegal") XUiManager.TipMsg(msg) return end abilityLimit = math.floor(abilityLimit) XDataCenter.RoomManager.SetAbilityLimit(abilityLimit, function() self.PanelAbilityLimit.gameObject:SetActiveEx(false) end) end -- 改变关卡 function XUiMultiplayerRoom:OnBtnChangeStageClick() local roomData = XDataCenter.RoomManager.RoomData local stageId = roomData.StageId local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId) if stageInfo.Type == XDataCenter.FubenManager.StageType.ArenaOnline then stageId = roomData.ChallengeId end self.ChangeStagePanel:Show(stageId) self:PlayAnimation("ChangeStageEnable") end function XUiMultiplayerRoom:OnBtnMusicClick() local leader = self:GetLeaderRole() if leader.Id ~= XPlayer.Id then XUiManager.TipText("MultiplayerRoomOnlyLeaderTip") return end XLuaUiManager.Open("UiSpecialTrainMusicMapSelect", XDataCenter.RoomManager.RoomData.StageId, function() self:PlayAnimation("BtnMapSelectEnable") end) end function XUiMultiplayerRoom:OnBtnSnowSelectClick() local leader = self:GetLeaderRole() if leader.Id ~= XPlayer.Id then XUiManager.TipText("MultiplayerRoomOnlyHomeownerTip") return end XLuaUiManager.Open("UiFubenSnowGameMapTips", XDataCenter.RoomManager.RoomData.StageId, handler(self, self.SnowSelectCallback)) end function XUiMultiplayerRoom:SnowSelectCallback(stageId) if stageId ~= XDataCenter.RoomManager.RoomData.StageId then XDataCenter.RoomManager.SetStageIdRequest(stageId) end end function XUiMultiplayerRoom:OnBtnRhythmSelectClick() local leader = self:GetLeaderRole() if leader.Id ~= XPlayer.Id then XUiManager.TipText("MultiplayerRoomOnlyHomeownerTip") return end XLuaUiManager.Open("UiFubenYuanXiaoMapTips", XDataCenter.RoomManager.RoomData.StageId, false, handler(self, self.RhythmSelectCallback)) end function XUiMultiplayerRoom:RhythmSelectCallback(stageId) if stageId ~= XDataCenter.RoomManager.RoomData.StageId then XDataCenter.RoomManager.SetStageIdRequest(stageId) end end function XUiMultiplayerRoom:OnBtnPatternClick() local leader = self:GetLeaderRole() if leader.Id ~= XPlayer.Id then XUiManager.TipText("MultiplayerRoomOnlyLeaderTip") local isHell = not self.BtnPattern:GetToggleState() self.BtnPattern:SetButtonState(isHell and XUiButtonState.Select or XUiButtonState.Normal) return end local isHell = self.BtnPattern:GetToggleState() local roomData = XDataCenter.RoomManager.RoomData local stageId = isHell and XFubenSpecialTrainConfig.GetHellStageId(roomData.StageId) or XFubenSpecialTrainConfig.GetStageIdByHellId(roomData.StageId) XDataCenter.RoomManager.SetStageIdRequest(stageId, function() self:Refresh() end) end -- 打开同调详情 function XUiMultiplayerRoom:PanelActiveBuffShow(activeBuffCfg) self.ActiveBuffPanel:Show(activeBuffCfg) self:PlayAnimation("ActiveBuffEnable") end -- 检查同调开启 function XUiMultiplayerRoom:CheckActiveOn(playerId) return self.ActiveBuffMainPanel:CheckActiveOn(playerId) end -- 房间信息提示 function XUiMultiplayerRoom:RoomInfoTip() if self.IsAlreadyTip then return end self.IsAlreadyTip = true local roomData = XDataCenter.RoomManager.RoomData local stageCfg = XDataCenter.FubenManager.GetStageCfg(roomData.StageId) if XDataCenter.FubenManager.CheckMultiplayerLevelControl(roomData.StageId) then local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(roomData.StageId, roomData.StageLevel) self.Contenttext = CS.XTextManager.GetText("ArenaOnlineStageInfoTip", stageCfg.Name, levelControl.DifficultyDesc) self:InsertTips(TipsType.LevelTips, self.RoomInfoContenttextTipFun) end end function XUiMultiplayerRoom:InsertTips(tipstype, cb) table.insert(self.TipsFuns, {["TipsType"] = tipstype, ["TipsFun"] = cb }) table.sort(self.TipsFuns, function(a, b) return a.TipsType > b.TipsType end) if self.TipsDelayTimerId then XScheduleManager.UnSchedule(self.TipsDelayTimerId) end self.TipsDelayTimerId = XScheduleManager.ScheduleOnce(function() self:ShowRoomTips() self.TipsDelayTimerId = nil end, 500) end function XUiMultiplayerRoom:InsertFightSuccessTips() self:InsertTips(TipsType.ChuzhanTips, self.RoomInfoFightSuccesstextTipFun) end function XUiMultiplayerRoom:InsertActiveTips(tip) self.ActiveTip = tip self:InsertTips(TipsType.TongTiaoTips, self.RoomInfoActiveTipFun) end function XUiMultiplayerRoom:RoomInfoActiveTip(cb) XUiManager.TipMsg(self.ActiveTip, nil, cb) end function XUiMultiplayerRoom:RoomInfoContenttextTip(cb) XUiManager.TipMsg(self.Contenttext, nil, cb) end function XUiMultiplayerRoom:RoomInfoFightSuccesstextTip(cb) local text = CS.XTextManager.GetText("OnlineFightSuccess") XUiManager.TipMsg(text, nil, cb) end function XUiMultiplayerRoom:ShowRoomTips() local curtips = table.remove(self.TipsFuns) if not curtips or not curtips.TipsFun then return end local fun = curtips.TipsFun fun(self.ShowRoomTipsFun) end -- 关卡改变 function XUiMultiplayerRoom:OnStageChange() self:Refresh() local leader = self:GetLeaderRole() if leader.Id == XPlayer.Id then -- return end local roomData = XDataCenter.RoomManager.RoomData local stageCfg = XDataCenter.FubenManager.GetStageCfg(roomData.StageId) if not CS.XFight.IsRunning and not XLuaUiManager.IsUiLoad("UiLoading") then local contenttext = CS.XTextManager.GetText("ArenaOnlineStageChangeInfo", stageCfg.Name) XUiManager.TipMsg(contenttext) end end -- 区域联机周刷新 function XUiMultiplayerRoom:OnArenaOnlineWeekRefrsh() local roomData = XDataCenter.RoomManager.RoomData local stageInfo = XDataCenter.FubenManager.GetStageInfo(roomData.StageId) if stageInfo.Type == XDataCenter.FubenManager.StageType.ArenaOnline then XDataCenter.ArenaOnlineManager.RunMain() end end function XUiMultiplayerRoom:InitGridCharData(grid, charData) grid:InitCharData(charData) end function XUiMultiplayerRoom:RefreshGridPlayer(grid, playerData) grid:RefreshPlayer(playerData) end return XUiMultiplayerRoom