using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using System.Text.RegularExpressions;
|
using Snxxz.UI;
|
using TableConfig;
|
|
public class DailyQuestData
|
{
|
public int id { get; private set; }
|
public Redpoint redpoint { get; private set; }
|
|
public DailyQuestData(int _id)
|
{
|
this.id = _id;
|
}
|
|
public DailyQuestData(int _id, int _redpointId, int _parentRedpoint)
|
{
|
this.id = _id;
|
this.redpoint = new Redpoint(_parentRedpoint, _redpointId);
|
}
|
|
public void UpdateRedpointState(RedPointState _redpointState)
|
{
|
if (this.redpoint != null)
|
{
|
this.redpoint.state = _redpointState;
|
}
|
}
|
|
}
|
|
public class DailyQuestActiveValueReward
|
{
|
public int id { get; private set; }
|
|
bool m_Got = false;
|
public bool got {
|
get { return this.m_Got; }
|
set { this.m_Got = value; }
|
}
|
|
public DailyQuestActiveValueReward(int _id)
|
{
|
this.id = _id;
|
}
|
}
|
|
public struct DailyQuestOpenTime
|
{
|
public int id;
|
public bool always;
|
public int openServerWeek;
|
public int openServerDay;
|
|
public Dictionary<int, List<HourMinute>> openTimes;
|
|
public DailyQuestOpenTime(int _id, string _timeString, int _duration)
|
{
|
this.id = _id;
|
this.openServerWeek = 0;
|
this.openServerDay = 0;
|
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++)
|
{
|
var match = matches[i];
|
var stringArray = match.Value.Split(':');
|
|
var week = 0;
|
var weekMatch = Regex.Match(stringArray[0], "[0-9]");
|
int.TryParse(weekMatch.Value, out week);
|
|
if (week == 0)
|
{
|
var subMatches = Regex.Matches(stringArray[1], "[0-9]{1,2},[0-9]{1,2}");
|
var tempHourMinutes = new List<HourMinute>();
|
|
for (int j = 0; j < subMatches.Count; j++)
|
{
|
tempHourMinutes.Add(new HourMinute(subMatches[j].Value, _duration));
|
}
|
|
tempHourMinutes.Sort((HourMinute a, HourMinute b) => { return HourMinute.Compare(a, b); });
|
|
for (int j = 0; j < 7; j++)
|
{
|
var hourMinutes = openTimes[j] = new List<HourMinute>(tempHourMinutes);
|
}
|
}
|
else
|
{
|
var hourMinutes = openTimes[week % 7] = new List<HourMinute>();
|
var subMatches = Regex.Matches(stringArray[1], "[0-9]{1,2},[0-9]{1,2}");
|
|
for (int j = 0; j < subMatches.Count; j++)
|
{
|
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)
|
{
|
id = _id;
|
always = _configs == null || _configs.Count == 0;
|
openTimes = new Dictionary<int, List<HourMinute>>();
|
|
this.openServerWeek = 0;
|
this.openServerDay = 0;
|
|
if (!always)
|
{
|
if (_configs.Count > 0)
|
{
|
this.openServerWeek = _configs[0].OpenServerWeek;
|
this.openServerDay = _configs[0].OpenServerDay;
|
}
|
|
for (int i = 0; i < _configs.Count; i++)
|
{
|
var config = _configs[i];
|
if (config.StartWeekday == 0 && config.EndWeekday == 0)
|
{
|
for (int j = 0; j < 7; j++)
|
{
|
if (!openTimes.ContainsKey(j))
|
{
|
openTimes[j] = new List<HourMinute>();
|
}
|
var hourMinutes = openTimes[j];
|
hourMinutes.Add(new HourMinute(config.StartHour, config.StartMinute, config.EndHour, config.EndMinute));
|
}
|
}
|
else
|
{
|
var dayOfWeek = config.StartWeekday % 7;
|
if (!openTimes.ContainsKey(dayOfWeek))
|
{
|
openTimes[dayOfWeek] = new List<HourMinute>();
|
}
|
|
var hourMinutes = openTimes[dayOfWeek];
|
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;
|
}
|
}
|
|
public bool InOpenTime()
|
{
|
if (always)
|
{
|
return true;
|
}
|
|
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))
|
{
|
_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;
|
}
|
|
public string ToOpenTimeString()
|
{
|
if (always || openTimes.Count >= 7)
|
{
|
return Language.Get("DailyQuest_NoTimeLimit");
|
}
|
else
|
{
|
var timeStringArray = new string[openTimes.Count];
|
var index = 0;
|
foreach (var key in openTimes.Keys)
|
{
|
switch (key)
|
{
|
case 0:
|
timeStringArray[index] = Language.Get("Weekday7");
|
break;
|
case 1:
|
timeStringArray[index] = Language.Get("Weekday1");
|
break;
|
case 2:
|
timeStringArray[index] = Language.Get("Weekday2");
|
break;
|
case 3:
|
timeStringArray[index] = Language.Get("Weekday3");
|
break;
|
case 4:
|
timeStringArray[index] = Language.Get("Weekday4");
|
break;
|
case 5:
|
timeStringArray[index] = Language.Get("Weekday5");
|
break;
|
case 6:
|
timeStringArray[index] = Language.Get("Weekday6");
|
break;
|
}
|
|
index++;
|
}
|
|
return string.Join("、", timeStringArray);
|
}
|
|
}
|
|
public List<HourMinute> GetHourMinuteByWeek(int week)
|
{
|
if(openTimes.ContainsKey(week))
|
{
|
return openTimes[week];
|
}
|
return null;
|
}
|
}
|
|
public struct HourMinute
|
{
|
public int hourBegin;
|
public int minuteBegin;
|
public int hourEnd;
|
public int minuteEnd;
|
public bool wholeDay;
|
|
public HourMinute(string _input, int _duration)
|
{
|
var matches = Regex.Matches(_input, "[0-9]{1,2}");
|
if (matches.Count >= 2)
|
{
|
hourBegin = int.Parse(matches[0].Value);
|
minuteBegin = int.Parse(matches[1].Value);
|
|
hourEnd = hourBegin + _duration / 60;
|
minuteEnd = minuteBegin + _duration % 60;
|
if (minuteEnd >= 60)
|
{
|
minuteEnd = minuteEnd % 60;
|
hourEnd += 1;
|
}
|
|
wholeDay = false;
|
}
|
else
|
{
|
hourBegin = 0;
|
minuteBegin = 0;
|
hourEnd = 0;
|
minuteEnd = 0;
|
|
wholeDay = true;
|
}
|
}
|
|
public HourMinute(int _hourBegin, int _minuteBegin, int _hourEnd, int _minuteEnd)
|
{
|
hourBegin = _hourBegin;
|
minuteBegin = _minuteBegin;
|
hourEnd = _hourEnd;
|
minuteEnd = _minuteEnd;
|
|
wholeDay = hourBegin == 0 && minuteBegin == 0 && hourEnd == 0 && minuteEnd == 0;
|
}
|
|
public bool InOpenTime()
|
{
|
if (wholeDay)
|
{
|
return true;
|
}
|
else
|
{
|
var minutes = TimeUtility.ServerNow.Hour * 60 + TimeUtility.ServerNow.Minute;
|
if ((hourBegin * 60 + minuteBegin) <= minutes && (hourEnd * 60 + minuteEnd) > minutes)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public override string ToString()
|
{
|
var minuteBeginStr = minuteBegin > 9 ? minuteBegin.ToString() : StringUtility.Contact("0", minuteBegin);
|
var minuteEndStr = minuteEnd > 9 ? minuteEnd.ToString() : StringUtility.Contact("0", minuteEnd);
|
return StringUtility.Contact(hourBegin, ":", minuteBeginStr, "--", hourEnd, ":", minuteEndStr);
|
}
|
|
public string ToOpenTime()
|
{
|
if (minuteBegin < 10)
|
{
|
return StringUtility.Contact(hourBegin, ":0", minuteBegin);
|
}
|
else
|
{
|
return StringUtility.Contact(hourBegin, ":", minuteBegin);
|
}
|
|
}
|
|
public static int Compare(HourMinute _lhs, HourMinute _rhs)
|
{
|
return (_lhs.hourBegin * 60 + _lhs.minuteBegin) < (_rhs.hourBegin * 60 + _rhs.minuteBegin) ? -1 : 1;
|
}
|
|
}
|