From 01638bd36dd973e2e925b3b41045b157f3e64d4e Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期三, 10 十月 2018 15:48:19 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 Core/GameEngine/Model/ConfigManager.cs             |    3 
 System/Store/Logic/BuyGuardTip.cs                  |   50 --
 System/Store/Logic/BuyWingsTip.cs                  |   51 --
 System/DailyQuest/DailyQuestData.cs                |   68 ++++
 System/OpenServerActivity/ImpactRankModel.cs       |    2 
 System/Store/Logic/BuyEquipTip.cs                  |   50 +-
 System/Store/BuyItemPopModel.cs                    |  300 +++++++++--------
 System/Store/Logic/BuyPetMatInfoWin.cs             |   45 -
 System/FairyAu/FairyGrabBossWin.cs                 |    2 
 System/FairyAu/FairyGrabBossNoticeWin.cs.meta      |   12 
 System/SystemSetting/SystemSetWin.cs               |    7 
 System/Store/Logic/BuyBoxInfoWin.cs                |   50 --
 System/DailyQuest/DayRemind.cs                     |    2 
 System/OpenServerActivity/OpenServerActivityWin.cs |   60 +++
 System/WindowJump/WindowJumpMgr.cs                 |    6 
 System/FairyAu/FairyGrabBossNoticeWin.cs           |  109 ++++++
 UI/Common/UI3DModelExhibition.cs                   |   25 +
 System/Store/Logic/BuyItemInfoWin.cs               |   56 +--
 System/FairyAu/FairyGrabBossModel.cs               |  104 +++++
 19 files changed, 648 insertions(+), 354 deletions(-)

diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index 29a4dcb..88efb72 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/Core/GameEngine/Model/ConfigManager.cs
@@ -36,13 +36,13 @@
     {
         StartSyncTask<PriorBundleConfig>(AssetPath.Resource);
         StartSyncTask<PriorLanguageConfig>(AssetPath.Resource);
-        StartSyncTask<LoginSeverListConfig>(AssetSource.refdataFromEditor ? AssetPath.ResourceOut : AssetPath.External);
     }
 
     List<ConfigTask> configTasks = new List<ConfigTask>();
 
     public IEnumerator Co_LoadConfigs()
     {
+        StartSyncTask<LoginSeverListConfig>(AssetSource.refdataFromEditor ? AssetPath.ResourceOut : AssetPath.External);
         AddAsyncTask<IconConfig>();
         AddAsyncTask<ItemConfig>();
         AddAsyncTask<SkillConfig>();
@@ -197,6 +197,7 @@
         AddAsyncTask<DungeonSpecialStateTimeConfig>();
         AddAsyncTask<DailyQuestSpecialOpenTimeConfig>();
         AddAsyncTask<WHYJRewardConfig>();
+
         while (!AllCompleted())
         {
             var completedCount = 0;
diff --git a/System/DailyQuest/DailyQuestData.cs b/System/DailyQuest/DailyQuestData.cs
index da10ba2..3da5b1e 100644
--- a/System/DailyQuest/DailyQuestData.cs
+++ b/System/DailyQuest/DailyQuestData.cs
@@ -334,6 +334,74 @@
 
     }
 
+    public int GetFirstOpenSurplusSeconds()
+    {
+        if (IsAfterFirstOpen())
+        {
+            return 0;
+        }
+        var openDayWeek = (int)TimeUtility.openServerDayOfWeek;
+        var dayIndex = TimeUtility.OpenDay + 1;
+        var maxDays = 15 - openDayWeek == 0 ? 7 : openDayWeek;
+        for (int i = dayIndex; i <= maxDays; i++)
+        {
+            if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(dayIndex))
+            {
+                var days = i - dayIndex;
+                var hourMinute = specialOpenTimes[openDayWeek][dayIndex][0];
+                var hour = TimeUtility.ServerNow.Hour;
+                var minute = TimeUtility.ServerNow.Minute;
+                var time = TimeUtility.ServerNow.AddDays(days);
+                time = new DateTime(time.Year, time.Month, time.Day, hourMinute.hourBegin, hourMinute.minuteBegin, 0);
+                var seconds = (int)(time - TimeUtility.ServerNow).TotalSeconds;
+                return Mathf.Max(0, seconds);
+            }
+        }
+        return 0;
+    }
+
+    public bool IsAfterFirstOpen()
+    {
+        var isSpecialDay = TimeUtility.OpenWeekCnt <= 1;
+        if (!isSpecialDay)
+        {
+            return true;
+        }
+        var openDayWeek = (int)TimeUtility.openServerDayOfWeek;
+        var dayIndex = TimeUtility.OpenDay + 1;
+        var maxDays = 15 - openDayWeek == 0 ? 7 : openDayWeek;
+        for (int i = 1; i <= maxDays; i++)
+        {
+            if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(dayIndex))
+            {
+                if (i < dayIndex)
+                {
+                    return true;
+                }
+                if (i == dayIndex)
+                {
+                    var hourMinute = specialOpenTimes[openDayWeek][dayIndex][0];
+                    var hour = TimeUtility.ServerNow.Hour;
+                    var minute = TimeUtility.ServerNow.Minute;
+                    if (hour < hourMinute.hourEnd ||
+                        (hour == hourMinute.hourEnd && minute < hourMinute.minuteEnd))
+                    {
+                        return false;
+                    }
+                    else
+                    {
+                        return true;
+                    }
+                }
+                if (i > dayIndex)
+                {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
     public bool ContainTimeNode(int week, int timeNode)
     {
         var openDayWeek = (int)TimeUtility.openServerDayOfWeek;
diff --git a/System/DailyQuest/DayRemind.cs b/System/DailyQuest/DayRemind.cs
index 59f3fc4..a18bf9d 100644
--- a/System/DailyQuest/DayRemind.cs
+++ b/System/DailyQuest/DayRemind.cs
@@ -46,6 +46,7 @@
     public const string TASK_SKILL_HOLE = "TaskSkillHole";
     public const string RUNE_SPECIAL_HOLE = "RuneSpecialHole";
     public const string LEAGUE_NOTICE_REDPOINT = "LeagueNoticeRedpoint";
+    public const string FAIRYGRABBOSS_NOTICE_REDPOINT = "FairyGrabBossRedpoint";
     public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
 
     public bool GetDayRemind(string _remindKey)
@@ -100,6 +101,7 @@
         SetDayRemind(TASK_SKILL_HOLE);
         SetDayRemind(RUNE_SPECIAL_HOLE);
         SetDayRemind(LEAGUE_NOTICE_REDPOINT);
+        SetDayRemind(FAIRYGRABBOSS_NOTICE_REDPOINT);
     }
 
     private void SetDayRemind(string _key)
diff --git a/System/FairyAu/FairyGrabBossModel.cs b/System/FairyAu/FairyGrabBossModel.cs
index 6b7a7ce..170bae3 100644
--- a/System/FairyAu/FairyGrabBossModel.cs
+++ b/System/FairyAu/FairyGrabBossModel.cs
@@ -5,14 +5,14 @@
 using UnityEngine;
 namespace Snxxz.UI
 {
-    public class FairyGrabBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
+    public class FairyGrabBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
     {
         public List<int> bosses { get; private set; }
         Dictionary<int, List<Item>> dropItemDict = new Dictionary<int, List<Item>>();
         Dictionary<int, Dictionary<int, FairyGrabBossInfo>> fairyGrabBossDict = new Dictionary<int, Dictionary<int, FairyGrabBossInfo>>();
         Dictionary<int, BossProgressInfo> bossProgressDict = new Dictionary<int, BossProgressInfo>();
 
-        public bool IsOpen
+        public bool IsActivityOpen
         {
             get
             {
@@ -76,6 +76,9 @@
         public int callMemberDuty { get; private set; }
         public int callMemberSeconds { get; private set; }
 
+        public int noticeShowPet { get; private set; }
+        public int noticeShowHorse { get; private set; }
+
         private bool serverInited = false;
         //private DateTime lastQueryProgressTime = DateTime.Now;
 
@@ -103,17 +106,22 @@
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
             SysNotifyMgr.Instance.sysNotifyEvent += SystemNotifyEvent;
             GlobalTimeEvent.Instance.secondEvent += SecondEvent;
+            TimeMgr.Instance.OnMinuteEvent += MinuteEvent;
+            OpenServerActivityCenter.Instance.Register(13, this);
         }
 
         public void OnBeforePlayerDataInitialize()
         {
             serverInited = false;
+            cacheNoticeOpen = false;
             bossAliveDict.Clear();
         }
 
         public void OnPlayerLoginOk()
         {
             serverInited = true;
+            cacheNoticeOpen = IsOpen;
+            UpdateNoticeRedpoint();
         }
 
         public override void UnInit()
@@ -126,6 +134,22 @@
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent;
             SysNotifyMgr.Instance.sysNotifyEvent -= SystemNotifyEvent;
             GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
+            TimeMgr.Instance.OnMinuteEvent -= MinuteEvent;
+        }
+
+        private void MinuteEvent()
+        {
+            if (serverInited)
+            {
+                if (cacheNoticeOpen != IsOpen)
+                {
+                    cacheNoticeOpen = !cacheNoticeOpen;
+                    if (onStateUpate != null)
+                    {
+                        onStateUpate((int)OpenServerActivityCenter.OSActivityType.FairyGrabBossNotice);
+                    }
+                }
+            }
         }
 
         private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType)
@@ -266,6 +290,11 @@
             if (_id == 139)
             {
                 RecheckGrabBoss();
+                if (onStateUpate != null)
+                {
+                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.FairyGrabBossNotice);
+                }
+                UpdateNoticeRedpoint();
             }
         }
 
@@ -294,6 +323,14 @@
             var config = Config.Instance.Get<FuncConfigConfig>("FairyCallMember");
             callMemberSeconds = int.Parse(config.Numerical1);
             callMemberDuty = int.Parse(config.Numerical2);
+            config = Config.Instance.Get<FuncConfigConfig>("FairyGrabBossShowModel");
+            noticeShowHorse = 305;
+            noticeShowPet = 50106305;
+            if (config != null)
+            {
+                noticeShowPet = int.Parse(config.Numerical1);
+                noticeShowHorse = int.Parse(config.Numerical2);
+            }
         }
 
         public bool TryGetDropItems(int bossId, out List<Item> dropItems)
@@ -533,7 +570,6 @@
 
         #region 鍙泦寮圭獥
         public bool helpCoolDown { get; set; }
-
         public List<FairyGrabBossHelp> fairyGrabBossHelps = new List<FairyGrabBossHelp>();
 
         public event Action fairyGrabBossHelpUpdate;
@@ -638,6 +674,68 @@
         }
         #endregion
 
