From 75a6dd7122830280a0a5b23dea06ce304bf361e6 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期六, 08 九月 2018 16:18:33 +0800
Subject: [PATCH] 3243  【开发】开服限时活动定制

---
 System/DailyQuest/DailyQuestData.cs |  231 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 173 insertions(+), 58 deletions(-)

diff --git a/System/DailyQuest/DailyQuestData.cs b/System/DailyQuest/DailyQuestData.cs
index a3a64e5..5749fa9 100644
--- a/System/DailyQuest/DailyQuestData.cs
+++ b/System/DailyQuest/DailyQuestData.cs
@@ -5,6 +5,7 @@
 using System.Text.RegularExpressions;
 using Snxxz.UI;
 using TableConfig;
+using LitJson;
 
 public class DailyQuestData
 {
@@ -37,7 +38,8 @@
     public int id { get; private set; }
 
     bool m_Got = false;
-    public bool got {
+    public bool got
+    {
         get { return this.m_Got; }
         set { this.m_Got = value; }
     }
@@ -48,23 +50,25 @@
     }
 }
 
-public struct DailyQuestOpenTime
+public class DailyQuestOpenTime
 {
     public int id;
     public bool always;
-    public int openServerWeek;
-    public int openServerDay;
 
-    public Dictionary<int, List<HourMinute>> openTimes;
+    //甯歌鐨勬椿鍔ㄦ椂闂达紝key鏄槦鏈焫
+    Dictionary<int, List<HourMinute>> openTimes = new Dictionary<int, List<HourMinute>>();
+    //寮�鏈嶅墠2鍛ㄧ殑娲诲姩鏃堕棿,key1鏄紑鏈嶆棩鐨勬槦鏈燂紝key2鏄紑鏈嶇鍑犲ぉ
+    Dictionary<int, Dictionary<int, List<HourMinute>>> specificOpenTimes = new Dictionary<int, Dictionary<int, List<HourMinute>>>();
 
-    public DailyQuestOpenTime(int _id, string _timeString, int _duration)
+    public DailyQuestOpenTime(int _id)
     {
         this.id = _id;
-        this.openServerWeek = 0;
-        this.openServerDay = 0;
-        var matches = Regex.Matches(_timeString, "\\\"[0-9]\\\":\\[[0-9|,|\\[|\\]]+");
+    }
+
+    public void ParseQuestNormalOpenTime(string timeString, int duration)
+    {
+        var matches = Regex.Matches(timeString, "\\\"[0-9]\\\":\\[[0-9|,|\\[|\\]]+");
         always = matches.Count == 0;
-        openTimes = new Dictionary<int, List<HourMinute>>();
 
         for (int i = 0; i < matches.Count; i++)
         {
@@ -82,7 +86,7 @@
 
                 for (int j = 0; j < subMatches.Count; j++)
                 {
-                    tempHourMinutes.Add(new HourMinute(subMatches[j].Value, _duration));
+                    tempHourMinutes.Add(new HourMinute(subMatches[j].Value, duration));
                 }
 
                 tempHourMinutes.Sort((HourMinute a, HourMinute b) => { return HourMinute.Compare(a, b); });
@@ -99,35 +103,56 @@
 
                 for (int j = 0; j < subMatches.Count; j++)
                 {
-                    hourMinutes.Add(new HourMinute(subMatches[j].Value, _duration));
+                    hourMinutes.Add(new HourMinute(subMatches[j].Value, duration));
                 }
 
                 hourMinutes.Sort((HourMinute a, HourMinute b) => { return HourMinute.Compare(a, b); });
             }
         }
-
     }
 
