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 +++++++++++++++
 Main/System/Guild/GuildHawkerCutCell.cs.meta                                                    |   11 
 Main/System/Guild/GuildHawkerNoCutCell.cs.meta                                                  |   11 
 Main/Utility/TimeUtility.cs                                                                     |   12 
 Main/System/Sound/SoundPlayer.cs                                                                |   30 +
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs.meta |   11 
 Main/SDK/ynmbxxjUtil.cs                                                                         |    2 
 Main/System/Guild/GuildHawkerWin.cs                                                             |  246 ++++++++++++++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs      |   12 
 Main/System/Guild/GuildHawkerNoCutWin.cs                                                        |   47 +++
 Main/System/Message/ImgAnalysis.cs                                                              |    7 
 Main/System/Guild/GuildHawkerCutCell.cs                                                         |   24 +
 Main/Utility/UIHelper.cs                                                                        |    8 
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                            |    1 
 Main/System/Guild/GuildHawkerNoCutCell.cs                                                       |   23 +
 Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs.meta           |   11 
 Main/System/Guild/GuildHawkerWin.cs.meta                                                        |   11 
 Main/System/Guild/GuildHawkerNoCutWin.cs.meta                                                   |   11 
 Main/System/Guild/GuildBaseWin.cs                                                               |   43 +++
 Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs                |   19 +
 Main/SDK/SDKUtils.cs                                                                            |    2 
 21 files changed, 729 insertions(+), 20 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs
new file mode 100644
index 0000000..c2d8b89
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 12 鐝嶅疂闃佷俊鎭� #tagMCFamilyZhenbaogeInfo
+
+public class DTCA512_tagMCFamilyZhenbaogeInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA512_tagMCFamilyZhenbaogeInfo vNetData = vNetPack as HA512_tagMCFamilyZhenbaogeInfo;
+        GuildManager.Instance.UpdateZhenbaogeInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs.meta
new file mode 100644
index 0000000..cb13d33
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA512_tagMCFamilyZhenbaogeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ec9f17e4edd25e341a241f6ad8cdf8f6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index 4456a79..7a7a29b 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -108,6 +108,7 @@
         Register(typeof(HA722_tagSCADInfoList), typeof(DTCA722_tagSCADInfoList));
         Register(typeof(H0320_tagFBEnd), typeof(DTC0320_tagFBEnd));
         Register(typeof(HA502_tagSCDonateCntInfo), typeof(DTCA502_tagSCDonateCntInfo));
+        Register(typeof(HA512_tagMCFamilyZhenbaogeInfo), typeof(DTCA512_tagMCFamilyZhenbaogeInfo));
         Register(typeof(HA513_tagMCFamilyActionInfo), typeof(DTCA513_tagMCFamilyActionInfo));
         Register(typeof(HA520_tagMCRoleFamilyInfo), typeof(DTCA520_tagMCRoleFamilyInfo));
         Register(typeof(HA521_tagMCFamilyChange), typeof(DTCA521_tagMCFamilyChange));