+        #region 楠戝疇浜夊ず棰勫憡
+        public bool IsOpen
+        {
+            get
+            {
+                DailyQuestOpenTime dailyQuestOpenTime;
+                if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out dailyQuestOpenTime))
+                {
+                    return FuncOpen.Instance.IsFuncOpen(139) && !dailyQuestOpenTime.IsAfterFirstOpen();
+                }
+                return false;
+            }
+        }
+
+        public bool IsAdvance
+        {
+            get { return false; }
+        }
+
+        public bool priorityOpen
+        {
+            get { return false; }
+        }
+
+        bool cacheNoticeOpen { get; set; }
+
+        public event Action<int> onStateUpate;
+        public int GetFirstOpenSeconds()
+        {
+            int seconds = 0;
+            if (!InActivityTime)
+            {
+                DailyQuestOpenTime dailyQuestOpenTime;
+                if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out dailyQuestOpenTime))
+                {
+                    seconds = dailyQuestOpenTime.GetFirstOpenSurplusSeconds();
+                }
+            }
+            return seconds;
+        }
+
+        Redpoint fairyGrabBossNoticeRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20913);
+        void UpdateNoticeRedpoint()
+        {
+            fairyGrabBossNoticeRedpoint.state = RedPointState.None;
+            if (!DayRemind.Instance.GetDayRemind(DayRemind.FAIRYGRABBOSS_NOTICE_REDPOINT)
+                && IsOpen)
+            {
+                fairyGrabBossNoticeRedpoint.state = RedPointState.Simple;
+            }
+        }
+
+        public void SetViewFairyGrabBossNotice()
+        {
+            if (fairyGrabBossNoticeRedpoint.state == RedPointState.Simple)
+            {
+                DayRemind.Instance.SetDayRemind(DayRemind.FAIRYGRABBOSS_NOTICE_REDPOINT, true);
+                UpdateNoticeRedpoint();
+            }
+        }
+        #endregion
+
         public class FairyGrabBossInfo
         {
             public int npcId { get; private set; }
diff --git a/System/FairyAu/FairyGrabBossNoticeWin.cs b/System/FairyAu/FairyGrabBossNoticeWin.cs
new file mode 100644
index 0000000..d022018
--- /dev/null
+++ b/System/FairyAu/FairyGrabBossNoticeWin.cs
@@ -0,0 +1,109 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, October 09, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using TableConfig;
+namespace Snxxz.UI {
+
+    public class FairyGrabBossNoticeWin : Window
+    {
+        [SerializeField] Button m_Goto;
+        [SerializeField] RawImage m_Horse;
+        [SerializeField] RawImage m_Pet;
+        [SerializeField] Text m_SurplusTime;
+
+        FairyGrabBossModel model { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
+
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+            m_Goto.onClick.AddListener(Goto);
+        }
+
+        protected override void OnPreOpen()
+        {
+            GlobalTimeEvent.Instance.secondEvent += SecondEvent;
+            Display();
+            DisplayTime();
+            model.SetViewFairyGrabBossNotice();
+        }
+
+        protected override void OnAfterOpen()
+        {
+        }
+
+        protected override void OnPreClose()
+        {
+            GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
+            UI3DModelExhibition.Instance.StopShow();
+            UI3DModelExhibition.InstanceClone1.StopShow();
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+        private void Goto()
+        {
+            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.FairyGrabBoss);
+        }
+
+        void Display()
+        {
+            m_Horse.gameObject.SetActive(true);
+            m_Pet.gameObject.SetActive(true);
+            var npcConfig = Config.Instance.Get<NPCConfig>(model.noticeShowPet);
+            UI3DModelExhibition.Instance.ShowNPC(model.noticeShowPet, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_Pet);
+            var horseConfig = Config.Instance.Get<HorseConfig>(model.noticeShowHorse);
+            UI3DModelExhibition.InstanceClone1.ShowHourse(horseConfig.Model, m_Horse);
+            UI3DModelExhibition.Instance.interactable = false;
+            UI3DModelExhibition.InstanceClone1.interactable = false;
+        }
+
+        private void SecondEvent()
+        {
+            DisplayTime();
+        }
+
+        void DisplayTime()
+        {
+            var seconds = model.GetFirstOpenSeconds();
+            var isOpen = model.IsOpen;
+            if (seconds > 0)
+            {
+                if (!m_SurplusTime.gameObject.activeSelf)
+                {
+                    m_SurplusTime.gameObject.SetActive(true);
+                }
+                m_SurplusTime.text = Language.Get("FairyGrabBossTime", TimeUtility.SecondsToDHMSCHS(seconds));
+            }
+            else if (isOpen)
+            {
+                if (!m_SurplusTime.gameObject.activeSelf)
+                {
+                    m_SurplusTime.gameObject.SetActive(true);
+                }
+                m_SurplusTime.text = Language.Get("FairyGrabBossOpened");
+            }
+            else
+            {
+                m_SurplusTime.gameObject.SetActive(false);
+            }
+        }
+    }
+
+}
+
+
+
+
diff --git a/System/FairyAu/FairyGrabBossNoticeWin.cs.meta b/System/FairyAu/FairyGrabBossNoticeWin.cs.meta
new file mode 100644
index 0000000..c8d1381
--- /dev/null
+++ b/System/FairyAu/FairyGrabBossNoticeWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1ab2a47cddd6c5c45bd057f4cdc3df3a
+timeCreated: 1539083346
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/FairyAu/FairyGrabBossWin.cs b/System/FairyAu/FairyGrabBossWin.cs
index e82125d..72c7449 100644
--- a/System/FairyAu/FairyGrabBossWin.cs
+++ b/System/FairyAu/FairyGrabBossWin.cs
@@ -159,7 +159,7 @@
         {
             m_FairyName.text = string.Empty;
             m_NoneFairy.gameObject.SetActive(true);
-            if (!model.IsOpen)
+            if (!model.IsActivityOpen)
             {
                 return;
             }
diff --git a/System/OpenServerActivity/ImpactRankModel.cs b/System/OpenServerActivity/ImpactRankModel.cs
index 670d42e..8987ad0 100644
--- a/System/OpenServerActivity/ImpactRankModel.cs
+++ b/System/OpenServerActivity/ImpactRankModel.cs
@@ -784,6 +784,8 @@
             VipInvest,
             [Header("浠欑洘鑱旇禌棰勫憡")]
             FairyLeagueNotice,
+            [Header("楠戝疇浜夊ず棰勫憡")]
+            FairyGrabBossNotice,
         }
     }
 
