From 3678e238ee59a49ecaf80248323a18dfcf3dcce2 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期四, 18 十月 2018 20:28:01 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/DailyQuest/DailyQuestData.cs                |  174 ++++++++++++++++++++++++++-----------------
 System/OpenServerActivity/OpenServerActivityWin.cs |    4 
 System/MainInterfacePanel/PlayerTaskDatas.cs       |   10 ++
 System/FairyAu/FairyGrabBossNoticeWin.cs           |    2 
 System/MainInterfacePanel/TaskBoxBGMWin.cs         |   12 ++-
 System/FairyAu/FairyGrabBossModel.cs               |   26 ++++--
 6 files changed, 142 insertions(+), 86 deletions(-)

diff --git a/System/DailyQuest/DailyQuestData.cs b/System/DailyQuest/DailyQuestData.cs
index 8b45358..238097e 100644
--- a/System/DailyQuest/DailyQuestData.cs
+++ b/System/DailyQuest/DailyQuestData.cs
@@ -334,110 +334,133 @@
 
     }
 
-    public int GetFirstOpenSurplusSeconds()
+    public int GetNextSessionSurplusTime()
     {
-        if (IsAfterFirstOpen())
+        if (InOpenTime())
         {
             return 0;
         }
         var openDayWeek = (int)TimeUtility.openServerDayOfWeek;
         var dayIndex = TimeUtility.OpenDay + 1;
-        var maxDays = 15 - openDayWeek == 0 ? 7 : openDayWeek;
-        var startDay = dayIndex;
-        var createRoleTime = TimeUtility.createRoleTime;
-        if (dayIndex == 1 && specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(dayIndex))
+        var maxSpecialDays = 15 - (openDayWeek == 0 ? 7 : openDayWeek);
+        var hour = TimeUtility.ServerNow.Hour;
+        var minute = TimeUtility.ServerNow.Minute;
+        for (int i = 0; i <= 7; i++)//涓�鍛ㄥ唴蹇呴』鏈夋椿鍔�
         {
-            var openServerDay = TimeUtility.ServerNow.AddTicks(-TimeUtility.OpenDay * TimeSpan.TicksPerDay);
-            if (createRoleTime.Year == openServerDay.Year && createRoleTime.Month == openServerDay.Month
-                && createRoleTime.Day == openServerDay.Day)
+            List<HourMinute> hourminutes = null;
+            var days = dayIndex + i;
+            if (days <= maxSpecialDays)
             {
-                var hourMinutes = specialOpenTimes[openDayWeek][1];
-                var hourMinute = hourMinutes[hourMinutes.Count - 1];
-                var hour = createRoleTime.Hour;
-                var minute = createRoleTime.Minute;
-                if (hour > hourMinute.hourEnd ||
-                    (hour == hourMinute.hourEnd && minute >= hourMinute.minuteEnd))
+                if (!specialOpenTimes.ContainsKey(openDayWeek)
+                || !specialOpenTimes[openDayWeek].ContainsKey(days))
                 {
-                    startDay++;
+                    continue;
                 }
+                hourminutes = specialOpenTimes[openDayWeek][days];
             }
-        }
-        for (int i = startDay; i <= maxDays; i++)
-        {
-            if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(dayIndex))
+            else
             {
-                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);
+                var dayOfWeek = (int)TimeUtility.ServerNow.AddTicks(i * TimeSpan.TicksPerDay).DayOfWeek;
+                if (!openTimes.ContainsKey(dayOfWeek))
+                {
+                    continue;
+                }
+                hourminutes = openTimes[dayOfWeek];
+            }
+            if (hourminutes != null)
+            {
+                foreach (var hourMinute in hourminutes)
+                {
+                    if (days == dayIndex && hourMinute.AfterOpenTime(hour, minute))
+                    {
+                        continue;
+                    }
+                    var time = TimeUtility.ServerNow.AddTicks(i * TimeSpan.TicksPerDay);
+                    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()
+    public int PassSessionCount(DateTime beginTime)
     {
-        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;
-        var startDay = 1;
-        var createRoleTime = TimeUtility.createRoleTime;
-        if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(1))
+        var maxSpecialDays = 15 - (openDayWeek == 0 ? 7 : openDayWeek);
+        var beginHour = beginTime.Hour;
+        var beginMinute = beginTime.Minute;
+        var session = 0;
+
+        var openServerDay = TimeUtility.ServerNow.AddTicks(-TimeUtility.OpenDay * TimeSpan.TicksPerDay);
+        openServerDay = new DateTime(openServerDay.Year, openServerDay.Month, openServerDay.Day);
+        var beginDay = (int)(beginTime - openServerDay).TotalDays + 1;
+        List<HourMinute> hourMinutes = null;
+        if (beginDay <= maxSpecialDays)
         {
-            var openServerDay = TimeUtility.ServerNow.AddTicks(-TimeUtility.OpenDay * TimeSpan.TicksPerDay);
-            if (createRoleTime.Year == openServerDay.Year && createRoleTime.Month == openServerDay.Month
-                && createRoleTime.Day == openServerDay.Day)
+            if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(beginDay))
             {
-                var hourMinutes = specialOpenTimes[openDayWeek][1];
-                var hourMinute = hourMinutes[hourMinutes.Count - 1];
-                var hour = createRoleTime.Hour;
-                var minute = createRoleTime.Minute;
-                if (hour > hourMinute.hourEnd ||
-                    (hour == hourMinute.hourEnd && minute >= hourMinute.minuteEnd))
-                {
-                    startDay = 2;
-                }
+                hourMinutes = specialOpenTimes[openDayWeek][beginDay];
             }
         }
-        for (int i = startDay; i <= maxDays; i++)
+        else
         {
-            if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(dayIndex))
+            var dayOfWeek = (int)beginTime.DayOfWeek;
+            if (openTimes.ContainsKey(dayOfWeek))
+            {
+                hourMinutes = openTimes[dayOfWeek];
+            }
+        }
+        if (hourMinutes != null)
+        {
+            var hourMinute = hourMinutes[hourMinutes.Count - 1];
+            if (hourMinute.AfterOpenTime(beginHour, beginMinute))
+            {
+                beginDay++;
+            }
+        }
+
+        var nowHour = TimeUtility.ServerNow.Hour;
+        var nowMinute = TimeUtility.ServerNow.Minute;
+        for (int i = beginDay; i <= dayIndex; i++)
+        {
+            hourMinutes = null;
+            if (i <= maxSpecialDays)
+            {
+                if (specialOpenTimes.ContainsKey(openDayWeek) && specialOpenTimes[openDayWeek].ContainsKey(i))
+                {
+                    hourMinutes = specialOpenTimes[openDayWeek][i];
+                }
+            }
+            else
+            {
+                var dayOfWeek = (int)openServerDay.AddTicks((i - 1) * TimeSpan.TicksPerDay).DayOfWeek;
+                if (openTimes.ContainsKey(dayOfWeek))
+                {
+                    hourMinutes = openTimes[dayOfWeek];
+                }
+            }
+            if (hourMinutes != null)
             {
                 if (i < dayIndex)
                 {
-                    return true;
+                    session += hourMinutes.Count;
                 }
-                if (i == dayIndex)
+                else 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))
+                    foreach (var hourMinute in hourMinutes)
                     {
-                        return false;
+                        if (hourMinute.AfterOpenTime(nowHour, nowMinute))
+                        {
+                            session++;
+                        }
                     }
