Beispiel #1
0
    void Start()
    {
        List <Player> tmpPlayers = GameMetaData.GetInstance().GetPlayers;
        GameObject    next;
        Player        winner     = null;
        PlayerInfo    winnerInfo = null;
        int           count      = 0;

        Vector3 addPosition   = new Vector3(stratPositionInfo.rect.width / (tmpPlayers.Count + 1), 0, 0);
        Vector3 startPosition = new Vector3(addPosition.x - (stratPositionInfo.rect.width / 2), 0, 0);

        foreach (Player player in tmpPlayers)
        {
            next = (GameObject)Instantiate(Resources.Load("Prefabs/PlayerInfo", typeof(GameObject)), stratPositionInfo);
            next.transform.localPosition = startPosition;
            startPosition += addPosition;

            PlayerInfo tmpPlInf = next.GetComponent <PlayerInfo>();
            tmpPlInf.ShowInfoPlayer(player, count);

            if (winner == null || winner.Score < player.Score || winner.Timer < player.Timer)
            {
                winner     = player;
                winnerInfo = tmpPlInf;
            }
            count++;
        }
        winnerInfo.ShowWin();
    }
    public static IEnumerator StartGameScene(int index)
    {
        CustomRun.instance = new CustomRun();
        if (MetaDatas[index] == null)
        {
            MetaDatas[index] = new GameMetaData()
            {
                GameSlot    = index,
                LastPlayed  = DateTime.Now,
                FloorNumber = 1
            };
        }
        instance = new SaveGameSystem(MetaDatas[index]);
        var game  = instance.LoadGameFromFileAsync();
        var async = SceneManager.LoadSceneAsync(SceneConstants.PlayGame);

        async.allowSceneActivation = false;

        while (!async.isDone && !game.IsCompleted)
        {
            yield return(null);
        }
        instance.Game = game.Result;
        async.allowSceneActivation = true;
    }
 public void UpdateGameInfo(GameMetaData data)
 {
     gameName.text = data.name;
     gameDesc.text = data.desc;
     metadata      = data;
     StartCoroutine(LoadSprite(Application.streamingAssetsPath + "/" + data.name + "/" + data.thumbPath));
 }
Beispiel #4
0
        public DateTime GetGameStartTime()
        {
            try
            {
                using (SmartWebClient client = new SmartWebClient(30000))
                {
                    // Proxy
                    client.Proxy = client.GetDefaulProxy();


                    string token = client.DownloadString(
                        String.Format("{0}/consumer/{1}/{2}/{3}/token", this.Server + "/observer-mode/rest",
                                      "getGameMetaData",
                                      Region,
                                      GameId));
                    GameMetaData gd    = JsonConvert.DeserializeObject <GameMetaData>(token);
                    DateTime     start = TimeZoneInfo.ConvertTime(DateTime.Parse(gd.startTime), TimeZoneInfo.FindSystemTimeZoneById(TimeZones[Region]), TimeZoneInfo.Local);
                    //       TimeSpan ts = new TimeSpan(gd.gameLength * TimeSpan.TicksPerSecond);

                    //  DateTime starttime = DateTime.Now.Subtract(ts);

                    return(start);
                }
            }



            catch
            {
            }
            return(DateTime.Now);
        }
        public static async Task <bool> Upload(string[] logLines, GameMetaData gameMetaData, GameStats game)
        {
            var log  = string.Join(Environment.NewLine, logLines);
            var item = new UploaderItem(log.GetHashCode());

            if (InProgress.Contains(item))
            {
                Log.Info($"{item.Hash} already in progress. Waiting for it to complete...");
                InProgress.Add(item);
                return(await item.Success);
            }
            InProgress.Add(item);
            Log.Info($"Uploading {item.Hash}...");
            var success = false;

            try
            {
                success = await TryUpload(logLines, gameMetaData, game, true);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                Influx.OnGameUploadFailed();
            }
            Log.Info($"{item.Hash} complete. Success={success}");
            foreach (var waiting in InProgress.Where(x => x.Hash == item.Hash))
            {
                waiting.Complete(success);
            }
            InProgress.RemoveAll(x => x.Hash == item.Hash);
            return(success);
        }
Beispiel #6
0
 public static GameMetaData GetInstance()
 {
     if (m_Instance == null)
     {
         m_Instance = new GameMetaData();
     }
     return(m_Instance);
 }