diff --git a/System/OpenServerActivity/OpenServerActivityWin.cs b/System/OpenServerActivity/OpenServerActivityWin.cs
index e226a71..44aea99 100644
--- a/System/OpenServerActivity/OpenServerActivityWin.cs
+++ b/System/OpenServerActivity/OpenServerActivityWin.cs
@@ -30,6 +30,7 @@
             }
         }
         FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } }
+        FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
 
         List<int> openActivitys = new List<int>();
         List<int> priorityActivitys = new List<int>();
@@ -181,6 +182,23 @@
                 activityCell.title.text = TimeUtility.SecondsToHMS(seconds);
                 activityCell.title.gameObject.SetActive(seconds > 0);
             }
+            cell = m_ActivityCtrl.GetActiveCellView((int)OpenServerActivityCenter.OSActivityType.FairyGrabBossNotice);
+            if (cell != null)
+            {
+                var activityCell = cell as OpenServerActivityCell;
+                var seconds = fairyGrabBossModel.GetFirstOpenSeconds();
+                bool isOpen = fairyGrabBossModel.IsOpen;
+                activityCell.title.gameObject.SetActive(seconds > 0 || isOpen);
+                activityCell.title.color = UIHelper.GetUIColor(TextColType.Green, true);
+                if (seconds > 0)
+                {
+                    activityCell.title.text = TimeUtility.SecondsToHMS(seconds);
+                }
+                else if (isOpen)
+                {
+                    activityCell.title.text = Language.Get("FairyGrabBossOpened");
+                }
+            }
         }
 
         void CheckAlreadyOpen()
@@ -232,6 +250,8 @@
             });
             bool customIcon = !string.IsNullOrEmpty(customActivity.titleIcon);
 
+            _cell.title.color = UIHelper.GetUIColor(TextColType.NavyBrown);
+
             OperationBase operationBase;
             switch (_cell.index)
             {
@@ -241,7 +261,6 @@
                         _cell.title.text = Language.Get("ExpActivity_Text5", (operationBase as OperationMultiExp).GetMultipleCHS());
                     }
                     _cell.title.gameObject.SetActive(!customIcon);
-                    _cell.title.color = UIHelper.GetUIColor(TextColType.NavyBrown);
                     break;
                 case 8:
                     if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipRealmPoint, out operationBase))
@@ -249,21 +268,37 @@
                         _cell.title.text = Language.Get("MultipleRealmPoint", Language.Get(StringUtility.Contact("Num_CHS_", (operationBase as OperationMultipleRealmPoint).multiplePractice)));
                     }
                     _cell.title.gameObject.SetActive(!customIcon);
