コード例 #1
0
ファイル: SortingAlgorithm.cs プロジェクト: Zexuz/knatteligan
 private static List <Guid> GetMatchEventsIds(Player player, MatchEvents type)
 {
     return(player.MatchEvents
            .Select(mId => MatchEventRepository.GetInstance().FindById(mId))
            .Where(matchEvent => matchEvent.GetType() == type)
            .Select(mEvent => mEvent.Id).ToList());
 }
コード例 #2
0
        private MatchEvent GetMatchEvent(MatchEvents type, Player player, Team team)
        {
            MatchEvent matchEvent;

            switch (type)
            {
            case MatchEvents.RedCard:
                matchEvent = new RedCard(player.Id, Match.Id);
                break;

            case MatchEvents.YellowCard:
                matchEvent = new YellowCard(player.Id, Match.Id);
                break;

            case MatchEvents.Assist:
                matchEvent = new Assist(player.Id, Match.Id);
                break;

            case MatchEvents.Goal:
                matchEvent = new Goal(player.Id, team.Id, Match.Id);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }

            return(matchEvent);
        }
コード例 #3
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private MatchResult GetMatchResult(CampaignMatch match, string gamerTag, MatchEvents matchEvents)
        {
            MatchResult result = Mapper.Map <MatchResult>(match);

            //var players = match.PlayerStats.Select(GetCampaignPlayer).ToList();
            return(result);
        }
コード例 #4
0
 public override int GetHashCode()
 {
     unchecked
     {
         return((IsCompleteSetOfEvents.GetHashCode() * 397) ^ (MatchEvents?.GetHashCode() ?? 0));
     }
 }
コード例 #5
0
        private void AddMatchEvent(MatchEvents type)
        {
            var player      = GetSelectedPlayerFromList();
            var playersTeam = _teamService.FindTeamByPlayerId(player.Id);
            var matchEvent  = GetMatchEvent(type, player, playersTeam);

            _matchEventsTemp.Add(matchEvent);
            if (playersTeam.Id == AwayTeam.Id)
            {
                var awayEvenst = GetMatchEventsForTeam(AwayTeam)
                                 .Where(e => e.GetType() == MatchEvents.Goal)
                                 .ToList();

                AwayTeamGoals.Text = awayEvenst.Count.ToString();

                _matchEventsAway.Add(matchEvent);
                return;
            }

            var test = GetMatchEventsForTeam(HomeTeam);

            HomeTeamGoals.Text = test
                                 .Where(e => e.GetType() == MatchEvents.Goal)
                                 .ToList()
                                 .Count.ToString();

            _matchEventsHome.Add(matchEvent);
            PlayerHasMaxCardsOnHim(player);
        }
コード例 #6
0
 public IActionResult SetCurrentMatch(string MatchId, string GameMode)
 {
     MatchResults.GetMatchResultsById(MatchId, GameMode);
     MatchEvents.GetMatchEventsById(MatchId);
     ViewBag.CurrentTeams = MatchResults.CurrentTeams;
     return(View());
 }
コード例 #7
0
 private void OnGameEndType(MatchEvents arg1, object[] arg2)
 {
     if (arg2 != null && arg2.Length > 0)
     {
         m_matchID = Convert.ToInt32(arg2[0]);
         MatchGameEnd(m_matchID);
     }
 }
コード例 #8
0
 private void OnMatchCallbackType(MatchEvents arg1, object[] arg2)
 {
     if (arg2 != null || arg2.Length > 0)
     {
         m_matchID = Convert.ToInt32(arg2[0]);
         MatchSuccess(m_matchID);
     }
 }
コード例 #9
0
        private void UpdateTeamUnCompletedPassesEvent(MatchEvents matchEvent, MatchEventDTO TeamEvent, List <PlayerDTO> players)
        {
            TeamEvent.UnCompletedPasses++;
            var player = players.Where(p => p.PlayerID == matchEvent.PlayerID_1).SingleOrDefault();

            if (player != null)
            {
                player.PlayerEvents.UnCompletedPasses++;
            }
        }
コード例 #10
0
        private void UpdateTeamShotOffTargetEvent(MatchEvents matchEvent, MatchEventDTO TeamEvent, List <PlayerDTO> players)
        {
            TeamEvent.ShotsOffTarget++;
            var player = players.Where(p => p.PlayerID == matchEvent.PlayerID_1).SingleOrDefault();

            if (player != null)
            {
                player.PlayerEvents.ShotsOffTarget++;
            }
        }
コード例 #11
0
        private void UpdateTeamOwnGoalEvent(MatchEvents matchEvent, MatchEventDTO TeamEvent, List <PlayerDTO> players)
        {
            TeamEvent.OwnGoals++;
            var player = players.Where(p => p.PlayerID == matchEvent.PlayerID_1).SingleOrDefault();

            if (player != null)
            {
                player.PlayerEvents.OwnGoals++;
            }
        }
コード例 #12
0
        public void Setup()
        {
            _matchEvents = JsonConvert.DeserializeObject<MatchEvents>(File.ReadAllText(Config.MatchEventsJsonPath));

            var mock = new Mock<IHaloSession>();
            mock.Setup(m => m.Get<MatchEvents>(It.IsAny<string>()))
                .ReturnsAsync(_matchEvents);

            _mockSession = mock.Object;
        }
コード例 #13
0
        public void Setup()
        {
            _matchEvents = JsonConvert.DeserializeObject <MatchEvents>(File.ReadAllText(Config.MatchEventsJsonPath));

            var mock = new Mock <IHaloSession>();

            mock.Setup(m => m.Get <MatchEvents>(It.IsAny <string>()))
            .ReturnsAsync(_matchEvents);

            _mockSession = mock.Object;
        }