-                    else
-                    {
-                        return true;
-                    }
-                }
-                if (i > dayIndex)
-                {
-                    return false;
                 }
             }
         }
-        return true;
+        return session;
     }
 
     public bool ContainTimeNode(int week, int timeNode)
@@ -621,6 +644,19 @@
         }
     }
 
+    public bool AfterOpenTime(int hour,int minute)
+    {
+        if (wholeDay)
+        {
+            return false;
+        }
+        else
+        {
+            var minutes = hour * 60 + minute;
+            return (hourEnd * 60 + minuteEnd) <= minutes;
+        }
+    }
+
     public override string ToString()
     {
         var minuteBeginStr = minuteBegin > 9 ? minuteBegin.ToString() : StringUtility.Contact("0", minuteBegin);
diff --git a/System/FairyAu/FairyGrabBossModel.cs b/System/FairyAu/FairyGrabBossModel.cs
index 907c98c..6f3eee7 100644
--- a/System/FairyAu/FairyGrabBossModel.cs
+++ b/System/FairyAu/FairyGrabBossModel.cs
@@ -346,6 +346,12 @@
                 noticeShowPet = int.Parse(config.Numerical1);
                 noticeShowHorse = int.Parse(config.Numerical2);
             }
+            config = Config.Instance.Get<FuncConfigConfig>("FairyGrabBossNoticeSessions");
+            noticeSessions = 2;
+            if (config != null)
+            {
+                noticeSessions = int.Parse(config.Numerical1);
+            }
         }
 
         public bool TryGetDropItems(int bossId, out List<Item> dropItems)
@@ -697,7 +703,8 @@
                 DailyQuestOpenTime dailyQuestOpenTime;
                 if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out dailyQuestOpenTime))
                 {
-                    return FuncOpen.Instance.IsFuncOpen(139) && !dailyQuestOpenTime.IsAfterFirstOpen();
+                    return FuncOpen.Instance.IsFuncOpen(139)
+                        && dailyQuestOpenTime.PassSessionCount(TimeUtility.createRoleTime) < noticeSessions;
                 }
                 return false;
             }
@@ -715,17 +722,20 @@
 
         bool cacheNoticeOpen { get; set; }
 
+        int noticeSessions { get; set; }
+
         public event Action<int> onStateUpate;
