From b7961088385a401c6fdba03b1573a6fef2a66011 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期四, 25 十月 2018 15:56:08 +0800
Subject: [PATCH] 4318 【前端】【1.2】超值礼包拆分成精彩活动的3个礼包

---
 System/DailyQuest/DayRemind.cs                                              |    2 
 Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA16_tagMCSuperGiftInfo.cs |    6 
 System/OpenServerActivity/OpenServerActivityWin.cs                          |  287 +++++++++++--------------
 System/WindowJump/WindowJumpMgr.cs                                          |    8 
 System/OpenServerActivity/OpenServerActivityCell.cs                         |    4 
 System/OpenServerActivity/OSGiftBehaviour.cs                                |    2 
 System/OpenServerActivity/OSGiftModel.cs                                    |  234 ++++++++++++---------
 System/OpenServerActivity/OpenServerGiftWin.cs                              |  109 +++------
 8 files changed, 306 insertions(+), 346 deletions(-)

diff --git a/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA16_tagMCSuperGiftInfo.cs b/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA16_tagMCSuperGiftInfo.cs
index dd03839..5ec6ae2 100644
--- a/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA16_tagMCSuperGiftInfo.cs
+++ b/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA16_tagMCSuperGiftInfo.cs
@@ -4,16 +4,14 @@
 // AA 16 通知超值礼包信息 #tagMCSuperGiftInfo

 

 public class HAA16_tagMCSuperGiftInfo : GameNetPackBasic {

-    public uint GiftID;    //商品ID

-    public string EndtDate;    // 结束日期 y-m-d

+    public uint StartTime;

 

     public HAA16_tagMCSuperGiftInfo () {

         _cmd = (ushort)0xAA16;

     }

 

     public override void ReadFromBytes (byte[] vBytes) {

-        TransBytes (out GiftID, vBytes, NetDataType.DWORD);

-        TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10);

+        TransBytes (out StartTime, vBytes, NetDataType.DWORD);

     }

 

 }

diff --git a/System/DailyQuest/DayRemind.cs b/System/DailyQuest/DayRemind.cs
index a18bf9d..25ee591 100644
--- a/System/DailyQuest/DayRemind.cs
+++ b/System/DailyQuest/DayRemind.cs
@@ -42,7 +42,6 @@
     public const string POTENTIAL_NO_NOTIFY = "PotentialNoNotify";
     public const string FLASHSALE_REDPOINT = "FlashSale_Redpoint";
     public const string OSTIMEGIFT_REDPOINT = "OSTimeGift_Redpoint";
-    public const string OSGIFT_REDPOINT = "OSGitf_Redpoint";
     public const string TASK_SKILL_HOLE = "TaskSkillHole";
     public const string RUNE_SPECIAL_HOLE = "RuneSpecialHole";
     public const string LEAGUE_NOTICE_REDPOINT = "LeagueNoticeRedpoint";
@@ -97,7 +96,6 @@
         SetDayRemind(POTENTIAL_NO_NOTIFY);
         SetDayRemind(FLASHSALE_REDPOINT);
         SetDayRemind(OSTIMEGIFT_REDPOINT);
-        SetDayRemind(OSGIFT_REDPOINT);
         SetDayRemind(TASK_SKILL_HOLE);
         SetDayRemind(RUNE_SPECIAL_HOLE);
         SetDayRemind(LEAGUE_NOTICE_REDPOINT);