Beispiel #7
0
 void GoPlay()
 {
     while (tempStorage.Count > 0)
     {
         Player player = tempStorage.Pop();
         GameMetaData.GetInstance().SetPlayer(player);
     }
     SceneManager.LoadScene("Level");
 }
Beispiel #8
0
 public void PlayerLost()
 {
     IsDone            = true;
     player.Difficulty = speedDifficulty;
     player.Rows       = countRows;
     player.Score      = currentScore;
     player.Timer      = Time.time - timer;
     GameMetaData.GetInstance().SetPlayer(player);
     ManagerGame.singlton.CheckGameOver();
 }
Beispiel #9
0
 public MO2Installer(AbsolutePath archive, ModList modList, AbsolutePath outputFolder, AbsolutePath downloadFolder, SystemParameters parameters)
     : base(
         archive: archive,
         modList: modList,
         outputFolder: outputFolder,
         downloadFolder: downloadFolder,
         parameters: parameters,
         steps: 20)
 {
     Game = ModList.GameType.MetaData();
 }
Beispiel #10
0
            public bool Equals(GameMetaData other)
            {
                if (Id != other.Id)
                {
                    return(false);
                }
                if (Value != other.Value)
                {
                    return(false);
                }

                return(true);
            }
Beispiel #11
0
        public static bool TryGetByFuzzyName(string someName, [MaybeNullWhen(false)] out GameMetaData gameMetaData)
        {
            var result = TryGetByFuzzyName(someName);

            if (result == null)
            {
                gameMetaData = Games.Values.First();
                return(false);
            }

            gameMetaData = result;
            return(true);
        }
        public void LoadGame(EndOfGameStats eog, GameMetaData meta, BasicInfo pi, bool bluewin)
        {
            EOG   = eog;
            META  = meta;
            PI    = pi;
            BWINS = bluewin;
            gameInfoControl1.LoadGame(eog, meta, pi, bluewin);
            LoadStats();
            LoadCharts(pi.SummonerName);
            MethodInvoker mi = new MethodInvoker(LoadEvents);

            mi.BeginInvoke(null, null);
        }
        public VortexInstaller(string archive, ModList modList, string outputFolder, string downloadFolder)
            : base(
                archive: archive,
                modList: modList,
                outputFolder: outputFolder,
                downloadFolder: downloadFolder)
        {
            #if DEBUG
            // TODO: only for testing
            IgnoreMissingFiles = true;
            #endif

            GameInfo = ModList.GameType.MetaData();
        }
        public GameController()
        {
            this.LoLDataProvider = new LeagueDataProvider();
            this.OCRDataProvider = new OCRDataProvider();
            _ = new ReplayDataProvider();


            this.gameState = new State.Game.State(this);
            this.gameData  = new GameMetaData();

            StateController.GameStop += OnGameStop;

            LoadSettings();
            StartWaitingForTargetProcess();
        }
Beispiel #15
0
        public VortexInstaller(AbsolutePath archive, ModList modList, AbsolutePath outputFolder, AbsolutePath downloadFolder, SystemParameters parameters)
            : base(
                archive: archive,
                modList: modList,
                outputFolder: outputFolder,
                downloadFolder: downloadFolder,
                parameters: parameters,
                steps: 10)
        {
            #if DEBUG
            // TODO: only for testing
            IgnoreMissingFiles = true;
            #endif

            GameInfo = ModList.GameType.MetaData();
        }
Beispiel #16
0
        public string GetPGNFileHeader(GameMetaData metaData)
        {
            var sb = new StringBuilder();

            sb.AppendLine($"[Event \"{ metaData.Event }\"]");
            sb.AppendLine($"[Site \"{ metaData.Site }\"]");
            sb.AppendLine($"[Date \"{ metaData.Date }\"]");
            sb.AppendLine($"[Round \"{ metaData.Round }\"]");
            sb.AppendLine($"[White \"{ metaData.White }\"]");
            sb.AppendLine($"[Black \"{ metaData.Black }\"]");
            sb.AppendLine($"[Result \"{ metaData.Result }\"]");
            sb.AppendLine($"[WhiteELO \"{ metaData.WhiteELO }\"]");
            sb.AppendLine($"[BlackELO \"{ metaData.BlackELO }\"]");
            sb.AppendLine($"[ECO \"{ metaData.ECO }\"]");
            return(sb.ToString());
        }