コード例 #14
0
ファイル: AdminController.cs プロジェクト: agrzhibovetsky/uaf
        public ActionResult <MatchEventDTO> GetMatchEvent(int matchEventId)
        {
            MatchEventDTO result = new MatchEventDTO();

            using (UaFootballContext db = new UaFootballContext())
            {
                MatchEvents me = new MatchEvents();

                var o = (from matchEvent in db.MatchEvents
                         where matchEvent.MatchEventId == matchEventId
                         select new { A = matchEvent, B = matchEvent.Player1, C = matchEvent.Player2 }).Single();
                me         = o.A;
                me.Player1 = o.B;
                me.Player2 = o.C;

                if (me != null)
                {
                    result = new MatchEventDTO
                    {
                        EventFlags    = me.EventFlags,
                        Event_Cd      = me.EventCd,
                        MatchEvent_Id = me.MatchEventId,
                        Match_Id      = me.MatchId,
                        Minute        = me.Minute,
                        Player1_Id    = me.Player1Id,
                        Player2_Id    = me.Player2Id,
                        Player1       = new PlayerDTO
                        {
                            First_Name   = me.Player1.FirstName,
                            Last_Name    = me.Player1.LastName,
                            Display_Name = me.Player1.DisplayName,
                            Country_Id   = me.Player1.CountryId
                        }
                    };
                }
                if (me.Player2Id.HasValue)
                {
                    result.Player2 = new PlayerDTO
                    {
                        First_Name   = me.Player2.FirstName,
                        Last_Name    = me.Player2.LastName,
                        Display_Name = me.Player2.DisplayName,
                        Country_Id   = me.Player2.CountryId
                    };
                }
            }

            return(result);
        }
コード例 #15
0
        public bool Equals(MatchEventSummary other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }

            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(IsCompleteSetOfEvents == other.IsCompleteSetOfEvents &&
                   MatchEvents.OrderBy(me => me.TimeSinceStart).SequenceEqual(other.MatchEvents.OrderBy(me => me.TimeSinceStart)));
        }
コード例 #16
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task SetPlayer(IPlayer playerStat, ArenaPlayer player, MatchEvents matchEvents = null)
        {
            await SetBasePlayer(playerStat, player, matchEvents);

            var killed   = playerStat.KilledOpponentDetails.Select(p => p.GamerTag);
            var killedBy = playerStat.KilledByOpponentDetails.Select(p => p.GamerTag);
            var temp     = killed.Union(killedBy);

            foreach (var tag in temp)
            {
                Enemy enemy = new Enemy
                {
                    Name     = tag,
                    Kills    = playerStat.KilledOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0,
                    Deaths   = playerStat.KilledByOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0,
                    IsPlayer = true
                };
                enemy.Spread = enemy.Kills - enemy.Deaths;
                player.Enemies.Add(enemy);
            }

            var maxSpread = player.Enemies.Max(e => e.Spread);
            var minSpread = Math.Abs(player.Enemies.Min(e => e.Spread));
            int minKills  = player.Enemies.Min(p => p.Kills);
            int maxKills  = player.Enemies.Max(p => p.Kills) - minKills;
            int minDeaths = player.Enemies.Min(p => p.Deaths);
            int maxDeaths = player.Enemies.Max(p => p.Deaths) - minDeaths;

            foreach (var enemy in player.Enemies)
            {
                if (enemy.Spread > 0)
                {
                    enemy.SpreadSign    = "+";
                    enemy.SpreadPercent = enemy.Spread.Percent(maxSpread);
                }
                else if (enemy.Spread < 0)
                {
                    enemy.SpreadSign    = "-";
                    enemy.Spread        = Math.Abs(enemy.Spread);
                    enemy.SpreadPercent = enemy.Spread.Percent(minSpread);
                }
                enemy.KillPercent  = enemy.Kills.Percent(minKills, maxKills);
                enemy.DeathPercent = enemy.Deaths.Percent(minDeaths, maxDeaths);
            }

            player.Enemies = player.Enemies.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList();
        }
コード例 #17
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        public async Task <BaseMatchResult> GetMatch(Enumeration.GameMode gameMode, Guid id, string gamerTag)
        {
            BaseMatchResult match = null;

            switch (gameMode)
            {
            case Enumeration.GameMode.Arena:
                var arenaMatch = await _statsRepository.GetArenaMatch(id);

                match = await GetMatchResult(arenaMatch, gamerTag);

                break;

            case Enumeration.GameMode.Campaign:
                var campaignMatch = await _statsRepository.GetCampaignMatch(id);

                match = GetMatchResult(campaignMatch, gamerTag);
                break;

            case Enumeration.GameMode.Custom:
                var customMatch = await _statsRepository.GetCustomMatch(id);

                match = await GetMatchResult(customMatch, gamerTag);

                break;

            case Enumeration.GameMode.Warzone:
                MatchEvents matchEvents = await _statsRepository.GetEventsForMatch(id);

                var warzoneMatch = await _statsRepository.GetWarzoneMatch(id);

                match = await GetMatchResult(warzoneMatch, gamerTag, matchEvents);

                break;

            default:
                return(null);
            }

            if (match != null)
            {
                match.GameMode = gameMode;
                match.Id       = id;
            }
            return(match);
        }
コード例 #18
0
 private void OnLoginStateType(MatchEvents arg1, object[] arg2)
 {
     if (arg2 != null && arg2.Length > 0)
     {
         string uuid = arg2[0].ToString();
         if (!gameOver && gameing)
         {
             Dictionary <string, object> rejoinDic = new Dictionary <string, object>();
             rejoinDic.Add("action", "rejoin");
             rejoinDic.Add("match_id", m_matchID);
             string sendData = JsonUtils.Instance.ObjectToJson(rejoinDic);
             byte[] bsend    = Encoding.UTF8.GetBytes(sendData);
             WebSocketSendAysnc(bsend, (errorSend) =>
             {
             }, WebSocketMessageType.Text);
         }
     }
 }
コード例 #19
0
ファイル: AdminController.cs プロジェクト: agrzhibovetsky/uaf
        public ActionResult <string> UpdateMatchEvent(int matchEventId, int?player2Id, long flags)
        {
            string response = "success";

            using (UaFootballContext db = new UaFootballContext())
            {
                try
                {
                    MatchEvents me = db.MatchEvents.Find(matchEventId);
                    me.Player2Id  = player2Id;
                    me.EventFlags = flags;
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    response = "Error: " + ex.Message;
                }
            }

            return(string.Format("{{\"result\":\"{0}\"}}", response));
        }
