From ae3cbe69348c25601cd4dc16a8abcee789954a62 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 23 十月 2025 19:55:40 +0800
Subject: [PATCH] 63 【公会】基础主体 - 捐献

---
 Main/Config/Configs/FamilyDonateConfig.cs.meta                                       |   11 +
 Main/Core/GameEngine/Player/PlayerBaseData.cs                                        |   24 ++
 Main/System/Guild/GuildDonateCell.cs.meta                                            |   11 +
 Main/Config/ConfigManager.cs                                                         |    3 
 Main/Core/GameEngine/Player/PlayerDatas.cs                                           |    5 
 Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs.meta                          |   11 +
 Main/System/Chat/ChatWin.cs                                                          |    2 
 Main/System/Guild/GuildMemberOPCell.cs                                               |    2 
 Main/System/Redpoint/MainRedDot.cs                                                   |    4 
 Main/System/Guild/GuildDonateDetailCell.cs.meta                                      |   11 +
 Main/System/Guild/GuildDonateDetailWin.cs                                            |   30 +++
 Main/System/Guild/GuildMemberCell.cs                                                 |    4 
 Main/Config/Configs/FamilyDonateConfig.cs                                            |   53 +++++
 Main/System/Guild/GuildDonateWin.cs.meta                                             |   11 +
 Main/System/Guild/GuildManager.cs                                                    |   86 +++++++++
 Main/Utility/EnumHelper.cs                                                           |    4 
 Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs                               |   60 ++++++
 Main/System/Guild/GuildDonateCell.cs                                                 |   77 ++++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA502_tagSCDonateCntInfo.cs |    7 
 Main/Utility/UIHelper.cs                                                             |    1 
 Main/System/Guild/GuildHallWin.cs                                                    |    2 
 Main/System/Guild/GuildDonateWin.cs                                                  |   48 +++++
 Main/System/Guild/GuildDonateDetailWin.cs.meta                                       |   11 +
 Main/System/Guild/GuildPreviewWin.cs                                                 |    3 
 Main/System/Guild/GuildDonateDetailCell.cs                                           |   35 +++
 Main/Component/UI/Common/ClickScreenOtherSpace.cs                                    |    1 
 26 files changed, 492 insertions(+), 25 deletions(-)

diff --git a/Main/Component/UI/Common/ClickScreenOtherSpace.cs b/Main/Component/UI/Common/ClickScreenOtherSpace.cs
index 62bb4c0..f2dd64b 100644
--- a/Main/Component/UI/Common/ClickScreenOtherSpace.cs
+++ b/Main/Component/UI/Common/ClickScreenOtherSpace.cs
@@ -5,6 +5,7 @@
 using System;
 using UnityEngine.Events;
 
+//鐐瑰嚮鍏朵粬鍖哄煙瑙﹀彂鎺у埗鏄鹃殣 鍙檮鍔犱簨浠�
 [RequireComponent(typeof(RectTransform))]
 public class ClickScreenOtherSpace : MonoBehaviour
 {
diff --git a/Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs b/Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs
new file mode 100644
index 0000000..ebda422
--- /dev/null
+++ b/Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs
@@ -0,0 +1,60 @@
+锘縰sing UnityEngine;
+using System;
+
+//鐐瑰嚮鍏朵粬鍖哄煙瑙﹀彂浜嬩欢锛屾棤鏄鹃殣閫昏緫
+[RequireComponent(typeof(RectTransform))]
+public class ClickScreenOtherSpaceEvent : MonoBehaviour
+{
+
+    [SerializeField]
+    RespondType m_RespondType = RespondType.Out;
+    public RespondType respondType {
+        get { return m_RespondType; }
+        set { m_RespondType = value; }
+    }
+
+    Action m_ClickOtherEvent;
+
+    public void AddListener(Action _callBack)
+    {
+        m_ClickOtherEvent = null;
+        m_ClickOtherEvent += _callBack;
+    }
+
+    public void RemoveAllListeners()
+    {
+        m_ClickOtherEvent = null;
+    }
+
+
+    private void LateUpdate()
+    {
+        if (Input.GetMouseButtonDown(0))
+        {
+            var sp = Input.mousePosition;
+            switch (m_RespondType)
+            {
+                case RespondType.In:
+                    if (RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera))
+                    {
+                        m_ClickOtherEvent?.Invoke();
+                    }
+                    break;
+                case RespondType.Out:
+                    if (!RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera))
+                    {
+                        m_ClickOtherEvent?.Invoke();
+                    }
+                    break;
+            }
+        }
+
+    }
+
+    public enum RespondType
+    {
+        In,
+        Out,
+            
+    }
+}
\ No newline at end of file
diff --git a/Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs.meta b/Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs.meta
new file mode 100644
index 0000000..906ccda
--- /dev/null
+++ b/Main/Component/UI/Common/ClickScreenOtherSpaceEvent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1b96e2cd2e0ab2d43ac77b19db166efe
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 11a4bcf..32e5261 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -46,6 +46,7 @@
             typeof(DungeonConfig),
             typeof(DungeonOpenTimeConfig),
             typeof(FaceConfig),
