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 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 105 insertions(+), 69 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);

--
Gitblit v1.8.0