-                    _cell.title.color = UIHelper.GetUIColor(TextColType.NavyBrown);
                     break;
                 case 12:
-                    var seconds = fairyLeagueModel.GetBeforeFirstLeagueTime();
-                    _cell.title.gameObject.SetActive(seconds > 0);
-                    if (seconds > 0)
                     {
-                        _cell.title.text = TimeUtility.SecondsToHMS(seconds);
+                        var seconds = fairyLeagueModel.GetBeforeFirstLeagueTime();
+                        _cell.title.gameObject.SetActive(seconds > 0);
+                        if (seconds > 0)
+                        {
+                            _cell.title.text = TimeUtility.SecondsToHMS(seconds);
+                            _cell.title.color = UIHelper.GetUIColor(TextColType.Green, true);
+                        }
+                    }
+                    break;
+                case 13:
+                    {
+                        var seconds = fairyGrabBossModel.GetFirstOpenSeconds();
+                        bool isOpen = fairyGrabBossModel.IsOpen;
+                        _cell.title.gameObject.SetActive(seconds > 0 || isOpen);
                         _cell.title.color = UIHelper.GetUIColor(TextColType.Green, true);
+                        if (seconds > 0)
+                        {
+                            _cell.title.text = TimeUtility.SecondsToHMS(seconds);
+                        }
+                        else if (isOpen)
+                        {
+                            _cell.title.text = Language.Get("FairyGrabBossOpened");
+                        }
                     }
                     break;
                 default:
                     _cell.title.gameObject.SetActive(!customIcon);
                     _cell.title.text = Language.Get(StringUtility.Contact("OSActivityTitle_", _cell.index));
-                    _cell.title.color = UIHelper.GetUIColor(TextColType.NavyBrown);
                     break;
             }
             _cell.order = _cell.index;
@@ -529,6 +564,16 @@
                         WindowCenter.Instance.Open<FairyLeagueNoticeWin>(true);
                     }
                     break;
+                case 13:
+                    if (windowState == WindowState.Opened)
+                    {
+                        WindowCenter.Instance.OpenWithoutAnimation<FairyGrabBossNoticeWin>();
+                    }
+                    else
+                    {
+                        WindowCenter.Instance.Open<FairyGrabBossNoticeWin>(true);
+                    }
+                    break;
             }
         }
 
@@ -563,6 +608,7 @@
             WindowCenter.Instance.CloseImmediately<FairyJadeInvestmentWin>();
             WindowCenter.Instance.CloseImmediately<VipInvestWin>();
             WindowCenter.Instance.CloseImmediately<FairyLeagueNoticeWin>();
+            WindowCenter.Instance.CloseImmediately<FairyGrabBossNoticeWin>();
         }
 
         private int Compare(int order_x, int order_y)