diff --git a/System/OpenServerActivity/OSGiftBehaviour.cs b/System/OpenServerActivity/OSGiftBehaviour.cs
index 42dac9b..ab48c3f 100644
--- a/System/OpenServerActivity/OSGiftBehaviour.cs
+++ b/System/OpenServerActivity/OSGiftBehaviour.cs
@@ -166,7 +166,7 @@
                     return;
                 case StoreFunc.OSGift:
                     {
-                        if (giftModel.IsGiftOverdue(_storeConfig.ID))
+                        if (!giftModel.IsGiftExist(_storeConfig.ID))
                         {
                             SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                             return;
diff --git a/System/OpenServerActivity/OSGiftModel.cs b/System/OpenServerActivity/OSGiftModel.cs
index 03adb7f..8300872 100644
--- a/System/OpenServerActivity/OSGiftModel.cs
+++ b/System/OpenServerActivity/OSGiftModel.cs
@@ -9,9 +9,8 @@
     {
         public override void Init()
         {
-            PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
+            ParseConfig();
             storeModel.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent;
-            vipModel.firstChargeRewardEvent += FirstChargeRewardEvent;
             OpenServerActivityCenter.Instance.Register(6, this);
         }
 
@@ -20,9 +19,13 @@
 
         }
 
+        public void OnBeforePlayerDataInitialize()
+        {
+            startSeconds = 0;
+        }
+
         public void OnPlayerLoginOk()
         {
-            activate = CheckActivate();
             if (onStateUpate != null)
             {
                 onStateUpate(6);
@@ -31,25 +34,15 @@
         }
 
         public event Action<int> onStateUpate;
-        public event Action timeLimitUpdate;
+        public event Action onSelectUpdate;
 
-        public bool activate { get; private set; }
-
-        StoreModel storeModel
-        {
-            get
-            {
-                return ModelCenter.Instance.GetModel<StoreModel>();
-            }
-        }
-
-        VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
+        StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
 
         public bool IsOpen
         {
             get
             {
-                return CheckActivate();
+                return IsExist();
             }
         }
 
@@ -57,25 +50,16 @@
         {
             get
             {
-                return OSGiftRedpoint.state == RedPointState.Simple;
-            }
-        }
-
-        private void RefreshBuyShopLimitEvent()
-        {
-            bool _activate = CheckActivate();
-            if (activate != _activate)
-            {
-                activate = _activate;
-                if (onStateUpate != null)
+                for (int i = 0; i < redpoints.Count; i++)
                 {
-                    onStateUpate(6);
+                    if (redpoints[i].state == RedPointState.Simple)
+                    {
+                        return true;
+                    }
                 }
-                UpdateRedpoint();
+                return false;
             }
         }
-
-        public int timeOverdueGiftId { get; private set; }
 
         public bool IsAdvance
         {
@@ -85,80 +69,94 @@
             }
         }
 
-        public DateTime overDueTime = DateTime.Now;
+        int m_SelectIndex = 0;
+        public int selectIndex
+        {
+            get { return m_SelectIndex; }
+            set
+            {
+                if (value != m_SelectIndex)
+                {
+                    m_SelectIndex = value;
+                    if (onSelectUpdate != null)
+                    {
+                        onSelectUpdate();
+                    }
+                }
+                m_SelectIndex = value;
+            }
+        }
+
+        public int jumpGiftId { get; set; }
+
+        public List<SuperValueGift> gifts { get; private set; }
+        public List<int> alreadyOpens { get; private set; }
+        void ParseConfig()
+        {
+            gifts = new List<SuperValueGift>();
+            alreadyOpens = new List<int>();
+            var config = Config.Instance.Get<FuncConfigConfig>("SuperGiftTimeList");
+            var array = LitJson.JsonMapper.ToObject<int[][]>(config.Numerical1);
+            for (int i = 0; i < array.Length; i++)
+            {
+                gifts.Add(new SuperValueGift()
+                {
+                    giftId = array[i][0],
+                    openDays = array[i][1],
+                });
+            }
+
+            for (int i = 0; i < gifts.Count; i++)
+            {
+                redpoints.Add(new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20906 * 100 + i));
+            }
+        }
+
+        private void RefreshBuyShopLimitEvent()
+        {
+            UpdateRedpoint();
+        }
+
+        public uint startSeconds { get; private set; }
         public void UpdateTime(HAA16_tagMCSuperGiftInfo package)
         {
-            timeOverdueGiftId = (int)package.GiftID;
-            overDueTime = ParseOverdueTime(package.EndtDate);
-            bool _activate = CheckActivate();
-            if (activate != _activate)
+            startSeconds = package.StartTime;
+            if (onStateUpate != null)
             {
-                activate = _activate;
-                if (onStateUpate != null)
-                {
-                    onStateUpate(6);
-                }
-            }
-            if (timeLimitUpdate != null)
-            {
-                timeLimitUpdate();
+                onStateUpate(6);
             }
             UpdateRedpoint();
         }
 
-        DateTime ParseOverdueTime(string _date)
+        public bool IsExist()
         {
-            var array = _date.Split('-');
-            var year = int.Parse(array[0]);
-            var month = int.Parse(array[1]);
-            var day = int.Parse(array[2]);
-            var time = new DateTime(year, month, day, 0, 0, 0);
-            return time.AddDays(1);
-        }
-
-        private void FirstChargeRewardEvent()
-        {
-            bool _activate = CheckActivate();
-            if (activate != _activate)
+            for (int i = 0; i < gifts.Count; i++)
             {
-                activate = _activate;
-                if (onStateUpate != null)
-                {
-                    onStateUpate(6);
-                }
-            }
-            UpdateRedpoint();
-        }
-
-        public bool CheckActivate()
-        {
-            if (PlayerDatas.Instance.baseData.coinPointTotal == 0
-                || !ModelCenter.Instance.GetModel<VipModel>().firstChargeRewardGet)
-            {
-                return false;
-            }
-            List<StoreConfig> _list = null;
-            StoreConfig.TryGetStoreConfigs((int)StoreFunc.OSGift,out _list);
-            for (int i = 0; i < _list.Count; i++)
-            {
-                if (IsGiftOverdue(_list[i].ID))
+                if (!IsGiftExist(gifts[i].giftId))
                 {
                     continue;
                 }
-                var _limit = storeModel.GetBuyShopLimit((uint)_list[i].ID);
-                if (_limit == null || _limit.BuyCnt < _list[i].PurchaseNumber[0])
-                {
-                    return true;
-                }
+                return true;
             }
             return false;
         }
 
-        public bool IsGiftOverdue(int _id)
+        public bool IsGiftExist(int _id)
         {
-            if (_id == timeOverdueGiftId)
+            if (startSeconds == 0)
             {
-                return TimeUtility.ServerNow >= overDueTime;
+                return false;
+            }
+            var gift = gifts.Find((x) =>
+            {
+                return x.giftId == _id;
+            });
+            if (!gift.Equals(default(SuperValueGift)))
+            {
+                var startTime = TimeUtility.GetTime(startSeconds);
+                var endTime = startTime.AddDays(gift.openDays);
+                endTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 0, 0, 0);
+                return TimeUtility.ServerNow < endTime;
             }
             return true;
         }
