Esempio n. 1
0
 public static void LoadSyncData(DateTime now, bool rebuild = false)
 {
     lock (EscapeBattle_K.Mutex)
     {
         List <KFEscapeRankInfo> rankList       = new List <KFEscapeRankInfo>();
         List <KFEscapeRankInfo> SeasonRankList = new List <KFEscapeRankInfo>();
         if (KuaFuServerManager.IsGongNengOpened(115) && EscapeBattleConsts.CheckOpenState(now))
         {
             int weekStartDay = TimeUtil.GetWeekStartDayIdNow();
             int offsetDay    = TimeUtil.GetOffsetDayNow();
             int startDay     = EscapeBattle_K.Persistence.GetAsyncInt(14, weekStartDay);
             startDay = MathEx.Pack(offsetDay, startDay, EscapeBattleConsts.DaysPerSeason);
             int      lastStartDay = startDay - EscapeBattleConsts.DaysPerSeason;
             DateTime minFightTime = TimeUtil.GetRealDate(startDay);
             if (EscapeBattle_K.Persistence.BuildEscapeRankList(startDay, minFightTime))
             {
             }
             EscapeBattle_K.SyncData.Season = startDay;
             if (offsetDay == startDay)
             {
                 EscapeBattle_K.Persistence.SetAsyncInt(14, EscapeBattle_K.SyncData.Season);
             }
             rankList       = EscapeBattle_K.Persistence.LoadEscapeRankData(startDay);
             SeasonRankList = EscapeBattle_K.Persistence.LoadEscapeRankData(lastStartDay);
         }
         EscapeBattle_K.SyncData.RankList       = rankList;
         EscapeBattle_K.SyncData.SeasonRankList = SeasonRankList;
         EscapeBattle_K.SyncData.RankModTime    = now;
     }
 }
Esempio n. 2
0
        private int ComputeCurrentSeasonID(DateTime now, int CurrentSeasonID)
        {
            int result;

            if (!this.CheckOpenState(now))
            {
                result = 0;
            }
            else if (!KuaFuServerManager.IsGongNengOpened(114))
            {
                result = 0;
            }
            else
            {
                lock (this.MutexConfig)
                {
                    DateTime OpenTime = ZorkBattleUtils.GetSeasonDateTm(CurrentSeasonID);
                    if (OpenTime == DateTime.MinValue)
                    {
                        TimeSpan start = TimeSpan.MaxValue;
                        foreach (ZorkBattleSceneInfo item in this.SceneDataDict.Values)
                        {
                            for (int i = 0; i < item.TimePoints.Count - 1; i += 2)
                            {
                                TimeSpan startTm = item.TimePoints[i];
                                if (startTm.Days == 0)
                                {
                                    startTm += new TimeSpan(7, 0, 0, 0);
                                }
                                if (startTm < start)
                                {
                                    start = startTm;
                                }
                            }
                        }
                        start -= new TimeSpan(1, 0, 0, 0);
                        int spanday = TimeUtil.NowDateTime().DayOfWeek - DayOfWeek.Monday;
                        spanday = ((spanday >= 0) ? (-spanday) : (-(7 + spanday)));
                        TimeSpan nowfromMonday = new TimeSpan(Math.Abs(spanday), now.Hour, now.Minute, now.Second);
                        if (nowfromMonday < start)
                        {
                            OpenTime = TimeUtil.NowDateTime().AddDays((double)spanday);
                        }
                        else
                        {
                            OpenTime = TimeUtil.NowDateTime().AddDays((double)(spanday + 7));
                        }
                    }
                    else if ((now - OpenTime).Days >= this.SeasonWeeks * 7)
                    {
                        int spanday = TimeUtil.NowDateTime().DayOfWeek - DayOfWeek.Monday;
                        spanday  = ((spanday >= 0) ? (-spanday) : (-(7 + spanday)));
                        OpenTime = TimeUtil.NowDateTime().AddDays((double)spanday);
                    }
                    result = ZorkBattleUtils.MakeSeason(OpenTime);
                }
            }
            return(result);
        }
