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