--- 公平竞技-3v3 武将选择界面 local UISyncTeamPVPSelectHeroPanel = UIViewClass() function UISyncTeamPVPSelectHeroPanel:OnOpened() CTL.ChannelChat.TryCreateDynamicChannel(MDL.ChannelChat.ChannelCfgId.MyCamp) MDL.Replay.FairPlayHeroWinRateReq(MDL.FairPlay.FairPlayType.TVT) --选将相关的信息稍后刷新,且需要在属性修正前发出 MDL.FairPlay.FairGetFixAttrReq(MDL.FairPlay.FairPlayType.TVT) self:RegistSystemEvent(EventID.UI_SyncTeamPVPSelectHero_TeamMemberChangeHero, self.TeamMemberChangeHero) self:RegistSystemEvent(EventID.UI_SyncTeamPVPSelectHero_TeamMemberReady, self.TeamMemberReady) self:RegistSystemEvent(EventID.UI_SyncTeamPVP_OnCancelReady, self.OnCancelReady) self:RegistSystemEvent(EventID.UI_SyncTeamPVPSelect_RefreshHeroSelect, self.RefreshHeroData) self:RegistSystemEvent(EventID.UI_SyncTeamPVP_PlayerReady, self.ShowAlreadyPrepared) self:RegistSystemEvent(EventID.FunctionUnlockUpdate, self.OnCloseGamePlay) self:RegistSystemEvent(EventID.SDK_OnVoiceRoomStateChange,self.RefreshVoiceUI) self:RegistSystemEvent(EventID.UI_FairPlay_RefreshHeroFixedInfo, self.RefreshHeroFixedInfo) self:RegistSystemEvent(EventID.UI_FairPlay_RefreshHeroWinRateInfo,self.RefreshHeroSelectList) --获取语音状态 if not GameAppInfo.IsJapanesePackage() then MDL.VoiceRoom.VoiceCallStateReq(MDL.VoiceRoom.VoiceRoomType.Room_3V3) else UIUtils.SetActive(self.img_VoiceChat, false) end self.modelComponentDataHandle = UTL.UIRender.CreateModelComponentDatas(self.heroShow) UTL.UIRender.Create2DSceneTrans(self.modelComponentDataHandle, ConstAssetPathConfig.Common2DScenePrefab, 1600, 0, 1600, ConstAssetPathConfig.bgTexturePath, false) --默认选中第一组技能 self.currentSkillGroupIndex = 1 self.effectResult = nil self.isSelfReady = MDL.SyncTeamPVP.GetSelfReadyState() if self.isSelfReady then self:ShowAlreadyPrepared() else self:OnCancelReady() end self.mainHeroSelectId, self.viceHeroSelectId = MDL.SyncTeamPVP.GetSelfSelectHero() self.timer = 0 self.currentTime = 0 self.role1Info = nil --队友1 self.role2Info = nil --队友2 self.skill1ID = 0 self.skill2ID = 0 self.skill3ID = 0 self.skill4ID = 0 self.role1SelectMainId = nil self.role1SelectViceId = nil self.role2SelectMainId = nil self.role2SelectViceId = nil self:StartRepeatFunc(self.OnUpdateFun, 0) self.btn_Prepare.gameObject:SetActive(true) self.gameTime = MDL.SyncTeamPVP.GetTickTime() - UTL.Time.GetServerTimestamp() self.timeout = 0 self.obj_mask.gameObject:SetActive(false) self.heroList = {} self:OpenChatView() UIManager.ActiveUIModle(false, "UISyncTeamPVPSelectHeroPanel") self.countryState:SetState(0) local experienceCardNum = UTL.Item.GetItemStockCount(CTL.FairPlayCard.experienceCardId) UIUtils.SetLabel(self.txt_ExperienceCard, experienceCardNum > 0 and "x "..experienceCardNum or "x "..UTL.Color.FormatRedColor(experienceCardNum)) UIUtils.SetLabel(self.txt_ExperienceCard, experienceCardNum > 0 and "x "..experienceCardNum or "x "..UTL.Color.FormatRedColor(experienceCardNum)) UIUtils.SetLabel(self.txt_cardname, UTL.Item.GetItemDataSpliceByType(CTL.FairPlayCard.experienceCardId).Name) UIUtils.SetActive(self.group_Scorecard, false) UIUtils.SetActive(self.group_card, true) UIUtils.SetActive(self.buff_btn, CTL.KingChallenge.IsHasSeasonBuff()) self.hasExperienceHeroLineup = false self:RefreshMapInfo() end --地图信息 function UISyncTeamPVPSelectHeroPanel:RefreshMapInfo() UIUtils.SetActive(self.img_MapName, true) local cfg = DataSheetManager.ThreeBattleLevel:GetDataByLevelID(MDL.SyncTeamPVP.GetMatchResult().mapId) self.txt_MapName.text = UIUtils.GetLocalizedTxt(Const_IDS[cfg.LevelNameIDS]) end function UISyncTeamPVPSelectHeroPanel:RefreshNameAndServer() if self.role1Info == nil or self.role2Info == nil then self:GetTeamMembersInfo() end self:RefreshGroupNameAndServer(self.group_Role1, self.role1Info.name, self.role1Info.serId, self.role1Info.acid) self:RefreshGroupNameAndServer(self.group_Role2, self.role2Info.name, self.role2Info.serId, self.role2Info.acid) self:RefreshGroupNameAndServer(self.group_Self, BattleDataGetter.GetPlayerName(), MDL.Login.GetServerShowId()) end function UISyncTeamPVPSelectHeroPanel:RefreshGroupNameAndServer(group, name, server, acid) if self.isCustomRoom and CTL.Character.IsRobot(acid) then group.lab_Name.text = CTL.Character.GetRobotName(acid) UIUtils.SetActive(group.lab_Server, false) else group.lab_Name.text = name UIUtils.SetActive(group.lab_Server, CTL.CrossServer.IsShowServerTextInFairPlay()) group.lab_Server.text = string.FormatByIdsId(Const_IDS.IDS_Rank_ServerIDS, server) end end function UISyncTeamPVPSelectHeroPanel:RefreshHeroSelectList(type) if type ~= MDL.FairPlay.FairPlayType.TVT then return end self:RefreshSelectData() self:RefreshTeamMemberInfo() self:RefreshNameAndServer() self:RefreshHeroData(self.mainHeroSelectId, self.viceHeroSelectId) end function UISyncTeamPVPSelectHeroPanel:RefreshSelectData() UIUtils.SetActive(self.group_HeroInfo.gameObject, false) self.heroList = {} -- 测试武将 local testHeroArray = MDL.SyncTeamPVP.GetTestHeroArray() if #testHeroArray > 0 then for i, v in ipairs(testHeroArray) do local itemData = DataSheetManager.ItemData:GetDataByID(v) table.insert(self.heroList, {heroId = itemData.BelongToHero, itemID = v, isFree = true}) end end -- 限免武将 local freeHeroList = MDL.SyncTeamPVP.GetTVTSeasonInfo().freeHeroes for i, v in ipairs(freeHeroList) do --将武将的道具ID转换成武将ID local itemData = DataSheetManager.ItemData:GetDataByID(v) local isTestHeroAndOpen, isTestHero, isOpen = MDL.SyncTeamPVP.CheckIsTestHero(v) if not isTestHeroAndOpen then table.insert(self.heroList, {heroId = itemData.BelongToHero, isFree = true}) end end -- 已解锁武将(包括体验卡武将) local heroList = MDL.Replay.GetSortedAvailableSelectHeroList(MDL.Replay.FairPlayType.TVT, true) for i, v in ipairs(heroList) do if not self:ContainHeroId(self.heroList, v.heroId) then local isTestHeroAndOpen, isTestHero, isOpen = MDL.SyncTeamPVP.CheckIsTestHero(v, true) if not isTestHeroAndOpen then table.insert(self.heroList, {heroId = v.heroId, isFree = false}) end end end CTL.HeroAwaken.TryFillAwakenHeroData(self.heroList, false) if self.loopscroll_Head.Count > 0 then self.loopscroll_Head:ClearCells() end for i, v in ipairs(self.heroList) do self.loopscroll_Head:AddData(v, 0) end --TODO:华为mate30 卡死 临时解决 进来先加载显示一个武将 但不是选中 self.lastClickedHeroId = self.heroList[1].heroId self:ShowHeroModel(self.lastClickedHeroId) end function UISyncTeamPVPSelectHeroPanel:ShowHeroModel(heroId) heroId = CTL.HeroAwaken.DecodeHeroId(heroId) local modelPath, equipTable, modelScale, lightPath, heroEffectPath, heroLightEffects = UTL.UIRender.LoadShowHero(heroId, false, nil, true) UTL.UIRender.DisposePlayerModel(self.modelComponentDataHandle) UTL.UIRender.SetHeroParentPos(self.modelComponentDataHandle, 0.16,-1.2,0) -- 设置模型位移信息 UTL.UIRender.SetHeroParentRot(self.modelComponentDataHandle, 0, -10, 0) -- 设置模型位移信息 UTL.UIRender.SetHeroParentRot(self.modelComponentDataHandle, 0, -10, 0) -- 设置模型位移信息 local modelPath, equipTable, modelScale, lightPath, heroEffectPath, heroLightEffects = UTL.UIRender.LoadShowHero(heroId, false, nil, true) UTL.UIRender.CreatePlayerModel(self.modelComponentDataHandle, heroId, modelPath, lightPath, true) if not self.effectResult then self.effectResult = CTL.FairPlay.CreateFogEffectInScene(UTL.UIRender.GetModelRootTrans(self.modelComponentDataHandle)) end end function UISyncTeamPVPSelectHeroPanel:GetIndexByHeroId(id) for i, v in ipairs(self.heroList) do if v.heroId == id then return i end end end function UISyncTeamPVPSelectHeroPanel:ContainHeroId(list, id) for i, v in ipairs(list) do if v.heroId == id then return true end end return false end function UISyncTeamPVPSelectHeroPanel:OnCellInit(scrollRect, index, cellTable, data) local heroId = data.heroId local isTestHeroAndOpen, isTestHero, isOpen = MDL.SyncTeamPVP.CheckIsTestHero(data.itemID) if isTestHeroAndOpen then UIUtils.SetActive(cellTable.img_TestBg, true) UIUtils.SetActive(cellTable.img_FreeBg, false) else UIUtils.SetActive(cellTable.img_TestBg, false) UIUtils.SetActive(cellTable.img_FreeBg, data.isFree) end UIUtils.SetActive(cellTable.img_Experience, CTL.FairPlayCard.IsUsedExperienceCard(heroId)) local _heroId, isAwaken = CTL.HeroAwaken.DecodeHeroId(heroId) local heroData = DataSheetManager.HeroNum:GetDataByID(_heroId) UTL.Item.SetHeroIconByHeroId(cellTable.img_Head, CTL.HeroAwaken.DecodeHeroId(heroId)) if isAwaken then cellTable.lab_Name.text = string.FormatByIdsId(Const_IDS.IDS_HeroAwaken_Awaken, UIUtils.GetLocalizedTxt(Const_IDS[heroData.NameIDS])) else UIUtils.SetLabelText(cellTable.lab_Name, Const_IDS[heroData.NameIDS]) end if self.mainHeroSelectId == heroId or self.viceHeroSelectId == heroId then UIUtils.SetActive(cellTable.img_BeSelected.gameObject, true) UIUtils.SetActive(cellTable.img_SelfSelected, true) UIUtils.SetActive(cellTable.group_FriendSelected.gameObject, false) elseif self.role1SelectMainId == heroId or self.role1SelectViceId == heroId or self.role2SelectMainId == heroId or self.role2SelectViceId == heroId then UIUtils.SetActive(cellTable.group_FriendSelected.gameObject, true) UIUtils.SetActive(cellTable.img_BeSelected.gameObject, false) elseif CTL.HeroAwaken.TranslateHeroId(self.mainHeroSelectId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.viceHeroSelectId) == heroId then UIUtils.SetActive(cellTable.img_BeSelected.gameObject, true) UIUtils.SetActive(cellTable.img_SelfSelected, false) UIUtils.SetActive(cellTable.group_FriendSelected.gameObject, false) elseif CTL.HeroAwaken.TranslateHeroId(self.role1SelectMainId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role1SelectViceId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role2SelectMainId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role2SelectViceId) == heroId then UIUtils.SetActive(cellTable.group_FriendSelected.gameObject, true) UIUtils.SetActive(cellTable.img_BeSelected.gameObject, false) else UIUtils.SetActive(cellTable.group_FriendSelected.gameObject, false) UIUtils.SetActive(cellTable.img_BeSelected.gameObject, false) end end function UISyncTeamPVPSelectHeroPanel:OnCellClicked(scrollRect, index, cellTable, target, data) local heroId = data.heroId if target == cellTable.btn_FriendSelected then CTL.Tips.AddTipsMsg(Const_IDS["IDS_RepeatSelect"]) elseif heroId == self.mainHeroSelectId then if CTL.FairPlayCard.IsUsedExperienceCard(heroId) then self.hasExperienceHeroLineup = false end MDL.SyncTeamPVP.SendChangeHero(0, self.viceHeroSelectId or 0) elseif heroId == self.viceHeroSelectId then if CTL.FairPlayCard.IsUsedExperienceCard(heroId) then self.hasExperienceHeroLineup = false end MDL.SyncTeamPVP.SendChangeHero(self.mainHeroSelectId or 0, 0) else if CTL.HeroAwaken.TranslateHeroId(self.mainHeroSelectId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.viceHeroSelectId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role1SelectMainId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role1SelectViceId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role2SelectMainId) == heroId or CTL.HeroAwaken.TranslateHeroId(self.role2SelectViceId) == heroId then return end if self.mainHeroSelectId and self.mainHeroSelectId > 0 and self.viceHeroSelectId and self.viceHeroSelectId > 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_BossChallenge_ChooseHero_FullHero"]) else if self:SelectedHero(heroId) then self:RefreshSelectHeroData(heroId) end end end end function UISyncTeamPVPSelectHeroPanel:SelectedHero(heroId) if self.mainHeroSelectId and self.mainHeroSelectId > 0 then if not self.viceHeroSelectId or self.viceHeroSelectId == 0 then if CTL.FairPlayCard.IsUsedExperienceCard(heroId) then if self.hasExperienceHeroLineup then CTL.Tips.AddTipsMsg(Const_IDS["IDS_KingChallenge_Hint17"]) return false else self.hasExperienceHeroLineup = true end end MDL.SyncTeamPVP.SendChangeHero(self.mainHeroSelectId, heroId) end else if CTL.FairPlayCard.IsUsedExperienceCard(heroId) then if self.hasExperienceHeroLineup then CTL.Tips.AddTipsMsg(Const_IDS["IDS_KingChallenge_Hint17"]) return false else self.hasExperienceHeroLineup = true end end MDL.SyncTeamPVP.SendChangeHero(heroId, self.viceHeroSelectId or 0) end return true end function UISyncTeamPVPSelectHeroPanel:GetTeamMembersInfo() local matchResult = MDL.SyncTeamPVP.GetMatchResult() self.teamMembers = matchResult.friendlyFighters self.isCustomRoom = matchResult.IsCustomRoom for k,v in pairs(self.teamMembers) do if v.acid ~= BattleDataGetter.GetAcID() then if self.role1Info == nil then self.role1Info = v elseif self.role2Info == nil then self.role2Info = v return end end end end function UISyncTeamPVPSelectHeroPanel:RefreshHeroData(mainHeroId, viceHeroId) self.group_Skill.gameObject:SetActive(true) self.btn_Prepare.gameObject:SetActive(true) self.btn_Prepare:SetGray(false) if mainHeroId and mainHeroId > 0 then self:UpdateRoleHeroGroup(mainHeroId, self.group_Self, true) local oldId = self.mainHeroSelectId self.mainHeroSelectId = mainHeroId self:UpdateLoopHeroIndex(oldId, mainHeroId) else self:CancelSelectHeroGroup(self.group_Self, true) local oldId = self.mainHeroSelectId or 0 self.mainHeroSelectId = mainHeroId or 0 self:UpdateLoopHeroIndex(oldId, mainHeroId) end if viceHeroId and viceHeroId > 0 then self:UpdateRoleHeroGroup(viceHeroId, self.group_Self, false) local oldId = self.viceHeroSelectId self.viceHeroSelectId = viceHeroId self:UpdateLoopHeroIndex(oldId, viceHeroId) else self:CancelSelectHeroGroup(self.group_Self, false) local oldId = self.viceHeroSelectId or 0 self.viceHeroSelectId = viceHeroId or 0 self:UpdateLoopHeroIndex(oldId, viceHeroId) end end local SkillPath = ConstAssetPathConfig.SkillImagePath function UISyncTeamPVPSelectHeroPanel:RefreshSelectHeroData(heroId) self.currentSkillGroupIndex = 1 --重置技能组索引 self:ShowHeroModel(heroId) UIUtils.SetActive(self.group_HeroInfo.gameObject, true) local _heroId, isAwaken = CTL.HeroAwaken.DecodeHeroId(heroId) local heroData = DataSheetManager.HeroNum:GetDataByID(_heroId) if heroData then if isAwaken then self.txt_Name.text = string.FormatByIdsId(Const_IDS.IDS_HeroAwaken_Awaken, UIUtils.GetLocalizedTxt(Const_IDS[heroData.NameIDS])) else UIUtils.SetLabelText(self.txt_Name, Const_IDS[heroData.NameIDS]) end -- 武将国别 CTL.HeroSelect.SetHeroCountry(_heroId, self.obj_Country) -- 武将职业 CTL.HeroSelect.SetHeroProfession(_heroId, self.obj_Profession, true) self.curHeroId = heroId self:RefreshSkillShow(heroId) self:ShowHeroFixedInfo(heroId) end if MDL.HeroSelect.IsHasHero(heroId) then local heroInfo = MDL.HeroSelect.GetHeroInfo(heroId) local winNum = heroInfo.winNum local fightNum = heroInfo.fightNum --胜率 if fightNum ~= 0 then self.txt_WinratevalueNum.text = string.format("%d%%", winNum*100/fightNum) else self.txt_WinratevalueNum.text = string.format("%d%%", 0) end --参战场次 self.txt_JoinNum.text = string.FormatByIdsId(Const_IDS["IDS_UI_Word13"], fightNum) UIUtils.SetActive(self.group_PVPData.gameObject, true) else UIUtils.SetActive(self.group_PVPData.gameObject, false) end end function UISyncTeamPVPSelectHeroPanel:RefreshSkillShow(heroId) local id, isAwaken = CTL.HeroAwaken.DecodeHeroId(heroId) self.activeSkillList = MDL.HeroSelect.GetHeroDisplaySkillIdList(id, true) --多套技能显示切换展示按钮 UIUtils.SetActive(self.btn_Change, #self.activeSkillList > 1) --技能图标 for index, img in ipairs(self.skill_Btn_Group) do local skillId = self.activeSkillList[self.currentSkillGroupIndex][index] local skillIcon local skillData = (skillId and skillId>0) and DataSheetManager.SkillTipsData:GetDataByID(skillId) or nil if skillData then skillIcon = skillData.SkillIcon UIUtils.SetActive(img.transform.parent.gameObject, true) if isAwaken then UIUtils.SetImageByAssetBundle(img, CTL.HeroAwaken.GetAwakenDisplaySkillIcon(id, skillId)) else UIUtils.SetImageByAssetBundle(img, string.format(SkillPath, skillIcon)) end else UIUtils.SetActive(img.transform.parent.gameObject, false) end end end function UISyncTeamPVPSelectHeroPanel:OnClickPrepare() if self.mainHeroSelectId > 0 and self.viceHeroSelectId > 0 then MDL.SyncTeamPVP.SendFighterReady(self.mainHeroSelectId, self.viceHeroSelectId) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_BossChallenge_ChooseHero_Empty"]) end end function UISyncTeamPVPSelectHeroPanel:ShowAlreadyPrepared() self:SetGroupReady(self.group_Self, true) self.isSelfReady = true self.group_Btn:SetState(1) end function UISyncTeamPVPSelectHeroPanel:OnCancelReady() self:SetGroupReady(self.group_Self, false) self.isSelfReady = false self.group_Btn:SetState(0) end --服务器通知队友换英雄(PUSH) function UISyncTeamPVPSelectHeroPanel:TeamMemberChangeHero(msg) if self.role1Info == nil or self.role2Info == nil then self:GetTeamMembersInfo() end if msg.acid == self.role1Info.acid then if msg.mainHero and msg.mainHero > 0 then local id = msg.mainHeroAwaken and CTL.HeroAwaken.EncodeHeroId(msg.mainHero) or msg.mainHero self:UpdateRoleHeroGroup(id, self.group_Role1, true) local oldId = self.role1SelectMainId self.role1SelectMainId = id self:UpdateLoopHeroIndex(oldId, id) else self:CancelSelectHeroGroup(self.group_Role1, true) local oldId = self.role1SelectMainId or 0 self.role1SelectMainId = 0 self:UpdateLoopHeroIndex(oldId, 0) end if msg.viceHero and msg.viceHero > 0 then local id = msg.viceHeroAwaken and CTL.HeroAwaken.EncodeHeroId(msg.viceHero) or msg.viceHero self:UpdateRoleHeroGroup(id, self.group_Role1, false) local oldId = self.role1SelectViceId self.role1SelectViceId = id self:UpdateLoopHeroIndex(oldId, id) else self:CancelSelectHeroGroup(self.group_Role1, false) local oldId = self.role1SelectViceId or 0 self.role1SelectViceId = 0 self:UpdateLoopHeroIndex(oldId,0) end elseif msg.acid == self.role2Info.acid then if msg.mainHero and msg.mainHero > 0 then local id = msg.mainHeroAwaken and CTL.HeroAwaken.EncodeHeroId(msg.mainHero) or msg.mainHero self:UpdateRoleHeroGroup(id, self.group_Role2, true) local oldId = self.role2SelectMainId self.role2SelectMainId = id self:UpdateLoopHeroIndex(oldId, id) else self:CancelSelectHeroGroup(self.group_Role2, true) local oldId = self.role2SelectMainId or 0 self.role2SelectMainId = 0 self:UpdateLoopHeroIndex(oldId, 0) end if msg.viceHero and msg.viceHero > 0 then local id = msg.viceHeroAwaken and CTL.HeroAwaken.EncodeHeroId(msg.viceHero) or msg.viceHero self:UpdateRoleHeroGroup(id, self.group_Role2, false) local oldId = self.role2SelectViceId self.role2SelectViceId = id self:UpdateLoopHeroIndex(oldId, id) else self:CancelSelectHeroGroup(self.group_Role2, false) local oldId = self.role2SelectViceId or 0 self.role2SelectViceId = 0 self:UpdateLoopHeroIndex(oldId, 0) end end end function UISyncTeamPVPSelectHeroPanel:CancelSelectHeroGroup(roleGroup, isMain) if isMain then roleGroup.HeadMain.gameObject:SetActive(false) roleGroup.HeadMain_None.gameObject:SetActive(true) else roleGroup.HeadVice.gameObject:SetActive(false) roleGroup.HeadVice_None.gameObject:SetActive(true) end end function UISyncTeamPVPSelectHeroPanel:UpdateRoleHeroGroup(heroId, roleGroup, isMain) if isMain then roleGroup.HeadMain.gameObject:SetActive(true) roleGroup.HeadMain_None.gameObject:SetActive(false) UTL.Item.SetHeroIconByHeroId(roleGroup.HeadMain.img_Head, CTL.HeroAwaken.DecodeHeroId(heroId)) roleGroup.HeadMain.gameObject:SetActive(true) else roleGroup.HeadVice.gameObject:SetActive(true) roleGroup.HeadVice_None.gameObject:SetActive(false) UTL.Item.SetHeroIconByHeroId(roleGroup.HeadVice.img_Head, CTL.HeroAwaken.DecodeHeroId(heroId)) roleGroup.HeadVice.gameObject:SetActive(true) end end function UISyncTeamPVPSelectHeroPanel:UpdateLoopHeroIndex(oldId, newId) if oldId and oldId > 0 then local preIndex = self:GetIndexByHeroId(oldId) if preIndex then self.loopscroll_Head:UpdateIndex(preIndex - 1) end local id = CTL.HeroAwaken.TranslateHeroId(oldId) if id ~= oldId then local preIndex = self:GetIndexByHeroId(id) if preIndex then self.loopscroll_Head:UpdateIndex(preIndex - 1) end end end if newId and newId > 0 then local index = self:GetIndexByHeroId(newId) if index then self.loopscroll_Head:UpdateIndex(index - 1) end local id = CTL.HeroAwaken.TranslateHeroId(newId) if id ~= newId then local index = self:GetIndexByHeroId(id) if index then self.loopscroll_Head:UpdateIndex(index - 1) end end end end --服务器通知队友已准备(PUSH) function UISyncTeamPVPSelectHeroPanel:TeamMemberReady(accid, isReady) if accid == self.role1Info.acid then self:SetGroupReady(self.group_Role1, isReady) elseif accid == self.role2Info.acid then self:SetGroupReady(self.group_Role2, isReady) end end function UISyncTeamPVPSelectHeroPanel:SetGroupReady(roleGroup, isReady) roleGroup.HeadMain.img_SelectHead.gameObject:SetActive(isReady) roleGroup.HeadVice.img_SelectHead.gameObject:SetActive(isReady) end function UISyncTeamPVPSelectHeroPanel:RefreshTeamMemberInfo() local lMsg = { acid = nil, mainHero = nil, mainAwaken = false, viceHero = nil, viceAwaken = false, ready = false } local role1Acid, role1MainHero, mainAwaken, role1ViceHero, viceAwaken, role1Ready = MDL.SyncTeamPVP.GetRole1Info() if role1Acid ~= nil then lMsg.acid = role1Acid lMsg.mainHero = role1MainHero lMsg.mainHeroAwaken = mainAwaken lMsg.viceHero = role1ViceHero lMsg.viceHeroAwaken = viceAwaken lMsg.ready = role1Ready self:TeamMemberChangeHero(lMsg) if lMsg.ready then self:TeamMemberReady(lMsg.acid, lMsg.ready) end end local role2Acid, role2MainHero, mainAwaken, role2ViceHero, viceAwaken, role2Ready = MDL.SyncTeamPVP.GetRole2Info() if role2Acid ~= nil then lMsg.acid = role2Acid lMsg.mainHero = role2MainHero lMsg.mainHeroAwaken = mainAwaken lMsg.viceHero = role2ViceHero lMsg.viceHeroAwaken = viceAwaken lMsg.ready = role2Ready self:TeamMemberChangeHero(lMsg) if lMsg.ready then self:TeamMemberReady(lMsg.acid, lMsg.ready) end end end function UISyncTeamPVPSelectHeroPanel:OnUpdateFun(deltaTime, timeSinceUpdate) --倒计时 if self.timeout ~= 1 then self.timer = timeSinceUpdate - self.currentTime if self.timer >= 1 then self.currentTime = self.currentTime + self.timer self.timer = 0; self.gameTime = self.gameTime - 1; local minute = math.floor(self.gameTime / UTL.Time.TotalSecondsOneMinute) local second = self.gameTime % UTL.Time.TotalSecondsOneMinute local minuteStr local secondStr if minute < 10 then minuteStr = "0"..tostring(minute) else minuteStr = tostring(minute) end if second < 10 then secondStr = "0"..tostring(second) else secondStr = tostring(second) end if self.gameTime <= 0 then self.txt_time.text = "00:00" else self.txt_time.text = minuteStr..":"..secondStr end end end end function UISyncTeamPVPSelectHeroPanel:OnButtonClicked(obj) if obj == self.btn_Prepare then self:OnClickPrepare() elseif obj == self.btn_cancelReady then MDL.SyncTeamPVP.CancelReady() elseif obj == self.group_Self.HeadMain.btn_SelfHead then if not self.isSelfReady then if CTL.FairPlayCard.IsUsedExperienceCard(self.mainHeroSelectId) then self.hasExperienceHeroLineup = false end MDL.SyncTeamPVP.SendChangeHero(0, self.viceHeroSelectId or 0) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_3v3ReadyChange"]) end elseif obj == self.group_Self.HeadVice.btn_SelfHead then if not self.isSelfReady then if CTL.FairPlayCard.IsUsedExperienceCard(self.viceHeroSelectId) then self.hasExperienceHeroLineup = false end MDL.SyncTeamPVP.SendChangeHero(self.mainHeroSelectId or 0, 0) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_3v3ReadyChange"]) end elseif obj == self.btn_Change then self.currentSkillGroupIndex = self.currentSkillGroupIndex + 1 if self.currentSkillGroupIndex > #self.activeSkillList then self.currentSkillGroupIndex = 1 end self:RefreshSkillShow(self.curHeroId) elseif obj == self.img_Listen then --收听 local listen, call = CTL.VoiceRoom.IsEnabledListener(), CTL.VoiceRoom.IsEnabledMicrophone() listen = not listen MDL.VoiceRoom.VoiceCallSetStateReq(MDL.VoiceRoom.VoiceRoomType.Room_3V3, call, listen) if listen then CTL.Tips.AddTipsMsg(Const_IDS["IDS_WarChannel_Listening"]) CTL.Sound.PlayGameSound("UI_voice_system") else CTL.Tips.AddTipsMsg(Const_IDS["IDS_WarChannel_NotListening"]) CTL.Sound.PlayGameSound("UI_invalid") end elseif obj == self.img_Speak then --麦克风 local listen, call = CTL.VoiceRoom.IsEnabledListener(), CTL.VoiceRoom.IsEnabledMicrophone() call = not call MDL.VoiceRoom.VoiceCallSetStateReq(MDL.VoiceRoom.VoiceRoomType.Room_3V3, call,listen) if call then CTL.Tips.AddTipsMsg(Const_IDS["IDS_WarChannel_NotSpeakingBtn"]) CTL.Sound.PlayGameSound("UI_voice_system") else CTL.Tips.AddTipsMsg(Const_IDS["IDS_WarChannel_SpeakingBtn"]) CTL.Sound.PlayGameSound("UI_invalid") end elseif obj == self.obj_Country.btn_Country then if self.curHeroId then UIManager.OpenView(Const_UI_Lua.UIEnum.UIHeroFilterView, { canJump = false, heroId = CTL.HeroAwaken.DecodeHeroId(self.curHeroId), isCountry = true, heroFilterPos = self.obj_HeroFilterPos }) end elseif obj == self.obj_Profession.btn_Profession then if self.curHeroId then UIManager.OpenView(Const_UI_Lua.UIEnum.UIHeroFilterView, { canJump = false, heroId = CTL.HeroAwaken.DecodeHeroId(self.curHeroId), isCountry = false, heroFilterPos = self.obj_HeroFilterPos }) end elseif obj == self.btn_ProtectCard then UTL.ItemTips.ShowCommonTipsById(CTL.FairPlayCard.protectCard3v3Id) elseif obj == self.btn_ExperienceCard then UTL.ItemTips.ShowCommonTipsById(CTL.FairPlayCard.experienceCardId) elseif obj == self.buff_btn then UIManager.OpenView(Const_UI_Lua.UIEnum.UIKingChallengeSeasonBuffPopUp) end for index, btn in ipairs(self.skill_Btn_Group) do if obj == btn then local id, isAwaken = CTL.HeroAwaken.DecodeHeroId(self.curHeroId) CTL.Tips.OpenHeroSkillTipsPreview(true, self.SkillTips, id, self.activeSkillList[self.currentSkillGroupIndex][index], isAwaken) return end end end function UISyncTeamPVPSelectHeroPanel:OpenChatView() self.chatView:OpenView(GetViewClass(Const_UI_Lua.UIEnum.UIBattleChatDlg)) end function UISyncTeamPVPSelectHeroPanel:OnClosed() UIManager.ActiveUIModle(true, "UISyncTeamPVPSelectHeroPanel") CTL.Sound.StopGameSound("MUSIC_pvp_zhunbei") if self.effectResult then self.effectResult:Dispose() self.effectResult = nil end MDL.Replay.ClearWinRateCacheData(MDL.FairPlay.FairPlayType.TVT) UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle) end --关闭玩法时,关闭选将界面 function UISyncTeamPVPSelectHeroPanel:OnCloseGamePlay() if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.Battle3V3) then self:CloseView(true) end end --region 语音相关 function UISyncTeamPVPSelectHeroPanel:RefreshVoiceUI() UIUtils.SetActive(self.img_VoiceChat,true) self.state_Listen:SetState(CTL.VoiceRoom.IsEnabledListener() and 0 or 1) self.state_Speak:SetState(CTL.VoiceRoom.IsEnabledMicrophone() and 0 or 1) end --endregion function UISyncTeamPVPSelectHeroPanel:RefreshHeroFixedInfo() if self.lastClickedHeroId then self:ShowHeroFixedInfo(self.lastClickedHeroId) end end --显示武将校正信息 function UISyncTeamPVPSelectHeroPanel:ShowHeroFixedInfo(heroId) self.lastClickedHeroId = heroId local hasData, atkContent,defContent,hpContent = CTL.FairPlay.GetFixedContent(MDL.FairPlay.FairPlayType.TVT, heroId) if hasData then UIUtils.SetActive(self.group_HeroInfoFixed.gameObject,true) --修正属性 if string.isNilOrEmpty(atkContent) then UIUtils.SetActive(self.group_HeroInfoFixed.txt_Info1,false) else UIUtils.SetActive(self.group_HeroInfoFixed.txt_Info1,true) UIUtils.SetLabel(self.group_HeroInfoFixed.txt_Info1,atkContent) end if string.isNilOrEmpty(defContent) then UIUtils.SetActive(self.group_HeroInfoFixed.txt_Info2,false) else UIUtils.SetActive(self.group_HeroInfoFixed.txt_Info2,true) UIUtils.SetLabel(self.group_HeroInfoFixed.txt_Info2,defContent) end if string.isNilOrEmpty(hpContent) then UIUtils.SetActive(self.group_HeroInfoFixed.txt_Info3,false) else UIUtils.SetActive(self.group_HeroInfoFixed.txt_Info3,true) UIUtils.SetLabel(self.group_HeroInfoFixed.txt_Info3,hpContent) end else UIUtils.SetActive(self.group_HeroInfoFixed.gameObject,false) end end return UISyncTeamPVPSelectHeroPanel