From cfe2a2d5bc6fe9a85488542597d4f73dddbfeee8 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期日, 26 十月 2025 14:54:36 +0800
Subject: [PATCH] 285 【公会】公会行商(砍价)

---
 Main/System/Guild/GuildManager.cs |  207 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 205 insertions(+), 2 deletions(-)

diff --git a/Main/System/Guild/GuildManager.cs b/Main/System/Guild/GuildManager.cs
index e60323d..23369b2 100644
--- a/Main/System/Guild/GuildManager.cs
+++ b/Main/System/Guild/GuildManager.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 using Cysharp.Threading.Tasks;
 using LitJson;
@@ -33,6 +34,7 @@
     public event Action DonateCntListEvent;
     public event Action<bool> EnterOrQuitGuildEvent;   //杩涘叆鎴栭��鍑哄叕浼氫簨浠�
 
+
     public override void Init()
     {
         ParseConfig();
@@ -56,6 +58,7 @@
     void OnPlayerLoginOk()
     {
         UpdateDonateRedPoint();
+        QueryZBGFamilyInfo();
     }
     
     void PlayerDataRefreshEvent(PlayerDataType type)
@@ -83,15 +86,24 @@
         //闇�瑕佽浆鍒癏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();
         EnterOrQuitGuildEvent?.Invoke(true);
     }
 
@@ -123,6 +135,27 @@
     public int renameFairyNameCD;
     public int renameFairyNameCost;
     public int renameFairyNameMoneyType;
+
+
+    
+
+    //鐝嶅疂闃�(琛屽晢)
+    public int zhenbaogeCutState = 0;
+    public int zhenbaogeBuyState = 0;
+    public bool needCheckCutCD = false;
+    public event Action UpdateZhenbaogeEvent;
+    public bool isQueryZBGYet = false;
+    public float lastZBGStartTime = 0; //杩囧ぉ鍒锋柊鐢�
+    public const int ZBGFamilyActionType = 16;
+    //{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>();
+
 
     void ParseConfig()
     {
@@ -156,6 +189,11 @@
         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);
     }
 
 
@@ -384,6 +422,12 @@
     #region  鍏細鑷畾涔夎褰�
     public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
     {
+        if (PlayerDatas.Instance.fairyData == null ||
+            PlayerDatas.Instance.fairyData.fairy == null ||
+            PlayerDatas.Instance.fairyData.fairy.FamilyID != _package.FamilyID)
+        {
+            return;
+        }
 
         if (!familyActions.ContainsKey((int)_package.FamilyID))
         {
@@ -391,6 +435,9 @@
         }
 
         familyActions[(int)_package.FamilyID][_package.ActionType] = _package.FamilyActionList;
+
+        UpdateHawkerAction(_package);
+
         FamilyActionInfoEvent?.Invoke((int)_package.FamilyID, _package.ActionType);
     }
 
@@ -414,7 +461,7 @@
     public void QueryFamilyAction(int familyID, int actionType)
     {
         var pack = new CA617_tagCMQueryFamilyAction();
-        pack.FamilyID = (ushort)familyID;
+        pack.FamilyID = (uint)familyID;
         pack.ActionType = (byte)actionType;
         GameNetSystem.Instance.SendInfo(pack);
     }
@@ -716,9 +763,143 @@
     }
     #endregion
 
+    #region 鐝嶅疂闃�
+        
+
+    public void UpdateZhenbaogeInfo(HA512_tagMCFamilyZhenbaogeInfo netPack)
+    {
+        //鐮嶄环鐘舵�侊細浠欑洘閲岃褰曞凡鐮嶄环鎵嶆槸鐪熺殑宸茬爫浠风姸鎬侊紝灏佸寘涓殑鐮嶄环鐘舵�佺敤浜庡垽鏂璫d闂撮殧浣跨敤
+        needCheckCutCD = netPack.CutState == 1;
+        zhenbaogeBuyState = netPack.BuyState;
+        UpdateZhenbaogeEvent?.Invoke();
+        UpdateZBGRedpoint();
+    }
+
+
+
+
+    //鐧诲綍鍚庨娆℃墦寮�鏌ヨ锛屾崲鏂颁粰鐩熸煡璇�
+    public void QueryZBGFamilyInfo()
+    {
+        if (isQueryZBGYet)
+            return;
+
+        QueryFamilyAction((int)PlayerDatas.Instance.baseData.FamilyId, 16);
+
+        isQueryZBGYet = true;
+    }
+
+
+
+    //鏇存柊鐮嶄环淇℃伅
+    public void UpdateHawkerAction(HA513_tagMCFamilyActionInfo vNetData)
+    {
+        if (vNetData.ActionType != ZBGFamilyActionType)
+        {
+            return;
+        }
+        bool restart = false;
+        if (vNetData.FamilyActionList.Length == 1 && vNetData.FamilyActionList[0].Value1 == 1)
+        {
+            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();
+    }
+
+    //鐮嶄环浜烘暟
+    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 hallRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.guildHallRedpointID);
-    Redpoint donateRedpoint = new Redpoint(MainRedDot.guildHallRedpointID, MainRedDot.MainGuildRedpoint * 100);
+    Redpoint donateRedpoint = new Redpoint(MainRedDot.guildHallRedpointID, MainRedDot.guildHallRedpointID * 10);
+    //鐝嶅疂闃�(琛屽晢)
+    Redpoint zbgRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.MainGuildRedpoint * 100 + 1);
 
     void UpdateDonateRedPoint()
     {
@@ -749,6 +930,28 @@
             }
         }
     }
+    
+    public void UpdateZBGRedpoint()
+    {
+        zbgRedpoint.state = RedPointState.None;
+
+        if (!PlayerDatas.Instance.fairyData.HasFairy)
+        {
+            return;
+        }
+
+        if (zhenbaogeCutState == 0)
+        {
+            zbgRedpoint.state = RedPointState.Simple;
+        }
+        else if (zhenbaogeBuyState == 0)
+        {
+            if (familyZBGActions[1].Value3 > 0)
+            {
+                zbgRedpoint.state = RedPointState.Simple;
+            }
+        }
+    }
 
     #endregion
 

--
Gitblit v1.8.0