using System; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class FairySiegeRankWin : Window { [SerializeField] ButtonEx btnClose; [SerializeField] Toggle crossPersonalRank; [SerializeField] Toggle crossFamilyRank; [SerializeField] Transform personalRankObj; [SerializeField] Transform familyRankObj; [SerializeField] ScrollerController personalRankScroller; // 个人排行榜含跨服 [SerializeField] ScrollerController familyRankScroller; [SerializeField] Text myRankTxt; [SerializeField] Text subCount; [SerializeField] Text nextRankTxt; [SerializeField] Text nextScore; [SerializeField] Text actTime; [SerializeField] Text serverList; [SerializeField] RichText showMoreServerText; [SerializeField] Button showMoreServerBtn; [SerializeField] Button rankAward; [SerializeField] Transform tranPersonalNo1; [SerializeField] Transform tranFairyNo1; //第一名玩家 [SerializeField] AvatarCell avatarCell; [SerializeField] Text playerName_1; //排行榜ID2 为 玩家ID [SerializeField] Text score_1; [SerializeField] Text serverName_1; [SerializeField] RawImage player3DModel_1; [SerializeField] TextEx txtNo1FamilyName; [SerializeField] TextEx txtNo1FamilyScore; [SerializeField] TextEx txtNo1FamilyServerName; [SerializeField] TextEx txtNoHasNo1; [SerializeField] EmblemCell emblemCell; [SerializeField] ButtonEx btnNo1RoundInfo; [SerializeField] RedpointBehaviour rpRankAward; RankModel rankModel { get { return ModelCenter.Instance.GetModel(); } } FairySiegeActModel model { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { get { return ModelCenter.Instance.GetModel(); } } RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel(); } } protected override void BindController() { } protected override void AddListeners() { btnClose.SetListener(CloseClick); crossPersonalRank.SetListener(SelectCrossPersonalRank); crossFamilyRank.SetListener(SelectCrossFamilyRank); showMoreServerBtn.SetListener(() => { FuncRules.OpenFuncTip(Language.Get("L2015"), model.operationCrossAct.m_ServerListStr); }); rankAward.SetListener(() => { WindowCenter.Instance.Open(); }); btnNo1RoundInfo.SetListener(() => { var rankData = rankModel.GetRankPageDatas(FairySiegeActModel.crossFamilyRankType); if (rankData == null) return; model.chooseRankIndex = 0; WindowCenter.Instance.Open(); }); } protected override void OnPreOpen() { rpRankAward.redpointId = model.GetRedpointId(FairySiegeRedPointType.RankAward); txtNoHasNo1.SetActive(false); model.SelectRank = 1; crossPersonalRank.isOn = true; crossFamilyRank.isOn = false; rankModel.ResetQueryParam(); rankModel.QueryCrossRank(FairySiegeActModel.crossRankType, model.operationCrossAct.zoneID); ShowRankPanel(); rankModel.onRankRefresh += OnRefreshRankList; GlobalTimeEvent.Instance.secondEvent += secondEvent; personalRankScroller.OnRefreshCell += OnRefreshCell; familyRankScroller.OnRefreshCell += OnRefreshFamilyCell; fairyModel.FamilyActionInfoEvent += UpdateFamilyActionInfoEvent; rankModel.onMyRankRefresh += RankModel_onMyRankRefresh; RoleParticularModel.OnRevPackage += OnPlayerCacheResultEvent; Display(); } protected override void OnAfterOpen() { OnCreateRankScroller(); } protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= secondEvent; rankModel.onRankRefresh -= OnRefreshRankList; personalRankScroller.OnRefreshCell -= OnRefreshCell; familyRankScroller.OnRefreshCell -= OnRefreshFamilyCell; fairyModel.FamilyActionInfoEvent -= UpdateFamilyActionInfoEvent; rankModel.onMyRankRefresh -= RankModel_onMyRankRefresh; RoleParticularModel.OnRevPackage -= OnPlayerCacheResultEvent; } protected override void OnAfterClose() { } private void OnPlayerCacheResultEvent(int viewType, int playerID, RoleParticularModel.ViewPlayerData data) { if (playerID != model.no1PlayerIDCross && playerID != model.no1PlayerIDCrossFamily) return; ShowNo1Model(); } private void RankModel_onMyRankRefresh(int type) { if (type == FairySiegeActModel.crossRankType && model.SelectRank == 1) { ShowMyRank(); } else if (type == FairySiegeActModel.crossFamilyRankType && model.SelectRank == 2) { ShowMyFamilyRank(); } } private void ShowMyRank(bool isQuery = false) { var myRank = rankModel.GetMyRank(FairySiegeActModel.crossRankType); int maxRank = 0; if (model.operationCrossAct != null) { maxRank = model.GetMaxRank(model.operationCrossAct.PersonalTemplateID); } if (myRank == null) { if (isQuery) { rankModel.QueryCrossRank(FairySiegeActModel.crossRankType, model.operationCrossAct.zoneID, watchID: (int)PlayerDatas.Instance.baseData.PlayerID, forceQuery: true); } myRankTxt.text = Language.Get("L2013", Language.Get("CrossBattleField45"), Language.Get("CrossServer123")); subCount.text = Language.Get("FairySiege120", 0); } else { myRankTxt.text = Language.Get("L2013", Language.Get("CrossBattleField45"), (myRank.index + 1).ToString()); subCount.text = Language.Get("FairySiege120", UIHelper.ReplaceLargeNum(model.GetRankPersonalScore(myRank))); } //显示下一个目标积分 int queryRankIndex = 0; //排名从0开始 string queryName = Language.Get("L1046"); ulong queryScore = 0; var rankInfo = rankModel.GetRankPageDatas(FairySiegeActModel.crossRankType); queryRankIndex = myRank == null ? maxRank - 1 : Math.Max(0, myRank.index - 1); if (rankInfo != null) { if (rankInfo.ContainsKey(queryRankIndex)) { queryName = rankInfo[queryRankIndex].name1; queryScore = model.GetRankPersonalScore(rankInfo[queryRankIndex]); } } nextRankTxt.text = Language.Get("L2013", Language.Get("AllianceBossRank", queryRankIndex + 1), queryName); nextScore.text = Language.Get("FairySiege120", UIHelper.ReplaceLargeNum(queryScore)); } private void ShowMyFamilyRank(bool isQuery = false) { //显示下一个目标积分 int queryRankIndex = 0; //排名从0开始 string queryName = Language.Get("L1046"); int queryScore = 0; var rankInfo = rankModel.GetRankPageDatas(FairySiegeActModel.crossFamilyRankType); //跨服我的家族排名 if (PlayerDatas.Instance.baseData.FamilyId == 0) { myRankTxt.text = Language.Get("L2013", Language.Get("L2024"), Language.Get("CrossServer123")); if (rankInfo != null && rankInfo.Count != 0) { rankInfo.Keys.ToList().Sort(); queryRankIndex = rankInfo[rankInfo.Count - 1].index; } } else { var data = rankModel.GetMyRankByID(FairySiegeActModel.crossFamilyRankType, (int)PlayerDatas.Instance.baseData.FamilyId); if (data == null) { if (isQuery) rankModel.QueryCrossRank(FairySiegeActModel.crossFamilyRankType, model.operationCrossAct.zoneID, watchID: (int)PlayerDatas.Instance.baseData.FamilyId, forceQuery: true); myRankTxt.text = Language.Get("L2013", Language.Get("L2024"), Language.Get("CrossServer123")); if (rankInfo != null && rankInfo.Count != 0) { rankInfo.Keys.ToList().Sort(); queryRankIndex = rankInfo[rankInfo.Count - 1].index; } } else { myRankTxt.text = Language.Get("L2013", Language.Get("L2024"), (data.index + 1).ToString()); queryRankIndex = Math.Max(0, data.index - 1); } } if (rankInfo != null) { if (rankInfo.ContainsKey(queryRankIndex)) { queryName = rankInfo[queryRankIndex].name1; queryScore = (int)rankInfo[queryRankIndex].cmpValue; } } nextRankTxt.text = Language.Get("L2013", Language.Get("AllianceBossRank", queryRankIndex + 1), queryName); nextScore.text = Language.Get("FairySiege120", queryScore); } private void OnRefreshRankList(int type) { if (type == FairySiegeActModel.crossRankType && model.SelectRank == 1) { personalRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyRank(true); ShowNo1Info(); } else if (type == FairySiegeActModel.crossFamilyRankType && model.SelectRank == 2) { familyRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyFamilyRank(true); ShowNo1Info(); } } private void OnCreateRankScroller() { personalRankScroller.Refresh(); if (model.operationCrossAct != null) { int maxRank = model.GetMaxRank(model.operationCrossAct.PersonalTemplateID); for (int i = 1; i < maxRank; i++) { personalRankScroller.AddCell(ScrollerDataType.Header, i); } } personalRankScroller.Restart(); ShowMyRank(); ShowNo1Info(); } private void OnCreateFamilyRankScroller() { familyRankScroller.Refresh(); if (model.operationCrossAct != null) { int maxRank = model.GetMaxRank(model.operationCrossAct.FamilyTemplateID); for (int i = 1; i < maxRank; i++) { familyRankScroller.AddCell(ScrollerDataType.Header, i); } } familyRankScroller.Restart(); familyRankScroller.m_Scorller.RefreshActiveCellViews(); ShowMyFamilyRank(); ShowNo1Info(); } private void QueryFamilySubmitCount() { if (PlayerDatas.Instance.baseData.FamilyId == 0) { SysNotifyMgr.Instance.ShowTip("jiazu_andyshao_0"); return; } var pack = new CA408_tagCGQueryFamilyAction(); pack.ActionType = 13; pack.FamilyID = PlayerDatas.Instance.baseData.FamilyId; GameNetSystem.Instance.SendInfo(pack); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); rankModel.ListenCrossRankPage(FairySiegeActModel.crossRankType, model.operationCrossAct.zoneID, cell.index); } private void OnRefreshFamilyCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); rankModel.ListenCrossRankPage(FairySiegeActModel.crossFamilyRankType, model.operationCrossAct.zoneID, cell.index); } private void Display() { //subCount.text = Language.Get("BossTrial7") + model.submitAllCount; //分上榜时间 和 最后展示时间 if (model.IsResultShowTime) { actTime.text = StringUtility.Contact(Language.Get("L2013", Language.Get("L2014"), model.operationCrossAct.ShowResultTime()), " (", Language.Get("XMZZ110") + ")"); } else if (model.operationCrossAct != null) { actTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), UIHelper.AppendColor(TextColType.Green, model.operationCrossAct.ToDisplayTime(), true)); } else { //未开启跨服活动 actTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), UIHelper.AppendColor(TextColType.Green, model.operationCrossAct.ToDisplayTime(), true)); } if (model.operationCrossAct != null) { serverList.text = Language.Get("L2013", Language.Get("L2015"), model.operationCrossAct.m_ServerListStr).Replace(" ", UIHelper.no_breaking_space); showMoreServerText.text = Language.Get("L2018", Language.Get("L2016")); } else { serverList.text = ""; showMoreServerText.text = ""; } } private void ShowRankPanel() { if (model.SelectRank == 1) { tranPersonalNo1.SetActive(true); personalRankObj.SetActive(true); tranFairyNo1.SetActive(false); familyRankObj.SetActive(false); } else { tranPersonalNo1.SetActive(false); personalRankObj.SetActive(false); tranFairyNo1.SetActive(true); familyRankObj.SetActive(true); } } private void secondEvent() { if (model.IsResultShowTime) { actTime.text = StringUtility.Contact(Language.Get("L2013", Language.Get("L2014"), model.operationCrossAct.ShowResultTime()), " (", Language.Get("XMZZ110") + ")"); } } private void SelectCrossPersonalRank(bool value) { if (value) { model.SelectRank = 1; rankModel.ResetQueryParam(); rankModel.QueryCrossRank(FairySiegeActModel.crossRankType, model.operationCrossAct.zoneID); OnCreateRankScroller(); ShowRankPanel(); subCount.text = Language.Get("FairySiege120", 0); } } private void SelectCrossFamilyRank(bool value) { if (value) { txtNoHasNo1.SetActive(false); model.SelectRank = 2; rankModel.ResetQueryParam(); rankModel.QueryCrossRank(FairySiegeActModel.crossFamilyRankType, model.operationCrossAct.zoneID); OnCreateFamilyRankScroller(); ShowRankPanel(); subCount.text = Language.Get("FairySiege120", 0); UpdateFamilyActionInfoEvent(0, 0); QueryFamilySubmitCount(); } } private void UpdateFamilyActionInfoEvent(int familyID, int type) { if (model.SelectRank == 2 && fairyModel.familyActions.ContainsKey((int)PlayerDatas.Instance.baseData.FamilyId) && fairyModel.familyActions[(int)PlayerDatas.Instance.baseData.FamilyId].ContainsKey(13) && fairyModel.familyActions[(int)PlayerDatas.Instance.baseData.FamilyId][13].Length > 0) { subCount.text = Language.Get("FairySiege120", fairyModel.familyActions[(int)PlayerDatas.Instance.baseData.FamilyId][13][0].Value1); } } private void ShowNo1Info() { RankData personalRankData = null; var personalRankInfo = rankModel.GetRankPageDatas(FairySiegeActModel.crossRankType); if (personalRankInfo != null && personalRankInfo.ContainsKey(0)) { personalRankData = personalRankInfo[0]; } RankData familyRankData = null; var familyRankInfo = rankModel.GetRankPageDatas(FairySiegeActModel.crossFamilyRankType); if (familyRankInfo != null && familyRankInfo.ContainsKey(0)) { familyRankData = familyRankInfo[0]; } if (model.SelectRank == 1 && personalRankData != null) { txtNoHasNo1.SetActive(false); txtNo1FamilyName.SetActive(false); txtNo1FamilyScore.SetActive(false); txtNo1FamilyServerName.SetActive(false); model.no1PlayerIDCross = (int)personalRankData.id; roleParticularModel.ViewCrossPlayerCacheData(model.no1PlayerIDCross); //查询返回显示模型 int serverID = UIHelper.GetServerIDByAccount(personalRankData.name2); string serverName = ServerListCenter.Instance.GetServerName(serverID); playerName_1.text = personalRankData.name1; serverName_1.text = Language.Get("Z2002", serverName); score_1.text = Language.Get("L2013", Language.Get("CrossBattleField79"), UIHelper.ReplaceLargeNum(model.GetRankPersonalScore(personalRankData))); int playerID = model.GetPlayerId(familyRankData); avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)playerID, (int)personalRankData.value3, (int)personalRankData.value4, personalRankData.subType)); } else if (model.SelectRank == 2 && familyRankData != null) { model.no1PlayerIDCrossFamily = (int)familyRankData.id2; txtNoHasNo1.SetActive(false); txtNo1FamilyName.SetActive(true); txtNo1FamilyScore.SetActive(true); txtNo1FamilyServerName.SetActive(true); txtNo1FamilyName.text = familyRankData.name1; txtNo1FamilyScore.text = Language.Get("FairySiege120", UIHelper.ReplaceLargeNum(familyRankData.cmpValue)); string serverName = ServerListCenter.Instance.GetServerName((int)familyRankData.value5); txtNo1FamilyServerName.text = Language.Get("Z2002", serverName); emblemCell.InitUI(EmblemHelper.GetOtherEmblemModel((int)familyRankData.value3)); score_1.text = Language.Get("L2013", Language.Get("CrossBattleField79"), familyRankData.cmpValue); } else { txtNoHasNo1.SetActive(true); txtNo1FamilyName.SetActive(false); txtNo1FamilyScore.SetActive(false); txtNo1FamilyServerName.SetActive(false); int defaultFamilyEmblemId = EmblemHelper.GetDefaultFamilyEmblemId(); emblemCell.InitUI(new EmblemModel(defaultFamilyEmblemId, EmblemHelper.GetEmblemEffectID(defaultFamilyEmblemId))); playerName_1.text = Language.Get("L1046"); serverName_1.text = ""; score_1.text = string.Empty; txtNo1FamilyServerName.text = ""; txtNo1FamilyScore.text = ""; txtNo1FamilyName.text = Language.Get("L1046"); avatarCell.InitUI(AvatarHelper.GetDefaultAvatarModel()); } ShowNo1Model(); } private void ShowNo1Model() { player3DModel_1.SetActive(false); int playerID = 0; if (model.SelectRank == 1) { playerID = model.no1PlayerIDCross; } else if (model.SelectRank == 2) { playerID = model.no1PlayerIDCrossFamily; } if (playerID == 0) { return; } var viewPlayerData = roleParticularModel.GetViewPlayerData(playerID); if (viewPlayerData == null) return; player3DModel_1.SetActive(true); int _suitLevel = (int)(viewPlayerData.rolePropData.EquipShowSwitch % 10); int clothes = viewPlayerData.GetItemId(RoleEquipType.Clothes); int weapon = viewPlayerData.GetItemId(RoleEquipType.Weapon); int wing = viewPlayerData.GetItemId(RoleEquipType.Wing); int weapon2 = viewPlayerData.GetItemId(RoleEquipType.Weapon2); int fashionClothes = viewPlayerData.GetItemId(RoleEquipType.FashionClothes); int fashionWeapon = viewPlayerData.GetItemId(RoleEquipType.FashionWeapon); int fashionWeapon2 = viewPlayerData.GetItemId(RoleEquipType.FashionWeapon2); var reikiRootEffectId = viewPlayerData.rolePropData.EquipShowSwitch / 1000 % 1000; var data = new UI3DPlayerExhibitionData { job = viewPlayerData.rolePropData.Job, fashionClothesId = fashionClothes, fashionWeaponId = fashionWeapon, fashionSecondaryId = fashionWeapon2, clothesId = clothes, suitLevel = _suitLevel, weaponId = weapon, wingsId = wing, secondaryId = weapon2, reikiRootEffectId = (int)reikiRootEffectId, isDialogue = false, equipLevel = (int)viewPlayerData.rolePropData.EquipShowSwitch / 10 % 100, titleID = viewPlayerData.rolePropData.TitleID, }; UI3DModelExhibition.InstanceClone1.ShowPlayer(player3DModel_1, data); player3DModel_1.raycastTarget = false; } } }