Пример #1
0
        private static void PutPlayer(long playerId)
        {
            var connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString;
            var provider         = new DbProvider(connectionString);
            var player           = provider.GetPlayer(playerId, true);

            player.Calculate(provider.GetWn8ExpectedValues(player.Plataform));

            var putter = new Putter("http://localhost:6094/", ConfigurationManager.AppSettings["ApiAdminKey"]);

            putter.Put(player);

            var ks          = new KeyStore(connectionString);
            var savedPlayer = ks.GetPlayer(playerId);
        }
Пример #2
0
        public ActionResult Recent(string clanName, long playerId)
        {
            var getter = HttpRuntime.Cache.Get("FileGetter", GlobalHelper.CacheMinutes,
                                               () => new FileGetter(GlobalHelper.DataFolder));

            var clan = getter.GetClan(clanName);

            if (clan == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound, $"Can't find the clan [{clanName}] on this server."));
            }

            var player = clan.Get(playerId);

            if (player == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound, $"Can't find a player with id {clanName} on this server."));
            }

            string url;

            switch (player.Origin)
            {
            case PlayerDataOrigin.WotStatConsole:
                url = GetWoTStatConsoleRecentUrl(player);
                break;

            case PlayerDataOrigin.WotInfo:
                url = GetWoTInfoRecentUrl(player);
                break;

            default:
                url = GetDefaultRecentUrl(player);
                break;
            }

            if (GlobalHelper.UseExternalPlayerPage)
            {
                return(Redirect(url));
            }

            try
            {
                var connectionString = ConfigurationManager.ConnectionStrings["Store"].ConnectionString;
                var db         = new KeyStore(connectionString);
                var fullPlayer = db.GetPlayer(playerId);

                if (fullPlayer == null)
                {
                    Log.Warn($"Recent({clanName}, {playerId}): fullPlayer == null");
                    return(Redirect(url));
                }

                var wn8ExpectedValues = getter.GetTanksWN8ReferenceValues();
                if (wn8ExpectedValues == null)
                {
                    Log.Error($"Recent({clanName}, {playerId}): wn8ExpectedValues == null");
                    return(Redirect(url));
                }

                var moes = getter.GetTanksMoe();

                if (fullPlayer.Performance == null)
                {
                    Log.Error($"Recent({clanName}, {playerId}): fullPlayer.Performance == null");
                    return(Redirect(url));
                }

                if (fullPlayer.Performance.All == null)
                {
                    Log.Error($"Recent({clanName}, {playerId}): fullPlayer.Performance.All == null");
                    return(Redirect(url));
                }

                if (fullPlayer.Performance.Month == null)
                {
                    Log.Error($"Recent({clanName}, {playerId}): fullPlayer.Performance.Month == null");
                    return(Redirect(url));
                }

                if (fullPlayer.Performance.Week == null)
                {
                    Log.Error($"Recent({clanName}, {playerId}): fullPlayer.Performance.Week == null");
                    return(Redirect(url));
                }

                fullPlayer.Calculate(wn8ExpectedValues);

                var model = new PlayerPage
                {
                    Clan              = clan,
                    Player            = fullPlayer,
                    Wn8ExpectedValues = wn8ExpectedValues,
                    MoEs              = moes,
                    ExternalUrl       = url,

                    WoTStatConsoleOverallUrl = GetWoTStatConsoleOverallUrl(player),
                    WotStatConsoleRecentUrl  = GetWoTStatConsoleRecentUrl(player),
                    WotStatConsoleHistoryUrl = GetWoTStatConsoleHistoryUrl(player),
                    WotStatConsoleClanUrl    = GetWotStatConsoleClan(clan),

                    WoTInfoOverallUrl = GetWoTInfoOverallUrl(player),
                    WoTInfoRecentUrl  = GetWoTInfoRecentUrl(player),
                    WoTInfoHistoryUrl = GetWoTInfoHistoryUrl(player),

                    WoTConsoleRuOverallUrl = GetWoTConsoleRuOverallUrl(player),
                    WotConsoleRuClanUrl    = GetWotConsoleRuClanUrl(clan),

                    WoTStarsOverallUrl = GetWoTStarsOverallUrl(player),
                    WoTStarsClanUrl    = GetWoTStarsClanUrl(clan),
                };

                return(View(model));
            }
            catch (Exception ex)
            {
                Log.Error($"Recent({clanName}, {playerId})", ex);
                return(Redirect(url));
            }
        }