コード例 #20
0
    private void Reset()
    {
        playList          = new List <PlayInfo>(150);
        secondHalfStarted = false;

        screen.Reset(MatchSpeed);

        if (screen.HomeTeamSquad != null)
        {
            screen.HomeTeamSquad.ResetFatigue();
            screen.AwayTeamSquad.ResetFatigue();
        }

        if (!isSimulatingMatch)
        {
            screen.Narration.Reset();
        }

        actionManager = new MatchActionManager();
        playDiceRolls = new PlayDiceRolls();
        matchEvents   = new MatchEvents();
    }
コード例 #21
0
        public IActionResult GetMatchEvents(string GamerTag)
        {
            List <MatchEvents.GameEvent> relevantEventsList = MatchEvents.GetMatchEvents(GamerTag);

            if (relevantEventsList.Count > 0)
            {
                List <Medal.Root> allMedals = new List <Medal.Root> {
                };
                for (int i = 0; i < relevantEventsList.Count; i++)
                {
                    allMedals.Add(Medal.GetMedal(relevantEventsList[i].MedalId));
                }
                ViewBag.MatchEvents = relevantEventsList;
                ViewBag.MatchMedals = allMedals;
                ViewBag.GamerTag    = GamerTag;

                return(View());
            }
            else
            {
                return(RedirectToAction("NoMedals"));
            }
        }
コード例 #22
0
        private int GetGoals(bool isHome)
        {
            var side = isHome ? "home" : "away";

            return(MatchEvents.OfType <GoalEvent>().Count(m => m.Team == side));
        }
コード例 #23
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task <ArenaPlayer> GetCustomPlayer(CustomMatchPlayerStat playerStat, MatchEvents matchEvents)
        {
            ArenaPlayer player = Mapper.Map <ArenaPlayer>(playerStat);

            await SetPlayer(playerStat, player, matchEvents);

            return(player);
        }
コード例 #24
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        public async Task <string> GetMatch(Enumeration.GameMode gameMode, Guid id, string gamerTag)
        {
            if (_settings.CacheResults)
            {
                var result = await _db.FindAsync <MatchResultData>(id.ToString());

                if (result != null)
                {
                    return(result.Data);
                }
            }
            MatchEvents matchEvents = await _statsRepository.GetEventsForMatch(id);

            matchEvents.GameEvents = matchEvents.GameEvents.Where(e => e.EventName == Enumeration.EventType.Death).ToList();
            MatchResult match = null;

            switch (gameMode)
            {
            case Enumeration.GameMode.Arena:
                var arenaMatch = await _statsRepository.GetArenaMatch(id);

                match = await GetMatchResult(arenaMatch, gamerTag, matchEvents);

                break;

            case Enumeration.GameMode.Campaign:
                var campaignMatch = await _statsRepository.GetCampaignMatch(id);

                match = GetMatchResult(campaignMatch, gamerTag, matchEvents);
                break;

            case Enumeration.GameMode.Custom:
                var customMatch = await _statsRepository.GetCustomMatch(id);

                match = await GetMatchResult(customMatch, gamerTag, matchEvents);

                break;

            case Enumeration.GameMode.Warzone:
                var warzoneMatch = await _statsRepository.GetWarzoneMatch(id);

                match = await GetMatchResult(warzoneMatch, gamerTag, matchEvents);

                break;

            default:
                return(null);
            }

            if (match != null)
            {
                match.GameMode = gameMode;
                match.Id       = id;
            }

            var matchResult = new MatchResultData(id.ToString(), match);

            if (_settings.CacheResults)
            {
                _db.InsertAsync(matchResult);
                await _db.CommitChanges();
            }
            return(matchResult.Data);
        }
コード例 #25
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task <ArenaMatchResult> GetMatchResult(WarzoneMatch match, string gamerTag, MatchEvents matchEvents)
        {
            ArenaMatchResult result = Mapper.Map <ArenaMatchResult>(match);
            var players             = new List <ArenaPlayer>();

            foreach (var playerStat in match.PlayerStats)
            {
                var p = await GetWarzonePlayer(playerStat, matchEvents);

                players.Add(p);
            }

            SetTeams(match, players, result, gamerTag);



            return(result);
        }