+            typeof(FamilyDonateConfig),
             typeof(FightPowerRatioConfig),
             typeof(FirstChargeConfig),
             typeof(GoldRushCampConfig),
@@ -237,6 +238,8 @@
         ClearConfigDictionary<DungeonOpenTimeConfig>();
         // 娓呯┖ FaceConfig 瀛楀吀
         ClearConfigDictionary<FaceConfig>();
+        // 娓呯┖ FamilyDonateConfig 瀛楀吀
+        ClearConfigDictionary<FamilyDonateConfig>();
         // 娓呯┖ FightPowerRatioConfig 瀛楀吀
         ClearConfigDictionary<FightPowerRatioConfig>();
         // 娓呯┖ FirstChargeConfig 瀛楀吀
diff --git a/Main/Config/Configs/FamilyDonateConfig.cs b/Main/Config/Configs/FamilyDonateConfig.cs
new file mode 100644
index 0000000..ddb4ebb
--- /dev/null
+++ b/Main/Config/Configs/FamilyDonateConfig.cs
@@ -0,0 +1,53 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�10鏈�23鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class FamilyDonateConfig : ConfigBase<int, FamilyDonateConfig>
+{
+    static FamilyDonateConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int DonateType;
+	public string Name;
+	public int DailyCnt;
+	public int MoneyType;
+	public int MoneyValue;
+	public int[][] AwardItemList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out DonateType); 
+
+			Name = tables[1];
+
+			int.TryParse(tables[2],out DailyCnt); 
+
+			int.TryParse(tables[3],out MoneyType); 
+
+			int.TryParse(tables[4],out MoneyValue); 
+
+			AwardItemList = JsonMapper.ToObject<int[][]>(tables[5].Replace("(", "[").Replace(")", "]")); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/FamilyDonateConfig.cs.meta b/Main/Config/Configs/FamilyDonateConfig.cs.meta
new file mode 100644
index 0000000..2bb49fd
--- /dev/null
+++ b/Main/Config/Configs/FamilyDonateConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b1247462ec68a8c4aa0263dc8fd7c189
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/GameEngine/Player/PlayerBaseData.cs b/Main/Core/GameEngine/Player/PlayerBaseData.cs
index 6d6beba..42f00c7 100644
--- a/Main/Core/GameEngine/Player/PlayerBaseData.cs
+++ b/Main/Core/GameEngine/Player/PlayerBaseData.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Cysharp.Threading.Tasks;
 
 public class PlayerBaseData
 {
@@ -12,7 +13,28 @@
     public uint ExpPoint;    //鎵╁厖缁忛獙鐐规暟锛堜嚎锛�
     public uint TotalExp;    //鎬荤粡楠�(灏忎簬浜块儴鍒�)
     public long curExp { get { return TotalExp + ExpPoint * Constants.ExpPointValue; } }
-    public uint FamilyId;    //瀹舵棌
+
+    uint m_FamilyId;
+    public uint FamilyId
+    {
+        get
+        {
+            return m_FamilyId;
+        }
+        set
+        {
+            var beforeFamilyId = m_FamilyId;
+            m_FamilyId = value;
+            if (beforeFamilyId == 0 && m_FamilyId != 0)
+            {
+                GuildManager.Instance.AfterEnterGuild().Forget();
+            }
+            else if (beforeFamilyId != 0 && m_FamilyId == 0)
+            {
+                GuildManager.Instance.AfterQuitGuild();
+            }
+        }
+    }
     public string FamilyName;    //瀹舵棌鍚嶇О
     public uint diamond;    //浠欑帀
     public uint bindDiamond;  //鐏电煶
diff --git a/Main/Core/GameEngine/Player/PlayerDatas.cs b/Main/Core/GameEngine/Player/PlayerDatas.cs
index 9302037..beb8f19 100644
--- a/Main/Core/GameEngine/Player/PlayerDatas.cs
+++ b/Main/Core/GameEngine/Player/PlayerDatas.cs
@@ -105,10 +105,7 @@
                 break;
             case PlayerDataType.Family:
                 baseData.FamilyId = value;
-                if (value == 0)
-                {
-                    GuildManager.Instance.ClearGuildWhenQuit();
-                }
+
                 // if (LocalSave.GetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID) == 0)
                 // {
                 //     SDKUtils.Instance.TraceEvent("joinalliance", "", false);
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA502_tagSCDonateCntInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA502_tagSCDonateCntInfo.cs
index 10c3219..811c65a 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA502_tagSCDonateCntInfo.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA502_tagSCDonateCntInfo.cs
@@ -1,11 +1,12 @@
-using UnityEngine;
-using System.Collections;
-
+using UnityEngine;
+using System.Collections;
+
 // A5 02 鎹愮尞娆℃暟淇℃伅 #tagSCDonateCntInfo
 
 public class DTCA502_tagSCDonateCntInfo : DtcBasic {
     public override void Done(GameNetPackBasic vNetPack) {
         base.Done(vNetPack);
         HA502_tagSCDonateCntInfo vNetData = vNetPack as HA502_tagSCDonateCntInfo;
+        GuildManager.Instance.UpdateDonateInfo(vNetData);
     }
 }
diff --git a/Main/System/Chat/ChatWin.cs b/Main/System/Chat/ChatWin.cs
index 2b61d04..dd55b49 100644
--- a/Main/System/Chat/ChatWin.cs
+++ b/Main/System/Chat/ChatWin.cs
@@ -218,7 +218,7 @@
             {
                 case ChatInfoType.Fairy:
                     {
-                        int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.Fairy).LimitLV;
+                        int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.Guild).LimitLV;
                         if (PlayerDatas.Instance.baseData.LV < limit)
                         {
                             ServerTipDetails.DisplayNormalTip(Language.Get("L1136", limit));
diff --git a/Main/System/Guild/GuildDonateCell.cs b/Main/System/Guild/GuildDonateCell.cs
new file mode 100644
index 0000000..e2f7781
--- /dev/null
+++ b/Main/System/Guild/GuildDonateCell.cs
@@ -0,0 +1,77 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+//鍏細鎹愯禒
+public class GuildDonateCell : MonoBehaviour
+{
+    [SerializeField] int donateType;
+    [SerializeField] Text nameText;
+    [SerializeField] Image nameBg;
+    [SerializeField] ItemCell[] itemCells;
+    [SerializeField] Text countText;
+    [SerializeField] Text moneyText;
+    [SerializeField] Image moneyIcon;
+    [SerializeField] Button donateBtn;
+    [SerializeField] Text donateText;
+
+    public void Display()
+    {
+        var config = FamilyDonateConfig.Get(donateType);
+        nameText.text = config.Name;
+        nameBg.SetSprite("DonateType" + donateType);
+        for (int i = 0; i < itemCells.Length; i++)
+        {
+            if (i < config.AwardItemList.Length)
+            {
+                itemCells[i].SetActive(true);
+                int itemID = config.AwardItemList[i][0];
+                itemCells[i].Init(new ItemCellModel(itemID, false, config.AwardItemList[i][1]));
+                itemCells[i].button.AddListener(() =>
+                {
+                    ItemTipUtility.Show(itemID);
+                });
+            }
+            else
+            {
+                itemCells[i].SetActive(false);
+            }
+        }
+
+        int donateCnt = 0;
+        if (GuildManager.Instance.donateCntList != null && GuildManager.Instance.donateCntList.Length > 0)
+        {
+            donateCnt = GuildManager.Instance.donateCntList[donateType - 1];
+        }
+        countText.text = Language.Get("Guild_65") + donateCnt + "/" + config.DailyCnt;
+
+
+        moneyText.text = config.MoneyValue.ToString();
+        moneyIcon.SetIconWithMoneyType(config.MoneyType);
+
+        if (donateCnt >= config.DailyCnt)
+        {
+            donateBtn.SetInteractable(false);
+            donateText.text = Language.Get("Guild_67");
+        }
+        else
+        {
+            donateBtn.SetInteractable(true);
+            donateText.text = Language.Get("Guild_66");
+            donateBtn.AddListener(Donate);
+        }
+
+    }
+
+    void Donate()
+    {
+        var config = FamilyDonateConfig.Get(donateType);
+        if (!UIHelper.CheckMoneyCount(config.MoneyType, config.MoneyValue, 2))
+        {
+            return;
+        }
+        var pack = new CA612_tagCMFamilyMoneyDonate();
+        pack.DonateType = (byte)donateType;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+}
diff --git a/Main/System/Guild/GuildDonateCell.cs.meta b/Main/System/Guild/GuildDonateCell.cs.meta
new file mode 100644
index 0000000..5417102
--- /dev/null
+++ b/Main/System/Guild/GuildDonateCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 893ac8f335bb7bb449f4693404144c6f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildDonateDetailCell.cs b/Main/System/Guild/GuildDonateDetailCell.cs
new file mode 100644
index 0000000..ee5718e
--- /dev/null
+++ b/Main/System/Guild/GuildDonateDetailCell.cs
@@ -0,0 +1,35 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鎹愯禒鎴愬憳璇︽儏
+/// </summary>
+public class GuildDonateDetailCell : CellView
+{
+    
+    [SerializeField] AvatarCell avatarCell;
+    [SerializeField] OfficialTitleCell titleCell;
+    [SerializeField] Text lvText;
+    [SerializeField] Text nameText;
+    [SerializeField] Text donateTodayCntText;
+    [SerializeField] Text totalDonateCntText;
+
+
+
+    public void Display(int index)
+    {
+        var playerID = PlayerDatas.Instance.fairyData.memberIDList[index];
+        var playerInfo = PlayerDatas.Instance.fairyData.GetMember(playerID);
+        nameText.text = playerInfo.Name;
+
+        avatarCell.InitUI(AvatarHelper.GetAvatarModel(0, playerInfo.Face, playerInfo.FacePic));
+        titleCell.InitUI(playerInfo.RealmLV, playerInfo.TitleID);
+        lvText.text = playerInfo.LV.ToString();
+
+
+
+    }
+
+}
\ No newline at end of file
diff --git a/Main/System/Guild/GuildDonateDetailCell.cs.meta b/Main/System/Guild/GuildDonateDetailCell.cs.meta
new file mode 100644
index 0000000..5845265
--- /dev/null
+++ b/Main/System/Guild/GuildDonateDetailCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e069026445990574982a4908325e3282
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildDonateDetailWin.cs b/Main/System/Guild/GuildDonateDetailWin.cs
new file mode 100644
index 0000000..1c3bdf2
--- /dev/null
+++ b/Main/System/Guild/GuildDonateDetailWin.cs
@@ -0,0 +1,30 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍏細鎹愯禒璇︽儏鐣岄潰:鎺掑簭鍚庡仛鎺掑悕鏄剧ず
+/// </summary>
+public class GuildDonateDetailWin : UIBase
+{
+    [SerializeField] ScrollerController scroller;
+    [SerializeField] Text myRankText;
+    [SerializeField] Text myTotalCountText;
+
+
+
+    protected override void OnPreOpen()
+    {
+        Display();
+    }
+
+    protected override void OnPreClose()
+    {
+    }
+
+    void Display()
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Guild/GuildDonateDetailWin.cs.meta b/Main/System/Guild/GuildDonateDetailWin.cs.meta
new file mode 100644
index 0000000..5147b09
--- /dev/null
+++ b/Main/System/Guild/GuildDonateDetailWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ad72ddf0c61dc1a45a3123a16caf119d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildDonateWin.cs b/Main/System/Guild/GuildDonateWin.cs
new file mode 100644
index 0000000..dd5f759
--- /dev/null
+++ b/Main/System/Guild/GuildDonateWin.cs
@@ -0,0 +1,48 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍏細鎹愯禒鐣岄潰
+/// </summary>
+public class GuildDonateWin : UIBase
+{
+    [SerializeField] GuildDonateCell[] donateCells;
+    [SerializeField] Button detailBtn;
+
+
+
+    protected override void InitComponent()
+    {
+        detailBtn.AddListener(() =>
+        {
+            // UIManager.Instance.OpenWindow<GuildDonateDetailWin>();
+        });
+    }
+
+    protected override void OnPreOpen()
+    {
+        GuildManager.Instance.DonateCntListEvent += DonateCntListEvent;
+        Display();
+    }
+
+    protected override void OnPreClose()
+    {
+        GuildManager.Instance.DonateCntListEvent -= DonateCntListEvent;
+    }
+
+    void Display()
+    {
+        for (int i = 0; i < donateCells.Length; i++)
+        {
+            donateCells[i].Display();
+        }
+    }
+
+    void DonateCntListEvent()
+    {
+        Display();
+    }
+
+}
\ No newline at end of file
diff --git a/Main/System/Guild/GuildDonateWin.cs.meta b/Main/System/Guild/GuildDonateWin.cs.meta
new file mode 100644
index 0000000..2f0a76e
--- /dev/null
+++ b/Main/System/Guild/GuildDonateWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9ccfafd7fa206b44fae987f55ce0da86
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildHallWin.cs b/Main/System/Guild/GuildHallWin.cs
index dde0d4e..fd1a187 100644
--- a/Main/System/Guild/GuildHallWin.cs
+++ b/Main/System/Guild/GuildHallWin.cs
@@ -56,7 +56,7 @@
 
         donateBtn.AddListener(() =>
         {
-            // UIManager.Instance.OpenWindow<GuildDonateWin>();
+            UIManager.Instance.OpenWindow<GuildDonateWin>();
         });
     }
 
diff --git a/Main/System/Guild/GuildManager.cs b/Main/System/Guild/GuildManager.cs
index f195061..e60323d 100644
--- a/Main/System/Guild/GuildManager.cs
+++ b/Main/System/Guild/GuildManager.cs
@@ -2,6 +2,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.Text;
+using Cysharp.Threading.Tasks;
 using LitJson;
 using UnityEngine;
 
@@ -28,20 +29,41 @@
         }
     }
 
+    public byte[] donateCntList;
+    public event Action DonateCntListEvent;
+    public event Action<bool> EnterOrQuitGuildEvent;   //杩涘叆鎴栭��鍑哄叕浼氫簨浠�
+
     public override void Init()
     {
         ParseConfig();
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
+        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
     }
     public override void Release()
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
+        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
     }
 
 