-        public int GetFirstOpenSeconds()
+        public int GetNextSessionSeconds()
         {
             int seconds = 0;
-            if (!InActivityTime)
+            if (!IsOpen)
             {
-                DailyQuestOpenTime dailyQuestOpenTime;
-                if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out dailyQuestOpenTime))
-                {
-                    seconds = dailyQuestOpenTime.GetFirstOpenSurplusSeconds();
-                }
+                return 0;
+            }
+            DailyQuestOpenTime dailyQuestOpenTime;
+            if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out dailyQuestOpenTime))
+            {
+                seconds = dailyQuestOpenTime.GetNextSessionSurplusTime();
             }
             return seconds;
         }
diff --git a/System/FairyAu/FairyGrabBossNoticeWin.cs b/System/FairyAu/FairyGrabBossNoticeWin.cs
index d022018..2ef905b 100644
--- a/System/FairyAu/FairyGrabBossNoticeWin.cs
+++ b/System/FairyAu/FairyGrabBossNoticeWin.cs
@@ -77,7 +77,7 @@
 
         void DisplayTime()
         {
-            var seconds = model.GetFirstOpenSeconds();
+            var seconds = model.GetNextSessionSeconds();
             var isOpen = model.IsOpen;
             if (seconds > 0)
             {
diff --git a/System/MainInterfacePanel/PlayerTaskDatas.cs b/System/MainInterfacePanel/PlayerTaskDatas.cs
index c40f77e..ccc3af9 100644
--- a/System/MainInterfacePanel/PlayerTaskDatas.cs
+++ b/System/MainInterfacePanel/PlayerTaskDatas.cs
@@ -358,7 +358,10 @@
             {
                 if (BountyDic.ContainsKey(_TaskNow) || FairyAuDic.ContainsKey(_TaskNow))
                 {
-                    RequestGetTaskAward("OK");
+                    if (!ModelCenter.Instance.GetModel<TeamModel>().teamPrepare.isPreparing)
+                    {
+                        RequestGetTaskAward("OK");
+                    }
                 }
 
             }
@@ -375,7 +378,10 @@
             {
                 if (BountyDic.ContainsKey(_TaskNow) || FairyAuDic.ContainsKey(_TaskNow))
                 {
-                    RequestGetTaskAward("OK");
+                    if (!ModelCenter.Instance.GetModel<TeamModel>().teamPrepare.isPreparing)
+                    {
+                        RequestGetTaskAward("OK");
+                    }               
                 }
             }
         }
diff --git a/System/MainInterfacePanel/TaskBoxBGMWin.cs b/System/MainInterfacePanel/TaskBoxBGMWin.cs
index b1c1c55..ae21e05 100644
--- a/System/MainInterfacePanel/TaskBoxBGMWin.cs
+++ b/System/MainInterfacePanel/TaskBoxBGMWin.cs
@@ -143,11 +143,15 @@
             if (_AllMissionDict.ContainsKey(_TaskId))
             {
 
-                if (_AllMissionDict[_TaskId].Type == 7 || (_AllMissionDict[_TaskId].Type == 12 /*&& vipmodel.GetVipPrivilegeCnt(VipPrivilegeType.AutoFairyMisstion) >= 1*/))
+                if (_AllMissionDict[_TaskId].Type == 7 || (_AllMissionDict[_TaskId].Type == 12))
                 {
-                    taskmodel.RequestGetTaskAward("OK");
-                    WindowCenter.Instance.CloseImmediately<TaskBoxBGMWin>();
-                    WindowCenter.Instance.Open<MainInterfaceWin>();
+                    if (!ModelCenter.Instance.GetModel<TeamModel>().teamPrepare.isPreparing)
+                    {
+                        taskmodel.RequestGetTaskAward("OK");
+                        WindowCenter.Instance.CloseImmediately<TaskBoxBGMWin>();
+                        WindowCenter.Instance.Open<MainInterfaceWin>();
+                    }
+                   
                 }
             }
         }
diff --git a/System/OpenServerActivity/OpenServerActivityWin.cs b/System/OpenServerActivity/OpenServerActivityWin.cs
index b0ee292..8ff32b3 100644
--- a/System/OpenServerActivity/OpenServerActivityWin.cs
+++ b/System/OpenServerActivity/OpenServerActivityWin.cs
@@ -186,7 +186,7 @@
             if (cell != null)
             {
                 var activityCell = cell as OpenServerActivityCell;
-                var seconds = fairyGrabBossModel.GetFirstOpenSeconds();
+                var seconds = fairyGrabBossModel.GetNextSessionSeconds();
                 bool isOpen = fairyGrabBossModel.IsOpen;
                 activityCell.title.gameObject.SetActive(seconds > 0 || isOpen);
                 activityCell.title.color = UIHelper.GetUIColor(TextColType.Green, true);
@@ -282,7 +282,7 @@
                     break;
                 case 13:
                     {
-                        var seconds = fairyGrabBossModel.GetFirstOpenSeconds();
+                        var seconds = fairyGrabBossModel.GetNextSessionSeconds();
                         bool isOpen = fairyGrabBossModel.IsOpen;
                         _cell.title.gameObject.SetActive(seconds > 0 || isOpen);
                         _cell.title.color = UIHelper.GetUIColor(TextColType.Green, true);

--
Gitblit v1.8.0