From 51b0f6ed9f4e1d3bb6f8144470b46908c7699a96 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 11 五月 2026 16:20:37 +0800
Subject: [PATCH] Merge branch 'master' into h5version

---
 Main/System/Guild/GuildManager.cs |  786 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 701 insertions(+), 85 deletions(-)

diff --git a/Main/System/Guild/GuildManager.cs b/Main/System/Guild/GuildManager.cs
index 1bb39f7..c37afb5 100644
--- a/Main/System/Guild/GuildManager.cs
+++ b/Main/System/Guild/GuildManager.cs
@@ -1,13 +1,21 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
+using Cysharp.Threading.Tasks;
 using LitJson;
 using UnityEngine;
 
 
-public class GuildManager : GameSystemManager<GuildManager>
+public partial class GuildManager : GameSystemManager<GuildManager>
 {
+    // 瀹舵棌鑷畾涔夎褰曠被鍨�
+    public const int MemberChangeActionType = 12;      //鍏細鍙樻洿璁板綍
+    public const int FamilyActionsType = 15;     // 鍏細璁板綍寰界珷绫诲瀷15
+    public const int ZBGFamilyActionType = 16;  // 鐝嶅疂闃佽褰曠被鍨�
+    public const int GuildBossActionType = 18;  //璁ㄤ紣
+
     // 鐢宠鐨勫叕浼氬垪琛�
     private List<int> m_FairyRequesteds = new List<int>();
     // 鍏細鑷畾涔夎褰曢檮鍔犳暟鎹紝鎸夌被鍨嬪瓨鍌�
@@ -15,39 +23,122 @@
     public Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>> familyActions = new Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>>();
     public event Action<int, int> FamilyActionInfoEvent;    //鍏細鑷畾涔夎褰�, 鍏朵粬鍔熻兘浠庤繖鑾峰彇
 
-    public override void Init()
+    //瑕佹搷浣滃摢涓垚鍛樼殑绱㈠紩
+    int m_MemberOPIndex = -1;
+    public event Action MemberOPIndexEvent;
+    public int memberOPIndex
     {
-        ParseConfig();
-        // PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyMine;
-        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
-    }
-    public override void Release()
-    {
-        // PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyMine;
-        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
-    }
-
-
-    public void OnBeforePlayerDataInitialize()
-    {
-        m_FairyRequesteds.Clear();
-        familyActions.Clear();
-        guildChanged = false;
-        applyList.Clear();
-        PlayerDatas.Instance.fairyData.ClearData();
-    }
-
-
-
-    private void OnRefreshFairyMine()
-    {
-        if (!PlayerDatas.Instance.fairyData.HasFairy)
+        get { return m_MemberOPIndex; }
+        set
         {
-            //閫�鍑哄叕浼�
-            familyActions.Clear();
+            m_MemberOPIndex = value;
+            MemberOPIndexEvent?.Invoke();
         }
     }
 
+    public byte[] donateCntList;
+    public event Action DonateCntListEvent;
+    public event Action<bool> EnterOrQuitGuildEvent;   //true杩涘叆鎴杅alse閫�鍑哄叕浼氫簨浠�
+
+
+    public override void Init()
+    {
+        ParseConfig();
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEx;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
+        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
+        TimeMgr.Instance.OnHourEvent += UpdateZBGRedpoint;
+        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
+    }
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitialize;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEx;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
+        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
+        TimeMgr.Instance.OnHourEvent -= UpdateZBGRedpoint;
+        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
+    }
+
+    private void OnRefreshFairyInfo()
+    {
+        UpdateRequestRedpoint();
+        UpdateDonateRedPoint();
+    }
+
+    void OnBeforePlayerDataInitialize()
+    {
+        zoneID = 0;
+        crossServerIDList.Clear();
+        ClearGuildData();
+        donateCntList = null;
+    }
+
+    void OnBeforePlayerDataInitializeEx()
+    {
+        isQueryZBGYet = false;
+        //澧為噺鐨勫舰寮�
+        PlayerDatas.Instance.fairyData.ClearData();
+    }
+
+    void OnPlayerLoginOk()
+    {
+        UpdateDonateRedPoint();
+        QueryZBGFamilyInfo();
+    }
+
+    void PlayerDataRefreshEvent(PlayerDataType type)
+    {
+        if (type == PlayerDataType.default33)
+        {
+            UpdateDonateRedPoint();
+        }
+    }
+
+    void ClearGuildData()
+    {
+        PlayerDatas.Instance.baseData.FamilyId = 0;
+        m_FairyRequesteds.Clear();
+        familyActions.Clear();
+        applyList.Clear();
+        PlayerDatas.Instance.fairyData.ClearData();
+
+        isQueryZBGYet = false;
+        zhenbaogeCutState = 0;
+        familyZBGActions.Clear();
+        sortPlayerCut.Clear();
+    }
+
+    //閫�鍑哄叕浼�
+    public void AfterQuitGuild()
+    {
+        //閫�鍑哄叕浼�
+        ClearGuildData();
+        //闇�瑕佽浆鍒癏omeWin鐣岄潰 涓斿叧闂叕浼氱浉鍏崇晫闈�(鐖跺瓙缁ф壙鍏抽棴)
+        UIManager.Instance.GetUI<MainWin>()?.ClickFunc(0);
+
+
+        // isQueryZBGYet = false;
+        // zhenbaogeCutState = 0;
+        // familyZBGActions.Clear();
+        // sortPlayerCut.Clear();
+
+        UpdateZBGRedpoint();
+        UpdateDonateRedPoint();
+        EnterOrQuitGuildEvent?.Invoke(false);
+    }
+
+    //娉ㄦ剰涓婄嚎閫氱煡鍏細鏁版嵁鏃朵篃浼氳Е鍙�; 浣嗘柇绾块噸杩炰笉浼氳Е鍙�
+    public async UniTask AfterEnterGuild()
+    {
+        //杩欓噷杩樻病鏈夊叕浼氭暟鎹�, 鍚庣画鐨勫寘浼氭洿鏂板叕浼氭暟鎹�
+        await UniTask.Delay(100);
+        UpdateDonateRedPoint();
+        UpdateZBGRedpoint();
+        QueryZBGFamilyInfo();
+        EnterOrQuitGuildEvent?.Invoke(true);
+    }
 
 
     #region 閰嶇疆
