lcy
2026-02-03 21cdb220b7721bbb6f7588fd80fa07291004ccaa
Main/System/Guild/GuildManager.cs
@@ -39,7 +39,7 @@
    public byte[] donateCntList;
    public event Action DonateCntListEvent;
    public event Action<bool> EnterOrQuitGuildEvent;   //进入或退出公会事件
    public event Action<bool> EnterOrQuitGuildEvent;   //true进入或false退出公会事件
    public override void Init()
@@ -50,6 +50,7 @@
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
        TimeMgr.Instance.OnHourEvent += UpdateZBGRedpoint;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
    }
    public override void Release()
    {
@@ -58,8 +59,13 @@
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
        TimeMgr.Instance.OnHourEvent -= UpdateZBGRedpoint;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
    }
    private void OnRefreshFairyInfo()
    {
        UpdateRequestRedpoint();
    }
    void OnBeforePlayerDataInitialize()
    {
@@ -76,7 +82,7 @@
    void OnPlayerLoginOk()
    {
        UpdateDonateRedPoint();
        QueryZBGFamilyInfo();
    }
    void PlayerDataRefreshEvent(PlayerDataType type)
@@ -121,7 +127,7 @@
        EnterOrQuitGuildEvent?.Invoke(false);
    }
    //注意上线通知公会数据时也会触发
    //注意上线通知公会数据时也会触发; 但断线重连不会触发
    public async UniTask AfterEnterGuild()
    {
        //这里还没有公会数据, 后续的包会更新公会数据
@@ -180,7 +186,7 @@
    public int zbgOrgPriceValue;
    public int zbgChangFamilyCD;
    public List<int> cutCntListForTalk = new List<int>();
    public int familyRecordMaxCount;
    void ParseConfig()
    {
@@ -219,6 +225,15 @@
        zbgOrgPriceValue = int.Parse(config.Numerical2);
        zbgChangFamilyCD = int.Parse(config.Numerical3);
        cutCntListForTalk = JsonMapper.ToObject<List<int>>(config.Numerical4);
        config = FuncConfigConfig.Get("FamilyNote");
        familyRecordMaxCount = int.Parse(config.Numerical1);
        config = FuncConfigConfig.Get("FamilyBillboardSet");
        rankShowMaxCnt = int.Parse(config.Numerical1);
        pageCnt = int.Parse(config.Numerical2);
        queryPointNum = int.Parse(config.Numerical3);
    }
@@ -446,9 +461,7 @@
    #region  公会自定义记录
    public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
    {
        if (PlayerDatas.Instance.fairyData == null ||
            PlayerDatas.Instance.fairyData.fairy == null ||
            PlayerDatas.Instance.fairyData.fairy.FamilyID != _package.FamilyID)
        if (PlayerDatas.Instance.baseData.FamilyId != _package.FamilyID)
        {
            return;
        }
@@ -529,6 +542,73 @@
    public int curPageIndex;
    public int totalPageCount;
    public int lastPage = -1;
    public int pageCnt; //每页查询条数
    int queryPointNum;  //查询点
    public int rankShowMaxCnt;
    public bool isPowerSort
    {
        get
        {
            return LocalSave.GetBool($"GuildApplyList_IsPowerSort_{PlayerDatas.Instance.PlayerId}");
        }
        set
        {
            LocalSave.SetBool($"GuildApplyList_IsPowerSort_{PlayerDatas.Instance.PlayerId}", value);
        }
    }
    public FairyData GetFairyDataByRank(int rank)
    {
        if (rank < 1)
            return null;
        int index = rank - 1;
        FairyData fairyData = GetFairyDataByIndex(index);
        return fairyData;
    }
    public FairyData GetFairyDataByIndex(int index)
    {
        if (pageIndexList.IsNullOrEmpty() || index < 0 || index >= pageIndexList.Count)
            return null;
        int fairyID = pageIndexList[index];
        FairyData fairyData = GetFairyData(fairyID);
        return fairyData;
    }
    public FairyData GetFairyData(int fairyID)
    {
        return guildsDict.TryGetValue(fairyID, out var data) ? data : null;
    }
    public void ResetQueryParam()
    {
        pageCnt = 20;
        lastPage = -1;
        queryPointNum = 12;
    }
    public void ListenRankPage(int index)
    {
        int page = index / pageCnt;
        if (index > page * pageCnt + queryPointNum)
        {
            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);
        }
    }
    //查找公会列表
    public void OnRefreshGuildViewList(HA523_tagMCFamilyViewList vNetData)
    {
@@ -606,7 +686,6 @@
        data.EmblemWord = view.EmblemWord;
        data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;
        data.MemberCount = view.MemberCount;
    }
    #endregion
@@ -615,7 +694,7 @@
    public event Action OnRefreshApplyList;
    private List<FairyApply> applyList = new List<FairyApply>();
    private Redpoint memberRedpoint = new Redpoint(107, 10702);
    private Redpoint applyRedpoint = new Redpoint(10702, 1070201);
    private Redpoint applyRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, 1070201);
    //申请加入的玩家信息
    public void OnRefreshRequestJoinPlayerInfo(HA522_tagMCFamilyReqJoinInfo vNetData)