コード例 #26
0
        public ActionResult Add(MatchViewModel model)
        {
            var     fixture = unitOfWork.FixtureRepository.GetByID(model.fixtureid);
            Players player1 = null;
            Players player2 = null;

            if (ModelState.IsValid)
            {
                Teams team1 = unitOfWork.TeamRepository.GetByID(fixture.Team1);
                Teams team2 = unitOfWork.TeamRepository.GetByID(fixture.Team2);

                //odstraneni MNG flagu
                RemovePlayerInjuries(team1);
                RemovePlayerInjuries(team2);

                // nove detaily zapasu
                var teamData1 = new TeamMatchData()
                {
                    Team              = fixture.Team1,
                    Fame              = model.fame1,
                    Gate              = model.gate1,
                    Winnings          = model.winning1,
                    FanFactorMod      = model.fanfactor1,
                    Score             = model.score1,
                    SpirallingExpense = CalculateRollingExpenses(fixture.Teams)
                                        //teaminducements
                };
                if (model.mvp1 != 0)
                {
                    teamData1.MVP = model.mvp1;
                }

                var teamData2 = new TeamMatchData()
                {
                    Team              = fixture.Team2,
                    Fame              = model.fame2,
                    Gate              = model.gate2,
                    Winnings          = model.winning2,
                    FanFactorMod      = model.fanfactor2,
                    Score             = model.score2,
                    SpirallingExpense = CalculateRollingExpenses(fixture.Teams1)
                                        //teaminducements
                };
                if (model.mvp2 != 0)
                {
                    teamData2.MVP = model.mvp2;
                }

                // pricteni penez, update ff, rolling expense
                team1.Treasury += model.winning1;
                team2.Treasury += model.winning2;
                if (CalculateRollingExpenses(team1) > 0)
                {
                    team1.Treasury = (team1.Treasury - CalculateRollingExpenses(team1) > 0) ? team1.Treasury -= CalculateRollingExpenses(team1) : 0;
                }
                if (CalculateRollingExpenses(team2) > 0)
                {
                    team2.Treasury = (team2.Treasury - CalculateRollingExpenses(team2) > 0) ? team2.Treasury -= CalculateRollingExpenses(team2) : 0;
                }
                team1.Fanfactor += model.fanfactor1;
                team1.Value     += model.fanfactor1 * 10000;
                team2.Fanfactor += model.fanfactor2;
                team2.Value     += model.fanfactor2 * 10000;

                // vlozeni zapasu
                var match = new Matches()
                {
                    TeamMatchData  = teamData1,
                    TeamMatchData1 = teamData2,
                    Date           = model.matchDate,
                    Competition    = fixture.Group,
                    Fixture        = fixture.ID,
                    Round          = fixture.Round
                };

                // pridani MVP
                if (model.mvp1 > 0)
                {
                    player1      = unitOfWork.PlayerRepository.GetByID(model.mvp1);
                    player1.SPP += 5;
                    player1.MVP++;
                    unitOfWork.PlayerRepository.Update(player1);
                }
                if (model.mvp2 > 0)
                {
                    player2      = unitOfWork.PlayerRepository.GetByID(model.mvp2);
                    player2.SPP += 5;
                    player2.MVP++;
                    unitOfWork.PlayerRepository.Update(player2);
                }

                //Inducementy
                if (model.selectedInducements1 != null)
                {
                    foreach (var ind in model.selectedInducements1)
                    {
                        var inducement = new TeamInducements()
                        {
                            Type  = ind,
                            Value = 0
                        };
                        teamData1.TeamInducements.Add(inducement);
                    }
                }
                if (model.selectedStarplayers1 != null)
                {
                    foreach (var ind in model.selectedStarplayers1)
                    {
                        var inducement = new TeamInducements()
                        {
                            Type  = Inducements.StarPlayer,
                            Value = ind
                        };
                        teamData1.TeamInducements.Add(inducement);
                    }
                }
                if (model.selectedInducements2 != null)
                {
                    foreach (var ind in model.selectedInducements2)
                    {
                        var inducement = new TeamInducements()
                        {
                            Type  = ind,
                            Value = 0
                        };
                        teamData2.TeamInducements.Add(inducement);
                    }
                }
                if (model.selectedStarplayers2 != null)
                {
                    foreach (var ind in model.selectedStarplayers2)
                    {
                        var inducement = new TeamInducements()
                        {
                            Type  = Inducements.StarPlayer,
                            Value = ind
                        };
                        teamData2.TeamInducements.Add(inducement);
                    }
                }

                unitOfWork.TeamMatchDataRepository.Insert(teamData1);
                unitOfWork.TeamMatchDataRepository.Insert(teamData2);
                unitOfWork.TeamRepository.Update(team1);
                unitOfWork.TeamRepository.Update(team2);
                unitOfWork.MatchRepository.Insert(match);

                unitOfWork.Save();

                // vyreseni match eventu
                if (model.events != null)
                {
                    foreach (var mevent in model.events)
                    {
                        if (mevent.canceled)
                        {
                            continue;
                        }

                        player1 = unitOfWork.PlayerRepository.GetByID(mevent.sourcePlayer);
                        MatchEvents newEvent = new MatchEvents()
                        {
                            Team         = mevent.sourcePlayerTeam,
                            SourcePlayer = mevent.sourcePlayer,
                            Match        = match.ID,
                            EventType    = (int)mevent.type
                        };
                        switch (mevent.type)
                        {
                        case MatchEventsTypes.Touchdown:
                            player1.SPP += 3;
                            player1.TD++;
                            break;

                        case MatchEventsTypes.Completion:
                            player1.SPP++;
                            player1.COMP++;
                            break;

                        case MatchEventsTypes.Interception:
                            player1.SPP += 2;
                            player1.INT++;
                            break;

                        case MatchEventsTypes.Injury:
                            var tteam1 = unitOfWork.TeamRepository.GetByID(player1.Team);
                            switch (mevent.result)
                            {
                            case 1:
                                break;

                            case 2:
                                player1.MNG   = 1;
                                tteam1.Value -= player1.Value;
                                break;

                            case 3:
                                player1.NI    = 1;
                                player1.MNG   = 1;
                                tteam1.Value -= player1.Value;
                                break;

                            case 4:
                                player1.MA--;
                                player1.MNG   = 1;
                                tteam1.Value -= player1.Value;
                                break;

                            case 5:
                                player1.AV--;
                                player1.MNG   = 1;
                                tteam1.Value -= player1.Value;
                                break;

                            case 6:
                                player1.AG--;
                                player1.MNG   = 1;
                                tteam1.Value -= player1.Value;
                                break;

                            case 7:
                                player1.ST--;
                                player1.MNG   = 1;
                                tteam1.Value -= player1.Value;
                                break;

                            case 8:
                                player1.Status = Status.Inactive;
                                tteam1.Value  -= player1.Value;
                                break;
                            }
                            if (fixture.Groups.Playoff == 1 && player1.MNG == 1 && player1.Status == Status.Active)
                            {
                                player1.MNG   = 0;
                                tteam1.Value += player1.Value;
                            }
                            unitOfWork.TeamRepository.Update(tteam1);
                            break;

                        case MatchEventsTypes.Casualty:
                            player1.SPP += 2;
                            player1.CAS++;
                            player2 = unitOfWork.PlayerRepository.GetByID(mevent.targetPlayer);
                            newEvent.TargetPlayer = mevent.targetPlayer;
                            newEvent.Result       = mevent.result;
                            var tteam2 = unitOfWork.TeamRepository.GetByID(player2.Team);
                            switch (mevent.result)
                            {
                            case 1:
                                break;

                            case 2:
                                player2.MNG   = 1;
                                tteam2.Value -= player2.Value;
                                break;

                            case 3:
                                player2.NI    = 1;
                                player2.MNG   = 1;
                                tteam2.Value -= player2.Value;
                                break;

                            case 4:
                                player2.MA--;
                                player2.MNG   = 1;
                                tteam2.Value -= player2.Value;
                                break;

                            case 5:
                                player2.AV--;
                                player2.MNG   = 1;
                                tteam2.Value -= player2.Value;
                                break;

                            case 6:
                                player2.AG--;
                                player2.MNG   = 1;
                                tteam2.Value -= player2.Value;
                                break;

                            case 7:
                                player2.ST--;
                                player2.MNG   = 1;
                                tteam2.Value -= player2.Value;
                                break;

                            case 8:
                                player1.Kills++;
                                player2.Status = Status.Inactive;
                                tteam2.Value  -= player2.Value;
                                break;
                            }
                            if (fixture.Groups.Playoff == 1 && player2.MNG == 1 && player2.Status == Status.Active)
                            {
                                player2.MNG   = 0;
                                tteam2.Value += player2.Value;
                            }
                            unitOfWork.PlayerRepository.Update(player2);
                            unitOfWork.TeamRepository.Update(tteam2);
                            break;
                        }
                        unitOfWork.MatchEventRepository.Insert(newEvent);
                        unitOfWork.PlayerRepository.Update(player1);
                        unitOfWork.Save();
                    }
                }

                AddApplicationMessage("Zápas byl uložen", Models.MessageSeverity.Success);
                return(RedirectToAction("Group", "Team", new { groupid = fixture.Group }));
            }
            if (fixture == null)
            {
                AddApplicationMessage("Neznámý zápas.", Models.MessageSeverity.Danger);
                return(RedirectToAction("Index", "Competitions"));
            }
            AddApplicationMessage("Formulář obsahuje chyby, zkontrolujte prosím obsah", Models.MessageSeverity.Danger);
            var players1 = unitOfWork.PlayerRepository.GetPlayersForEvent(fixture.Team1).ToList();
            var players2 = unitOfWork.PlayerRepository.GetPlayersForEvent(fixture.Team2).ToList();
            var i        = 0;
            var noplayer = new Players()
            {
                ID   = 0,
                Name = "-- Nikdo ze seznamu --"
            };

            foreach (var player in players1)
            {
                players1[i].Name = player.Number + " - " + player.Name;
                i++;
            }
            players1.Add(noplayer);
            players1.AddRange(unitOfWork.PlayerRepository.GetSpecialsForEvent());
            players2.AddRange(unitOfWork.PlayerRepository.GetSpecialsForEvent());
            i = 0;
            foreach (var player in players2)
            {
                players2[i].Name = player.Number + " - " + player.Name;
                i++;
            }
            players2.Add(noplayer);
            model.fixture  = fixture;
            model.players1 = new SelectList(players1.OrderBy(m => m.ID), "ID", "Name");
            model.players2 = new SelectList(players2.OrderBy(m => m.ID), "ID", "Name");
            var starplayers = unitOfWork.PlayerRepository.Get(filter: p => p.PlayerTypes.Race == Races.Special).ToList();

            starplayers.Concat(unitOfWork.PlayerRepository.GetSpecialsForEvent());
            var inducements = from Inducements r in Enum.GetValues(typeof(Inducements)) select new { ID = (int)r, Name = r.ToString() };

            model.inducements = new SelectList(inducements, "ID", "Name");
            model.starplayers = new SelectList(starplayers, "ID", "Name");

            return(View(model));
        }
