From 911a0b72e3415c9d3aba121bc532160da77c1afa Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 22 十月 2025 21:05:02 +0800
Subject: [PATCH] 65 子 【公会】基础主体 / 【公会】基础主体-客户端

---
 Main/System/Guild/GuildManager.cs |  197 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 154 insertions(+), 43 deletions(-)

diff --git a/Main/System/Guild/GuildManager.cs b/Main/System/Guild/GuildManager.cs
index 1bb39f7..f195061 100644
--- a/Main/System/Guild/GuildManager.cs
+++ b/Main/System/Guild/GuildManager.cs
@@ -15,20 +15,36 @@
     public Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>> familyActions = new Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>>();
     public event Action<int, int> FamilyActionInfoEvent;    //鍏細鑷畾涔夎褰�, 鍏朵粬鍔熻兘浠庤繖鑾峰彇
 
+    //瑕佹搷浣滃摢涓垚鍛樼殑绱㈠紩
+    int m_MemberOPIndex = -1;
+    public event Action MemberOPIndexEvent;
+    public int memberOPIndex
+    {
+        get { return m_MemberOPIndex; }
+        set
+        {
+            m_MemberOPIndex = value;
+            MemberOPIndexEvent?.Invoke();
+        }
+    }
+
     public override void Init()
     {
         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()
+    {
+        ClearGuildData();
+    }
+
+    void ClearGuildData()
     {
         m_FairyRequesteds.Clear();
         familyActions.Clear();
@@ -36,16 +52,14 @@
         applyList.Clear();
         PlayerDatas.Instance.fairyData.ClearData();
     }
-
-
-
-    private void OnRefreshFairyMine()
+    
+    public void ClearGuildWhenQuit()
     {
-        if (!PlayerDatas.Instance.fairyData.HasFairy)
-        {
-            //閫�鍑哄叕浼�
-            familyActions.Clear();
-        }
+        //閫�鍑哄叕浼�
+        ClearGuildData();
+
+        //闇�瑕佽浆鍒癏omeWin鐣岄潰 涓斿叧闂叕浼氱浉鍏崇晫闈�(鐖跺瓙缁ф壙鍏抽棴)
+        UIManager.Instance.GetUI<MainWin>()?.ClickFunc(0);
     }
 
 
@@ -80,6 +94,9 @@
 
     void ParseConfig()
     {
+        DirtyWordConfig.DirtyWordInit();
+        DirtyNameConfig.DirtyNameInit();
+
         var config = FuncConfigConfig.Get("CreateFamily");
         createFairyCost = int.Parse(config.Numerical1);
         createMoneyType = int.Parse(config.Numerical2);
@@ -104,8 +121,8 @@
         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];
 
     }
 
@@ -212,19 +229,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.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime);
     }
 
 
@@ -249,27 +268,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;
         }
 
@@ -279,6 +279,35 @@
         pack.EmblemWord = emblemWord;
         GameNetSystem.Instance.SendInfo(pack);
 
+    }
+
+    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,7 +349,7 @@
 
 
 
-    // 鍏細鑷畾涔夎褰�
+    #region  鍏細鑷畾涔夎褰�
     public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
     {
 
@@ -349,6 +378,16 @@
             return false;
         return true;
     }
+
+    public void QueryFamilyAction(int familyID, int actionType)
+    {
+        var pack = new CA617_tagCMQueryFamilyAction();
+        pack.FamilyID = (ushort)familyID;
+        pack.ActionType = (byte)actionType;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    #endregion
 
 
 
@@ -498,6 +537,12 @@
 
         if (type == 0)
         {
+            if (m_FairyRequesteds.Count >= requestGuildCount)
+            {
+                SysNotifyMgr.Instance.ShowTip("GuildSys9");
+                return;
+            }
+
             var cdSeconds = GetJoinCD();
             if (cdSeconds > 0)
             {
@@ -543,14 +588,22 @@
 
     #endregion
 
-
+    float lastChangeMarkTime = 0;   //鎵撳紑鐣岄潰鎯呭喌涓嬮伩鍏嶇煭鏃堕棿澶氭绔嬪嵆璇锋眰锛孋/S閫氫俊涔熸槸鏈夋椂闂撮棿闅�
     public bool guildChanged = false;
+    //Type锛�0-鏃狅紱1-鎴愬憳鍔犲叆锛�2-鎴愬憳閫�鍑猴紱3-鏀朵汉璁剧疆淇敼锛�4-鍏憡淇敼锛�5-寰界珷淇敼锛�6-鐩熶富鍙樻洿锛�7-鎴愬憳鑱屼綅鍙樻洿锛�8-鎴愬憳涓婄嚎锛�9-鎴愬憳绂荤嚎锛�
     //鍏細鏁版嵁鍙樺寲锛岃姹傛柊鐨勫叕浼氫俊鎭紝濡傚湪鎵撳紑鍏細鍒楄〃鏃惰姹傦紝鍏朵粬鍔熻兘鏍规嵁鑷韩鎯呭喌璇锋眰
     public void UpdateGuildDataChangeMark(HA521_tagMCFamilyChange netPack)
     {
-        if (netPack.Type > 0)
+        guildChanged = true;
+        if (Time.time - lastChangeMarkTime < 0.2f)
         {
-            guildChanged = true;
+            //灏忎紭鍖� 濡傛灉鏈夐棶棰樹篃鍙互鍘婚櫎
+            return;
+        }
+        lastChangeMarkTime = Time.time;
+        if (UIManager.Instance.IsOpened<GuildHallWin>())
+        {
+            RequestGuildData();
         }
     }
 
@@ -572,6 +625,54 @@
         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 鍔犲瘑鏁板瓧
 
@@ -611,7 +712,7 @@
             SysNotifyMgr.Instance.ShowTip("GuildSys6");
             return "";
         }
-        
+
         encryptedStr = encryptedStr.Substring(1);
 
         if (reverseMap.IsNullOrEmpty())
@@ -629,8 +730,8 @@
         }
         return originalStr.ToString().TrimStart('0'); // 鍘婚櫎鍓嶅闆�
     }
-    
-    
+
+
     int[] GenerateReverseMap(int[] map)
     {
         for (int i = 0; i < map.Length; i++)
@@ -643,4 +744,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