Beispiel #17
0
 public void SetInfo(GameMetaData data, int gameSlot)
 {
     _gameSlot = gameSlot;
     if (data != null)
     {
         hasGameSlot         = true;
         ScrollText.text     = data.LastPlayed.ToString("MM-dd-yy HH:mm");
         ScrollText.fontSize = 34;
         GameInfo.SetActive(true);
         FloorNumber.text = data.FloorNumber.ToString();
     }
     else
     {
         SetStartNewGameText();
     }
 }
Beispiel #18
0
        public StringBuilder GetGameHeader(GameMetaData gameMetaData)
        {
            var sb = new StringBuilder();
            //write meta data
            var types = Enum.GetNames(typeof(MetaType));

            foreach (var type in types)
            {
                string value      = gameMetaData.GetValue(type);
                string headerLine = string.Concat("[", type, " \"", value + "\"]");
                sb.AppendLine(headerLine);
            }
            sb.AppendLine("");

            return(sb);
        }
Beispiel #19
0
        public GameMetaData ParsePGNData(string input)
        {
            var metaData = new GameMetaData();

            var findNode  = new Regex(nodePattern, RegexOptions.IgnoreCase);
            var nodeMatch = findNode.Match(input);

            var names = Enum.GetNames(typeof(MetaType));

            while (nodeMatch.Success)
            {
                for (int i = 1; i <= 2; i++)
                {
                    var group             = nodeMatch.Groups[i];
                    var captureCollection = group.Captures;
                    for (int j = 0; j < captureCollection.Count; j++)
                    {
                        var capture = captureCollection[j];

                        var label = names.Where(n => capture.Value.Split(' ')[0] == n).FirstOrDefault();

                        if (!string.IsNullOrEmpty(label))
                        {
                            var metaType = (MetaType)Enum.Parse(typeof(MetaType), label);
                            var value    = capture.Value.Replace("\"", "").Replace(label, "").Trim();
                            metaData.SetValue(metaType, value);
                        }
                    }
                }
                nodeMatch = nodeMatch.NextMatch();
            }

            //so far this messes up with comments
            var modInput = Regex.Replace(input, removeComments, string.Empty);
            var twoParts = modInput.Split("\r\n\r\n");
            var justPGN  = twoParts[1];
            var moves    = new Regex(@"\d*\.\s?").Split(justPGN).ToList().Where(a => !string.IsNullOrEmpty(a));
            var moveNum  = 1;

            foreach (var move in moves)
            {
                metaData.Moves.Add(moveNum, move);
                moveNum++;
            }
            return(metaData);
        }
Beispiel #20
0
 public void CreateGameMetaData()
 {
     try
     {
         GameMetaData = new GameMetaData()
         {
             Game            = "DAYACTIVE",
             GameDisplayName = "DayActive",
             IconColorId     = 5
         };
     }
     catch (Exception ex)
     {
         string currentMethodName = ErrorHandling.GetCurrentMethodName();
         ErrorHandling.LogErrorToTxtFile(ex, currentMethodName);
     }
 }
Beispiel #21
0
        internal static void Initialize()
        {
            Util.WriteLog("### OVERWATCH - GAMESENSE ###");

            System.AppDomain.CurrentDomain.UnhandledException += (s, e) =>
            {
                Util.WriteLog($"EXCEPTION!: {((System.Exception)e.ExceptionObject).Message}");
            };

            http = new HttpTool();

            Util.WriteLog("Removing game registration");
            http.PostAsync("remove_game", new { game = "OVERWATCH" }).ConfigureAwait(true);

            Util.WriteLog("Sending game registration");
            http.PostAsync("game_metadata", GameMetaData.GetOverwatchRegistration()).ConfigureAwait(true);
            Util.WriteLog("Done sending game registration");
        }