-    public DailyQuestOpenTime(int _id, List<DungeonStateTimeConfig> _configs)
+    public void ParseQuestSpecificOpenTimes(List<DailyQuestSpecialOpenTimeConfig> configs)
     {
-        id = _id;
-        always = _configs == null || _configs.Count == 0;
-        openTimes = new Dictionary<int, List<HourMinute>>();
+        if (configs == null)
+        {
+            return;
+        }
 
-        this.openServerWeek = 0;
-        this.openServerDay = 0;
+        foreach (var config in configs)
+        {
+            var openDayWeek = config.OpenServerWeek % 7;
+            if (!specificOpenTimes.ContainsKey(openDayWeek))
+            {
+                specificOpenTimes[openDayWeek] = new Dictionary<int, List<HourMinute>>();
+            }
+
+            var dayIndexOpenTimes = specificOpenTimes[openDayWeek];
+            var dayIndex = config.OpenServerDay;
+            if (!dayIndexOpenTimes.ContainsKey(dayIndex))
+            {
+                dayIndexOpenTimes[dayIndex] = new List<HourMinute>();
+            }
+
+            var matches = Regex.Matches(config.TimeList, "\\[[0-9]{1,2},[0-9]{1,2}\\]");
+            var hourMinutes = dayIndexOpenTimes[dayIndex];
+
+            for (int i = 0; i < matches.Count; i++)
+            {
+                var temp = matches[i].Value;
+                hourMinutes.Add(new HourMinute(temp, config.Duration));
+            }
+        }
+    }
+
+    public void ParseDungeonNormalOpenTimes(List<DungeonStateTimeConfig> configs)
+    {
+        always = configs == null || configs.Count == 0;
 
         if (!always)
         {
-            if (_configs.Count > 0)
+            for (int i = 0; i < configs.Count; i++)
             {
-                this.openServerWeek = _configs[0].OpenServerWeek;
-                this.openServerDay = _configs[0].OpenServerDay;
-            }
-
-            for (int i = 0; i < _configs.Count; i++)
-            {
-                var config = _configs[i];
+                var config = configs[i];
                 if (config.StartWeekday == 0 && config.EndWeekday == 0)
                 {
                     for (int j = 0; j < 7; j++)
@@ -155,16 +180,37 @@
         }
     }
 
+    public void ParseDungeonSpecificOpenTimes(List<DungeonSpecialStateTimeConfig> configs)
+    {
+        if (configs == null)
+        {
+            return;
+        }
+
+        foreach (var config in configs)
+        {
+            var openDayWeek = config.OpenServerWeek % 7;
+            if (!specificOpenTimes.ContainsKey(openDayWeek))
+            {
+                specificOpenTimes[openDayWeek] = new Dictionary<int, List<HourMinute>>();
+            }
+
+            var dayIndexOpenTimes = specificOpenTimes[openDayWeek];
+            var dayIndex = config.OpenServerDay;
+            if (!dayIndexOpenTimes.ContainsKey(dayIndex))
+            {
+                dayIndexOpenTimes[dayIndex] = new List<HourMinute>();
+            }
+
+            var hourMinutes = dayIndexOpenTimes[dayIndex];
+            hourMinutes.Add(new HourMinute(config.StartHour, config.StartMinute, config.EndHour, config.EndMinute));
+        }
+    }
+
+
     public bool IsValidServerOpenTime()
     {
-        if (TimeUtility.OpenDay >= this.openServerDay && TimeUtility.OpenWeekCnt >= this.openServerWeek)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
+        return true;
     }
 
     public bool InOpenTime()
@@ -174,14 +220,12 @@
             return true;
         }
 
-        var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek;
-        if (!openTimes.ContainsKey(dayOfWeek))
+        var isSpecificDay = TimeUtility.OpenWeekCnt <= 1;
+        var openDayWeek = (int)TimeUtility.openServerTime.DayOfWeek;
+        var dayIndex = TimeUtility.OpenDay + 1;
+        if (isSpecificDay && specificOpenTimes.ContainsKey(openDayWeek) && specificOpenTimes[openDayWeek].ContainsKey(dayIndex))
         {
-            return false;
-        }
-        else
-        {
-            var hourMinutes = openTimes[dayOfWeek];
+            var hourMinutes = specificOpenTimes[openDayWeek][dayIndex];
             for (int i = 0; i < hourMinutes.Count; i++)
             {
                 if (hourMinutes[i].InOpenTime())
@@ -192,32 +236,96 @@
 
             return false;
         }
+        else
+        {
+            var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek;
+            if (!openTimes.ContainsKey(dayOfWeek))
+            {
+                return false;
+            }
+            else
+            {
+                var hourMinutes = openTimes[dayOfWeek];
+                for (int i = 0; i < hourMinutes.Count; i++)
+                {
+                    if (hourMinutes[i].InOpenTime())
+                    {
+                        return true;
+                    }
+                }
+
+                return false;
+            }
+        }
+
     }
 
     public bool TryGetTodayNearestOpenTime(out HourMinute _hourMinute)
     {
-        var dayOfWeek = (int) TimeUtility.ServerNow.DayOfWeek;
-        if (!openTimes.ContainsKey(dayOfWeek))
+        var isSpecificDay = TimeUtility.OpenWeekCnt <= 1;
+        var openDayWeek = (int)TimeUtility.openServerTime.DayOfWeek;
+        var dayIndex = TimeUtility.OpenDay + 1;
+        if (isSpecificDay && specificOpenTimes.ContainsKey(openDayWeek) && specificOpenTimes[openDayWeek].ContainsKey(dayIndex))
         {
-            _hourMinute = default(HourMinute);
-            return false;
+            var hour = TimeUtility.ServerNow.Hour;
+            var minute = TimeUtility.ServerNow.Minute;
+            var hourMinutes = specificOpenTimes[openDayWeek][dayIndex];
+            _hourMinute = hourMinutes[hourMinutes.Count - 1];
+            for (int i = 0; i < hourMinutes.Count; i++)
+            {
+                var hourMinute = hourMinutes[i];
+                if (hour <= hourMinute.hourEnd && minute <= hourMinute.minuteEnd)
+                {
+                    _hourMinute = hourMinute;
+                    break;
+                }
+            }
+
+            return true;
+        }
+        else
+        {
+            var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek;
+            if (!openTimes.ContainsKey(dayOfWeek))
+            {
+                _hourMinute = default(HourMinute);
+                return false;
+            }
+
+            var hour = TimeUtility.ServerNow.Hour;
+            var minute = TimeUtility.ServerNow.Minute;
+            var hourMinutes = openTimes[dayOfWeek];
+            _hourMinute = hourMinutes[hourMinutes.Count - 1];
+            for (int i = 0; i < hourMinutes.Count; i++)
+            {
+                var hourMinute = hourMinutes[i];
+                if (hour <= hourMinute.hourEnd && minute <= hourMinute.minuteEnd)
+                {
+                    _hourMinute = hourMinute;
+                    break;
+                }
+            }
+
+            return true;
         }
 
-        var hour = TimeUtility.ServerNow.Hour;
-        var minute = TimeUtility.ServerNow.Minute;
-        var hourMinutes = openTimes[dayOfWeek];
-        _hourMinute = hourMinutes[hourMinutes.Count - 1];
-        for (int i = 0; i < hourMinutes.Count; i++)
+    }
+
+    public bool ContainTimeNode(int week, int timeNode)
+    {
+        var hourMinutes = GetHourMinuteByWeek(week);
+        if (hourMinutes != null)
         {
-            var hourMinute = hourMinutes[i];
-            if (hour <= hourMinute.hourEnd && minute <= hourMinute.minuteEnd)
+            foreach (var item in hourMinutes)
             {
-                _hourMinute = hourMinute;
-                break;
+                if (item.hourBegin * 60 + item.minuteBegin == timeNode)
+                {
+                    return true;
+                }
             }
         }
 
-        return true;
+        return false;
     }
 
     public string ToOpenTimeString()
@@ -267,10 +375,18 @@
 
     public List<HourMinute> GetHourMinuteByWeek(int week)
     {
-        if(openTimes.ContainsKey(week))
+        var isSpecificDay = TimeUtility.OpenWeekCnt <= 1;
+        var openDayWeek = (int)TimeUtility.openServerTime.DayOfWeek;
+        var dayIndex = TimeUtility.OpenDay + 1;
+        if (isSpecificDay && specificOpenTimes.ContainsKey(openDayWeek) && specificOpenTimes[openDayWeek].ContainsKey(dayIndex))
+        {
+            return specificOpenTimes[openDayWeek][dayIndex];
+        }
+        else if (openTimes.ContainsKey(week))
         {
             return openTimes[week];
         }
+
         return null;
     }
 }
@@ -359,7 +475,6 @@
         {
             return StringUtility.Contact(hourBegin, ":", minuteBegin);
         }
-
     }
 
     public static int Compare(HourMinute _lhs, HourMinute _rhs)

--
Gitblit v1.8.0