Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs
@@ -20,6 +20,7 @@ public ushort BroadcastLen; //公告 public string Broadcast; //size = BroadcastLen public byte MemberCount; //成员人数 public tagSCTagFamilyInfoMem[] MemberList; public uint DataServerID; //数据所在服务器ID public HA519_tagSCTagFamilyInfo () { @@ -43,7 +44,40 @@ TransBytes (out BroadcastLen, vBytes, NetDataType.WORD); TransBytes (out Broadcast, vBytes, NetDataType.Chars, BroadcastLen); TransBytes (out MemberCount, vBytes, NetDataType.BYTE); MemberList = new tagSCTagFamilyInfoMem[MemberCount]; for (int i = 0; i < MemberCount; i ++) { MemberList[i] = new tagSCTagFamilyInfoMem(); TransBytes (out MemberList[i].PlayerID, vBytes, NetDataType.DWORD); TransBytes (out MemberList[i].NameLen, vBytes, NetDataType.BYTE); TransBytes (out MemberList[i].Name, vBytes, NetDataType.Chars, MemberList[i].NameLen); TransBytes (out MemberList[i].FmLV, vBytes, NetDataType.BYTE); TransBytes (out MemberList[i].LV, vBytes, NetDataType.WORD); TransBytes (out MemberList[i].Job, vBytes, NetDataType.BYTE); TransBytes (out MemberList[i].RealmLV, vBytes, NetDataType.BYTE); TransBytes (out MemberList[i].Face, vBytes, NetDataType.DWORD); TransBytes (out MemberList[i].FacePic, vBytes, NetDataType.DWORD); TransBytes (out MemberList[i].TitleID, vBytes, NetDataType.DWORD); TransBytes (out MemberList[i].FightPower, vBytes, NetDataType.DWORD); TransBytes (out MemberList[i].FightPowerEx, vBytes, NetDataType.DWORD); TransBytes (out MemberList[i].ServerID, vBytes, NetDataType.DWORD); } TransBytes (out DataServerID, vBytes, NetDataType.DWORD); } public class tagSCTagFamilyInfoMem { public uint PlayerID; public byte NameLen; public string Name; //size = NameLen public byte FmLV; //家族职位: 0-成员;1-精英;2-副族长;3-族长 public ushort LV; //等级 public byte Job; //职业 public byte RealmLV; //境界 public uint Face; //基本脸型 public uint FacePic; //头像框 public uint TitleID; //称号 public uint FightPower; //战力,求余亿部分 public uint FightPowerEx; //战力,整除亿部分 public uint ServerID; //所属区服ID } } Main/System/BillboardRank/GuildRankCell.cs
@@ -4,6 +4,7 @@ //-------------------------------------------------------- using UnityEngine; using UnityEngine.UI; using Cysharp.Threading.Tasks; //玩家通用排名 public class GuildRankCell : MonoBehaviour @@ -47,13 +48,7 @@ return; } if (!GuildManager.Instance.guildsDict.ContainsKey(familyID)) return; if (!UIManager.Instance.IsOpened<GuildPreviewWin>()) { UIManager.Instance.OpenWindow<GuildPreviewWin>(familyID); } GuildManager.Instance.SendViewGuild(familyID, rankData.LeaderServerID); }); } } Main/System/BillboardRank/GuildRankWin.cs
@@ -1,4 +1,5 @@ using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; public class GuildRankWin : UIBase @@ -23,6 +24,7 @@ { manager.OnRefreshFairyList += OnRefreshFairyList; scroller.OnRefreshCell += OnRefreshCell; GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo; manager.SendFindGuild(string.Empty, 0, manager.pageCnt); manager.ResetQueryParam(); @@ -33,6 +35,12 @@ { manager.OnRefreshFairyList -= OnRefreshFairyList; scroller.OnRefreshCell -= OnRefreshCell; GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo; } void OnUpdateViewFamilyInfo(int familyID) { UIManager.Instance.OpenWindowAsync<GuildPreviewWin>(familyID).Forget(); } public void Display() Main/System/BillboardRank/GuildTop3Cell.cs
@@ -4,6 +4,7 @@ //-------------------------------------------------------- using UnityEngine; using UnityEngine.UI; using Cysharp.Threading.Tasks; //玩家通用的前3排名 public class GuildTop3Cell : MonoBehaviour @@ -44,13 +45,7 @@ return; } if (!GuildManager.Instance.guildsDict.ContainsKey(familyID)) return; if (!UIManager.Instance.IsOpened<GuildPreviewWin>()) { UIManager.Instance.OpenWindow<GuildPreviewWin>(familyID); } GuildManager.Instance.SendViewGuild(familyID, rankData.LeaderServerID); }); } } Main/System/Guild/GuildJoinWin.cs
@@ -23,7 +23,7 @@ findBtn.AddListener(() => OnFindBtnClick()); createGuildBtn.AddListener(OnCreateGuildBtnClick); quicklyJoinGuildBtn.AddListener(OnQuicklyJoinGuildBtnClick); serversBtn.AddListener(()=> serversBtn.AddListener(() => { UIHelper.ShowServersPanel(GuildManager.Instance.crossServerIDList); }); @@ -37,6 +37,7 @@ GuildManager.Instance.MyRequestJoinEvent += MyRequestJoinEvent; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo; guildListScroller.OnRefreshCell += RefreshCell; GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo; Display(); } @@ -46,6 +47,7 @@ GuildManager.Instance.MyRequestJoinEvent -= MyRequestJoinEvent; guildListScroller.OnRefreshCell -= RefreshCell; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo; UIManager.Instance.GetUI<MainWin>()?.RestoreFuncBtn(); @@ -69,7 +71,7 @@ guildListScroller.m_Scorller.RefreshActiveCellViews(); } //列表变小的话 重新创建;列表变大的话,只添加 void CreateScroller() { @@ -107,6 +109,11 @@ _cell.Display(cell.index); } void OnUpdateViewFamilyInfo(int familyID) { UIManager.Instance.OpenWindowAsync<GuildPreviewWin>(familyID).Forget(); } private void OnFindBtnClick() { var nowQuery = findText.text; Main/System/Guild/GuildManager.cs
@@ -689,14 +689,41 @@ #region 查看目标公会 public Dictionary<int, FairyData> viewGuildsDict = new Dictionary<int, FairyData>(); public event Action OnUpdateViewFamilyInfo; public event Action<int> OnUpdateViewFamilyInfo; public void UpdateViewFamilyInfo(HA519_tagSCTagFamilyInfo pack) { FairyData data = new FairyData(); SetFairyViewData(data, pack); // 存储并排序成员列表 var memberList = new List<HA519_tagSCTagFamilyInfo.tagSCTagFamilyInfoMem>(pack.MemberList); memberList.Sort((a, b) => { // 主排序:职务降序(3-族长 > 2-副族长 > 1-精英 > 0-成员) int jobCompare = b.FmLV.CompareTo(a.FmLV); if (jobCompare != 0) return jobCompare; // 次排序:战力降序 long powerA = a.FightPowerEx * Constants.ExpPointValue + a.FightPower; long powerB = b.FightPowerEx * Constants.ExpPointValue + b.FightPower; return powerB.CompareTo(powerA); }); data.memberList = memberList; viewGuildsDict[(int)data.FamilyID] = data; OnUpdateViewFamilyInfo?.Invoke(); OnUpdateViewFamilyInfo?.Invoke((int)data.FamilyID); } /// <summary> /// 获取指定公会的排序后的成员列表(职务降序 → 战力降序) /// </summary> public List<HA519_tagSCTagFamilyInfo.tagSCTagFamilyInfoMem> GetSortedMemberList(int familyID) { if (viewGuildsDict.TryGetValue(familyID, out var data)) { return data.memberList; } return null; } public static void SetFairyViewData(FairyData data, HA519_tagSCTagFamilyInfo view) Main/System/Guild/GuildPreviewCell.cs
New file @@ -0,0 +1,38 @@ using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; /// <summary> /// 查看其他公会界面-成员列表Cell /// </summary> public class GuildPreviewCell : CellView { [SerializeField] AvatarCell avatarCell; [SerializeField] OfficialTitleCell officialTitle; [SerializeField] Text levelText; [SerializeField] Text jobText; [SerializeField] Text nameText; [SerializeField] Text fightPowerText; public void Display(HA519_tagSCTagFamilyInfo.tagSCTagFamilyInfoMem member) { int playerID = (int)member.PlayerID; int serverID = (int)member.ServerID; avatarCell.InitUI(AvatarHelper.GetAvatarModel(0, (int)member.Face, (int)member.FacePic)).Forget(); avatarCell.AddListener(() => { OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerID, serverID); }); officialTitle.InitUI(member.RealmLV, (int)member.TitleID).Forget(); levelText.text = member.LV.ToString(); jobText.text = RichTextMsgReplaceConfig.GetRichReplace("FAMILY", member.FmLV); nameText.text = member.Name; fightPowerText.text = UIHelper.ReplaceLargeArtNum(member.FightPowerEx * Constants.ExpPointValue + member.FightPower); } } Main/System/Guild/GuildPreviewCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: aac2007dcde275e42ae5283b312943f3 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildPreviewWin.cs
@@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; @@ -16,20 +17,24 @@ [SerializeField] Text guildNumText; //加公会编号 [SerializeField] Button copyBtn; [SerializeField] Text noticeText; //公告 [SerializeField] AvatarCell leaderAvatar; [SerializeField] OfficialTitleCell leaderTitle; [SerializeField] Text leaderLevelText; [SerializeField] Text guildJobText; [SerializeField] Text leaderNameText; [SerializeField] Text leaderFightPowerText; [SerializeField] ScrollerController scroller; [SerializeField] Button opearteBtn; [SerializeField] Text opearteBtnText; int guildID; int leaderID; int leaderServerID; static bool m_ShowOpearteBtn = true; /// <summary> /// 设置是否显示操作按钮(在打开界面前调用),默认显示 /// </summary> public static void SetShowOpearteBtn(bool show) { m_ShowOpearteBtn = show; } protected override void InitComponent() { opearteBtn.AddListener(() => @@ -45,45 +50,39 @@ UIHelper.CopyToClipboard(guildNumText.text); SysNotifyMgr.Instance.ShowTip("GuildSys8"); }); leaderAvatar.AddListener(() => { OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID, leaderServerID); }); } protected override void OnPreOpen() { GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo; OtherPlayerDetailManager.Instance.OnRevPackage += OnRevLeaderPackage; scroller.OnRefreshCell += OnRefreshMemberCell; guildID = functionOrder; opearteBtn.SetActive(m_ShowOpearteBtn); Display(); } protected override void OnPreClose() { GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo; OtherPlayerDetailManager.Instance.OnRevPackage -= OnRevLeaderPackage; scroller.OnRefreshCell -= OnRefreshMemberCell; m_ShowOpearteBtn = true; } void Display() { FairyData guildInfo = null; if (GuildManager.Instance.guildsDict.ContainsKey(guildID)) if (GuildManager.Instance.viewGuildsDict.ContainsKey(guildID)) { guildInfo = GuildManager.Instance.guildsDict[guildID]; } else { if (GuildManager.Instance.viewGuildsDict.ContainsKey(guildID)) { guildInfo = GuildManager.Instance.viewGuildsDict[guildID]; } guildInfo = GuildManager.Instance.viewGuildsDict[guildID]; } if (guildInfo == null) return; leaderID = guildInfo.LeaderID; leaderServerID = guildInfo.ServerID; OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID, leaderServerID, (int)ViewPlayerType.viewGuildLeader); var config = FamilyConfig.Get(guildInfo.FamilyLV); guildEmblem.Display(guildInfo.EmblemID, guildInfo.EmblemWord, 0.7f); @@ -92,7 +91,6 @@ guildLevelText.text = Language.Get("L1094") + guildInfo.FamilyLV; guildNameText.text = guildInfo.FamilyName + Language.Get("L1039", ServerListCenter.Instance.GetServerName(guildInfo.ServerID)); guildNumText.text = GuildManager.Instance.EncryptGuildID(guildInfo.FamilyID); leaderNameText.text = guildInfo.LeaderName; noticeText.text = string.IsNullOrEmpty(guildInfo.Broadcast) ? Language.Get("Guild_62") : guildInfo.Broadcast; @@ -113,27 +111,42 @@ } opearteBtnText.text = Language.Get(key); RefreshMemberList(); } void RefreshMemberList() { var memberList = GuildManager.Instance.GetSortedMemberList(guildID); if (memberList == null) return; scroller.Refresh(); for (int i = 0; i < memberList.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } scroller.Restart(); } void OnRefreshMemberCell(ScrollerDataType type, CellView cell) { if (cell is GuildPreviewCell exCell) { var memberList = GuildManager.Instance.GetSortedMemberList(guildID); if (memberList != null && cell.index >= 0 && cell.index < memberList.Count) { exCell.Display(memberList[cell.index]); } } } void OnRevLeaderPackage(int viewType, int playerID) { if (viewType != (int)ViewPlayerType.viewGuildLeader) { return; } if (playerID != leaderID) { return; } var leaderInfo = OtherPlayerDetailManager.Instance.GetViewPlayerData(playerID); leaderAvatar.InitUI(AvatarHelper.GetAvatarModel(0, leaderInfo.Face, leaderInfo.FacePic)); leaderTitle.InitUI(leaderInfo.RealmLV, leaderInfo.TitleID); leaderLevelText.text = leaderInfo.LV.ToString(); guildJobText.text = RichTextMsgReplaceConfig.GetRichReplace("FAMILY", 3); leaderFightPowerText.text = UIHelper.ReplaceLargeArtNum(leaderInfo.FightPower); RefreshMemberList(); } } void OnUpdateViewFamilyInfo(int familyID) { Display(); } } Main/System/Guild/GuildPreviewWin.cs.meta
@@ -1,5 +1,5 @@ fileFormatVersion: 2 guid: fd9c288ff11ce574fa551ef39869d5ea guid: a7972b36d7da9144bbb616682f5e2c1d MonoImporter: externalObjects: {} serializedVersion: 2 Main/System/Guild/GuildViewListCell.cs
@@ -1,10 +1,12 @@ using UnityEngine; using UnityEngine.UI; using Cysharp.Threading.Tasks; //公会查找列表,也是排行榜 public class GuildViewListCell : CellView { [SerializeField] Image rankImg; [SerializeField] Transform rankTextTf; [SerializeField] Text rankText; @@ -71,7 +73,7 @@ seeGuildBtn.AddListener(() => { UIManager.Instance.OpenWindow<GuildPreviewWin>(guildID); GuildManager.Instance.SendViewGuild(guildInfo.FamilyID, guildInfo.LeaderServerID); }); } Main/System/Guild/PlayerFairyData.cs
@@ -223,6 +223,9 @@ //查找增加的字段 public string LeaderName; //查看目标公会时的成员列表(按职务降序→战力降序排列) public List<HA519_tagSCTagFamilyInfo.tagSCTagFamilyInfoMem> memberList; } public class FairyMember Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
@@ -60,7 +60,7 @@ GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo; } private void OnUpdateViewFamilyInfo() private void OnUpdateViewFamilyInfo(int familyID) { if (viewPlayerData == null) {