Beispiel #22
0
        public string ConvertToPGN(GameMetaData metaData)
        {
            var sb = GetGameHeader(metaData);

            int i = 1;

            foreach (var move in metaData.Moves)
            {
                sb.Append(move.Value + " ");
                if (i % 7 == 0)
                {
                    sb.Append("\n");
                }
                i++;
            }

            return(sb.ToString());
        }
        private static async Task <bool> TryUpload(string[] logLines, GameMetaData gameMetaData, GameStats game, bool submitFailure)
        {
            try
            {
                game?.HsReplay.UploadTry();
                Influx.OnGameUpload(game?.HsReplay.UploadTries ?? 1);
                var lines    = logLines.SkipWhile(x => !x.Contains("CREATE_GAME")).ToArray();
                var metaData = UploadMetaDataGenerator.Generate(lines, gameMetaData, game);
                Log.Info("Creating upload request...");
                var uploadRequest = await ApiWrapper.CreateUploadRequest(metaData);

                Log.Info("Upload Id: " + uploadRequest.ShortId);
                await ApiWrapper.UploadLog(uploadRequest, lines);

                Log.Info("Upload complete");
                if (game != null)
                {
                    game.HsReplay.UploadId  = uploadRequest.ShortId;
                    game.HsReplay.ReplayUrl = uploadRequest.ReplayUrl;
                    if (DefaultDeckStats.Instance.DeckStats.Any(x => x.DeckId == game.DeckId))
                    {
                        DefaultDeckStats.Save();
                    }
                    else
                    {
                        DeckStatsList.Save();
                    }
                }
                return(true);
            }
            catch (WebException ex)
            {
                Log.Error(ex);
                if (submitFailure)
                {
                    Influx.OnGameUploadFailed(ex.Status);
                }
                return(false);
            }
        }
Beispiel #24
0
    void Start()
    {
        if (singlton != null)
        {
            Destroy(singlton.gameObject);
        }
        singlton = this;


        List <Player> players = GameMetaData.GetInstance().GetPlayers;

        Transform[] tmpPosition = new Transform[players.Count];

        if (players.Count == 1)
        {
            tmpPosition[0] = startPositionSolo;
        }
        else if (players.Count == 2)
        {
            tmpPosition = startPositionPlayer2;
        }
        else
        {
            tmpPosition = startPositionPlayer3;
        }

        GameObject instGrid;
        Game       game;


        for (int i = 0; i < players.Count; i++)
        {
            instGrid = (GameObject)Instantiate(prefabGrid, tmpPosition[i]);
            game     = instGrid.GetComponentInChildren <Game>();
            games.Add(game);
            game.GoStart(players[i]);
        }
    }