Пример #3
0
        public ActionResult Overall(string clanName, long playerId)
        {
            var getter = HttpRuntime.Cache.Get("FileGetter", GlobalHelper.CacheMinutes,
                                               () => new FileGetter(GlobalHelper.DataFolder));

            var clan = getter.GetClan(clanName);

            if (clan == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound, $"Can't find the clan [{clanName}] on this server."));
            }

            var player = clan.Get(playerId);

            if (player == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound, $"Can't find a player with id {playerId} on the clan [{clanName}]."));
            }

            string url;

            switch (player.Origin)
            {
            case PlayerDataOrigin.WotStatConsole:
                url = GetWoTStatConsoleOverallUrl(player);
                break;

            case PlayerDataOrigin.WotInfo:
                url = GetWoTInfoOverallUrl(player);
                break;

            default:
                url = GetDefaultOverallUrl(player);
                break;
            }

            if (GlobalHelper.UseExternalPlayerPage)
            {
                return(Redirect(url));
            }

            try
            {
                var connectionString = ConfigurationManager.ConnectionStrings["Store"].ConnectionString;
                var db         = new KeyStore(connectionString);
                var fullPlayer = db.GetPlayer(playerId);

                if (fullPlayer == null)
                {
                    Log.Warn($"Overall({clanName}, {playerId}): fullPlayer == null");
                    return(Redirect(url));
                }

                var wn8ExpectedValues = getter.GetTanksWN8ReferenceValues();
                if (wn8ExpectedValues == null)
                {
                    Log.Error($"Overall({clanName}, {playerId}): wn8ExpectedValues == null");
                    return(Redirect(url));
                }

                var moes = getter.GetTanksMoe();

                if (fullPlayer.Performance == null)
                {
                    Log.Warn($"Overall({clanName}, {playerId}): fullPlayer.Performance == null");
                    return(Redirect(url));
                }

                if (fullPlayer.Performance.All == null)
                {
                    Log.Error($"Overall({clanName}, {playerId}): fullPlayer.Performance.All == null");
                    return(Redirect(url));
                }

                if (fullPlayer.Performance.Month == null)
                {
                    Log.Error($"Overall({clanName}, {playerId}): fullPlayer.Performance.Month == null");
                    return(Redirect(url));
                }

                if (fullPlayer.Performance.Week == null)
                {
                    Log.Error($"Overall({clanName}, {playerId}): fullPlayer.Performance.Week == null");
                    return(Redirect(url));
                }

                fullPlayer.Calculate(wn8ExpectedValues);

                var allLeaderBoard     = getter.GetTankLeaders().ToArray();
                var onLeaderboard      = allLeaderBoard.Where(l => l.PlayerId == playerId).ToArray();
                var onLeaderBoardTanks = new HashSet <long>(onLeaderboard.Select(l => l.TankId));
                var worstLeaders       = allLeaderBoard.Where(l => l.Order == 25 && fullPlayer.HasTank(l.TankId) && !onLeaderBoardTanks.Contains(l.TankId)).ToDictionary(l => l.TankId);

                var leaderIfPlayABattle = fullPlayer.Performance.All.Values
                                          .Where(t => (t.Tier >= 5) && (t.Battles >= t.Tier * 10) && (worstLeaders.ContainsKey(t.TankId)) &&
                                                 (t.TotalDamagePerBattle > worstLeaders[t.TankId].TotalDamage) && (t.LastBattleAge.TotalDays > 28 * 3))
                                          .OrderByDescending(t => t.Tier).ThenBy(t => t.LastBattle).ToArray();

                var leaderIfFewMoreGames = fullPlayer.Performance.All.Values
                                           .Where(t => (t.Tier >= 5) && (t.Battles >= (t.Tier * 10) - 10) && (t.Battles < (t.Tier * 10)) && (worstLeaders.ContainsKey(t.TankId)) &&
                                                  (t.TotalDamagePerBattle > worstLeaders[t.TankId].TotalDamage) && (t.LastBattleAge.TotalDays <= 28 * 3))
                                           .OrderByDescending(t => t.Tier).ThenBy(t => t.LastBattle).ToArray();

                var leaderIfFewMoreDamage = fullPlayer.Performance.All.Values
                                            .Where(t => (t.Tier >= 5) && (t.Battles >= (t.Tier * 10)) && (worstLeaders.ContainsKey(t.TankId)) &&
                                                   (t.TotalDamagePerBattle * 1.05 > worstLeaders[t.TankId].TotalDamage) &&
                                                   (t.TotalDamagePerBattle < worstLeaders[t.TankId].TotalDamage) &&
                                                   (t.LastBattleAge.TotalDays <= 28 * 3))
                                            .OrderByDescending(t => t.Tier).ThenBy(t => t.LastBattle).ToArray();

                var leaderOnNextUpdate = fullPlayer.Performance.All.Values
                                         .Where(t => (t.Tier >= 5) && (t.Battles >= (t.Tier * 10)) && (worstLeaders.ContainsKey(t.TankId)) &&
                                                (t.TotalDamagePerBattle > worstLeaders[t.TankId].TotalDamage) && (t.LastBattleAge.TotalDays <= 28 * 3))
                                         .OrderByDescending(t => t.Tier).ThenBy(t => t.LastBattle).ToArray();

                var model = new PlayerPage
                {
                    Clan                  = clan,
                    Player                = fullPlayer,
                    Wn8ExpectedValues     = wn8ExpectedValues,
                    MoEs                  = moes,
                    OnLeaderboard         = onLeaderboard,
                    LeaderIfPlayABattle   = leaderIfPlayABattle,
                    LeaderIfFewMoreGames  = leaderIfFewMoreGames,
                    LeaderIfFewMoreDamage = leaderIfFewMoreDamage,
                    LeaderOnNextUpdate    = leaderOnNextUpdate,
                    ExternalUrl           = url,

                    WoTStatConsoleOverallUrl = GetWoTStatConsoleOverallUrl(player),
                    WotStatConsoleRecentUrl  = GetWoTStatConsoleRecentUrl(player),
                    WotStatConsoleHistoryUrl = GetWoTStatConsoleHistoryUrl(player),
                    WotStatConsoleClanUrl    = GetWotStatConsoleClan(clan),

                    WoTInfoOverallUrl = GetWoTInfoOverallUrl(player),
                    WoTInfoRecentUrl  = GetWoTInfoRecentUrl(player),
                    WoTInfoHistoryUrl = GetWoTInfoHistoryUrl(player),

                    WoTConsoleRuOverallUrl = GetWoTConsoleRuOverallUrl(player),
                    WotConsoleRuClanUrl    = GetWotConsoleRuClanUrl(clan),

                    WoTStarsOverallUrl = GetWoTStarsOverallUrl(player),
                    WoTStarsClanUrl    = GetWoTStarsClanUrl(clan),
                };

                return(View(model));
            }
            catch (Exception ex)
            {
                Log.Error($"Overall({clanName}, {playerId})", ex);
                return(Redirect(url));
            }
        }