-    public void OnBeforePlayerDataInitialize()
+    void OnBeforePlayerDataInitialize()
     {
         ClearGuildData();
+    }
+
+    void OnPlayerLoginOk()
+    {
+        UpdateDonateRedPoint();
+    }
+    
+    void PlayerDataRefreshEvent(PlayerDataType type)
+    {
+        if(type == PlayerDataType.default33)
+        {
+            UpdateDonateRedPoint();
+        }
     }
 
     void ClearGuildData()
@@ -53,15 +75,25 @@
         PlayerDatas.Instance.fairyData.ClearData();
     }
     
-    public void ClearGuildWhenQuit()
+    //閫�鍑哄叕浼�
+    public void AfterQuitGuild()
     {
         //閫�鍑哄叕浼�
         ClearGuildData();
-
         //闇�瑕佽浆鍒癏omeWin鐣岄潰 涓斿叧闂叕浼氱浉鍏崇晫闈�(鐖跺瓙缁ф壙鍏抽棴)
         UIManager.Instance.GetUI<MainWin>()?.ClickFunc(0);
+
+        UpdateDonateRedPoint();
+        EnterOrQuitGuildEvent?.Invoke(false);
     }
 
+    public async UniTask AfterEnterGuild()
+    {
+        //杩欓噷杩樻病鏈夊叕浼氭暟鎹�, 鍚庣画鐨勫寘浼氭洿鏂板叕浼氭暟鎹�
+        await UniTask.Delay(100);
+        UpdateDonateRedPoint();
+        EnterOrQuitGuildEvent?.Invoke(true);
+    }
 
 
     #region 閰嶇疆