Beispiel #25
0
    void Start()
    {
        NewGameCanvas.SetActive(false);

        if (!GameFileManager.Exists("Meta"))
        {
            GameMetaData = new GameMetaData();
            GameFileManager.Save(GameMetaData, "Meta");
        }
        else
        {
            GameMetaData = GameFileManager.Load <GameMetaData>("Meta");
        }


        foreach (var g in GameMetaData.GameSaves)
        {
            string t   = g.Key;
            var    btn = Instantiate(ButtonPrefab, LoadGames.transform);
            btn.onClick.AddListener(delegate { Load(t); });
            btn.transform.GetChild(0).GetComponent <Text>().text = t;
        }
    }
        public void LoadGame(EndOfGameStats eog, GameMetaData meta, BasicInfo pi, bool bluewin)
        {
            try
            {
                //   RiotSharp.MatchEndpoint.MatchDetail m = Program.MainFormInstance.API.GetMatch(RiotTool.PlatformToRegion(meta.gameKey.platformId), (long)eog.GameId);

                TeamStats blueteam = new TeamStats();
                TeamStats redteam  = new TeamStats();
                BluePanel.Controls.Clear();
                RedPanel.Controls.Clear();
                if (!bluewin)
                {
                    metroLabel1.Text  = "Red Team Wins";
                    metroLabel1.Style = MetroFramework.MetroColorStyle.Red;
                }
                if (meta.gameKey.platformId != "PBE1")
                {
                    ginfo.Text = RiotTool.ToMapString((RiotSharp.MapType)pi.Map) + ", " + RiotTool.ToQueueString((QueueType)pi.Queue) + " - " + RiotTool.PlatformToRegion(meta.gameKey.platformId).ToString().ToUpper();
                }
                else
                {
                    ginfo.Text = eog.GameMode + ", " + eog.GameType.Replace("_", " ") + " - " + RiotTool.PlatformToRegion(meta.gameKey.platformId).ToString().ToUpper();
                }
                if (eog != null)
                {
                    foreach (PlayerParticipantStatsSummary p in eog.TeamPlayerParticipantStats)
                    {
                        Player2Ctrl p2 = new Player2Ctrl(p.TeamId == 200);

                        p2.LoadPlayer(p, p.SummonerName, p.SkinName, ref blueteam);
                        p2.Dock = DockStyle.Top;
                        if (p.TeamId == 100)
                        {
                            BluePanel.Controls.Add(p2);
                        }
                        else
                        {
                            RedPanel.Controls.Add(p2);
                        }
                    }
                    foreach (PlayerParticipantStatsSummary p in eog.OtherTeamPlayerParticipantStats)
                    {
                        Player2Ctrl p2 = new Player2Ctrl(p.TeamId == 200);

                        p2.LoadPlayer(p, p.SummonerName, p.SkinName, ref redteam);
                        p2.Dock = DockStyle.Top;
                        if (p.TeamId == 100)
                        {
                            BluePanel.Controls.Add(p2);
                        }
                        else
                        {
                            RedPanel.Controls.Add(p2);
                        }
                    }
                }

                bluewk.Text     = blueteam.WD.ToString();
                bluewp.Text     = blueteam.WP.ToString();
                bluecreeps.Text = blueteam.CREEPS.ToString();
                bluekda.Text    = blueteam.Kill + " / " + blueteam.Deaths + " / " + blueteam.Assists;
                bluetd.Text     = blueteam.TD.ToString();

                redwk.Text     = redteam.WD.ToString();
                redwp.Text     = redteam.WP.ToString();
                redcreeps.Text = redteam.CREEPS.ToString();
                redkda.Text    = redteam.Kill + " / " + redteam.Deaths + " / " + redteam.Assists;
                redtd.Text     = redteam.TD.ToString();

                BluePanel.Controls.Add(panel5);
                RedPanel.Controls.Add(panel4);
            }
            catch (Exception ex)
            {
                Logger.Instance.Log.Error("Failed to load game", ex);
            }
        }
Beispiel #27
0
 public GameNotInstalledException(GameMetaData gameMetaData) : base($"Game {gameMetaData.Game} does not appear to be installed.")
 {
 }
Beispiel #28
0
        public static UploadMetaData Generate(GameMetaData gameMetaData, GameStats game)
        {
            var metaData = new UploadMetaData();
            var players  = GetPlayerInfo(game);

            if (players != null)
            {
                if (game.GameType == GameType.GT_BATTLEGROUNDS)
                {
                    metaData.Players = players;
                }
                else
                {
                    metaData.Player1 = players.FirstOrDefault(x => x.Id == 1);
                    metaData.Player2 = players.FirstOrDefault(x => x.Id == 2);
                }
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.Address))
            {
                metaData.ServerIp = gameMetaData.ServerInfo.Address;
            }
            if (gameMetaData?.ServerInfo?.Port > 0)
            {
                metaData.ServerPort = gameMetaData.ServerInfo.Port.ToString();
            }
            if (gameMetaData?.ServerInfo?.GameHandle > 0)
            {
                metaData.GameHandle = gameMetaData.ServerInfo.GameHandle.ToString();
            }
            if (gameMetaData?.ServerInfo?.ClientHandle > 0)
            {
                metaData.ClientHandle = gameMetaData.ServerInfo.ClientHandle.ToString();
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.SpectatorPassword))
            {
                metaData.SpectatePassword = gameMetaData.ServerInfo.SpectatorPassword;
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.AuroraPassword))
            {
                metaData.AuroraPassword = gameMetaData.ServerInfo.AuroraPassword;
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.Version))
            {
                metaData.ServerVersion = gameMetaData.ServerInfo.Version;
            }
            if (game?.StartTime > DateTime.MinValue)
            {
                metaData.MatchStart = game.StartTime.ToString("o");
            }
            if (game != null)
            {
                metaData.GameType = game.GameType != GameType.GT_UNKNOWN ? (int)HearthDbConverter.GetBnetGameType(game.GameType, game.Format) : (int)HearthDbConverter.GetGameType(game.GameMode, game.Format);
            }
            if (game?.Format != null)
            {
                metaData.Format = (int)HearthDbConverter.GetFormatType(game.Format);
            }
            metaData.SpectatorMode    = game?.GameMode == GameMode.Spectator;
            metaData.Reconnected      = gameMetaData?.Reconnected ?? false;
            metaData.Resumable        = gameMetaData?.ServerInfo?.Resumable ?? false;
            metaData.FriendlyPlayerId = game?.FriendlyPlayerId > 0 ? game.FriendlyPlayerId : (int?)null;
            var scenarioId = game?.ScenarioId ?? gameMetaData?.ServerInfo?.Mission;

            if (scenarioId > 0)
            {
                metaData.ScenarioId = scenarioId;
            }
            var build = gameMetaData?.HearthstoneBuild;

            if (build == null || build == 0)
            {
                build = game?.HearthstoneBuild;
            }
            if ((build == null || build == 0) && game != null)
            {
                build = BuildDates.GetByDate(game.StartTime);
            }
            if (build > 0)
            {
                metaData.HearthstoneBuild = build;
            }
            if (game?.BrawlSeasonId > 0)
            {
                metaData.BrawlSeason = game.BrawlSeasonId;
            }
            if (game?.RankedSeasonId > 0)
            {
                metaData.LadderSeason = game.RankedSeasonId;
            }
            if (gameMetaData?.TwitchVodData != null)
            {
                metaData.TwitchVod = gameMetaData.TwitchVodData;
            }
            if (game?.LeagueId > 0)
            {
                metaData.LeagueId = game.LeagueId;
            }
            return(metaData);
        }