diff --git a/System/Store/BuyItemPopModel.cs b/System/Store/BuyItemPopModel.cs
index b467bb9..3692ca8 100644
--- a/System/Store/BuyItemPopModel.cs
+++ b/System/Store/BuyItemPopModel.cs
@@ -1,140 +1,162 @@
-锘縰sing Snxxz.UI;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using TableConfig;
-
-public class BuyItemPopModel : Singleton<BuyItemPopModel>
-{
-    public StoreConfig storeConfig { get; private set; }
-
-    public void SetModel(int shopId)
-    {
-        storeConfig = Config.Instance.Get<StoreConfig>(shopId);
-    }
-
-    public Dictionary<int, int> vipBuyCntDict = new Dictionary<int, int>();
-    public bool CheckIsVipBuy(StoreConfig model,out int curVipIndex,out int nextVipIndex)
-    {
-        vipBuyCntDict.Clear();
-        curVipIndex = -1;
-        nextVipIndex = -1;
-        bool isVipBuy = false;
-        if (model == null) return isVipBuy;
-
-        if (model.VIPLV.Length < 2)
-        {
-            if (model.VIPLV[0] != 0)
-            {
-                isVipBuy = true;
-            }
-            else
-            {
-                isVipBuy = false;
-            }
-        }
-        else
-        {
-            isVipBuy = true;
-        }
-
-        if(isVipBuy)
-        {
-            for (int i = model.VIPLV.Length-1; i > -1; i--)
-            {
-                vipBuyCntDict.Add(model.VIPLV[i], model.PurchaseNumber[i]);
-            }
-            int playerVip = PlayerDatas.Instance.baseData.VIPLv;
-            for (int i = model.VIPLV.Length - 1; i > -1; i--)
-            {
-                if (model.VIPLV[i] > playerVip)
-                {
-                    nextVipIndex = i;
-                }
-                else if(model.VIPLV[i] <= playerVip)
-                {
-                    curVipIndex = i;
-                    break;
-                }
-            }
-
-        }
-
-        return isVipBuy;
-    }
-
-    public bool CheckIsLimitBuyCnt(StoreConfig model,out int canBuyCnt,out int addBuyCnt)
-    {
-        canBuyCnt = 0;
-        addBuyCnt = 0;
-        if (model == null) return false;
-
-        int[] canBuyNums = model.PurchaseNumber;
-        int curVipIndex = -1;
-        int nexVipIndex = -1;
-        bool isVipBuy = CheckIsVipBuy(model, out curVipIndex, out nexVipIndex);
-        if (isVipBuy)
-        {
-            if (curVipIndex != -1)
-            {
-                canBuyCnt = canBuyNums[curVipIndex];
-            }
-
-            if (nexVipIndex != -1)
-            {
-                addBuyCnt = canBuyNums[nexVipIndex] - canBuyCnt;
-            }
-            return true;
-        }
-        else
-        {
-            if (canBuyNums[0] != 0)
-            {
-                canBuyCnt = canBuyNums[0];
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-        }
-    }
-
-    public int GetCurBuyCnt(int buyCnt,int canBuyCnt,bool isVipBuy,out bool IsReachUpper)
-    {
-        int count = 0;
-        IsReachUpper = false;
-        if(canBuyCnt == 0)
+锘縰sing Snxxz.UI;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using TableConfig;
+
+public class BuyItemPopModel : Singleton<BuyItemPopModel>
+{
+    public StoreConfig storeConfig { get; private set; }
+
+    public void SetModel(int shopId)
+    {
+        storeConfig = Config.Instance.Get<StoreConfig>(shopId);
+    }
+
+    public Dictionary<int, int> vipBuyCntDict = new Dictionary<int, int>();
+    public bool CheckIsVipBuy(StoreConfig model,out int curVipIndex,out int nextVipIndex)
+    {
+        vipBuyCntDict.Clear();
+        curVipIndex = -1;
+        nextVipIndex = -1;
+        bool isVipBuy = false;
+        if (model == null) return isVipBuy;
+
+        if (model.VIPLV.Length < 2)
         {
-            IsReachUpper = true;
-            count = 0;
-        }
-        else
-        {
-            if(buyCnt <= canBuyCnt)
-            {
-                count = buyCnt;
-            }
-            else
-            {
-                count = canBuyCnt;
-                IsReachUpper = true;
-            }
-        }
-
-        if(count < 0)
-        {
-            count = 0;
-        }
-        return count;
-    }
-
-    public int GetBuyPrice(StoreConfig model,int buyCnt)
-    {
-        if (model == null) return 0;
-
-        int buyItemPrice = model.MoneyNumber * buyCnt;
-        return buyItemPrice;
-    }
-}
+            if (model.VIPLV[0] != 0)
+            {
+                isVipBuy = true;
+            }
+            else
+            {
+                isVipBuy = false;
+            }
+        }
+        else
+        {
+            isVipBuy = true;
+        }
+
+        if(isVipBuy)
+        {
+            for (int i = model.VIPLV.Length-1; i > -1; i--)
+            {
+                vipBuyCntDict.Add(model.VIPLV[i], model.PurchaseNumber[i]);
+            }
+            int playerVip = PlayerDatas.Instance.baseData.VIPLv;
+            for (int i = model.VIPLV.Length - 1; i > -1; i--)
+            {
+                if (model.VIPLV[i] > playerVip)
+                {
+                    nextVipIndex = i;
+                }
+                else if(model.VIPLV[i] <= playerVip)
+                {
+                    curVipIndex = i;
+                    break;
+                }
+            }
+
+        }
+
+        return isVipBuy;
+    }
+
+    public bool CheckIsLimitBuyCnt(StoreConfig model,out int canBuyCnt,out int addBuyCnt)
+    {
+        canBuyCnt = 0;
+        addBuyCnt = 0;
+        if (model == null) return false;
+
+        int[] canBuyNums = model.PurchaseNumber;
+        int curVipIndex = -1;
+        int nexVipIndex = -1;
+        bool isVipBuy = CheckIsVipBuy(model, out curVipIndex, out nexVipIndex);
+        if (isVipBuy)
+        {
+            if (curVipIndex != -1)
+            {
+                canBuyCnt = canBuyNums[curVipIndex];
+            }
+
+            if (nexVipIndex != -1)
+            {
+                addBuyCnt = canBuyNums[nexVipIndex] - canBuyCnt;
+            }
+            return true;
+        }
+        else
+        {
+            if (canBuyNums[0] != 0)
+            {
+                canBuyCnt = canBuyNums[0];
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    public int GetCurBuyCnt(int buyCnt,int remainBuyCnt,out bool IsReachUpper)
+    {
+        int count = 0;
+        IsReachUpper = false;
+        if(remainBuyCnt == 0)
+        {
+            IsReachUpper = true;
+            count = 0;
+        }
+        else
+        {
+            if(buyCnt <= remainBuyCnt)
+            {
+                count = buyCnt;
+            }
+            else
+            {
+                count = remainBuyCnt;
+                IsReachUpper = true;
+            }
+        }
+
+        if(count < 0)
+        {
+            count = 0;
+        }
+        return count;
+    }
+
+    public int GetRemainBuyCnt(int canBuyCnt,BuyShopItemLimit shopItemLimit,bool isVipBuy)
+    {
+        int haveBuyCnt = 0;
+        if (shopItemLimit != null)
+        {
+            haveBuyCnt = shopItemLimit.BuyCnt;
+        }
+
+        if (canBuyCnt <= 0 && !isVipBuy)
+        {
+            canBuyCnt = 9999;
+        }
+        int remainCnt = canBuyCnt - haveBuyCnt;
+        if (remainCnt >= 0)
+        {
+            return remainCnt;
+        }
+        else
+        {
+            return 0;
+        }
+    }
+    public int GetBuyPrice(StoreConfig model,int buyCnt)
+    {
+        if (model == null) return 0;
+
+        int buyItemPrice = model.MoneyNumber * buyCnt;
+        return buyItemPrice;
+    }
+}
diff --git a/System/Store/Logic/BuyBoxInfoWin.cs b/System/Store/Logic/BuyBoxInfoWin.cs
index 3ba8b58..5e333ed 100644
--- a/System/Store/Logic/BuyBoxInfoWin.cs
+++ b/System/Store/Logic/BuyBoxInfoWin.cs
@@ -336,16 +336,7 @@
             int addBuyCnt = 0;
             bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig,out canBuyCnt,out addBuyCnt);
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(1, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
-            if (itemTipsModel.curAttrData.itemConfig.PackCount > 1)
-            {
-                numberGo.gameObject.SetActive(true);
-            }
-            else
-            {
-                numberGo.gameObject.SetActive(false);
-            }
-
+            buyCnt = buyItem.GetCurBuyCnt(1, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             if(isVipBuy)
             {
                 if(nextVipIndex != -1)
@@ -365,7 +356,7 @@
                 else
                 {
                     buyBtn.gameObject.SetActive(false);
-                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper);
+                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, out isReachUpper);
                 }
             }
             else
@@ -402,15 +393,24 @@
 
             if (_price <= 0)
             {
-                numberGo.gameObject.SetActive(false);
                 moneyRect.gameObject.SetActive(false);
                 buyBtnText.text = Language.Get("MailReceive");
             }
             else
             {
-                numberGo.gameObject.SetActive(true);
                 moneyRect.gameObject.SetActive(true);
                 buyBtnText.text = Language.Get("ItemHandle_buy");
+            }
+
+            if (_price <= 0 || itemTipsModel.curAttrData.itemConfig.PackCount < 2)
+            {
+                numberGo.gameObject.SetActive(false);
+              
+            }
+            else
+            {
+                numberGo.gameObject.SetActive(true);
+               
             }
         }
         #region 鐐瑰嚮浜嬩欢
@@ -419,28 +419,10 @@
             numKeyboard.gameObject.SetActive(true);
         }
 
-        private int GetRemainBuyCnt()
-        {
-            int haveBuyCnt = 0;
-            if (shopItemLimit != null)
-            {
-                haveBuyCnt = shopItemLimit.BuyCnt;
-            }
-            int remainCnt = canBuyCnt - haveBuyCnt;
-            if (remainCnt >= 0)
-            {
-                return remainCnt;
-            }
-            else
-            {
-                return 0;
-            }
-        }
-
         private void OnClickNum()
         {
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value),GetRemainBuyCnt(), isVipBuy,out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy),out isReachUpper);
             RefreshBuyPrice(buyCnt);
             numKeyboard.Value = buyCnt.ToString();
             if (isReachUpper)
