少年修仙传客户端代码仓库
client_Wu Xijin
2018-09-07 951de4ff60b99ac469145d22c6c50ec870515167
3243  【开发】开服限时活动定制
4个文件已修改
308 ■■■■■ 已修改文件
System/DailyQuest/DailyQuestData.cs 210 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/DailyQuest/DailyQuestModel.cs 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonBreifInfo.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/TimeUtility.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,21 +50,22 @@
    }
}
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>>();
@@ -82,7 +85,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 +102,54 @@
                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++)
@@ -155,16 +177,33 @@
        }
    }
    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()
@@ -174,14 +213,12 @@
            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())
@@ -192,32 +229,79 @@
            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()
@@ -267,10 +351,18 @@
    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;
    }
}
System/DailyQuest/DailyQuestModel.cs
@@ -1000,12 +1000,16 @@
                {
                    case 1:
                        var activityOpenTime = Config.Instance.Get<DailyQuestOpenTimeConfig>(config.RelatedID);
                        openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID, activityOpenTime.OpenTime, activityOpenTime.Duration);
                        openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID);
                        openTime.ParseQuestNormalOpenTime(activityOpenTime.OpenTime, activityOpenTime.Duration);
                        //还有定制的时间需要计算
                        dailyActionToDailyQuestTable[config.RelatedID] = config.ID;
                        break;
                    case 2:
                        var dungeonOpenTimes = DungeonStateTimeConfig.DungeonStateCanEnterFB(config.RelatedID);
                        openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID, dungeonOpenTimes);
                        openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID);
                        openTime.ParseDungeonNormalOpenTimes(dungeonOpenTimes);
                        //还有定制的时间需要计算
                        dungeonToDailyQuestTable[config.RelatedID] = config.ID;
                        break;
                }
@@ -1014,37 +1018,6 @@
                dailyQuests[config.ID] = new DailyQuestData(config.ID, DAILYQUEST_REDPOINTIDBASE + redpointIndex++, redpointParent);
            }
            for (int i = 0; i < 7; i++)
            {
                questCalendar[i] = new Dictionary<int, List<int>>();
            }
            foreach (var key in dailyQuestOpenTimes.Keys)
            {
                var dailyQuestOpenTime = dailyQuestOpenTimes[key];
                foreach (var week in dailyQuestOpenTime.openTimes.Keys)
                {
                    var hourMinutes = dailyQuestOpenTime.openTimes[week];
                    var timeNodeToQuests = questCalendar[week];
                    for (int i = 0; i < hourMinutes.Count; i++)
                    {
                        var hourMinute = hourMinutes[i];
                        var timeNode = hourMinute.hourBegin * 60 + hourMinute.minuteBegin;
                        List<int> quests;
                        if (timeNodeToQuests.ContainsKey(timeNode))
                        {
                            quests = timeNodeToQuests[timeNode];
                        }
                        else
                        {
                            timeNodeToQuests[timeNode] = quests = new List<int>();
                        }
                        quests.Add(key);
                    }
                }
            }
        }
        public enum DailyQuestCategory
System/Dungeon/DungeonBreifInfo.cs
@@ -79,14 +79,14 @@
                }
                else
                {
                    var week = TimeUtility.ServerNow.DayOfWeek;
                    if (dungeonOpenTime.openTimes.ContainsKey((int)week))
                    var week = (int)TimeUtility.ServerNow.DayOfWeek;
                    var openTimes = dungeonOpenTime.GetHourMinuteByWeek(week);
                    if (openTimes != null)
                    {
                        var durations = dungeonOpenTime.openTimes[(int)week];
                        var stringArray = new string[durations.Count];
                        for (int i = 0; i < durations.Count; i++)
                        var stringArray = new string[openTimes.Count];
                        for (int i = 0; i < openTimes.Count; i++)
                        {
                            stringArray[i] = durations[i].ToString();
                            stringArray[i] = openTimes[i].ToString();
                        }
                        m_OpenTime.text = string.Join(",", stringArray);
                    }
Utility/TimeUtility.cs
@@ -10,8 +10,10 @@
    /// <summary>
    /// 当前服务器时间
    /// </summary>
    public static DateTime ServerNow {
        get {
    public static DateTime ServerNow
    {
        get
        {
            float tick = Time.realtimeSinceStartup - _checkTime;
            DateTime real = _serverTime.AddSeconds(tick);
            return real;
@@ -22,37 +24,43 @@
    /// <summary>
    /// 年份
    /// </summary>
    public static int Year {
    public static int Year
    {
        get { return ServerNow.Year; }
    }
    /// <summary>
    /// 月份
    /// </summary>
    public static int Month {
    public static int Month
    {
        get { return ServerNow.Month; }
    }
    /// <summary>
    /// 天
    /// </summary>
    public static int Day {
    public static int Day
    {
        get { return ServerNow.Day; }
    }
    /// <summary>
    /// 小时
    /// </summary>
    public static int Hour {
    public static int Hour
    {
        get { return ServerNow.Hour; }
    }
    /// <summary>
    /// 分钟
    /// </summary>
    public static int Minute {
    public static int Minute
    {
        get { return ServerNow.Minute; }
    }
    /// <summary>
    /// 秒
    /// </summary>
    public static int Second {
    public static int Second
    {
        get { return ServerNow.Second; }
    }
    /// <summary>
@@ -63,22 +71,27 @@
    /// <summary>
    /// 服务器时间相比起始时间的秒数(主要方便比较)
    /// </summary>
    public static int AllSeconds {
        get {
    public static int AllSeconds
    {
        get
        {
            TimeSpan t = ServerNow - OriginalTime;
            return t.Seconds;
        }
    }
    public static int OpenDay {
    public static int OpenDay
    {
        get; private set;
    }
    public static bool IsMixServer {
    public static bool IsMixServer
    {
        get; private set;
    }
    public static int MixOpenDay {
    public static int MixOpenDay
    {
        get; private set;
    }
@@ -124,10 +137,11 @@
    {
        DateTime n = new DateTime(vNetData.Year, vNetData.Month, vNetData.Day, vNetData.Hour, vNetData.Minute, vNetData.Second);
        _serverTime = n;
        DebugEx.Log("OnRefreshServerTime月份:"+_serverTime.Month);
        DebugEx.Log("OnRefreshServerTime月份:" + _serverTime.Month);
        _checkTime = Time.realtimeSinceStartup;
        if (OnServerTimeRefresh != null) OnServerTimeRefresh();
        TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.SyncServerTime, 60, (float tick) => {
        TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.SyncServerTime, 60, (float tick) =>
        {
            SyncServerTime();
        }, 60);
    }
@@ -137,7 +151,8 @@
        OpenDay = package.Day;
        IsMixServer = package.IsMixServer == 1;
        MixOpenDay = package.MixDay;
        if (OnServerOpenDayRefresh != null) {
        if (OnServerOpenDayRefresh != null)
        {
            OnServerOpenDayRefresh();
        }
    }