@@ -78,8 +169,49 @@
     public int renameFairyNameCost;
     public int renameFairyNameMoneyType;
 
+
+
+
+    //鐝嶅疂闃�(琛屽晢)
+    int m_ZhenbaogeCutState = 0;
+    public int zhenbaogeCutState
+    {
+        get
+        {
+            if (familyZBGActions.Count - 1 >= 50)
+            {
+                //鐮嶄环浜烘暟瓒呰繃涓婇檺鍚庡彲鐩存帴璐拱
+                m_ZhenbaogeCutState = 1;
+            }
+            return m_ZhenbaogeCutState;
+        }
+        set
+        {
+
+            m_ZhenbaogeCutState = value;
+        }
+    }
+    public int zhenbaogeBuyState = 0;
+    public bool needCheckCutCD = false;
+    public event Action UpdateZhenbaogeEvent;
+    public bool isQueryZBGYet = false;
+    public float lastZBGStartTime = 0; //杩囧ぉ鍒锋柊鐢�
+
+    //{id:鏁版嵁} 鐮嶄环琛屼负锛寁alue1涓虹帺瀹禝D锛岀壒娈婄害瀹氫负1鏃朵负瀹舵棌鐨勬暟鎹�
+    public Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction> familyZBGActions = new Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction>();
+    public List<int> sortPlayerCut = new List<int>();
+    public event Action<bool> UpdateFamilyActionEvent;
+    public int zbgPriceType;
+    public int zbgOrgPriceValue;
+    public int zbgChangFamilyCD;
+    public List<int> cutCntListForTalk = new List<int>();
+    public int familyRecordMaxCount;
+
     void ParseConfig()
     {
+        DirtyWordConfig.DirtyWordInit();
+        DirtyNameConfig.DirtyNameInit();
+
         var config = FuncConfigConfig.Get("CreateFamily");
         createFairyCost = int.Parse(config.Numerical1);
         createMoneyType = int.Parse(config.Numerical2);
@@ -104,9 +236,22 @@
         config = FuncConfigConfig.Get("FamilyRename");
         renameFairyNameCD = int.Parse(config.Numerical2);
         var arr = ConfigParse.GetMultipleStr<int>(config.Numerical1);
-        renameFairyNameCost = arr[0];
-        renameFairyNameMoneyType = arr[1];
+        renameFairyNameMoneyType = arr[0];
+        renameFairyNameCost = arr[1];
 
+        config = FuncConfigConfig.Get("Zhenbaoge");
+        zbgPriceType = int.Parse(config.Numerical1);
+        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");
+        pageCnt = int.Parse(config.Numerical1);
+        queryPointNum = int.Parse(config.Numerical2);
     }
 
 