@@ -462,7 +444,7 @@
         {
             buyCnt += 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             if (isReachUpper)
@@ -475,7 +457,7 @@
         {
             buyCnt -= 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy,out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy),out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
         }
diff --git a/System/Store/Logic/BuyEquipTip.cs b/System/Store/Logic/BuyEquipTip.cs
index 38be9af..e024b51 100644
--- a/System/Store/Logic/BuyEquipTip.cs
+++ b/System/Store/Logic/BuyEquipTip.cs
@@ -690,16 +690,7 @@
             int addBuyCnt = 0;
             bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig, out canBuyCnt, out addBuyCnt);
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(1, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
-            if (itemAttrData.itemConfig.PackCount > 1)
-            {
-                _numberGo.gameObject.SetActive(true);
-            }
-            else
-            {
-                _numberGo.gameObject.SetActive(false);
-            }
-
+            buyCnt = buyItem.GetCurBuyCnt(1, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             if (isVipBuy)
             {
                 if (nextVipIndex != -1)
@@ -719,7 +710,7 @@
                 else
                 {
                     btnGroup.gameObject.SetActive(false);
-                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper);
+                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, out isReachUpper);
                 }
             }
             else
@@ -797,15 +788,24 @@
 
             if (_price <= 0)
             {
-                _numberGo.gameObject.SetActive(false);
                 moneyRect.gameObject.SetActive(false);
                 buyBtnText.text = Language.Get("MailReceive");
             }
             else
             {
-                _numberGo.gameObject.SetActive(true);
                 moneyRect.gameObject.SetActive(true);
                 buyBtnText.text = Language.Get("ItemHandle_buy");
+            }
+
+            if (_price <= 0 || itemAttrData.itemConfig.PackCount < 2)
+            {
+                _numberGo.gameObject.SetActive(false);
+               
+            }
+            else
+            {
+                _numberGo.gameObject.SetActive(true);
+              
             }
         }
 
@@ -814,27 +814,11 @@
         {
             numKeyboard.gameObject.SetActive(true);
         }
-        private int GetRemainBuyCnt()
-        {
-            int haveBuyCnt = 0;
-            if (shopItemLimit != null)
-            {
-                haveBuyCnt = shopItemLimit.BuyCnt;
-            }
-            int remainCnt = canBuyCnt - haveBuyCnt;
-            if (remainCnt >= 0)
-            {
-                return remainCnt;
-            }
-            else
-            {
-                return 0;
-            }
-        }
+       
         private void OnClickNum()
         {
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             RefreshBuyPrice(buyCnt);
             numKeyboard.Value = buyCnt.ToString();
             if (isReachUpper)
@@ -857,7 +841,7 @@
         {
             buyCnt += 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             m_storeModel.SetBuyCnt(buyCnt);
@@ -872,7 +856,7 @@
         {
             buyCnt -= 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             m_storeModel.SetBuyCnt(buyCnt);
diff --git a/System/Store/Logic/BuyGuardTip.cs b/System/Store/Logic/BuyGuardTip.cs
index 437884b..33fe5a2 100644
--- a/System/Store/Logic/BuyGuardTip.cs
+++ b/System/Store/Logic/BuyGuardTip.cs
@@ -398,16 +398,7 @@
             int addBuyCnt = 0;
             bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig, out canBuyCnt, out addBuyCnt);
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(1, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
-            if (itemAttrData.itemConfig.PackCount > 1)
-            {
-                _numberGo.gameObject.SetActive(true);
-            }
-            else
-            {
-                _numberGo.gameObject.SetActive(false);
-            }
-
+            buyCnt = buyItem.GetCurBuyCnt(1, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit,isVipBuy), out isReachUpper);
             if (isVipBuy)
             {
                 if (nextVipIndex != -1)
@@ -427,7 +418,7 @@
                 else
                 {
                     buyBtn.gameObject.SetActive(false);
-                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper);
+                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, out isReachUpper);
                 }
             }
             else
@@ -474,15 +465,24 @@
 
             if (_price <= 0)
             {
-                _numberGo.gameObject.SetActive(false);
                 moneyRect.gameObject.SetActive(false);
                 buyBtnText.text = Language.Get("MailReceive");
             }
             else
             {
-                _numberGo.gameObject.SetActive(true);
                 moneyRect.gameObject.SetActive(true);
                 buyBtnText.text = Language.Get("ItemHandle_buy");
+            }
+
+            if (_price <= 0 || itemAttrData.itemConfig.PackCount < 2)
+            {
+                _numberGo.gameObject.SetActive(false);
+              
+            }
+            else
+            {
+                _numberGo.gameObject.SetActive(true);
+              
             }
         }
         #region 鐐瑰嚮浜嬩欢
@@ -491,28 +491,10 @@
             numKeyboard.gameObject.SetActive(true);
         }
 
-        private int GetRemainBuyCnt()
-        {
-            int haveBuyCnt = 0;
-            if (shopItemLimit != null)
-            {
-                haveBuyCnt = shopItemLimit.BuyCnt;
-            }
-            int remainCnt = canBuyCnt - haveBuyCnt;
-            if (remainCnt >= 0)
-            {
-                return remainCnt;
-            }
-            else
-            {
-                return 0;
-            }
-        }
-
         private void OnClickNum()
         {
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             RefreshBuyPrice(buyCnt);
             numKeyboard.Value = buyCnt.ToString();
             if (isReachUpper)
@@ -535,7 +517,7 @@
         {
             buyCnt += 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             if (isReachUpper)
@@ -549,7 +531,7 @@
         {
             buyCnt -= 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
 
diff --git a/System/Store/Logic/BuyItemInfoWin.cs b/System/Store/Logic/BuyItemInfoWin.cs
index cca5a60..cbd06f1 100644
--- a/System/Store/Logic/BuyItemInfoWin.cs
+++ b/System/Store/Logic/BuyItemInfoWin.cs
@@ -326,16 +326,8 @@
             int addBuyCnt = 0;
             bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig,out canBuyCnt,out addBuyCnt);
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(1, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
-            if (itemTipsModel.curAttrData.itemConfig.PackCount > 1)
-            {
-                numberGo.gameObject.SetActive(true);
-            }
-            else
-            {
-                numberGo.gameObject.SetActive(false);
-            }
-
+            buyCnt = buyItem.GetCurBuyCnt(1,buyItem.GetRemainBuyCnt(canBuyCnt,shopItemLimit, isVipBuy), out isReachUpper);
+          
             buyBtn.gameObject.SetActive(true);
 
             if (isVipBuy)
@@ -357,7 +349,7 @@
                 else
                 {
                     buyBtn.gameObject.SetActive(false);
-                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper);
+                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, out isReachUpper);
                 }
             }
             else