Esempio n. 3
0
        private int GetCurrentRoundByTime(DateTime now, int CurrentSeasonID)
        {
            int result;

            if (!this.CheckOpenState(now))
            {
                result = 0;
            }
            else if (!KuaFuServerManager.IsGongNengOpened(114))
            {
                result = 0;
            }
            else
            {
                lock (this.MutexConfig)
                {
                    ZorkBattleSceneInfo sceneConfig = this.SceneDataDict.Values.FirstOrDefault <ZorkBattleSceneInfo>();
                    if (null == sceneConfig)
                    {
                        result = 0;
                    }
                    else
                    {
                        DateTime curSeasonTime = ZorkBattleUtils.GetSeasonDateTm(CurrentSeasonID);
                        if (now < curSeasonTime)
                        {
                            result = 1;
                        }
                        else
                        {
                            TimeSpan fromMonday = new TimeSpan((int)now.DayOfWeek, now.Hour, now.Minute, now.Second);
                            if (fromMonday.Days == 0)
                            {
                                fromMonday += new TimeSpan(7, 0, 0, 0);
                            }
                            int weekRound = 0;
                            for (int i = 0; i < sceneConfig.TimePoints.Count - 1; i += 2)
                            {
                                TimeSpan myTmp = sceneConfig.TimePoints[i + 1];
                                if (myTmp.Days == 0)
                                {
                                    myTmp += new TimeSpan(7, 0, 0, 0);
                                }
                                if (fromMonday > myTmp)
                                {
                                    weekRound++;
                                }
                            }
                            int week  = (now - curSeasonTime).Days % (7 * this.SeasonWeeks) / 7;
                            int round = week * sceneConfig.TimePoints.Count / 2 + weekRound + 1;
                            result = Math.Min(round, sceneConfig.SeasonFightRound + 1);
                        }
                    }
                }
            }
            return(result);
        }
Esempio n. 4
0
 private void MS_Init_Update(DateTime now, int param)
 {
     if (this.CheckOpenState(now))
     {
         if (KuaFuServerManager.IsGongNengOpened(114))
         {
             ZorkBattleSceneInfo           matchConfig = this.SceneDataDict.Values.FirstOrDefault <ZorkBattleSceneInfo>();
             Zork5v5StateMachine.StateType GameState   = Zork5v5StateMachine.StateType.Init;
             for (int i = 0; i < matchConfig.TimePoints.Count - 1; i += 2)
             {
                 if (now.DayOfWeek == (DayOfWeek)matchConfig.TimePoints[i].Days)
                 {
                     int RoundSeconds  = matchConfig.BattleSignSecs + matchConfig.PrepareSecs + matchConfig.FightingSecs + matchConfig.ClearRolesSecs;
                     int MatchPerRound = (int)(matchConfig.SecondsOfDay[i + 1] - matchConfig.SecondsOfDay[i]) / RoundSeconds;
                     for (int matchloop = 0; matchloop < MatchPerRound; matchloop++)
                     {
                         int signSeconds  = (int)matchConfig.SecondsOfDay[i] + RoundSeconds * matchloop;
                         int startSeconds = signSeconds + matchConfig.BattleSignSecs;
                         int endSeconds   = startSeconds + RoundSeconds - matchConfig.BattleSignSecs;
                         if (now.TimeOfDay.TotalSeconds >= (double)signSeconds && now.TimeOfDay.TotalSeconds < (double)startSeconds)
                         {
                             GameState = Zork5v5StateMachine.StateType.SignUp;
                         }
                         else if (now.TimeOfDay.TotalSeconds >= (double)startSeconds && now.TimeOfDay.TotalSeconds < (double)endSeconds)
                         {
                             GameState = Zork5v5StateMachine.StateType.GameStart;
                         }
                     }
                 }
             }
             if (this.CurrentSeasonID > 0)
             {
                 if (this.CurrentSeasonID != this.ComputeCurrentSeasonID(now, this.CurrentSeasonID))
                 {
                     GameState = Zork5v5StateMachine.StateType.RankAnalyse;
                 }
             }
             else
             {
                 this.CurrentSeasonID = this.ComputeCurrentSeasonID(now, this.CurrentSeasonID);
                 this.Persistence.SaveZorkSeasonID(this.CurrentSeasonID);
                 this.CurrentRound = this.GetCurrentRoundByTime(now, this.CurrentSeasonID);
             }
             if (GameState != Zork5v5StateMachine.StateType.Init)
             {
                 this.StateMachine.SetCurrState(GameState, now, param);
                 LogManager.WriteLog(LogTypes.Analysis, string.Format("Zork::MS_Init_Update To:{0} SeasonID:{1} Round:{2}", GameState, this.CurrentSeasonID, this.CurrentRound), null, true);
             }
         }
     }
 }