@@ -212,19 +357,21 @@
         if (quitType == 0)
         {
             //琚涪
-            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 10 % 10;
+            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 10 % 10 - 1;
+            if (quitCount < 0) return 0;
             if (beQuitGuildPunishTime.Length != 0)
                 punishTime = beQuitGuildPunishTime[Math.Min(quitCount, beQuitGuildPunishTime.Length - 1)];
         }
         else if (quitType == 1)
         {
             //涓诲姩閫�鍑�
-            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 100;
+            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 100 - 1;
+            if (quitCount < 0) return 0;
             if (quitGuildPunishTime.Length != 0)
                 punishTime = quitGuildPunishTime[Math.Min(quitCount, quitGuildPunishTime.Length - 1)];
         }
 
-        return TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime - punishTime * 60;
+        return punishTime * 60 - (TimeUtility.GetCommServerTick(zoneID)- PlayerDatas.Instance.baseData.leaveFamilyTime);
     }
 
 
@@ -249,27 +396,8 @@
             return;
         }
 
-        int error;
-
-        //鑾峰彇name鐨勫瓧鑺傞暱搴︼紝name鍙兘鏄腑鏂� 鎴栬�呭叾浠栧崰鐢�3涓瓧绗︾殑绗﹀彿
-        if (!UIHelper.SatisfyNameLength(name, out error))
+        if (!CheckName(name))
         {
-            // TODO 鏆傛椂鎸変腑鏂囬暱搴︽彁绀�, 涓嶅悓璇█鍙牴鎹儏鍐典慨鏀�
-            if (error == 1)
-            {
-                SysNotifyMgr.Instance.ShowTip("NameError2", 7);
-                return;
-            }
-            else if (error == 2)
-            {
-                SysNotifyMgr.Instance.ShowTip("NameError1", 2);
-                return;
-            }
-        }
-
-        if (!CheckFairyNameLimit(name, out error))
-        {
-            ShowFairyNameErrorTip(error);
             return;
         }
 
@@ -281,8 +409,36 @@
 
     }
 
-    #endregion
+    public bool CheckName(string name)
+    {
+        int error;
 
+        //鑾峰彇name鐨勫瓧鑺傞暱搴︼紝name鍙兘鏄腑鏂� 鎴栬�呭叾浠栧崰鐢�3涓瓧绗︾殑绗﹀彿
+        if (!UIHelper.SatisfyNameLength(name, out error))
+        {
+            // TODO 鏆傛椂鎸変腑鏂囬暱搴︽彁绀�, 涓嶅悓璇█鍙牴鎹儏鍐典慨鏀�
+            if (error == 1)
+            {
+                SysNotifyMgr.Instance.ShowTip("NameError2", 7);
+                return false;
+            }
+            else if (error == 2)
+            {
+                SysNotifyMgr.Instance.ShowTip("NameError1", 2);
+                return false;
+            }
+        }
+
+        if (!CheckFairyNameLimit(name, out error))
+        {
+            ShowFairyNameErrorTip(error);
+            return false;
+        }
+
+        return true;
+    }
+
+    #endregion
 
 
 
