public PlayerShip(WgStatsShip wgStatsShip, WgStatsPlayer player, WgShip wgShip, int relationship) : this(wgShip)
		{
			if (wgStatsShip == null || player == null) return;
			ShipId = wgStatsShip.ShipId;
			AccountId = wgStatsShip.AccountId;
			Nickname = player.Nickname;
			Relation = relationship;
			Frags = wgStatsShip.Pvp.Frags;
			Wins = wgStatsShip.Pvp.Wins;
			Battles = wgStatsShip.Pvp.Battles;
			DamageDealt = wgStatsShip.Pvp.DamageDealt;
			XpEarned = wgStatsShip.Pvp.Xp;
			IsPrivateOrHidden = wgStatsShip.Private != null;
		}
Example #2
0
        private async Task <PlayerShip> GetAsync(ReplayVehicle replayVehicle, bool ranked)
        {
            var wgShip = WgShips.SingleOrDefault(s => s.ShipId == replayVehicle.ShipId);

            try
            {
                var playerResponse =
                    await _httpClient.GetAsync($"wows/account/list/?application_id={ApplicationId}&search={replayVehicle.Name}");

                if (playerResponse.StatusCode == HttpStatusCode.OK)
                {
                    var playerJson = await playerResponse.Content.ReadAsStringAsync();

                    var players = await Task.Run(() => JsonConvert.DeserializeObject <WgPlayerSearchResult>(playerJson));

                    if (players.Status != "error")
                    {
                        var player = players.Data.SingleOrDefault(p => p.Nickname == replayVehicle.Name);
                        if (player != null)
                        {
                            var statsUrl = ranked
                                                                ? $"wows/seasons/shipstats/?application_id={ApplicationId}&account_id={player.AccountId}&ship_id={replayVehicle.ShipId}&season_id=7"
                                                                : $"wows/ships/stats/?application_id={ApplicationId}&account_id={player.AccountId}&ship_id={replayVehicle.ShipId}";
                            var shipStatsResponse = await _httpClient.GetAsync(statsUrl);

                            if (shipStatsResponse.StatusCode == HttpStatusCode.OK)
                            {
                                var shipStatsJson = await shipStatsResponse.Content.ReadAsStringAsync();

                                shipStatsJson = ranked
                                                                        ? shipStatsJson.Replace("\"" + player.AccountId + "\":", "\"season_wrapper\":")
                                                .Replace("\"7\":", "\"season_data\":")
                                                                        : shipStatsJson.Replace("\"" + player.AccountId + "\":", "\"Ships\":");
                                var shipStats = await Task.Run(() => JsonConvert.DeserializeObject <WgPlayerShipsStatsResult>(shipStatsJson));

                                if (shipStats?.Status != "error")
                                {
                                    if (ranked && shipStats?.Data?.SeasonsWrapper != null && shipStats.Data.SeasonsWrapper.Any())
                                    {
                                        var rankedShip = shipStats.Data.SeasonsWrapper.First().Seasons.SeasonData.Ship;
                                        var ship       = WgStatsShip.FromRanked(rankedShip, player.AccountId, replayVehicle.ShipId);
                                        return(new PlayerShip(ship, player, wgShip, replayVehicle.Relation));
                                    }
                                    if (shipStats?.Data?.Ships != null && shipStats.Data.Ships.Any())
                                    {
                                        var ship = shipStats.Data.Ships.First();
                                        return(new PlayerShip(ship, player, wgShip, replayVehicle.Relation));
                                    }
                                }
                                else
                                {
                                    _logger.Error("Error occured while fetching player " + replayVehicle.Name, null);
                                }
                            }
                        }
                    }
                    else
                    {
                        _logger.Error("Error occured while fetching player " + replayVehicle.Name, null);
                    }
                }
            }
            catch (Exception e)
            {
                _logger.Error("Error occured while fetching player " + replayVehicle.Name, e);
            }

            return(new PlayerShip(wgShip)
            {
                Nickname = replayVehicle.Name,
                Relation = replayVehicle.Relation,
                IsPrivateOrHidden = true
            });
        }