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