@@ -175,43 +173,75 @@
             return false;
         }
 
-        private void PlayerDataRefreshInfoEvent(PlayerDataRefresh _type)
+        public void SetAreadyOpens()
         {
-            bool _activate = CheckActivate();
-            if (_type == PlayerDataRefresh.ChangeCoinPointTotal && activate != _activate)
+            alreadyOpens.Clear();
+            for (int i = 0; i < gifts.Count; i++)
             {
-                activate = _activate;
-                if (onStateUpate != null)
+                if (IsGiftExist(gifts[i].giftId))
                 {
-                    onStateUpate(6);
+                    alreadyOpens.Add(i);
                 }
             }
         }
 
-        public void OnBeforePlayerDataInitialize()
+        public int GetDefaultSelect()
         {
-            timeOverdueGiftId = 0;
+            for (int i = 0; i < alreadyOpens.Count; i++)
+            {
+                if (gifts[i].giftId == jumpGiftId)
+                {
+                    jumpGiftId = 0;
+                    return alreadyOpens[i];
+                }
+            }
+            jumpGiftId = 0;
+            for (int i = 0; i < alreadyOpens.Count; i++)
+            {
+                if (redpoints[alreadyOpens[i]].state == RedPointState.Simple)
+                {
+                    return alreadyOpens[i];
+                }
+            }
+            return alreadyOpens[0];
         }
 
-        public void SetDayRemind()
+        bool GetDayRemind(int index)
         {
-            if (OSGiftRedpoint.state == RedPointState.Simple)
+            return LocalSave.GetInt(StringUtility.Contact("OSGift_", index, "_",
+                PlayerDatas.Instance.baseData.PlayerID), 0) == TimeUtility.Day;
+        }
+
+        public void SetDayRemind(int index)
+        {
+            if (redpoints[index].state == RedPointState.Simple)
             {
-                DayRemind.Instance.SetDayRemind(DayRemind.OSGIFT_REDPOINT, true);
+                LocalSave.SetInt(StringUtility.Contact("OSGift_", index, "_",
+                       PlayerDatas.Instance.baseData.PlayerID), TimeUtility.Day);
                 UpdateRedpoint();
             }
         }
 
+        List<Redpoint> redpoints = new List<Redpoint>();
+
         void UpdateRedpoint()
         {
-            OSGiftRedpoint.state = RedPointState.None;
-            if (CheckActivate() && !DayRemind.Instance.GetDayRemind(DayRemind.OSGIFT_REDPOINT))
+            for (int i = 0; i < redpoints.Count; i++)
             {
-                OSGiftRedpoint.state = RedPointState.Simple;
+                redpoints[i].state = RedPointState.None;
+                if (IsGiftExist(gifts[i].giftId) && !IsGiftBuy(gifts[i].giftId)
+                    && !GetDayRemind(i))
+                {
+                    redpoints[i].state = RedPointState.Simple;
+                }
             }
         }
 