Beispiel #29
0
        public static UploadMetaData Generate(GameMetaData gameMetaData, GameStats game)
        {
            var metaData = new UploadMetaData();
            var players  = GetPlayerInfo(game);

            if (players != null)
            {
                if (game.GameMode == GameMode.Battlegrounds || game.GameMode == GameMode.Mercenaries)
                {
                    metaData.Players = players;
                }
                else
                {
                    metaData.Player1 = players.FirstOrDefault(x => x.Id == 1);
                    metaData.Player2 = players.FirstOrDefault(x => x.Id == 2);
                }
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.Address))
            {
                metaData.ServerIp = gameMetaData.ServerInfo.Address;
            }
            if (gameMetaData?.ServerInfo?.Port > 0)
            {
                metaData.ServerPort = gameMetaData.ServerInfo.Port.ToString();
            }
            if (gameMetaData?.ServerInfo?.GameHandle > 0)
            {
                metaData.GameHandle = gameMetaData.ServerInfo.GameHandle.ToString();
            }
            if (gameMetaData?.ServerInfo?.ClientHandle > 0)
            {
                metaData.ClientHandle = gameMetaData.ServerInfo.ClientHandle.ToString();
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.SpectatorPassword))
            {
                metaData.SpectatePassword = gameMetaData.ServerInfo.SpectatorPassword;
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.AuroraPassword))
            {
                metaData.AuroraPassword = gameMetaData.ServerInfo.AuroraPassword;
            }
            if (!string.IsNullOrEmpty(gameMetaData?.ServerInfo?.Version))
            {
                metaData.ServerVersion = gameMetaData.ServerInfo.Version;
            }
            if (game?.StartTime > DateTime.MinValue)
            {
                metaData.MatchStart = game.StartTime.ToString("o");
            }
            if (game != null)
            {
                metaData.GameType = (int)HearthDbConverter.GetBnetGameType(game.GameType, game.Format);
            }
            if (game?.Format != null)
            {
                metaData.Format = (int)HearthDbConverter.GetFormatType(game.Format);
            }
            metaData.SpectatorMode    = game?.GameMode == GameMode.Spectator;
            metaData.Reconnected      = gameMetaData?.Reconnected ?? false;
            metaData.Resumable        = gameMetaData?.ServerInfo?.Resumable ?? false;
            metaData.FriendlyPlayerId = game?.FriendlyPlayerId > 0 ? game.FriendlyPlayerId : (int?)null;
            var scenarioId = game?.ScenarioId ?? gameMetaData?.ServerInfo?.Mission;

            if (scenarioId > 0)
            {
                metaData.ScenarioId = scenarioId;
            }
            var build = gameMetaData?.HearthstoneBuild;

            if (build == null || build == 0)
            {
                build = game?.HearthstoneBuild;
            }
            if ((build == null || build == 0) && game != null)
            {
                build = BuildDates.GetByDate(game.StartTime);
            }
            if (build > 0)
            {
                metaData.HearthstoneBuild = build;
            }
            if (game?.BrawlSeasonId > 0)
            {
                metaData.BrawlSeason = game.BrawlSeasonId;
            }
            if (game?.RankedSeasonId > 0)
            {
                metaData.LadderSeason = game.RankedSeasonId;
            }
            if (gameMetaData?.TwitchVodData != null)
            {
                metaData.TwitchVod = gameMetaData.TwitchVodData;
            }
            if (game?.LeagueId > 0)
            {
                metaData.LeagueId = game.LeagueId;
            }
            if (game?.GameMode == GameMode.Battlegrounds)
            {
                metaData.BattlegroundsRaces = game.BattlegroundsRaces?.Cast <int>().OrderBy(x => x).ToArray();
            }
            if (game?.GameMode == GameMode.Mercenaries)
            {
                if (game?.MercenariesBountyRunRewards?.Count > 0)
                {
                    metaData.MercenariesRewards = game.MercenariesBountyRunRewards
                                                  .Select(x => new UploadMetaData.MercenaryReward()
                    {
                        Id = x.Id, Coins = x.Coins
                    })
                                                  .ToList();
                }
                if (!string.IsNullOrEmpty(game?.MercenariesBountyRunId))
                {
                    metaData.MercenariesBountyRunId             = game.MercenariesBountyRunId;
                    metaData.MercenariesBountyRunTurnsTaken     = game.MercenariesBountyRunTurnsTaken;
                    metaData.MercenariesBountyRunCompletedNodes = game.MercenariesBountyRunCompletedNodes;
                }
            }
            return(metaData);
        }