@@ -524,7 +556,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;
         }
@@ -674,6 +706,52 @@
 
     }
 
+    #region 鎹愯禒
+
+    public void UpdateDonateInfo(HA502_tagSCDonateCntInfo netPack)
+    {
+        donateCntList = netPack.DonateCntList;
+        DonateCntListEvent?.Invoke();
+        UpdateDonateRedPoint();
+    }
+    #endregion
+
+    #region 绾㈢偣
+    Redpoint hallRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.guildHallRedpointID);
+    Redpoint donateRedpoint = new Redpoint(MainRedDot.guildHallRedpointID, MainRedDot.MainGuildRedpoint * 100);
+
+    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;
+            }
+        }
+    }
+
+    #endregion
+
     #region 鍔犲瘑鏁板瓧
 
     //1. 灏嗘暟瀛楄ˉ鍏呭埌10浣嶏紝涓嶈冻琛�0
diff --git a/Main/System/Guild/GuildMemberCell.cs b/Main/System/Guild/GuildMemberCell.cs
index 320cc00..a36e17e 100644
--- a/Main/System/Guild/GuildMemberCell.cs
+++ b/Main/System/Guild/GuildMemberCell.cs
@@ -16,7 +16,6 @@
     [SerializeField] Image guildJobImg;
     [SerializeField] Text nameText;
     [SerializeField] Text fightPowerText;