-        public Redpoint OSGiftRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20906);
+        public struct SuperValueGift
+        {
+            public int giftId;
+            public int openDays;
+        }
     }
 }
 
diff --git a/System/OpenServerActivity/OpenServerActivityCell.cs b/System/OpenServerActivity/OpenServerActivityCell.cs
index 246d1a6..03ae9e6 100644
--- a/System/OpenServerActivity/OpenServerActivityCell.cs
+++ b/System/OpenServerActivity/OpenServerActivityCell.cs
@@ -37,8 +37,8 @@
         [SerializeField] UIEffect m_TitleEffect;
         public UIEffect titleEffect { get { return m_TitleEffect; } }
 
-        private int m_Order = 0;
-        public int order { get { return m_Order; } set { m_Order = value; } }
+        private int m_ActivityType = 0;
+        public int activityType { get { return m_ActivityType; } set { m_ActivityType = value; } }
 
         public void ChangeState(TitleBtnState _state)
         {
diff --git a/System/OpenServerActivity/OpenServerActivityWin.cs b/System/OpenServerActivity/OpenServerActivityWin.cs
index 9239b53..18d89d4 100644
--- a/System/OpenServerActivity/OpenServerActivityWin.cs
+++ b/System/OpenServerActivity/OpenServerActivityWin.cs
@@ -17,20 +17,25 @@
         Dictionary<int, bool> m_ActivitySpreadDict = new Dictionary<int, bool>();
 
         ImpactRankModel m_ImpactRankModel;
-        ImpactRankModel impactRankModel {
-            get {
+        ImpactRankModel impactRankModel
+        {
+            get
+            {
                 return m_ImpactRankModel ?? (m_ImpactRankModel = ModelCenter.Instance.GetModel<ImpactRankModel>());
             }
         }
 
         OSRedEnvelopeModel m_OSRedEnvelopeModel;
-        OSRedEnvelopeModel envelopeModel {
-            get {
+        OSRedEnvelopeModel envelopeModel
+        {
+            get
+            {
                 return m_OSRedEnvelopeModel ?? (m_OSRedEnvelopeModel = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
             }
         }
         FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } }
         FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
+        OSGiftModel giftModel { get { return ModelCenter.Instance.GetModel<OSGiftModel>(); } }
 
         List<int> openActivitys = new List<int>();
         List<int> priorityActivitys = new List<int>();
@@ -58,7 +63,7 @@
             {
                 m_ActivitySpreadDict[(int)m_CustomActivitys[i].activityType] = false;
             }
-            var impactDefaultType= impactRankModel.GetDefaultSelectType();
+            var impactDefaultType = impactRankModel.GetDefaultSelectType();
             if (impactRankModel.IsLock(impactDefaultType))
             {
                 impactDefaultType = impactRankModel.billRankCfgDict.Keys.First();
@@ -66,6 +71,7 @@
             impactRankModel.presentSelectType = impactDefaultType;
             impactRankModel.gotoImpactRankType = 0;
             envelopeModel.selectType = 1;
+            giftModel.SetAreadyOpens();
             GlobalTimeEvent.Instance.secondEvent += SecondEvent;
             CheckAlreadyOpen();
             UpdateFunctionBtns();
@@ -109,9 +115,27 @@
                     envelopeModel.selectType = envelopeModel.JumpType != 0 ? envelopeModel.JumpType : 1;
                     envelopeModel.JumpType = 0;
                 }
+                if (functionOrder == 6)
+                {
+                    giftModel.selectIndex = giftModel.GetDefaultSelect();
+                }
                 UpdateFunctionBtns();
             }
             OnOpenActivity(functionOrder);
+
+            var index = functionOrder;
+            if (alreadyOpenActivitys.Contains(6))
+            {
+                if (functionOrder > 6)
+                {
+                    index = functionOrder + giftModel.alreadyOpens.Count - 1;
+                }
+                else if (functionOrder == 6)
+                {
+                    index = functionOrder + giftModel.selectIndex;
+                }
+            }
+            m_ActivityCtrl.JumpIndex(index);
         }
 
         protected override void OnAfterOpen()
@@ -155,6 +179,9 @@
                         {
                             case OpenServerActivityCenter.OSActivityType.OSRedpack:
                                 envelopeModel.selectType = envelopeModel.m_RedAchieveRedpoint.state == RedPointState.Simple ? 1 : 2;
+                                break;
+                            case OpenServerActivityCenter.OSActivityType.OSGift:
+                                giftModel.selectIndex = giftModel.GetDefaultSelect();
                                 break;
                         }
                     }
@@ -244,16 +271,21 @@
 
         private void RefreshOpenActivityCell(OpenServerActivityCell _cell)
         {
+            var activityType = 0;
+            activityType = _cell.index >= 1000 ? _cell.index / 1000 : _cell.index;
+            var extraValue = _cell.index % 1000;
+
             var customActivity = m_CustomActivitys.Find((x) =>
             {
-                return (int)x.activityType == _cell.index;
+                return (int)x.activityType == activityType;
             });
-            bool customIcon = !string.IsNullOrEmpty(customActivity.titleIcon);
 
+            bool customIcon = !string.IsNullOrEmpty(customActivity.titleIcon)
+                || (customActivity.titleIcons != null && customActivity.titleIcons.Count > 0);
             _cell.title.color = UIHelper.GetUIColor(TextColType.NavyBrown);
 
             OperationBase operationBase;
-            switch (_cell.index)
+            switch (activityType)
             {
                 case 5:
                     if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipleExp, out operationBase))
@@ -298,37 +330,63 @@
                     break;
                 default:
                     _cell.title.gameObject.SetActive(!customIcon);
-                    _cell.title.text = Language.Get(StringUtility.Contact("OSActivityTitle_", _cell.index));
+                    if (!customIcon)
+                    {
+                        _cell.title.text = Language.Get(StringUtility.Contact("OSActivityTitle_", _cell.index));
+                    }
                     break;
             }