Beispiel #30
0
        public ReplayRecorder(string Server, long GameId, string Region, string Key, GhostReplay rep)
        {
            try
            {
                this.DownloadTasks = new List <DownloadTask>();
                this.GameId        = GameId;
                this.Region        = Region;
                CurrentReplay      = rep;
                Recording          = true;

                if (Directory.Exists(rep.CacheDirectory))
                {
                    File.WriteAllText(rep.CacheDirectory + @"\cache.dat", Key);
                    if (!string.IsNullOrEmpty(rep.SummonerName))
                    {
                        File.WriteAllText(rep.CacheDirectory + @"\summoner.dat", rep.SummonerName);
                    }
                }

                if (!Server.StartsWith("127.0.0.1:90"))
                {
                    this.Server = "http://" + Server;

                    rep.ObserverKey = Key;

                    int ChunkTimeInterval;
                    int LastChunk = 0;
                    using (SmartWebClient client = new SmartWebClient(30000))
                    {
                        // Proxy
                        client.Proxy = client.GetDefaulProxy();
                        // Version
                        rep.Version = client.DownloadString(String.Format("{0}/consumer/version", this.Server + "/observer-mode/rest"));
                        // Token
                        string token = client.DownloadString(String.Format("{0}/consumer/{1}/{2}/{3}/token", this.Server + "/observer-mode/rest", "getGameMetaData", Region, GameId));

                        GameMetaData meta = JsonConvert.DeserializeObject <GameMetaData>(token);
                        ChunkTimeInterval = meta.chunkTimeInterval;
                        LastChunk         = meta.endStartupChunkId;
                    }

                    ThreadPool.QueueUserWorkItem(delegate
                    {
                        while (Recording)
                        {
                            try
                            {
                                GetChunk();
                                RetryAttempt = 0;
                            }
                            catch (Exception ex)
                            {
                                RetryAttempt++;
                                if (OnProblemOccured != null)
                                {
                                    OnProblemOccured(this, EventArgs.Empty);
                                }

                                if (RetryAttempt >= 10 && OnFailedToRecord != null)
                                {
                                    Recording = false;
                                    OnFailedToRecord(ex);
                                }
                                else
                                {
                                    Thread.Sleep(15000);
                                }
                                if (RetryAttempt == 1)
                                {
                                    Logger.Instance.Log.Error("Failed to record [GET CHUNK]", ex);
                                }
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                if (OnFailedToRecord != null)
                {
                    OnFailedToRecord(ex);
                }
                Logger.Instance.Log.Error("Failed to record [GLOBAL]", ex);
                Recording = false;
            }
        }