@@ -320,19 +476,50 @@
 
 
 
-    // 鍏細鑷畾涔夎褰�
+    #region  鍏細鑷畾涔夎褰�
     public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
     {
+        if (PlayerDatas.Instance.baseData.FamilyId != _package.FamilyID)
+        {
+            return;
+        }
 
+        // 琛屽晢 鐮嶄环
+        if (UpdateHawkerAction(_package))
+        {
+            return;
+        }
+
+        // 寰界珷
+        if (GuildEmblemModel.Instance.UpdateEmblemAction(_package))
+        {
+            return;
+        }
+
+        // 鍏細璁ㄤ紣
+        if (GuildBossManager.Instance.UpdateGuildBossInfo(_package))
+        {
+            return;
+        }
+
+        //涓婇潰鍚勪釜鍔熻兘瑕乺eturn
+        UpdataCommonAction(_package);
+    }
+
+    // 閫氱敤璁板綍 鍙�傜敤鍗曟潯鏁版嵁鐨勮褰曟儏鍐� 鎴栨湁鏈嶅姟绔繚璇佸垪琛ㄥ叏閮ㄤ俊鎭洿鎺ヨ鐩栵紝鍏朵粬鍔熻兘姣旇緝澶嶆潅鍚勮嚜璐熻矗瀛樺偍
+    void UpdataCommonAction(HA513_tagMCFamilyActionInfo _package)
+    {
         if (!familyActions.ContainsKey((int)_package.FamilyID))
         {
             familyActions.Add((int)_package.FamilyID, new Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>());
         }
 
         familyActions[(int)_package.FamilyID][_package.ActionType] = _package.FamilyActionList;
+
         FamilyActionInfoEvent?.Invoke((int)_package.FamilyID, _package.ActionType);
     }
 
+    // 閫氱敤璁板綍 
     public bool TryGetFamilyActions(int actionType, out HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] familyAction)
     {
         familyAction = null;
@@ -350,6 +537,16 @@
         return true;
     }
 
+    public void QueryFamilyAction(int familyID, int actionType)
+    {
+        var pack = new CA617_tagCMQueryFamilyAction();
+        pack.FamilyID = (uint)familyID;
+        pack.ActionType = (byte)actionType;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    #endregion
+
 
 
     #region 浠欑洘鍒楄〃
@@ -358,10 +555,70 @@
 
     // 鏌ユ壘鐨勫叕浼欼D锛氬叕浼氭暟鎹�
     public Dictionary<int, FairyData> guildsDict = new Dictionary<int, FairyData>();
+    public int myFairyRank;
     // 鎸夋煡璇㈤〉瀛樺偍
     public List<int> pageIndexList = new List<int>();  //姝e父鏄寜椤垫煡璇紝椤哄簭娣诲姞鍗冲彲
     public int curPageIndex;
     public int totalPageCount;
+
+    public int lastPage = -1;
+    public int pageCnt; //姣忛〉鏌ヨ鏉℃暟
+    int queryPointNum;  //鏌ヨ鐐�
+
+    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;
+            SendFindGuild(string.Empty, page + 1, pageCnt);
+        }
+    }
 
     //鏌ユ壘鍏細鍒楄〃
     public void OnRefreshGuildViewList(HA523_tagMCFamilyViewList vNetData)
@@ -376,7 +633,7 @@
             SetFairyViewData(data, guildInfo);
             pageIndexList.Add((int)guildInfo.FamilyID);
         }