-            _cell.order = _cell.index;
-            _cell.redpoint.redpointId = MainRedDot.REDPOINT_OPENSERVER * 100 + _cell.index;
-            _cell.ChangeState(_cell.order == functionOrder ? TitleBtnState.Click : TitleBtnState.Normal);
+
+            _cell.activityType = activityType;
+
+            _cell.titleImage.gameObject.SetActive(customIcon);
+            _cell.titleEffect.StopImediatly();
+            switch (activityType)
+            {
+                case 6:
+                    _cell.redpoint.redpointId = 20906 * 100 + extraValue;
+                    _cell.ChangeState(extraValue == giftModel.selectIndex && functionOrder == activityType
+                        ? TitleBtnState.Click : TitleBtnState.Normal);
+                    if (customIcon)
+                    {
+                        _cell.titleImage.SetSprite(customActivity.titleIcons[extraValue]);
+                        _cell.titleImage.SetNativeSize();
+                    }
+                    if (customActivity.titleEffectIds != null && extraValue < customActivity.titleEffectIds.Count)
+                    {
+                        _cell.titleEffect.effect = customActivity.titleEffectIds[extraValue];
+                        _cell.titleEffect.Play();
+                    }
+                    break;
+                default:
+                    _cell.redpoint.redpointId = MainRedDot.REDPOINT_OPENSERVER * 100 + activityType;
+                    _cell.ChangeState(_cell.activityType == functionOrder ? TitleBtnState.Click : TitleBtnState.Normal);
+                    if (customIcon)
+                    {
+                        _cell.titleImage.SetSprite(customActivity.titleIcon);
+                        _cell.titleImage.SetNativeSize();
+                    }
+                    if (customActivity.titleEffectId != 0)
+                    {
+                        _cell.titleEffect.effect = customActivity.titleEffectId;
+                        _cell.titleEffect.Play();
+                    }
+                    break;
+            }
+
             _cell.downArrow.gameObject.SetActive(false);
             _cell.upArrow.gameObject.SetActive(false);
 
-            _cell.titleImage.gameObject.SetActive(customIcon);
-            if (customIcon)
+            if (_cell.activityType == 0 || _cell.activityType == 2)
             {
-                _cell.titleImage.SetSprite(customActivity.titleIcon);
-                _cell.titleImage.SetNativeSize();
-            }
-            _cell.titleEffect.StopImediatly();
-            if (customActivity.titleEffectId != 0)
-            {
-                _cell.titleEffect.effect = customActivity.titleEffectId;
-                _cell.titleEffect.Play();
+                _cell.downArrow.gameObject.SetActive(m_ActivitySpreadDict[_cell.activityType]);
+                _cell.upArrow.gameObject.SetActive(!m_ActivitySpreadDict[_cell.activityType]);
             }
 