コード例 #27
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task <ArenaPlayer> GetWarzonePlayer(WarzonePlayerStat playerStat, MatchEvents matchEvents)
        {
            ArenaPlayer player = Mapper.Map <ArenaPlayer>(playerStat);

            await SetCompetetivePlayer(playerStat, player, matchEvents);

            return(player);
        }
コード例 #28
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task SetPlayer(IPlayer playerStat, ArenaPlayer player, MatchEvents matchEvents = null)
        {
            await SetBasePlayer(playerStat, player, matchEvents);

            var killed   = playerStat.KilledOpponentDetails.Select(p => p.GamerTag);
            var killedBy = playerStat.KilledByOpponentDetails.Select(p => p.GamerTag);
            var temp     = killed.Union(killedBy);



            foreach (var tag in temp)
            {
                Enemy enemy = new Enemy
                {
                    Name     = tag,
                    Kills    = playerStat.KilledOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0,
                    Deaths   = playerStat.KilledByOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0,
                    IsPlayer = true
                };
                enemy.Spread = enemy.Kills - enemy.Deaths;
                if (matchEvents != null)
                {
                    var weaponKills = matchEvents.GameEvents.Where(e => e.Killer != null && e.Victim != null &&
                                                                   e.KillerWeaponStockId.HasValue && e.EventName == Enumeration.EventType.Death &&
                                                                   ((e.Killer.Gamertag == tag && e.Victim.Gamertag == player.GamerTag) ||
                                                                    (e.Killer.Gamertag == player.GamerTag && e.Victim.Gamertag == tag))).Select(e => new
                    {
                        Killer   = e.Killer.Gamertag,
                        Victim   = e.Victim.Gamertag,
                        WeaponId = e.WeaponKillId(),
                        Type     = e.SpartanKillType()
                    }).ToList();

                    var groups = weaponKills.GroupBy(g => new { g.WeaponId, g.Type });
                    foreach (var g in groups)
                    {
                        var weapon = await _metadataRepository.GetWeapon(g.Key.WeaponId);

                        var weaponKill = Mapper.Map <WeaponKill>(weapon);
                        if (weaponKill != null)
                        {
                            if (!string.IsNullOrEmpty(g.Key.Type))
                            {
                                weaponKill.Name = g.Key.Type;
                            }
                            weaponKill.Kills  = g.Count(g2 => g2.Killer == player.GamerTag);
                            weaponKill.Deaths = g.Count(g2 => g2.Killer == tag);
                            enemy.WeaponKills.Add(weaponKill);
                        }
                    }
                    enemy.WeaponKills = enemy.WeaponKills.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList();
                }

                player.Enemies.Add(enemy);
            }

            if (player.Enemies.Any())
            {
                var maxSpread = player.Enemies.Max(e => e.Spread);
                var minSpread = Math.Abs(player.Enemies.Min(e => e.Spread));
                int minKills  = player.Enemies.Min(p => p.Kills);
                int maxKills  = player.Enemies.Max(p => p.Kills) - minKills;
                int minDeaths = player.Enemies.Min(p => p.Deaths);
                int maxDeaths = player.Enemies.Max(p => p.Deaths) - minDeaths;
                foreach (var enemy in player.Enemies)
                {
                    if (enemy.Spread > 0)
                    {
                        enemy.SpreadSign    = "+";
                        enemy.SpreadPercent = enemy.Spread.Percent(maxSpread);
                    }
                    else if (enemy.Spread < 0)
                    {
                        enemy.SpreadSign    = "-";
                        enemy.Spread        = Math.Abs(enemy.Spread);
                        enemy.SpreadPercent = enemy.Spread.Percent(minSpread);
                    }
                    enemy.KillPercent  = enemy.Kills.Percent(minKills, maxKills);
                    enemy.DeathPercent = enemy.Deaths.Percent(minDeaths, maxDeaths);
                }
            }


            player.Enemies = player.Enemies.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList();
        }
