示例#1
0
        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();
        }
示例#2
0
        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);
                    }
                }
            }
        }