-            if (_cell.order == 0 || _cell.order == 2)
-            {
-                _cell.downArrow.gameObject.SetActive(m_ActivitySpreadDict[_cell.order]);
-                _cell.upArrow.gameObject.SetActive(!m_ActivitySpreadDict[_cell.order]);
-            }
             _cell.funcBtn.onClick.RemoveAllListeners();
             _cell.funcBtn.onClick.AddListener(() =>
             {
-                OnActivityClick(_cell.order);
+                OnActivityClick(_cell.activityType, extraValue);
             });
         }
 
@@ -402,6 +460,12 @@
                         m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 1);
                         m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 2);
                         break;
+                    case 6:
+                        for (int k = 0; k < giftModel.alreadyOpens.Count; k++)
+                        {
+                            m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort * 1000 + giftModel.alreadyOpens[k]);
+                        }
+                        break;
                     default:
                         m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort);
                         break;
@@ -411,9 +475,9 @@
             m_ActivityCtrl.m_Scorller.RefreshActiveCellViews();
         }
 
-        private void OnActivityClick(int _order)
+        private void OnActivityClick(int _order, int extra = 0)
         {
-            if (functionOrder == _order)
+            if (functionOrder == _order && _order != 6)
             {
                 m_ActivitySpreadDict[_order] = !m_ActivitySpreadDict[_order];
                 UpdateFunctionBtns();
@@ -424,8 +488,20 @@
                 m_ActivitySpreadDict[functionOrder] = false;
                 m_ActivitySpreadDict[_order] = true;
             }
-            functionOrder = _order;
-            OnOpenActivity(functionOrder);
+
+            if (functionOrder != _order)
+            {
+                functionOrder = _order;
+                OnOpenActivity(functionOrder);
+            }
+
+            switch (functionOrder)
+            {
+                case 6:
+                    giftModel.selectIndex = extra;
+                    break;
+            }
+
             UpdateFunctionBtns();
         }
 
@@ -435,164 +511,52 @@
             switch (_order)
             {
                 case 0:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<ImpactRankWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<ImpactRankWin>(true);
-                    }
+                    WindowCenter.Instance.Open<ImpactRankWin>(true);
                     break;
                 case 1:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<ConsumeRebateWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<ConsumeRebateWin>(true);
-                    }
+                    WindowCenter.Instance.Open<ConsumeRebateWin>(true);
                     break;
                 case 2:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<OpenServerRedEnvelopeWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<OpenServerRedEnvelopeWin>(true);
-                    }
+                    WindowCenter.Instance.Open<OpenServerRedEnvelopeWin>(true);
                     break;
                 case 3:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<OSTimeLimitGiftWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<OSTimeLimitGiftWin>(true);
-                    }
+                    WindowCenter.Instance.Open<OSTimeLimitGiftWin>(true);
                     break;
                 case 4:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<FlashSaleWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<FlashSaleWin>(true);
-                    }
+                    WindowCenter.Instance.Open<FlashSaleWin>(true);
                     break;
                 case 5:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<MultipleExpWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<MultipleExpWin>(true);
-                    }
+                    WindowCenter.Instance.Open<MultipleExpWin>(true);
                     break;
                 case 6:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<OpenServerGiftWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<OpenServerGiftWin>(true);
-                    }
+                    WindowCenter.Instance.Open<OpenServerGiftWin>(true);
                     break;
                 case 7:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<LimitedTimePackageWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<LimitedTimePackageWin>(true);
-                    }
+                    WindowCenter.Instance.Open<LimitedTimePackageWin>(true);
                     break;
                 case 8:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<NPracticePointWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<NPracticePointWin>(true);
-                    }
+                    WindowCenter.Instance.Open<NPracticePointWin>(true);
                     break;
                 case 9:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<BossRebornWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<BossRebornWin>(true);
-                    }
+                    WindowCenter.Instance.Open<BossRebornWin>(true);
                     break;
                 case 10:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<FairyJadeInvestmentWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<FairyJadeInvestmentWin>(true);
-                    }
+                    WindowCenter.Instance.Open<FairyJadeInvestmentWin>(true);
                     break;
                 case 11:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<VipInvestWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<VipInvestWin>(true);
-                    }
+                    WindowCenter.Instance.Open<VipInvestWin>(true);
                     break;
                 case 12:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<FairyLeagueNoticeWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<FairyLeagueNoticeWin>(true);