@@ -433,39 +425,31 @@
                 buyPriceText.text = UIHelper.GetTextColorByItemColor(TextColType.Green, _price.ToString());
             }
 
-            if(_price <= 0)
+            if (_price <= 0)
             {
-                numberGo.gameObject.SetActive(false);
                 moneyRect.gameObject.SetActive(false);
                 buyBtnText.text = Language.Get("MailReceive");
             }
             else
             {
-                numberGo.gameObject.SetActive(true);
-                moneyRect.gameObject.SetActive(true);
                 buyBtnText.text = Language.Get("ItemHandle_buy");
+                moneyRect.gameObject.SetActive(true);
+            }
+
+            if (_price <= 0 || itemTipsModel.curAttrData.itemConfig.PackCount < 2)
+            {
+                numberGo.gameObject.SetActive(false);
+             
+            }
+            else
+            {
+                numberGo.gameObject.SetActive(true);
+              
             }
 
         }
         #region 鐐瑰嚮浜嬩欢
-        private int GetRemainBuyCnt()
-        {
-            int haveBuyCnt = 0;
-            if(shopItemLimit != null)
-            {
-                haveBuyCnt = shopItemLimit.BuyCnt;
-            }
-            int remainCnt = canBuyCnt - haveBuyCnt;
-            if(remainCnt >= 0)
-            {
-                return remainCnt;
-            }
-            else
-            {
-                return 0;
-            }
-        }
-
+      
         private void OnClickCountBtn()
         {
             numKeyboard.gameObject.SetActive(true);
@@ -474,7 +458,7 @@
         private void OnClickNum()
         {
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value),buyItem.GetRemainBuyCnt(canBuyCnt,shopItemLimit, isVipBuy), out isReachUpper);
             RefreshBuyPrice(buyCnt);
             numKeyboard.Value = buyCnt.ToString();
             if (isReachUpper)
@@ -496,7 +480,7 @@
         {
             bool isReachUpper = false;
             buyCnt += 1;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt,shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             if (isReachUpper || buyCnt == 0)
@@ -509,7 +493,7 @@
         {
             bool isReachUpper = false;
             buyCnt -= 1;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt,buyItem.GetRemainBuyCnt(canBuyCnt,shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
         }
diff --git a/System/Store/Logic/BuyPetMatInfoWin.cs b/System/Store/Logic/BuyPetMatInfoWin.cs
index 0204427..c0eb98d 100644
--- a/System/Store/Logic/BuyPetMatInfoWin.cs
+++ b/System/Store/Logic/BuyPetMatInfoWin.cs
@@ -307,16 +307,7 @@
             int addBuyCnt = 0;
             bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig,out canBuyCnt,out addBuyCnt);
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(1, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
-            if (itemTipsModel.curAttrData.itemConfig.PackCount > 1)
-            {
-                numberGo.gameObject.SetActive(true);
-            }
-            else
-            {
-                numberGo.gameObject.SetActive(false);
-            }
-
+            buyCnt = buyItem.GetCurBuyCnt(1, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyBtn.gameObject.SetActive(true);
 
             if (isVipBuy)
@@ -338,7 +329,7 @@
                 else
                 {
                     buyBtn.gameObject.SetActive(false);
-                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper);
+                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, out isReachUpper);
                 }
             }
             else
@@ -416,36 +407,28 @@
 
             if (_price <= 0)
             {
-                numberGo.gameObject.SetActive(false);
                 moneyRect.gameObject.SetActive(false);
                 buyBtnText.text = Language.Get("MailReceive");
             }
             else
             {
-                numberGo.gameObject.SetActive(true);
-                moneyRect.gameObject.SetActive(true);
                 buyBtnText.text = Language.Get("ItemHandle_buy");
+                moneyRect.gameObject.SetActive(true);
             }
-        }
-        #region 鐐瑰嚮浜嬩欢
-        private int GetRemainBuyCnt()
-        {
-            int haveBuyCnt = 0;
-            if(shopItemLimit != null)
+
+            if (_price <= 0 || itemTipsModel.curAttrData.itemConfig.PackCount < 2)
             {
-                haveBuyCnt = shopItemLimit.BuyCnt;
-            }
-            int remainCnt = canBuyCnt - haveBuyCnt;
-            if(remainCnt >= 0)
-            {
-                return remainCnt;
+                numberGo.gameObject.SetActive(false);
+             
             }
             else
             {
-                return 0;
+                numberGo.gameObject.SetActive(true);
+             
             }
         }
-
+        #region 鐐瑰嚮浜嬩欢
+      
         private void OnClickCountBtn()
         {
             numKeyboard.gameObject.SetActive(true);
@@ -454,7 +437,7 @@
         private void OnClickNum()
         {
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value),GetRemainBuyCnt(), isVipBuy,out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy),out isReachUpper);
             RefreshBuyPrice(buyCnt);
             numKeyboard.Value = buyCnt.ToString();
             if (isReachUpper)
@@ -476,7 +459,7 @@
         {
             buyCnt += 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt,GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             if (isReachUpper)
@@ -489,7 +472,7 @@
         {
             buyCnt -= 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy,out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy),out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
         }
diff --git a/System/Store/Logic/BuyWingsTip.cs b/System/Store/Logic/BuyWingsTip.cs
index d8bbc29..31acd96 100644
--- a/System/Store/Logic/BuyWingsTip.cs
+++ b/System/Store/Logic/BuyWingsTip.cs
@@ -361,16 +361,7 @@
             int addBuyCnt = 0;
             bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig, out canBuyCnt, out addBuyCnt);
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(1, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
-            if (itemAttrData.itemConfig.PackCount > 1)
-            {
-                numberGo.gameObject.SetActive(true);
-            }
-            else
-            {
-                numberGo.gameObject.SetActive(false);
-            }
-
+            buyCnt = buyItem.GetCurBuyCnt(1, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             if (isVipBuy)
             {
                 if (nextVipIndex != -1)
@@ -390,7 +381,7 @@
                 else
                 {
                     buyBtn.gameObject.SetActive(false);
-                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper);
+                    buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, out isReachUpper);
                 }
             }
             else
@@ -433,18 +424,26 @@
             {
                 buyPriceText.text = UIHelper.GetTextColorByItemColor(TextColType.Green, _price.ToString());
             }