diff --git a/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs
new file mode 100644
index 0000000..89f6b1e
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 12 鐝嶅疂闃佷俊鎭� #tagMCFamilyZhenbaogeInfo
+
+public class HA512_tagMCFamilyZhenbaogeInfo : GameNetPackBasic {
+    public byte CutState;    // 浠婃棩鏄惁宸茬爫浠凤紝姝ょ姸鎬佷负鍏ㄥ眬鐘舵�侊紝涓庣洘Action鐮嶄环鐘舵�佷笉鍚�
+    public byte BuyState;    // 浠婃棩鏄惁宸茶喘涔帮紝姝ょ姸鎬佷负鍏ㄥ眬鐘舵�侊紝涓庣洘Action璐拱鐘舵�佷笉鍚�
+
+    public HA512_tagMCFamilyZhenbaogeInfo () {
+        _cmd = (ushort)0xA512;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out CutState, vBytes, NetDataType.BYTE);
+        TransBytes (out BuyState, vBytes, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs.meta
new file mode 100644
index 0000000..d485d61
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA512_tagMCFamilyZhenbaogeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 06bc06bc3506760409fd2a280d68e559
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/SDK/SDKUtils.cs b/Main/SDK/SDKUtils.cs
index e95ced0..5b80525 100644
--- a/Main/SDK/SDKUtils.cs
+++ b/Main/SDK/SDKUtils.cs
@@ -128,7 +128,7 @@
 
     public void Init()
     {
-        ynmbxxjUtil.Instance.Init();
+        ynmbxxjUtil.Instance.Init();    // sdk涓存椂鐢紝鍚庣画鏂板仛SDK鍚庡垹闄�
         Device = new DeviceInfo();
         string uid = LocalSave.GetString("Device_uniqueID");
         //Debug.Log(Math.Abs(System.Environment.TickCount));
diff --git a/Main/SDK/ynmbxxjUtil.cs b/Main/SDK/ynmbxxjUtil.cs
index 9c31875..1a8b98d 100644
--- a/Main/SDK/ynmbxxjUtil.cs
+++ b/Main/SDK/ynmbxxjUtil.cs
@@ -1,4 +1,4 @@
-锘�
+锘�// sdk涓存椂鐢紝鍚庣画鏂板仛SDK鍚庡垹闄�
 public class ynmbxxjUtil : SingletonMonobehaviour<ynmbxxjUtil>
 {
     public void HandleMsgWithSDK(string jsonString)
diff --git a/Main/System/Guild/GuildBaseWin.cs b/Main/System/Guild/GuildBaseWin.cs
index e42e6ef..5227648 100644
--- a/Main/System/Guild/GuildBaseWin.cs
+++ b/Main/System/Guild/GuildBaseWin.cs
@@ -9,6 +9,9 @@
 public class GuildBaseWin : UIBase
 {
     [SerializeField] Button guildBtn;
+    [SerializeField] Button guildHawkerBtn; //琛屽晢
+    [SerializeField] Text guildHawkerTimeText;
+    [SerializeField] Text guildHawkerInfo;  //澶囪揣
     [SerializeField] GuildEmblemCell emblemCell;
     [SerializeField] Text guildNameText;
     [SerializeField] Text guildMemberCountText;
@@ -24,11 +27,13 @@
         {
             UIManager.Instance.OpenWindow<GuildHallWin>();
         });
-        
+
         requestBtn.AddListener(() =>
         {
             // UIManager.Instance.OpenWindow<GuildRequestWin>();
         });
+        
+        guildHawkerBtn.AddListener(OpenHawker);
     }
 
 
@@ -36,21 +41,27 @@
     {
         if (PlayerDatas.Instance.fairyData.fairy == null)
             return;
-
+        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
 
         Display();
     }
 
     protected override void OnPreClose()
     {
+        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
     }
 
 
     void Display()
     {
         ShowGuildInfo();
+        ShowHawkerTime();
     }
 
+    void OnSecondEvent()
+    {
+        ShowHawkerTime();
+    }
 
     void ShowGuildInfo()
     {
@@ -59,4 +70,32 @@
         var config = FamilyConfig.Get(PlayerDatas.Instance.fairyData.fairy.FamilyLV);
         guildMemberCountText.text = PlayerDatas.Instance.fairyData.fairy.MemberCount + "/" + config.MemberMax;
     }
+
+    void OpenHawker()
+    {
+        if (TimeUtility.GetToTenClockSeconds() > 0)
+        {
+            SysNotifyMgr.Instance.ShowTip("GuildSys17");
+            return;
+        }
+        UIManager.Instance.OpenWindow<GuildHawkerWin>();
+    }
+
+    void ShowHawkerTime()
+    {
+        var toTenSeconds = TimeUtility.GetToTenClockSeconds();
+        if (toTenSeconds > 0)
+        {
+            guildHawkerTimeText.text = TimeUtility.SecondsToHMS(toTenSeconds);
+            guildHawkerInfo.SetActive(true);
+            var addStr = new string('.', (int)Time.time % 4);
+            guildHawkerInfo.text = Language.Get("Guild_72") + addStr;
+        }
+        else
+        {
+            guildHawkerTimeText.text = TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds);
+            guildHawkerInfo.SetActive(false);
+        }
+
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Guild/GuildHawkerCutCell.cs b/Main/System/Guild/GuildHawkerCutCell.cs
new file mode 100644
index 0000000..67a77e6
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerCutCell.cs
@@ -0,0 +1,24 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+public class GuildHawkerCutCell : CellView
+{
+    [SerializeField] Text nameText;
+    [SerializeField] Image moneyIcon;
+    [SerializeField] Text cutText;
+    [SerializeField] Text buyState;
+
+
+    public void Display(int index)
+    {
+        var info = GuildManager.Instance.familyZBGActions[GuildManager.Instance.sortPlayerCut[index]];
+        nameText.text = string.Format("{0}.{1}", index + 1, info.Name);
+        moneyIcon.SetIconWithMoneyType(GuildManager.Instance.zbgPriceType);
+        cutText.text = info.Value2.ToString();
+        buyState.SetActive(info.Value3 == 1);
+    }
+}
+
diff --git a/Main/System/Guild/GuildHawkerCutCell.cs.meta b/Main/System/Guild/GuildHawkerCutCell.cs.meta
new file mode 100644
index 0000000..5962efa
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerCutCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 147bae5514614244ea9d17fe6c138ae2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildHawkerNoCutCell.cs b/Main/System/Guild/GuildHawkerNoCutCell.cs
new file mode 100644
index 0000000..882838a
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerNoCutCell.cs
@@ -0,0 +1,23 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class GuildHawkerNoCutCell : CellView
+{
+    [SerializeField] Text nameText;
+    [SerializeField] Text timeText;
+
+
+
+
+    public void Display(int id)
+    {
+        var fairyMember = GuildManager.Instance.tmpNoCutMembers[id];
+        nameText.text = fairyMember.Name;
+        timeText.text = fairyMember.OffTime != 0 ? UIHelper.GetFadeTime((uint)fairyMember.OffTime) + Language.Get("L1026") : string.Empty;
+    
+    }
+    
+}
+
diff --git a/Main/System/Guild/GuildHawkerNoCutCell.cs.meta b/Main/System/Guild/GuildHawkerNoCutCell.cs.meta
new file mode 100644
index 0000000..b3f9076
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerNoCutCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b215a1842ddb2d042bea119716d15057
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildHawkerNoCutWin.cs b/Main/System/Guild/GuildHawkerNoCutWin.cs
new file mode 100644
index 0000000..9b0d03b
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerNoCutWin.cs
@@ -0,0 +1,47 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+public class GuildHawkerNoCutWin : UIBase
+{
+    [SerializeField] ScrollerController scroller;
+
+
+    protected override void OnPreOpen()
+    {
+        scroller.OnRefreshCell += OnRefreshCell;
+        GuildManager.Instance.CalcNoCutMembers();
+        CreateScroller();
+    }
+
+
+
+    protected override void OnPreClose()
+    {
+        scroller.OnRefreshCell -= OnRefreshCell;
+    }
+
+
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as GuildHawkerNoCutCell;
+        _cell.Display(cell.index);
+    }
+
+
+    void CreateScroller()
+    {
+        scroller.Refresh();
+        var keys = GuildManager.Instance.tmpNoCutMembers.Keys.ToList();
+        for (int i = 0; i < keys.Count; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, keys[i]);
+        }
+        scroller.Restart();
+    }
+
+
+}
diff --git a/Main/System/Guild/GuildHawkerNoCutWin.cs.meta b/Main/System/Guild/GuildHawkerNoCutWin.cs.meta
new file mode 100644
index 0000000..affa48b
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerNoCutWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce8023abd942fb2408e1d091c0c3317d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Guild/GuildHawkerWin.cs b/Main/System/Guild/GuildHawkerWin.cs
new file mode 100644
index 0000000..b7410ce
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerWin.cs
@@ -0,0 +1,246 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class GuildHawkerWin : UIBase
+{
+    [SerializeField] Text talkText;
+    [SerializeField] List<ItemCell> items = new List<ItemCell>();
+    [SerializeField] Text orgPrice;
+    [SerializeField] Image orgIcon;
+    [SerializeField] Text price;
+    [SerializeField] Image nowIcon;
+    [SerializeField] Text totalInfo;
+    [SerializeField] Button memberOnlineBtn;
+    [SerializeField] ScrollerController scroller;
+    [SerializeField] Button cutBtn;
+    [SerializeField] Text cutText;
+    [SerializeField] Text timeText;
+
+
+
+
+    protected override void InitComponent()
+    {
+
+        memberOnlineBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<GuildHawkerNoCutWin>();
+        });
+
+        cutBtn.AddListener(OnCut);
+    }
+
+    protected override void OnPreOpen()
+    {
+        GuildManager.Instance.UpdateFamilyActionEvent += OnFamilyActionInfoEvent;
+        scroller.OnRefreshCell += OnRefreshCell;
+        GuildManager.Instance.UpdateZhenbaogeEvent += OnPlayerZBGEvent;
+        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+        
+        Display();
+        CreateScroller();
+    }
+
+
+    protected override void OnOpen()
+    {
+        DisplayTalk();
+    }
+
+    protected override void OnPreClose()
+    {
+        GuildManager.Instance.UpdateFamilyActionEvent -= OnFamilyActionInfoEvent;
+        scroller.OnRefreshCell -= OnRefreshCell;
+        GuildManager.Instance.UpdateZhenbaogeEvent -= OnPlayerZBGEvent;
+        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
+    }
+
+    void OnSecondEvent()
+    {
+        timeText.text = Language.Get("Guild_74", TimeUtility.SecondsToShortDHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as GuildHawkerCutCell;
+        _cell.Display(cell.index);
+    }
+
+
+    void CreateScroller()
+    {
+        scroller.Refresh();
+        var keys = GuildManager.Instance.sortPlayerCut;
+        for (int i = 0; i < keys.Count; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        scroller.Restart();
+    }
+
+
+    void Display()
+    {
+        var awards = GuildManager.Instance.GetZBGItems();
+        for (int i = 0; i < items.Count; i++)
+        {
+            if (i < awards.Length)
+            {
+                items[i].SetActive(true);
+                int itemID = awards[i][0];
+                items[i].Init(new ItemCellModel(itemID, false, awards[i][1]));
+                items[i].button.AddListener(() => {
+                    ItemTipUtility.Show(itemID);
+                });
+            }
+            else
+            {
+                items[i].SetActive(false);
+            }
+        }
+
+        orgPrice.text = GuildManager.Instance.zbgOrgPriceValue.ToString();
+        orgIcon.SetIconWithMoneyType(GuildManager.Instance.zbgPriceType);
+        nowIcon.SetIconWithMoneyType(GuildManager.Instance.zbgPriceType);
+
+        DisplayFamilyCutInfo();
+        DisplayBtnState();
+        OnSecondEvent();
+    }
+
+    void DisplayFamilyCutInfo()
+    {
+        int cutPrice = 0;
+        if (GuildManager.Instance.familyZBGActions[1].Value3 > 0)
+        {
+            price.text = "-" + GuildManager.Instance.familyZBGActions[1].Value2;
+
+            cutPrice = GuildManager.Instance.zbgOrgPriceValue + (int)GuildManager.Instance.familyZBGActions[1].Value2;
+        }
+        else
+        {
+            price.text = GuildManager.Instance.familyZBGActions[1].Value2.ToString();
+            cutPrice = GuildManager.Instance.zbgOrgPriceValue - (int)GuildManager.Instance.familyZBGActions[1].Value2;
+        }
+
+
+        totalInfo.text = Language.Get("Guild_73", GuildManager.Instance.familyZBGActions.Count - 1, PlayerDatas.Instance.fairyData.fairy.MemberCount,
+            UIHelper.GetIconNameWithMoneyType(GuildManager.Instance.zbgPriceType), cutPrice);
+
+        orgIcon.SetActive(GuildManager.Instance.familyZBGActions.Count > 1);
+
+    }
+
+    void DisplayBtnState()
+    {
+        if (GuildManager.Instance.zhenbaogeCutState == 0)
+        {
+            cutText.text = Language.Get("Guild_76");
+            cutBtn.SetInteractable(true);
+        }
+        else if (GuildManager.Instance.zhenbaogeBuyState == 0)
+        {
+            cutText.text = Language.Get("L1134");
+            cutBtn.SetInteractable(true);
+        }
+        else
+        {
+            cutText.text = Language.Get("L1133");
+            cutBtn.SetInteractable(false);
+        }
+    }
+
+
+    void DisplayTalk()
+    {
+        talkText.text = Language.Get("GuildHawkerTalk" + GuildManager.Instance.GetTalkState());
+    }
+
+
+    private void OnDisable()
+    {
+        
+    }
+
+    private void OnFamilyActionInfoEvent(bool restart)
+    {
+        if (restart)
+        {
+            Display();
+        }
+        else
+        {
+            DisplayFamilyCutInfo();
+        }
+            
+        DisplayTalk();
+        if (GuildManager.Instance.sortPlayerCut.Count != scroller.GetNumberOfCells(scroller.m_Scorller))
+        {
+            CreateScroller();
+        }
+        else
+        { 
+            scroller.m_Scorller.RefreshActiveCellViews();
+        }
+
+        DisplayBtnState();
+    }
+
+    void OnCut()
+    {
+        //閫�鐩熺殑cd闄愬埗
+        if (GuildManager.Instance.needCheckCutCD && (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime) / 60 < GuildManager.Instance.zbgChangFamilyCD )
+        {
+            SysNotifyMgr.Instance.ShowTip("ZhenbaogeCut1", GuildManager.Instance.zbgChangFamilyCD - (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime) / 60);
+            return;
+        }
+        if (GuildManager.Instance.zhenbaogeCutState == 0)
+        {
+            GuildManager.Instance.OnZhenbaogeOP(0);
+        }
+        else if (GuildManager.Instance.zhenbaogeBuyState == 0)
+        {
+            if (PackManager.Instance.GetEmptyGridCount(PackType.Item) < items.Count)
+            {
+                SysNotifyMgr.Instance.ShowTip("GeRen_lhs_202580");
+                return;
+            }
+
+            if (GuildManager.Instance.familyZBGActions[1].Value3 == 0 && UIHelper.GetMoneyCnt(GuildManager.Instance.zbgPriceType) < GuildManager.Instance.familyZBGActions[1].Value2)
+            {
+                SysNotifyMgr.Instance.ShowTip("LackMoney", GuildManager.Instance.zbgPriceType);
+                return;
+            }
+
+            int cutPrice = 0;
+            if (GuildManager.Instance.familyZBGActions[1].Value3 > 0)
+            {
+                cutPrice = -(int)GuildManager.Instance.familyZBGActions[1].Value2;
+
+            }
+            else
+            {
+                cutPrice = (int)GuildManager.Instance.familyZBGActions[1].Value2;
+            }
+
+
+            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
+            Language.Get("L1135", GuildManager.Instance.zbgPriceType, cutPrice)+ Language.Get("Guild_71"), (bool isOK) =>
+                {
+                    if (isOK)
+                    {
+                        GuildManager.Instance.OnZhenbaogeOP(1);
+                    }
+                });
+            
+        }
+    }
+
+
+    void OnPlayerZBGEvent()
+    {
+        DisplayBtnState();
+    }
+}
diff --git a/Main/System/Guild/GuildHawkerWin.cs.meta b/Main/System/Guild/GuildHawkerWin.cs.meta
new file mode 100644
index 0000000..5fdb01e
--- /dev/null
+++ b/Main/System/Guild/GuildHawkerWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71edf82d8b7ae104caa808df3de6e4e2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
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
 