-                    }
+                    WindowCenter.Instance.Open<FairyLeagueNoticeWin>(true);
                     break;
                 case 13:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<FairyGrabBossNoticeWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<FairyGrabBossNoticeWin>(true);
-                    }
+                    WindowCenter.Instance.Open<FairyGrabBossNoticeWin>(true);
                     break;
                 case 14:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<FlashRushToBuyWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<FlashRushToBuyWin>(true);
-                    }
+                    WindowCenter.Instance.Open<FlashRushToBuyWin>(true);
                     break;
                 case 15:
-                    if (windowState == WindowState.Opened)
-                    {
-                        WindowCenter.Instance.OpenWithoutAnimation<WishingPoolWin>();
-                    }
-                    else
-                    {
-                        WindowCenter.Instance.Open<WishingPoolWin>(true);
-                    }
+                    WindowCenter.Instance.Open<WishingPoolWin>(true);
                     break;
             }
         }
@@ -679,6 +643,9 @@
             public OpenServerActivityCenter.OSActivityType activityType;
             public string titleIcon;
             public int titleEffectId;
+
+            public List<string> titleIcons;
+            public List<int> titleEffectIds;
         }
     }
 }
diff --git a/System/OpenServerActivity/OpenServerGiftWin.cs b/System/OpenServerActivity/OpenServerGiftWin.cs
index 42f54e8..f9788a0 100644
--- a/System/OpenServerActivity/OpenServerGiftWin.cs
+++ b/System/OpenServerActivity/OpenServerGiftWin.cs
@@ -15,7 +15,6 @@
     public class OpenServerGiftWin : Window
     {
         [SerializeField] RectTransform m_ContainerDisplay;
-        [SerializeField] Button[] m_CloseBtns;
         [SerializeField] OSGiftBehaviour[] m_OSGifts;
         [SerializeField] RectTransform m_ContainerTime;
         [SerializeField] Text m_Overdue;
@@ -29,8 +28,6 @@
             }
         }
 
-        int currentSelectId = 0;
-
         OSGiftModel giftModel { get { return ModelCenter.Instance.GetModel<OSGiftModel>(); } }
         #region Built-in
         protected override void BindController()
@@ -39,24 +36,20 @@
 
         protected override void AddListeners()
         {
-            for (int i = 0; i < m_CloseBtns.Length; i++)
-            {
-                m_CloseBtns[i].onClick.AddListener(OnCloseClick);
-            }
         }
 
         protected override void OnPreOpen()
         {
-            WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
-            WindowCenter.Instance.windowAfterCloseEvent += windowAfterCloseEvent;
-            model.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent;
-            TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
-            GlobalTimeEvent.Instance.secondEvent += SecondEvent;
-            giftModel.timeLimitUpdate += TimeLimitUpdate;
-            giftModel.SetDayRemind();
-            Display();
+            if (!giftModel.alreadyOpens.Contains(giftModel.selectIndex))
+            {
+                giftModel.selectIndex = giftModel.alreadyOpens[0];
+            }
 
-            m_ContainerDisplay.gameObject.SetActive(!WindowCenter.Instance.IsOpen<OffLineOnHookWin>());
+            model.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent;
+            GlobalTimeEvent.Instance.secondEvent += SecondEvent;
+            giftModel.onSelectUpdate += OnSelectUpdate;
+            giftModel.jumpGiftId = 0;
+            Display();
         }
 
         protected override void OnAfterOpen()
@@ -65,12 +58,9 @@
 
         protected override void OnPreClose()
         {
-            WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
-            WindowCenter.Instance.windowAfterCloseEvent -= windowAfterCloseEvent;
             model.RefreshBuyShopLimitEvent -= RefreshBuyShopLimitEvent;
-            TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
             GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
-            giftModel.timeLimitUpdate -= TimeLimitUpdate;
+            giftModel.onSelectUpdate -= OnSelectUpdate;
         }
 
         protected override void OnAfterClose()
@@ -78,28 +68,12 @@
         }
         #endregion
 
-        private void WindowAfterOpenEvent(Window _win)
-        {
-            if(_win is OffLineOnHookWin)
-            {
-                m_ContainerDisplay.gameObject.SetActive(false);
-            }
-        }
-
-        private void windowAfterCloseEvent(Window _win)
-        {
-            if (_win is OffLineOnHookWin)
-            {
-                m_ContainerDisplay.gameObject.SetActive(true);
-            }
-        }
-
-        private void RefreshBuyShopLimitEvent()
+        private void OnSelectUpdate()
         {
             Display();
         }
 
