yyl
2026-02-11 45d3d873a7740886fa09f35c9fea2830f4563072
Main/System/Guild/GuildManager.cs
@@ -8,10 +8,9 @@
using UnityEngine;
public class GuildManager : GameSystemManager<GuildManager>
public partial class GuildManager : GameSystemManager<GuildManager>
{
    // 家族自定义记录类型
    public const int CustomyActionType = 0;     //通用
    public const int MemberChangeActionType = 12;      //公会变更记录
    public const int FamilyActionsType = 15;     // 公会记录徽章类型15
    public const int ZBGFamilyActionType = 16;  // 珍宝阁记录类型
@@ -69,13 +68,14 @@
    void OnBeforePlayerDataInitialize()
    {
        zoneID = 0;
        crossServerIDList.Clear();
        ClearGuildData();
        donateCntList = null;
    }
    void OnBeforePlayerDataInitializeEx()
    {
        guildChanged = false;
        isQueryZBGYet = false;
    }
@@ -98,7 +98,6 @@
        PlayerDatas.Instance.baseData.FamilyId = 0;
        m_FairyRequesteds.Clear();
        familyActions.Clear();
        guildChanged = false;
        applyList.Clear();
        PlayerDatas.Instance.fairyData.ClearData();
@@ -231,8 +230,8 @@
        config = FuncConfigConfig.Get("FamilyBillboardSet");
        rankShowMaxCnt = int.Parse(config.Numerical1);
        pageCnt = int.Parse(config.Numerical2);
        pageCnt = int.Parse(config.Numerical1);
        queryPointNum = int.Parse(config.Numerical2);
    }
@@ -352,7 +351,7 @@
                punishTime = quitGuildPunishTime[Math.Min(quitCount, quitGuildPunishTime.Length - 1)];
        }
        return punishTime * 60 - (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime);
        return punishTime * 60 - (TimeUtility.GetCommServerTick(zoneID)- PlayerDatas.Instance.baseData.leaveFamilyTime);
    }
@@ -536,6 +535,7 @@
    // 查找的公会ID:公会数据
    public Dictionary<int, FairyData> guildsDict = new Dictionary<int, FairyData>();
    public int myFairyRank;
    // 按查询页存储
    public List<int> pageIndexList = new List<int>();  //正常是按页查询,顺序添加即可
    public int curPageIndex;
@@ -544,7 +544,6 @@
    public int lastPage = -1;
    public int pageCnt; //每页查询条数
    int queryPointNum;  //查询点
    public int rankShowMaxCnt;
    public bool isPowerSort
    {
@@ -597,13 +596,6 @@
            if (lastPage >= page)
                return;
            lastPage = page;
            if (index >= rankShowMaxCnt)
            {
                //超过服务器已上榜的总数量,比如总榜单是100名,当前只有8名玩家上榜,往下滚动就不再查询
                return;
            }
            //Debug.LogFormat("分页查询:请求第 {0} 页 (当前index:{1})", page + 1, index);
            SendFindGuild(string.Empty, page + 1, pageCnt);
        }
    }
@@ -621,7 +613,7 @@
            SetFairyViewData(data, guildInfo);
            pageIndexList.Add((int)guildInfo.FamilyID);
        }
        myFairyRank = (int)vNetData.Rank;   //0-没有公会或没有在榜上;>0-对应排名
        if (OnRefreshFairyList != null)
        {
@@ -654,28 +646,13 @@
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void SendFindGuildNoDecrypt(string msg, int pageIndex = 0, int pageSize = 20)
    {
        if (pageIndex == 0)
        {
            //默认查询第一页即代表重新开始查询,清空之前的数据
            guildsDict.Clear();
            pageIndexList.Clear();
        }
        var pack = new CA620_tagCMViewFamilyPage();
        pack.Msg = msg;
        pack.MsgLen = (byte)msg.Length;
        pack.PageIndex = (byte)pageIndex;
        pack.ShowCount = (byte)pageSize;
        GameNetSystem.Instance.SendInfo(pack);
    }
    public static void SetFairyViewData(FairyData data, HA523_tagMCFamilyViewList.tagMCFamilyView view)
    {
        data.Rank = view.Rank;
        data.FamilyID = (int)view.FamilyID;
        data.FamilyName = view.FamilyName;
        data.LeaderID = (int)view.LeaderID;
        data.LeaderServerID = (int)view.LeaderServerID;
        data.LeaderName = view.LeaderName;
        data.FamilyLV = view.FamilyLV;
        data.JoinReview = view.JoinReview;
@@ -687,6 +664,43 @@
        data.MemberCount = view.MemberCount;
    }
    #endregion
    #region 查看目标公会
    public Dictionary<int, FairyData> viewGuildsDict = new Dictionary<int, FairyData>();
    public event Action OnUpdateViewFamilyInfo;
    public void UpdateViewFamilyInfo(HA519_tagSCTagFamilyInfo pack)
    {
        FairyData data = new FairyData();
        SetFairyViewData(data, pack);
        viewGuildsDict[(int)data.FamilyID] = data;
        OnUpdateViewFamilyInfo?.Invoke();
    }
    public static void SetFairyViewData(FairyData data, HA519_tagSCTagFamilyInfo view)
    {
        data.FamilyID = (int)view.FamilyID;
        data.FamilyName = view.FamilyName;
        data.LeaderID = (int)view.LeaderID;
        data.LeaderServerID = (int)view.LeaderServerID;
        data.LeaderName = view.LeaderName;
        data.FamilyLV = view.FamilyLV;
        data.ServerID = (int)view.ServerID;
        data.EmblemID = (int)view.EmblemID;
        data.EmblemWord = view.EmblemWord;
        data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;
        data.MemberCount = view.MemberCount;
    }
    public void SendViewGuild(int fairyID, int serverID)
    {
        var pack = new CA619_tagCSViewTagFamily();
        pack.FamilyID = (uint)fairyID;
        pack.DataServerID = (uint)serverID;
        GameNetSystem.Instance.SendInfo(pack);
    }
    #endregion
    #region 申请列表
@@ -871,35 +885,6 @@
    }
    #endregion
    float lastChangeMarkTime = 0;   //打开界面情况下避免短时间多次立即请求,C/S通信也是有时间间隔
    public bool guildChanged = false;
    //Type:0-无;1-成员加入;2-成员退出;3-收人设置修改;4-公告修改;5-徽章修改;6-盟主变更;7-成员职位变更;8-成员上线;9-成员离线;
    //公会数据变化,请求新的公会信息,如在打开公会列表时请求,其他功能根据自身情况请求
    public void UpdateGuildDataChangeMark(HA521_tagMCFamilyChange netPack)
    {
        guildChanged = true;
        if (Time.time - lastChangeMarkTime < 0.2f)
        {
            //小优化 如果有问题也可以去除
            return;
        }
        lastChangeMarkTime = Time.time;
        if ((netPack.Type == 1 || netPack.Type == 2) && UIManager.Instance.IsOpened<GuildBaseWin>())
        {
            RequestGuildData();
        }
    }
    public void RequestGuildData()
    {
        if (guildChanged)
        {
            guildChanged = false;
            var pack = new CA626_tagCMGetFamilyInfo();
            GameNetSystem.Instance.SendInfo(pack);
        }
    }
    public void SendKickFairy(uint playerID)
    {
@@ -1156,7 +1141,7 @@
        {
            return;
        }
        if (TimeUtility.ServerNow.Hour < 10)
        if (TimeUtility.GetCommServerNow(zoneID).Hour < 10)
            return;
        if (zhenbaogeCutState == 0)