diff --git a/Main/System/Message/ImgAnalysis.cs b/Main/System/Message/ImgAnalysis.cs
index bd82e5b..05c8164 100644
--- a/Main/System/Message/ImgAnalysis.cs
+++ b/Main/System/Message/ImgAnalysis.cs
@@ -221,8 +221,11 @@
                     return;
                 }
             }
-            presentImgInfo.width = presentImgInfo.sprite.rect.width * presentImgInfo.scale;
-            presentImgInfo.height = presentImgInfo.sprite.rect.height * presentImgInfo.scale;
+            if (presentImgInfo.scale != 1f)
+            {
+                presentImgInfo.width = presentImgInfo.sprite.rect.width * presentImgInfo.scale;
+                presentImgInfo.height = presentImgInfo.sprite.rect.height * presentImgInfo.scale;
+            }
         }
     }
 
diff --git a/Main/System/Sound/SoundPlayer.cs b/Main/System/Sound/SoundPlayer.cs
index 3315f86..ad7e910 100644
--- a/Main/System/Sound/SoundPlayer.cs
+++ b/Main/System/Sound/SoundPlayer.cs
@@ -11,8 +11,18 @@
 
     static readonly List<int> commonUseAudioSet = new List<int>() { defaultClickPositiveAudio, defaultClickNegativeAudio, 3, 4 };
 