-        private void OnServerOpenDayRefresh()
+        private void RefreshBuyShopLimitEvent()
         {
             Display();
         }
@@ -109,59 +83,48 @@
             DisplayTimer();
         }
 
-        private void TimeLimitUpdate()
-        {
-            Display();
-        }
-
         void DisplayTimer()
         {
-            var seconds = (int)(giftModel.overDueTime - TimeUtility.ServerNow).TotalSeconds;
-            if (giftModel.IsGiftOverdue(currentSelectId) || seconds <= 0)
+            if (giftModel.selectIndex >= 0 && giftModel.selectIndex < giftModel.gifts.Count)
             {
-                m_ContainerTime.gameObject.SetActive(false);
-                m_Overdue.gameObject.SetActive(true);
-            }
-            else
-            {
-                m_ContainerTime.gameObject.SetActive(true);
-                m_Overdue.gameObject.SetActive(false);
-                m_Timer.text = TimeUtility.SecondsToDHMSCHS(seconds);
-                m_Timer.color = UIHelper.GetUIColor(TextColType.Green);
+                var gift = giftModel.gifts[giftModel.selectIndex];
+                var startTime = TimeUtility.GetTime(giftModel.startSeconds);
+                var endTime = startTime.AddDays(gift.openDays);
+                endTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 0, 0, 0);
+                var seconds = (int)(endTime - TimeUtility.ServerNow).TotalSeconds;
+                if (seconds <= 0)
+                {
+                    m_ContainerTime.gameObject.SetActive(false);
+                    m_Overdue.gameObject.SetActive(true);
+                }
+                else
+                {
+                    m_ContainerTime.gameObject.SetActive(true);
+                    m_Overdue.gameObject.SetActive(false);
+                    m_Timer.text = TimeUtility.SecondsToDHMSCHS(seconds);
+                    m_Timer.color = UIHelper.GetUIColor(TextColType.Green);
+                }
             }
         }
 
         private void Display()
         {
-            List<StoreConfig> _list = null;
-            StoreConfig.TryGetStoreConfigs((int)StoreFunc.OSGift, out _list);
             var _index = 0;
-            for (int i = 0; i < _list.Count; i++)
+            for (int i = 0; i < giftModel.gifts.Count; i++)
             {
-                if (!giftModel.IsGiftOverdue(_list[i].ID))
+                if (giftModel.selectIndex == i)
                 {
-                    var _storeConfig = Config.Instance.Get<StoreConfig>(_list[i].ID);
-                    var _limit = model.GetBuyShopLimit((uint)_list[i].ID);
-                    if (_limit == null || _limit.BuyCnt < _storeConfig.PurchaseNumber[0])
-                    {
-                        _index = i;
-                        currentSelectId = _list[i].ID;
-                        m_OSGifts[i].Display(_list[i].ID);
-                        break;
-                    }
+                    m_OSGifts[i].Display(giftModel.gifts[i].giftId);
+                    _index = i;
+                    break;
                 }
-                _index = i;
             }
+            giftModel.SetDayRemind(giftModel.selectIndex);
             for (int i = 0; i < m_OSGifts.Length; i++)
             {
                 m_OSGifts[i].gameObject.SetActive(_index == i);
             }
             DisplayTimer();
-        }
-
-        private void OnCloseClick()
-        {
-            CloseImmediately();
         }
     }
 
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index eea731f..7bd419b 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -837,7 +837,7 @@
                 var giftModel = ModelCenter.Instance.GetModel<OSGiftModel>();
                 int giftId = 0;
                 int.TryParse(_tagWinSearchModel.SelectActive, out giftId);
-                if (!giftModel.CheckActivate())
+                if (!giftModel.IsGiftExist(giftId))
                 {
                     if (PlayerDatas.Instance.baseData.coinPointTotal <= 0
                         || !ModelCenter.Instance.GetModel<VipModel>().firstChargeRewardGet)
@@ -848,12 +848,16 @@
                     {
                         SysNotifyMgr.Instance.ShowTip("GiftAlreadyBuy");
                     }
-                    else if (giftModel.IsGiftOverdue(giftId))
+                    else if (!giftModel.IsGiftExist(giftId))
                     {
                         SysNotifyMgr.Instance.ShowTip("MissSell");
                     }
                     return false;
                 }
+                else
+                {
+                    giftModel.jumpGiftId = giftId;
+                }
                 break;
             case JumpUIType.OpenServerGift:
                 return false;

--
Gitblit v1.8.0