-
+            
             if (_price <= 0)
             {
-                numberGo.gameObject.SetActive(false);
                 moneyRect.gameObject.SetActive(false);
                 buyBtnText.text = Language.Get("MailReceive");
             }
             else
             {
-                numberGo.gameObject.SetActive(true);
                 moneyRect.gameObject.SetActive(true);
                 buyBtnText.text = Language.Get("ItemHandle_buy");
+            }
+
+            if(_price <= 0 || itemAttrData.itemConfig.PackCount < 2)
+            {
+                numberGo.gameObject.SetActive(false);
+            }
+            else
+            {
+                numberGo.gameObject.SetActive(true);
+              
             }
         }
         #region 鐐瑰嚮浜嬩欢
@@ -453,28 +452,10 @@
             numKeyboard.gameObject.SetActive(true);
         }
 
-        private int GetRemainBuyCnt()
-        {
-            int haveBuyCnt = 0;
-            if (shopItemLimit != null)
-            {
-                haveBuyCnt = shopItemLimit.BuyCnt;
-            }
-            int remainCnt = canBuyCnt - haveBuyCnt;
-            if (remainCnt >= 0)
-            {
-                return remainCnt;
-            }
-            else
-            {
-                return 0;
-            }
-        }
-
         private void OnClickNum()
         {
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value), buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             RefreshBuyPrice(buyCnt);
             numKeyboard.Value = buyCnt.ToString();
             if (isReachUpper)
@@ -496,7 +477,7 @@
         {
             buyCnt += 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
             if (isReachUpper)
@@ -509,7 +490,7 @@
         {
             buyCnt -= 1;
             bool isReachUpper = false;
-            buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper);
+            buyCnt = buyItem.GetCurBuyCnt(buyCnt, buyItem.GetRemainBuyCnt(canBuyCnt, shopItemLimit, isVipBuy), out isReachUpper);
             buyCountText.text = buyCnt.ToString();
             RefreshBuyPrice(buyCnt);
 
diff --git a/System/SystemSetting/SystemSetWin.cs b/System/SystemSetting/SystemSetWin.cs
index b8f2f60..10524fd 100644
--- a/System/SystemSetting/SystemSetWin.cs
+++ b/System/SystemSetting/SystemSetWin.cs
@@ -24,6 +24,7 @@
         [SerializeField] Text m_SyncPlayerCount;
 
         [SerializeField] Button m_SwitchAccountBtn;
+        [SerializeField] Button m_SwitchServer;
         [SerializeField] Text m_SwitchAccountTitle;
         [SerializeField] Button m_LockScreenBtn;
         [SerializeField] Button m_ServiceBulletinsBtn;
@@ -58,6 +59,7 @@
             m_SyncPlayerSlider.AddListener(OnPlayerSyncCountChange);
 
             m_SwitchAccountBtn.AddListener(ClickSwitchAccountBtn);
+            m_SwitchServer.SetListener(ClickSwitchServerButton);
             m_LockScreenBtn.AddListener(ClickLockScreen);
             m_CopyBtn.AddListener(ClickCopyBtn);
             m_AntiAddition.AddListener(AntiAdditction);
@@ -249,6 +251,11 @@
             }
         }
 
+        private void ClickSwitchServerButton()
+        {
+            GameNetSystem.Instance.LoginOut();
+        }
+
         private void ClickLockScreen()
         {
             if (!WindowJumpMgr.Instance.IsJumpState)
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index 031cc2e..8131b6d 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -524,6 +524,10 @@
             case JumpUIType.CeremonyOutof:
                 SetJumpLogic<FairylandCeremonyWin>(_tagWinSearchModel.TABID);
                 break;
+            case JumpUIType.DogzFunc1Type1:
+            case JumpUIType.DogzFunc1Type2:
+                SetJumpLogic<DogzWin>(_tagWinSearchModel.TABID);
+                break;
             case JumpUIType.FaBaoSoul_BenYuan:
             case JumpUIType.FaBaoSoul_FengMo:
             case JumpUIType.FaBaoSoul_Strength:
@@ -1368,6 +1372,8 @@
     CeremonyFire = 245, //浠欑晫鐩涘吀鐑熻姳鐙傛鐣岄潰
     CeremonyPeopleToHi = 246, //浠欑晫鐩涘吀鍏ㄦ皯鏉ュ棬鐣岄潰
     CeremonyOutof = 247, //浠欑晫鐩涘吀缁濈増闄嶄复鐣岄潰
+    DogzFunc1Type1 = 248, //绁炲吔鐣岄潰
+    DogzFunc1Type2 = 249, //绁炲吔鐣岄潰
     DhszTs = 1001,//瀹氭捣绁為拡鍔熸硶鎻愬崌鐣岄潰
     HyqTs = 1002,//鐨撴湀鏋姛娉曟彁鍗囩晫闈�
     GyzTs = 1003,//楝肩墮鍒冨姛娉曟彁鍗囩晫闈�
diff --git a/UI/Common/UI3DModelExhibition.cs b/UI/Common/UI3DModelExhibition.cs
index c9b41bf..c7ada7d 100644
--- a/UI/Common/UI3DModelExhibition.cs
+++ b/UI/Common/UI3DModelExhibition.cs
@@ -65,6 +65,19 @@
 
         public static UI3DModelExhibition Instance { get; private set; }
 
+        static UI3DModelExhibition m_InstanceClone1 = null;
+        public static UI3DModelExhibition InstanceClone1
+        {
+            get
+            {
+                if (m_InstanceClone1 == null)
+                {
+                    CreateCloneStage();
+                }
+                return m_InstanceClone1;
+            }
+        }
+
         public static void CreateStage()
         {
             var prefab = Resources.Load<GameObject>("UI/Prefabs/UI3DModelExhibitionStage");
@@ -77,6 +90,18 @@
             DontDestroyOnLoad(gameObject);
         }
 
+        static void CreateCloneStage()
+        {
+            var prefab = Resources.Load<GameObject>("UI/Prefabs/UI3DModelExhibitionStage");
+            var gameObject = GameObject.Instantiate(prefab);
+            m_InstanceClone1 = gameObject.GetComponent<UI3DModelExhibition>();
+            m_InstanceClone1.transform.position = new Vector3(2000, 4000, 5000);
+            m_InstanceClone1.name = "UI3DModelExhibitionStage(clone1)";
+            m_InstanceClone1.gameObject.SetActive(true);
+            m_InstanceClone1.m_ShowCamera.enabled = false;
+            DontDestroyOnLoad(gameObject);
+        }
+
         public void ShowLoginPlayer(RawImage _rawImage, int _job)
         {
             var clothesItemId = 0;

--
Gitblit v1.8.0