-    public static SoundPlayer Instance {
-        get; set;
+    static SoundPlayer m_Instance = null;
+    public static SoundPlayer Instance
+    {
+        get
+        {
+            if (m_Instance == null)
+            {
+                CreateSoundPlayer();
+            }
+            return m_Instance;
+        }
+
     }
 
     [SerializeField] AudioSource m_MusicAudioSource;
@@ -45,9 +55,9 @@
     public static void CreateSoundPlayer()
     {
         var gameObject = GameObject.Instantiate(BuiltInLoader.LoadPrefab("SoundPlayer"));
-        Instance = gameObject.GetComponent<SoundPlayer>();
-        Instance.name = "SoundPlayer";
-        Instance.SetActive(true);
+        m_Instance = gameObject.GetComponent<SoundPlayer>();
+        m_Instance.name = "SoundPlayer";
+        m_Instance.SetActive(true);
         DontDestroyOnLoad(gameObject);
     }
 
@@ -312,11 +322,11 @@
     //}
 
     //private void LateUpdate()
-    //{
-    //    if (CameraController.Instance != null && CameraController.Instance.CameraObject != null)
-    //    {
-    //        this.transform.position = CameraController.Instance.transform.position + new Vector3(0, 5, 0);
-    //        this.transform.rotation = CameraController.Instance.CameraObject.transform.rotation;
+    //{
+    //    if (CameraController.Instance != null && CameraController.Instance.CameraObject != null)
+    //    {
+    //        this.transform.position = CameraController.Instance.transform.position + new Vector3(0, 5, 0);
+    //        this.transform.rotation = CameraController.Instance.CameraObject.transform.rotation;
     //    }
     //}
 
diff --git a/Main/Utility/TimeUtility.cs b/Main/Utility/TimeUtility.cs
index 9504f09..5889fb3 100644
--- a/Main/Utility/TimeUtility.cs
+++ b/Main/Utility/TimeUtility.cs
@@ -252,6 +252,7 @@
         return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
     }
 
