| | |
| | |
|
| | | }
|
| | |
|
| | | 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)
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | 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);
|