-    [SerializeField] Button seePlayerBtn;
     [SerializeField] Text contribText;
     [SerializeField] Text loginTimeText;
 
@@ -47,10 +46,9 @@
 
         fightPowerText.text = UIHelper.ReplaceLargeArtNum(playerInfo.FightPower);
 
-        seePlayerBtn.AddListener(() =>
+        avatarCell.button.AddListener(() =>
         {
             OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerID);
-            GuildManager.Instance.memberOPIndex = -1;   //闄勫甫鍏抽棴鑱屼綅璋冩暣鎿嶄綔
         });
 
         contribText.text = playerInfo.ContribDay + "/" + playerInfo.ContribTotal;
diff --git a/Main/System/Guild/GuildMemberOPCell.cs b/Main/System/Guild/GuildMemberOPCell.cs
index 0ec4fcf..5d4cbbd 100644
--- a/Main/System/Guild/GuildMemberOPCell.cs
+++ b/Main/System/Guild/GuildMemberOPCell.cs
@@ -8,8 +8,6 @@
 /// </summary>
 public class GuildMemberOPCell : CellView
 {
-
-
     [SerializeField] Button kickBtn;
     [SerializeField] Button opearteJobBtn;
 
diff --git a/Main/System/Guild/GuildPreviewWin.cs b/Main/System/Guild/GuildPreviewWin.cs
index 6106d13..aae9466 100644
--- a/Main/System/Guild/GuildPreviewWin.cs
+++ b/Main/System/Guild/GuildPreviewWin.cs
@@ -22,7 +22,6 @@
     [SerializeField] Text guildJobText;
     [SerializeField] Text leaderNameText;
     [SerializeField] Text leaderFightPowerText;
-    [SerializeField] Button seePlayerBtn;
 
     [SerializeField] Button opearteBtn;
     [SerializeField] Text opearteBtnText;
@@ -46,7 +45,7 @@
             SysNotifyMgr.Instance.ShowTip("GuildSys8");
         });
 