+
     //璇︾粏鏄剧ず
     //xx灏忔椂xx鍒哫X绉�
     //xx鍒哫X绉�
@@ -495,6 +496,17 @@
 
     }
 
+    // 鍒�10鐐硅繕瑕佸灏戠锛屽鏋滃凡缁忚繃浜�10鐐癸紝杩斿洖0
+    public static int GetToTenClockSeconds()
+    {
+        var now = ServerNow;
+        if (now.Hour < 10)
+        {
+            return (int)(ServerNow - new DateTime(now.Year, now.Month, now.Day, 10, 0, 0)).TotalSeconds;
+        }
+        return 0;
+    }
+
     //寮�鏈嶅ぉ缁撴潫鍊掕鏃讹紱鍗曚綅绉�
     public static int GetRemindTimeByOpenDay(int days)
     {
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index cc22283..724730b 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -83,7 +83,11 @@
 
     public static string GetIconNameWithMoneyType(int moneyType)
     {
-        if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
+        if (IconConfig.HasKey("MoneyType_" + moneyType))
+        {
+            return IconConfig.Get("MoneyType_" + moneyType).sprite;
+        }
+        else if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
         {
             return ItemConfig.Get(GeneralDefine.MoneyDisplayModel[moneyType]).IconKey;
         }
@@ -174,7 +178,7 @@
 
     }
     /// <summary>
-    /// 鑾峰彇娑堥�濈殑鏃堕棿
+    /// 鑾峰彇杩囧幓鐨勬椂闂�
     /// </summary>
     /// <param name="lastTime"></param>
     /// <returns></returns>

--
Gitblit v1.8.0