@@ -644,6 +723,9 @@
        }
        UpdateRequestRedpoint();
    }
    void UpdateRequestRedpoint()
    {
@@ -699,6 +781,12 @@
                    SysNotifyMgr.Instance.ShowTip("jiazu_lhs_202580");
                    return;
                }
                if (guildsDict[id].JoinLVMin > PlayerDatas.Instance.baseData.realmLevel && RealmConfig.HasKey(guildsDict[id].JoinLVMin))
                {
                    SysNotifyMgr.Instance.ShowTip("GuildApply01", RealmConfig.Get(guildsDict[id].JoinLVMin).Name);
                    return;
                }
            }
        }
@@ -726,8 +814,62 @@
        return 0;
    }
    public void SendJoinFamilyReply(int tagPlayerID, bool isOK)
    {
        CA621_tagCMJoinFamilyReply pack = new CA621_tagCMJoinFamilyReply();
        pack.TagPlayerID = (uint)tagPlayerID;
        pack.IsOK = (byte)(isOK ? 1 : 0);
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void SendChangeFamilyJoin(int joinReview, int joinLVMin)
    {
        CA622_tagCMChangeFamilyJoin pack = new CA622_tagCMChangeFamilyJoin();
        pack.JoinReview = (byte)joinReview;
        pack.JoinLVMin = (ushort)joinLVMin;
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void SendRequestJoinFamilyByPlayer(int tagPlayerID)
    {
        CA601_tagCMRequestJoinFamilyByPlayer pack = new CA601_tagCMRequestJoinFamilyByPlayer();
        pack.TagPlayerID = (uint)tagPlayerID;
        GameNetSystem.Instance.SendInfo(pack);
    }
    List<string> optionStrings = null;
    List<int> options = null;
    public bool TryGetApplyOptions(out List<int> optionKeys, out List<string> optionValues)
    {
        optionKeys = null;
        optionValues = null;
        if (options == null)
        {
            options = new List<int>();
            options = new List<int>(RealmConfig.GetKeys());
            options.Sort();
            options.Remove(0);
        }
        if (optionStrings == null)
        {
            optionStrings = new List<string>();
            foreach (int lv in options)
            {
                if (!RealmConfig.HasKey(lv))
                    continue;
                RealmConfig realmConfig = RealmConfig.Get(lv);
                optionStrings.Add(UIHelper.AppendColor(OfficialRankManager.Instance.GetOfficialRankColor(realmConfig.Quality), realmConfig.Name));
            }
        }
        if (options.IsNullOrEmpty() || optionStrings.IsNullOrEmpty() || options.Count != optionStrings.Count)
            return false;
        optionKeys = options;
        optionValues = optionStrings;
        return true;
    }
    #endregion
    float lastChangeMarkTime = 0;   //打开界面情况下避免短时间多次立即请求,C/S通信也是有时间间隔
@@ -743,7 +885,7 @@
            return;
        }
        lastChangeMarkTime = Time.time;
        if (UIManager.Instance.IsOpened<GuildHallWin>())
        if ((netPack.Type == 1 || netPack.Type == 2) && UIManager.Instance.IsOpened<GuildBaseWin>())
        {
            RequestGuildData();
        }
@@ -844,8 +986,13 @@
    //登录后首次打开查询,换新仙盟查询
    public void QueryZBGFamilyInfo()
    {
        if (PlayerDatas.Instance.baseData.FamilyId == 0)
        {
            return;
        }
        if (isQueryZBGYet)
            return;
        QueryFamilyAction((int)PlayerDatas.Instance.baseData.FamilyId, ZBGFamilyActionType);
@@ -862,8 +1009,14 @@
            return false;
        }
        bool restart = false;
        if (vNetData.FamilyActionList.Length == 1 && vNetData.FamilyActionList[0].Value1 == 1)
        for (int i = 0; i < vNetData.FamilyActionList.Length; i++)
        {
            int playerID = (int)vNetData.FamilyActionList[i].Value1;
            if (playerID != 1)
            {
                continue;
            }
            if (familyZBGActions.ContainsKey(1) && familyZBGActions[1].Time != vNetData.FamilyActionList[0].Time)
            {
                familyZBGActions.Clear();
@@ -871,6 +1024,7 @@
                restart = true;
            }
        }
        for (int i = 0; i < vNetData.FamilyActionList.Length; i++)
        {
@@ -958,7 +1112,6 @@
    }
    #endregion
    #region 红点