| | |
| | | using System.Text.RegularExpressions;
|
| | | using Snxxz.UI;
|
| | | using TableConfig;
|
| | | using LitJson;
|
| | |
|
| | | public class DailyQuestData
|
| | | {
|
| | |
| | | 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; }
|
| | | }
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | public struct DailyQuestOpenTime
|
| | | public class DailyQuestOpenTime
|
| | | {
|
| | | public int id;
|
| | | public bool always;
|
| | | public int openServerWeek;
|
| | | public int openServerDay;
|
| | |
|
| | | public Dictionary<int, List<HourMinute>> openTimes;
|
| | | Dictionary<int, List<HourMinute>> openTimes;//常规的活动时间,key是星期x
|
| | | Dictionary<int, Dictionary<int, List<HourMinute>>> specificOpenTimes;//开服前2周的活动时间,key1是开服日的星期,key2是开服第几天
|
| | |
|
| | | 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 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); });
|
| | |
| | |
|
| | | 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<DailyQuestSpecificOpenTimeConfig> configs)
|
| | | {
|
| | | id = _id;
|
| | | always = _configs == null || _configs.Count == 0;
|
| | | openTimes = new Dictionary<int, List<HourMinute>>();
|
| | | specificOpenTimes = new Dictionary<int, Dictionary<int, List<HourMinute>>>(); ;
|
| | | foreach (var config in configs)
|
| | | {
|
| | | var openDayWeek = config.OpenServerWeek % 7;
|
| | | if (!specificOpenTimes.ContainsKey(openDayWeek))
|
| | | {
|
| | | specificOpenTimes[openDayWeek] = new Dictionary<int, List<HourMinute>>();
|
| | | }
|
| | |
|
| | | this.openServerWeek = 0;
|
| | | this.openServerDay = 0;
|
| | | var dayIndexOpenTimes = specificOpenTimes[openDayWeek];
|
| | | var dayIndex = config.OpenServerDay;
|
| | | if (!dayIndexOpenTimes.ContainsKey(dayIndex))
|
| | | {
|
| | | dayIndexOpenTimes[dayIndex] = new List<HourMinute>();
|
| | | }
|
| | |
|
| | | var timeString = config.TimeList;
|
| | | var timeJson = JsonMapper.ToObject(timeString);
|
| | | var hourMinutes = dayIndexOpenTimes[dayIndex];
|
| | |
|
| | | for (int i = 0; i < timeJson.Count; i++)
|
| | | {
|
| | | var temp = timeJson[i].ToString();
|
| | | hourMinutes.Add(new HourMinute(temp, config.Duration));
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public void ParseDungeonNormalOpenTimes(List<DungeonStateTimeConfig> configs)
|
| | | {
|
| | | always = configs == null || configs.Count == 0;
|
| | | openTimes = new Dictionary<int, List<HourMinute>>();
|
| | |
|
| | | 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++)
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | public void ParseDungeonSpecificOpenTimes(List<DungeonSpecificlStateTimeConfig> configs)
|
| | | {
|
| | | specificOpenTimes = new Dictionary<int, Dictionary<int, List<HourMinute>>>(); ;
|
| | | 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()
|
| | |
| | | return true;
|
| | | }
|
| | |
|
| | | var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek;
|
| | | if (!openTimes.ContainsKey(dayOfWeek))
|
| | | var isSpecificDay = TimeUtility.OpenWeekCnt <= 1;
|
| | | var openDayWeek = (int)(TimeUtility.ServerNow - new TimeSpan(TimeUtility.OpenDay * TimeSpan.TicksPerDay)).DayOfWeek;
|
| | | var dayIndex = TimeUtility.OpenDay + 1;
|
| | | if (isSpecificDay && specificOpenTimes.ContainsKey(openDayWeek) && specificOpenTimes.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())
|
| | |
| | |
|
| | | 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.ServerNow - new TimeSpan(TimeUtility.OpenDay * TimeSpan.TicksPerDay)).DayOfWeek;
|
| | | var dayIndex = TimeUtility.OpenDay + 1;
|
| | | if (isSpecificDay && specificOpenTimes.ContainsKey(openDayWeek) && specificOpenTimes.ContainsKey(dayIndex))
|
| | | {
|
| | | _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)
|
| | | 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++)
|
| | | {
|
| | | _hourMinute = hourMinute;
|
| | | break;
|
| | | 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;
|
| | | }
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | public string ToOpenTimeString()
|
| | |
| | |
|
| | | public List<HourMinute> GetHourMinuteByWeek(int week)
|
| | | {
|
| | | if(openTimes.ContainsKey(week))
|
| | | var isSpecificDay = TimeUtility.OpenWeekCnt <= 1;
|
| | | var openDayWeek = (int)(TimeUtility.ServerNow - new TimeSpan(TimeUtility.OpenDay * TimeSpan.TicksPerDay)).DayOfWeek;
|
| | | var dayIndex = TimeUtility.OpenDay + 1;
|
| | | if (isSpecificDay && specificOpenTimes.ContainsKey(openDayWeek) && specificOpenTimes.ContainsKey(dayIndex))
|
| | | {
|
| | | return specificOpenTimes[openDayWeek][dayIndex];
|
| | | }
|
| | | else if (openTimes.ContainsKey(week))
|
| | | {
|
| | | return openTimes[week];
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | | }
|