-
+        myFairyRank = (int)vNetData.Rank;   //0-娌℃湁鍏細鎴栨病鏈夊湪姒滀笂锛�>0-瀵瑰簲鎺掑悕
 
         if (OnRefreshFairyList != null)
         {
@@ -409,13 +666,13 @@
         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;
@@ -425,16 +682,52 @@
         data.EmblemWord = view.EmblemWord;
         data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;
         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 鐢宠鍒楄〃
     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)
@@ -464,6 +757,9 @@
         UpdateRequestRedpoint();
     }
 
+
+
+
     void UpdateRequestRedpoint()
     {
         if (PlayerDatas.Instance.fairyData.HasFairy && PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall))
@@ -485,7 +781,7 @@
     //id 0 浠h〃涓�閿姞鍏�
     public void SendApplyGuild(int id, int type)
     {
-        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Fairy, true))
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Guild, true))
         {
             return;
         }
@@ -498,6 +794,12 @@
 
         if (type == 0)
         {
+            if (m_FairyRequesteds.Count >= requestGuildCount)
+            {
+                SysNotifyMgr.Instance.ShowTip("GuildSys9");
+                return;
+            }
+
             var cdSeconds = GetJoinCD();
             if (cdSeconds > 0)
             {
@@ -510,6 +812,12 @@
                 if (guildsDict[id].MemberCount >= FamilyConfig.Get(guildsDict[id].FamilyLV).MemberMax)
                 {
                     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;
                 }
             }
@@ -539,31 +847,64 @@
         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
 
-
-    public bool guildChanged = false;
-    //鍏細鏁版嵁鍙樺寲锛岃姹傛柊鐨勫叕浼氫俊鎭紝濡傚湪鎵撳紑鍏細鍒楄〃鏃惰姹傦紝鍏朵粬鍔熻兘鏍规嵁鑷韩鎯呭喌璇锋眰
-    public void UpdateGuildDataChangeMark(HA521_tagMCFamilyChange netPack)
-    {
-        if (netPack.Type > 0)
-        {
-            guildChanged = true;
-        }
-    }
-
-    public void RequestGuildData()
-    {
-        if (guildChanged)
-        {
-            guildChanged = false;
-            var pack = new CA626_tagCMGetFamilyInfo();
-            GameNetSystem.Instance.SendInfo(pack);
-
-        }
-    }
 
     public void SendKickFairy(uint playerID)
     {
@@ -572,6 +913,271 @@
         GameNetSystem.Instance.SendInfo(pak);
     }
 
+
+    //鑾峰彇闇�瑕佸叕浼氳亴浣嶇瓑绾�
+    public int GetNeedGuildJobLV(int guildFuncID)
+    {
+        if (guildWorkToLevel.ContainsKey(guildFuncID))
+        {
+            return guildWorkToLevel[guildFuncID];
+        }
+        return 0;
+    }
+
+
+    public void SendChangeMemberLV(int playerID, int lv)
+    {
+        var pack = new CA625_tagCMChangeFamilyMemLV();
+        pack.PlayerID = (uint)playerID;
+        pack.FmLV = (byte)lv;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    public void KickMember(int playerID)
+    {
+        var pack = new CA605_tagCMDeleteFamilyMember();
+        pack.MemberID = (uint)playerID;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    public void QuitGuild()
+    {
+
+        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
+        Language.Get("Guild_46"), (bool isOK) =>
+            {
+                if (isOK)
+                {
+                    if (PlayerDatas.Instance.fairyData.fairy.MemberCount > 1 &&
+                    PlayerDatas.Instance.fairyData.mine.FmLV == 3)
+                    {
+                        SysNotifyMgr.Instance.ShowTip("GuildSys15");
+                        return;
+                    }
+                    var pack = new CA603_tagCMLeaveFamily();
+                    GameNetSystem.Instance.SendInfo(pack);
+                }
+            });
+
+
+    }
+
+    #region 鎹愯禒
+
+    public void UpdateDonateInfo(HA502_tagSCDonateCntInfo netPack)
+    {
+        donateCntList = netPack.DonateCntList;
+        DonateCntListEvent?.Invoke();
+        UpdateDonateRedPoint();
+    }
+    #endregion
+
+    #region 鐝嶅疂闃�
+
+
+    public void UpdateZhenbaogeInfo(HA512_tagMCFamilyZhenbaogeInfo netPack)
+    {
+        //鐮嶄环鐘舵�侊細浠欑洘閲岃褰曞凡鐮嶄环鎵嶆槸鐪熺殑宸茬爫浠风姸鎬侊紝灏佸寘涓殑鐮嶄环鐘舵�佺敤浜庡垽鏂璫d闂撮殧浣跨敤
+        needCheckCutCD = netPack.CutState == 1;
+        zhenbaogeBuyState = netPack.BuyState;
+        UpdateZhenbaogeEvent?.Invoke();
+        UpdateZBGRedpoint();
+    }
+
+
+
+
+    //鐧诲綍鍚庨娆℃墦寮�鏌ヨ锛屾崲鏂颁粰鐩熸煡璇�
+    public void QueryZBGFamilyInfo()
+    {
+        if (PlayerDatas.Instance.baseData.FamilyId == 0)
+        {
+            return;
+        }
+        if (isQueryZBGYet)
+            return;
+
+
+        QueryFamilyAction((int)PlayerDatas.Instance.baseData.FamilyId, ZBGFamilyActionType);
+
+        isQueryZBGYet = true;
+    }
+
+
+
+    //鏇存柊鐮嶄环淇℃伅
+    public bool UpdateHawkerAction(HA513_tagMCFamilyActionInfo vNetData)
+    {
+        if (vNetData.ActionType != ZBGFamilyActionType)
+        {
+            return false;
+        }
+        bool restart = false;
+
+        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();
+                sortPlayerCut.Clear();
+                restart = true;
+            }
+        }
+
+
+        for (int i = 0; i < vNetData.FamilyActionList.Length; i++)
+        {
+            int playerID = (int)vNetData.FamilyActionList[i].Value1;
+            familyZBGActions[playerID] = vNetData.FamilyActionList[i];
+
+        }
+
+        if (familyZBGActions.ContainsKey((int)PlayerDatas.Instance.baseData.PlayerID))
+        {
+            //鑷繁鏄惁宸茬爫浠� 浠庡垪琛ㄤ腑鏌ユ壘
+            zhenbaogeCutState = 1;
+        }
+        else
+        {
+            zhenbaogeCutState = 0;
+        }
+
+
+        sortPlayerCut = familyZBGActions.Keys.ToList();
+        if (sortPlayerCut.Contains(1))
+            sortPlayerCut.Remove(1);
+        sortPlayerCut.Sort((a, b) => { return familyZBGActions[a].Time.CompareTo(familyZBGActions[b].Time); });
+
+        UpdateFamilyActionEvent?.Invoke(restart);
+        UpdateZBGRedpoint();
+
+        return true;
+    }
+
+    //鐮嶄环浜烘暟
+    public int GetZBGFamilyActionCount()
+    {
+        return Math.Max(0, familyZBGActions.Count - 1);
+    }
+
+    public int GetTalkState()
+    {
+        int cnt = GetZBGFamilyActionCount();
+        for (int i = 0; i < cutCntListForTalk.Count; i++)
+        {
+            if (cnt < cutCntListForTalk[i])
+            {
+                return i;
+            }
+        }
+        return 0;
+    }
+
+    public int[][] GetZBGItems()
+    {
+        if (!familyZBGActions.ContainsKey(1))
+            return null;
+
+        return JsonMapper.ToObject<int[][]>(familyZBGActions[1].UseData);
+    }
+
+    public void OnZhenbaogeOP(byte type)
+    {
+        var pack = new CA616_tagCMZhenbaogeOP();
+        pack.OpType = type;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+
+    public Dictionary<int, FairyMember> tmpNoCutMembers = new Dictionary<int, FairyMember>();
+
+    //鏈浠锋垚鍛�
+    public void CalcNoCutMembers()
+    {
+        tmpNoCutMembers.Clear();
+        var fairy = PlayerDatas.Instance.fairyData;
+        if (fairy == null)
+        {
+            return;
+        }
+
+        foreach (var playerID in fairy.memberIDList)
+        {
+            if (!familyZBGActions.ContainsKey(playerID))
+            {
+                tmpNoCutMembers[playerID] = fairy.GetMember(playerID);
+            }
+        }
+    }
+
+    #endregion
+
+    #region 绾㈢偣
+
+    Redpoint donateRedpoint = new Redpoint(MainRedDot.guildHallRedpointID, MainRedDot.donateRedpointID);
+    //鐝嶅疂闃�(琛屽晢)
+    Redpoint zbgRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.hawkerRedpointID);
+
+    void UpdateDonateRedPoint()
+    {
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Guild))
+        {
+            return;
+        }
+        donateRedpoint.state = RedPointState.None;
+        if (PlayerDatas.Instance.fairyData.fairy == null)
+        {
+            return;
+        }
+
+        //鍙湁绗竴妗g殑鎵嶉渶瑕佺孩鐐�
+        var config = FamilyDonateConfig.Get(1);
+        if (donateCntList == null)
+        {
+            if (UIHelper.CheckMoneyCount(config.MoneyType, config.MoneyValue))
+                donateRedpoint.state = RedPointState.Simple;
+            return;
+        }
+        if (donateCntList != null && donateCntList.Length > 0)
+        {
+            if (donateCntList[0] < config.DailyCnt)
+            {
+                if (UIHelper.CheckMoneyCount(config.MoneyType, config.MoneyValue))
+                    donateRedpoint.state = RedPointState.Simple;
+            }
+        }
+    }
+
+    public void UpdateZBGRedpoint()
+    {
+        zbgRedpoint.state = RedPointState.None;
+
+        if (!PlayerDatas.Instance.fairyData.HasFairy)
+        {
+            return;
+        }
+        if (TimeUtility.GetCommServerNow(zoneID).Hour < 10)
+            return;
+
+        if (zhenbaogeCutState == 0)
+        {
+            zbgRedpoint.state = RedPointState.Simple;
+        }
+        else if (zhenbaogeBuyState == 0)
+        {
+            if (familyZBGActions[1].Value3 > 0)
+            {
+                zbgRedpoint.state = RedPointState.Simple;
+            }
+        }
+    }
+
+    #endregion
 
     #region 鍔犲瘑鏁板瓧
 
@@ -611,7 +1217,7 @@
             SysNotifyMgr.Instance.ShowTip("GuildSys6");
             return "";
         }
-        
+
         encryptedStr = encryptedStr.Substring(1);
 
         if (reverseMap.IsNullOrEmpty())
@@ -629,8 +1235,8 @@
         }
         return originalStr.ToString().TrimStart('0'); // 鍘婚櫎鍓嶅闆�
     }
-    
-    
+
+
     int[] GenerateReverseMap(int[] map)
     {
         for (int i = 0; i < map.Length; i++)
@@ -643,4 +1249,14 @@
 
     #endregion
 
+}
+
+// 鏉冮檺ID: 1-鏀朵汉锛�2-鍙樻洿鑱屼綅锛�3-鍙戝竷鍏憡锛�4-韪汉
+public enum GuildFuncType
+{
+    Accept = 1,
+    ChangeJob = 2,
+    PublishNotice = 3,
+    Kick = 4,
+
 }
\ No newline at end of file

--
Gitblit v1.8.0