-        seePlayerBtn.AddListener(() =>
+        leaderAvatar.button.AddListener(() =>
         {
             OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID);
         });
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index 1f37023..8040724 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -54,8 +54,8 @@
     public const int RedPoint_OfficialKey = 101;
 
 
-    #region 浠欑洘鍏敤绾㈢偣
-    public const int FAIRY_REDPOINT_KEY2 = 10701;
+    #region 浠欑洘绾㈢偣
+    public const int guildHallRedpointID = MainGuildRedpoint * 10;
     #endregion
 
 
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index fde5a01..6ae5d7b 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -607,7 +607,7 @@
     Rune = 170,                  //绗﹀嵃纰庣墖        170
     RealmPoint = 171,           //澧冪晫淇偧鐐�       171
     MagicEssence = 172,//榄旂簿 172
-    UnionLiven = 173, //浠欑洘娲昏穬浠�
+    UnionLiven = 173, // 鍏細璐$尞甯�
     FBHelpPoint = 174,       //鍓湰鍔╂垬绉垎  174
     PlayerPKState = 175, //鎴樻枟鐘舵��
     IsAttackBossState = 176,  //鏄惁鍦ㄦ墦Boss 1 鍦� 0 涓嶅湪
@@ -818,7 +818,7 @@
     Challenge = 2,//鎸戞垬
     Official = 3,//鍐呮斂
     Realm = 10, //澧冪晫 瀹樿亴
-    Fairy = 11,// 浠欑洘
+    Guild = 11,// 鍏細
     BlessLV = 12, //绁濈绛夌骇
     Store = 16,//鍟嗗煄
     HappyFindTreasure = 18,// 鑻遍泟鎷涘嫙
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index 8c204df..cc22283 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -1010,6 +1010,7 @@
                 }
             case 15:
                 {
+                    // 鍏細璐$尞甯�
                     return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.UnionLiven);
                     //return (ulong)ModelCenter.Instance.GetModel<StoreModel>().GetTCBPlayerData(PlayerDataType.UnionLiven);
                 }

--
Gitblit v1.8.0