コード例 #29
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task SetBasePlayer(IBasePlayerStat playerStat, ArenaPlayer player, MatchEvents matchEvents = null)
        {
            player.Weapons = playerStat.WeaponStats.Where(w => w.Weapon != null && (w.TotalDamageDealt > 0 || w.TotalShotsFired > 0)).OrderByDescending(w => w.TotalKills).Select(Mapper.Map <WeaponStat>).ToList();
            if (player.Weapons.Any())
            {
                var minKills       = player.Weapons.Min(w => w.TotalKills);
                var maxKills       = player.Weapons.Max(w => w.TotalKills) - minKills;
                var minHeadShots   = player.Weapons.Min(w => w.TotalHeadshots);
                var maxHeadShots   = player.Weapons.Max(w => w.TotalHeadshots) - minHeadShots;
                var minTotalDamage = player.Weapons.Min(w => w.TotalDamageDealt);
                var maxTotalDamage = player.Weapons.Max(w => w.TotalDamageDealt) - minTotalDamage;
                var minShotsFired  = player.Weapons.Min(w => w.TotalShotsFired);
                var maxShotsFired  = player.Weapons.Max(w => w.TotalShotsFired) - minShotsFired;
                var minShotsLanded = player.Weapons.Min(w => w.TotalShotsLanded);
                var maxShotsLanded = player.Weapons.Max(w => w.TotalShotsLanded) - minShotsLanded;
                var minAccuraccy   = player.Weapons.Min(w => w.Accuracy);
                var maxAccuraccy   = player.Weapons.Max(w => w.Accuracy) - minAccuraccy;
                foreach (var weaponStat in player.Weapons)
                {
                    weaponStat.KillPercent        = weaponStat.TotalKills.Percent(minKills, maxKills);
                    weaponStat.HeadShotPercent    = weaponStat.TotalHeadshots.Percent(minHeadShots, maxHeadShots);
                    weaponStat.TotalDamagePercent = weaponStat.TotalDamageDealt.Percent(minTotalDamage, maxTotalDamage);
                    weaponStat.ShotsFiredPercent  = weaponStat.TotalShotsFired.Percent(minShotsFired, maxShotsFired);
                    weaponStat.ShotsLandedPercent = weaponStat.TotalShotsLanded.Percent(minShotsLanded, maxShotsLanded);
                    weaponStat.AccuracyPercent    = weaponStat.Accuracy.Percent(minAccuraccy, maxAccuraccy);
                }
            }

            player.Medals = playerStat.MedalAwards?.Where(m => m.Medal != null).GroupBy(m => m.Medal.Classification).Select(m =>
                                                                                                                            new MedalClassification
            {
                Classification = m.Key,
                MedalAwards    = Mapper.Map <List <MedalAward> >(m)
            }).ToList();

            player.TotalPerfectKills   = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.PerfectKill))?.Count ?? 0;
            player.RoundWinningKills   = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.RoundWinningKill))?.Count ?? 0;
            player.FlagCaptures        = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.FlagCapture))?.Count ?? 0;
            player.FlagPulls           = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.FlagGrabs))?.Count ?? 0;
            player.FlagCarrierKills    = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.FlagCarrierKills))?.Count ?? 0;
            player.StrongholdsCaptured = playerStat.FlexibleStats.MedalStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.StrongholdCaptured))?.Count ?? 0;
            player.StrongholdsSecured  = playerStat.FlexibleStats.MedalStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.StrongholdSecured))?.Count ?? 0;
            player.StrongholdsDefended = playerStat.FlexibleStats.MedalStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.StrongholdDefense))?.Count ?? 0;
            player.Score          = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.Score))?.Count ?? 0;
            player.Kills          = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.Kills))?.Count ?? 0;
            player.RoundsSurvived = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.RoundsSurvived))?.Count ?? 0;
            player.RoundsComplete = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.RoundsComplete))?.Count ?? 0;
            player.BossTakedowns  = playerStat.FlexibleStats.MedalStatCounts.Where(i =>
                                                                                   i.Id == Guid.Parse(Constants.MythicTakedown) ||
                                                                                   i.Id == Guid.Parse(Constants.LegendaryTakedown) ||
                                                                                   i.Id == Guid.Parse(Constants.BossTakedown)).Sum(i => i.Count);
            player.NpcKills      = playerStat.EnemyKills.Sum(e => e.TotalKills);
            player.BasesCaptured = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.BasesCaptured))?.Count ?? 0;


            List <GameEvent> killers = new List <GameEvent>();

            if (matchEvents != null)
            {
                killers = matchEvents.GameEvents.Where(e => e.VictimAgent == Enumeration.Agent.Player &&
                                                       e.Victim.Gamertag == player.GamerTag &&
                                                       e.KillerAgent == Enumeration.Agent.AI && (e.IsWeapon == null || e.IsWeapon == false) &&
                                                       e.EventName == Enumeration.EventType.Death).ToList();
            }

            foreach (var baseGroup in playerStat.EnemyKills.GroupBy(k => k.Enemy.BaseId))
            {
                var   enemyKill = baseGroup.First();
                Enemy enemy     = new Enemy
                {
                    Id          = enemyKill.Enemy.BaseId,
                    Name        = enemyKill.Enemy.EnemyObject.Name,
                    Kills       = baseGroup.Sum(k => k.TotalKills),
                    Description = enemyKill.Enemy.EnemyObject.Description,
                    ImageUrl    = enemyKill.Enemy.EnemyObject.SmallIconImageUrl,
                    Deaths      = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId),
                    IsPlayer    = false
                };
                enemy.Spread = enemy.Kills - enemy.Deaths;
                player.Enemies.Add(enemy);
            }

            //foreach (var baseGroup in playerStat.DestroyedEnemyVehicles.GroupBy(k=>k.Enemy.BaseId))
            //{
            //    var enemyKill = baseGroup.First();
            //    Enemy enemy = new Enemy
            //    {
            //        Id = enemyKill.Enemy.BaseId,
            //        Name = enemyKill.Enemy.Vehicle.Name,
            //        Kills = baseGroup.Sum(k => k.TotalKills),
            //        Description = enemyKill.Enemy.Vehicle.Description,
            //        ImageUrl = enemyKill.Enemy.Vehicle.SmallIconImageUrl,
            //        Deaths = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId),
            //        IsPlayer = false
            //    };
            //    enemy.Spread = enemy.Kills - enemy.Deaths;
            //    player.Enemies.Add(enemy);
            //}

            var ids = playerStat.EnemyKills.Select(k => k.Enemy.BaseId)
                      .Union(playerStat.DestroyedEnemyVehicles.Select(v => v.Enemy.BaseId))
                      .ToList();

            killers.RemoveAll(k => ids.Contains(k.KillerWeaponStockId.Value));

            foreach (var killer in killers.Where(k => k.KillerWeaponStockId.HasValue).GroupBy(k => k.KillerWeaponStockId))
            {
                var enemyKill = await _metadataRepository.GetEnemyOrVehicle(killer.Key.Value);

                if (enemyKill != null)
                {
                    Enemy enemy = new Enemy
                    {
                        Id          = enemyKill.Id,
                        Name        = enemyKill.Name,
                        Kills       = 0,
                        Description = enemyKill.Description,
                        ImageUrl    = enemyKill.SmallIconImageUrl,
                        Deaths      = killer.Count(),
                        IsPlayer    = false
                    };
                    enemy.Spread = enemy.Kills - enemy.Deaths;
                    player.Enemies.Add(enemy);
                }
            }

            if (matchEvents != null)
            {
                foreach (var enemy in player.Enemies)
                {
                    var weaponKills = matchEvents.GameEvents.Where(e => e.EventName == Enumeration.EventType.Death &&
                                                                   (e.VictimStockId == enemy.Id && e.Killer != null && e.Killer.Gamertag == player.GamerTag) ||
                                                                   e.Victim != null && e.Victim.Gamertag == player.GamerTag && e.KillerWeaponStockId == enemy.Id)
                                      .Select(e => new
                    {
                        Killer = e.Killer?.Gamertag,
                        //Victim = e.VictimStockId,
                        WeaponId = e.WeaponKillId(),
                        Type     = e.SpartanKillType()
                    }).ToList();

                    var groups = weaponKills.Where(g => g.WeaponId != 0).GroupBy(g => new { g.WeaponId, g.Type });
                    foreach (var g in groups)
                    {
                        var weapon = await _metadataRepository.GetWeaponOrEnemyOrVehicle(g.Key.WeaponId);

                        if (weapon != null)
                        {
                            var weaponKill = Mapper.Map <WeaponKill>(weapon);
                            weaponKill.Kills  = g.Count(g2 => g2.Killer == player.GamerTag);
                            weaponKill.Deaths = g.Count(g2 => g2.Killer != player.GamerTag);
                            if (!string.IsNullOrEmpty(g.Key.Type))
                            {
                                weaponKill.Name = g.Key.Type;
                            }
                            enemy.WeaponKills.Add(weaponKill);
                        }
                    }
                    enemy.WeaponKills = enemy.WeaponKills.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList();
                    //var weaponKills = matchEvents.GameEvents.Where(e => e.Killer != null && e.Victim != null &&
                    //        e.KillerWeaponStockId.HasValue && e.EventName == Enumeration.EventType.Death &&
                    //        ((e.Killer.Gamertag == tag && e.Victim.Gamertag == player.GamerTag) ||
                    //        (e.Killer.Gamertag == player.GamerTag && e.Victim.Gamertag == tag))).Select(e => new
                    //        {
                    //            Killer = e.Killer.Gamertag,
                    //            Victim = e.Victim.Gamertag,
                    //            WeaponId = e.KillerWeaponStockId.Value
                    //        }).ToList();
                }
            }
        }
