少年修仙传客户端代码仓库
client_Wu Xijin
2018-10-18 3678e238ee59a49ecaf80248323a18dfcf3dcce2
System/DailyQuest/DailyQuestData.cs
@@ -334,110 +334,133 @@
    }
    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)
@@ -621,6 +644,19 @@
        }
    }
    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);