public void HandleInMenu() { if (Game.IsInMenu) { return; } if (Config.Instance.RecordReplays && Game.Entities.Count > 0 && !Game.SavedReplay && Game.CurrentGameStats != null && Game.CurrentGameStats.ReplayFile == null && RecordCurrentGameMode) { Game.CurrentGameStats.ReplayFile = ReplayMaker.SaveToDisk(); } SaveAndUpdateStats(); Game.IsInMenu = true; TurnTimer.Instance.Stop(); Helper.MainWindow.Overlay.HideTimers(); Helper.MainWindow.Overlay.HideSecrets(); if (Config.Instance.KeyPressOnGameEnd != "None" && Helper.MainWindow.EventKeys.Contains(Config.Instance.KeyPressOnGameEnd)) { SendKeys.SendWait("{" + Config.Instance.KeyPressOnGameEnd + "}"); Logger.WriteLine("Sent keypress: " + Config.Instance.KeyPressOnGameEnd, "GameEventHandler"); } if (!Config.Instance.KeepDecksVisible) { var deck = DeckList.Instance.ActiveDeckVersion; if (deck != null) { Game.SetPremadeDeck((Deck)deck.Clone()); } } if (!Game.IsUsingPremade) { Game.DrawnLastGame = new List <Card>(Game.PlayerDrawn); } HsLogReader.Instance.ClearLog(); if (!Config.Instance.KeepDecksVisible) { Game.Reset(false); } if (Game.CurrentGameStats != null && Game.CurrentGameStats.Result != GameResult.None) { Game.CurrentGameStats = null; } if (Game.CurrentGameMode == GameMode.Spectator) { SetGameMode(GameMode.None); } GameEvents.OnInMenu.Execute(); }
private async Task SaveReplays() { if (!_savedReplay && _game.CurrentGameStats != null) { _savedReplay = true; await LogIsComplete(); var powerLog = new List <string>(); foreach (var stored in _game.StoredPowerLogs.Where(x => x.Item1 == _game.MetaData.ServerInfo.GameHandle)) { powerLog.AddRange(stored.Item2); } powerLog.AddRange(_game.PowerLog); var createGameCount = 0; powerLog = powerLog.TakeWhile(x => !(x.Contains("CREATE_GAME") && createGameCount++ == 1)).ToList(); if (Config.Instance.RecordReplays && RecordCurrentGameMode && _game.Entities.Count > 0 && !_game.SavedReplay && _game.CurrentGameStats.ReplayFile == null) { _game.CurrentGameStats.ReplayFile = ReplayMaker.SaveToDisk(_game.CurrentGameStats, powerLog); } if (Config.Instance.HsReplayAutoUpload && UploadCurrentGameMode) { var log = powerLog.ToArray(); var validationResult = LogValidator.Validate(log); if (validationResult.IsValid) { LogUploader.Upload(log, (GameMetaData)_game.MetaData.Clone(), _game.CurrentGameStats).Forget(); } else { Log.Error("Invalid log: " + validationResult.Reason); Influx.OnEndOfGameUploadError(validationResult.Reason); } } } }