コード例 #30
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task SetBasePlayer(IBasePlayerStat playerStat, ArenaPlayer player, MatchEvents matchEvents = null)
        {
            player.Weapons = playerStat.WeaponStats.Where(w => w.Weapon != null && (w.TotalDamageDealt > 0 || w.TotalShotsFired > 0)).OrderByDescending(w => w.TotalKills).Select(Mapper.Map <WeaponStat>).ToList();

            var minKills       = player.Weapons.Min(w => w.TotalKills);
            var maxKills       = player.Weapons.Max(w => w.TotalKills) - minKills;
            var minHeadShots   = player.Weapons.Min(w => w.TotalHeadshots);
            var maxHeadShots   = player.Weapons.Max(w => w.TotalHeadshots) - minHeadShots;
            var minTotalDamage = player.Weapons.Min(w => w.TotalDamageDealt);
            var maxTotalDamage = player.Weapons.Max(w => w.TotalDamageDealt) - minTotalDamage;
            var minShotsFired  = player.Weapons.Min(w => w.TotalShotsFired);
            var maxShotsFired  = player.Weapons.Max(w => w.TotalShotsFired) - minShotsFired;
            var minShotsLanded = player.Weapons.Min(w => w.TotalShotsLanded);
            var maxShotsLanded = player.Weapons.Max(w => w.TotalShotsLanded) - minShotsLanded;
            var minAccuraccy   = player.Weapons.Min(w => w.Accuracy);
            var maxAccuraccy   = player.Weapons.Max(w => w.Accuracy) - minAccuraccy;

            foreach (var weaponStat in player.Weapons)
            {
                weaponStat.KillPercent        = weaponStat.TotalKills.Percent(minKills, maxKills);
                weaponStat.HeadShotPercent    = weaponStat.TotalHeadshots.Percent(minHeadShots, maxHeadShots);
                weaponStat.TotalDamagePercent = weaponStat.TotalDamageDealt.Percent(minTotalDamage, maxTotalDamage);
                weaponStat.ShotsFiredPercent  = weaponStat.TotalShotsFired.Percent(minShotsFired, maxShotsFired);
                weaponStat.ShotsLandedPercent = weaponStat.TotalShotsLanded.Percent(minShotsLanded, maxShotsLanded);
                weaponStat.AccuracyPercent    = weaponStat.Accuracy.Percent(minAccuraccy, maxAccuraccy);
            }

            player.Medals = playerStat.MedalAwards.GroupBy(m => m.Medal.Classification).Select(m =>
                                                                                               new MedalClassification
            {
                Classification = m.Key,
                MedalAwards    = Mapper.Map <List <MedalAward> >(m)
            }).ToList();

            List <GameEvent> killers = new List <GameEvent>();

            if (matchEvents != null)
            {
                killers = matchEvents.GameEvents.Where(e => e.VictimAgent == Enumeration.Agent.Player &&
                                                       e.Victim.Gamertag == player.GamerTag &&
                                                       e.KillerAgent == Enumeration.Agent.AI && !e.IsWeapon &&
                                                       e.EventName == Enumeration.EventType.Death).ToList();
            }

            foreach (var baseGroup in playerStat.EnemyKills.GroupBy(k => k.Enemy.BaseId))
            {
                var   enemyKill = baseGroup.First();
                Enemy enemy     = new Enemy
                {
                    Name        = enemyKill.Enemy.EnemyObject.Name,
                    Kills       = baseGroup.Sum(k => k.TotalKills),
                    Description = enemyKill.Enemy.EnemyObject.Description,
                    ImageUrl    = enemyKill.Enemy.EnemyObject.SmallIconImageUrl,
                    Deaths      = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId),
                    IsPlayer    = false
                };
                enemy.Spread = enemy.Kills - enemy.Deaths;
                player.Enemies.Add(enemy);
            }

            foreach (var baseGroup in playerStat.DestroyedEnemyVehicles.GroupBy(k => k.Enemy.BaseId))
            {
                var   enemyKill = baseGroup.First();
                Enemy enemy     = new Enemy
                {
                    Name        = enemyKill.Enemy.Vehicle.Name,
                    Kills       = baseGroup.Sum(k => k.TotalKills),
                    Description = enemyKill.Enemy.Vehicle.Description,
                    ImageUrl    = enemyKill.Enemy.Vehicle.SmallIconImageUrl,
                    Deaths      = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId),
                    IsPlayer    = false
                };
                enemy.Spread = enemy.Kills - enemy.Deaths;
                player.Enemies.Add(enemy);
            }

            var ids = playerStat.EnemyKills.Select(k => k.Enemy.BaseId)
                      .Union(playerStat.DestroyedEnemyVehicles.Select(v => v.Enemy.BaseId))
                      .ToList();

            killers.RemoveAll(k => ids.Contains(k.KillerWeaponStockId));

            foreach (var killer in killers.GroupBy(k => k.KillerWeaponStockId))
            {
                var enemyKill = await _metadataRepository.GetEnemyOrVehicl(killer.Key);

                if (enemyKill != null)
                {
                    Enemy enemy = new Enemy
                    {
                        Name        = enemyKill.Name,
                        Kills       = 0,
                        Description = enemyKill.Description,
                        ImageUrl    = enemyKill.SmallIconImageUrl,
                        Deaths      = killer.Count(),
                        IsPlayer    = false
                    };
                    enemy.Spread = enemy.Kills - enemy.Deaths;
                    player.Enemies.Add(enemy);
                }
            }
        }
コード例 #31
0
ファイル: StatsBusiness.cs プロジェクト: darickc/HaloHistory
        private async Task SetCompetetivePlayer(ICompetetivePlayer playerStat, ArenaPlayer player, MatchEvents matchEvents = null)
        {
            await SetPlayer(playerStat, player, matchEvents);

            player.XpInfo.XpEarned      = player.XpInfo.TotalXp - player.XpInfo.PrevTotalXp;
            player.XpInfo.CurrentRankXp = player.XpInfo.TotalXp - playerStat.CurrentSpartanRank.StartXp;
            var previousRankXp = player.XpInfo.PrevTotalXp - playerStat.CurrentSpartanRank.StartXp;

            player.XpInfo.XpToNextRank    = playerStat.NextSpartanRank.StartXp - playerStat.CurrentSpartanRank.StartXp;
            player.XpInfo.PreviousPercent = previousRankXp.Percent(player.XpInfo.XpToNextRank);
            player.XpInfo.CurrentPercent  = player.XpInfo.CurrentRankXp.Percent(player.XpInfo.XpToNextRank);
        }