public static void AddPlayer(ulong steamid, int cid) { ServerManager.Singleton.AddPlayer(steamid, cid); int teamID; if (matchTeams[0].numOfPlayers >= MatchSettings.TeamSize) { teamID = 1; } else if (matchTeams[1].numOfPlayers >= MatchSettings.TeamSize) { teamID = 0; } else if (matchTeams[0].numOfPlayers > matchTeams[1].numOfPlayers) { teamID = 1; } else { teamID = 0; } MatchTeam team = matchTeams[teamID]; team.playerIds.Add(steamid); ServerManager.Singleton.AssignPlayer(steamid, teamID, team.numOfPlayers); team.numOfPlayers++; team.teamSize++; }
public override void NetworkStart() { if (IsServer) { NetworkingManager.Singleton.OnClientConnectedCallback += OnClientConnected; // Initialize ai for (int tid = 0; tid < 2; tid++) { MatchTeam team = Match.matchTeams[tid]; int aiToCreate = Match.MatchSettings.TeamSize - team.teamSize; for (int i = 0; i < aiToCreate; i++) { GameObject go = Instantiate(aiPrefab, Vector3.zero, Quaternion.identity); AIPlayer aiLogic = go.GetComponent <AIPlayer>(); Assert.IsNotNull(aiLogic, "aiPrefab in GameSetup does not have AIPlayer component"); Player p = go.GetComponent <Player>(); p.isAI = true; p.TeamID = tid; p.slot = Match.matchTeams[tid].numOfPlayers + i; GameManager.AddAI(aiLogic); go.GetComponent <NetworkedObject>().Spawn(); } } } m_hasClientLoaded = true; print("creating player"); InvokeServerRpc(PlayerLoaded, NetworkingManager.Singleton.LocalClientId); }
private async Task CalculateLosingElos(MatchTeam winningTeam, IEnumerable <MatchTeam> losingTeams) { var winningTeamGuardians = await GetGuardiansForTeam(winningTeam); var winningTeamElo = CalculateTeamAverageElo(winningTeamGuardians); foreach (var team in losingTeams) { var guardians = await GetGuardiansForTeam(team); var teamElo = CalculateTeamAverageElo(guardians); var eloDifference = (winningTeamElo - teamElo) / 400; var invertedExpectedOutcome = Math.Pow(10, eloDifference) + 1; var expectedOutcome = 1 / invertedExpectedOutcome; foreach (var guardian in guardians) { var guardianResult = team.GuardianMatchResults.FirstOrDefault(res => res.GuardianId == guardian.Id); var newGuardianElo = _guardianEloRepository.CalculateGuardianElo(guardian, false, guardianResult.Efficiency, expectedOutcome, 0, team.MatchId); await _guardianEloRepository.UpdateGuardianElo(newGuardianElo); } } }
public async Task <ActionResult <MatchTeamDto> > CreateTeam([FromBody] MatchTeamOperationDto dto) { var match = await Context.Matches .Where(o => o.Started == null) .FirstOrDefaultAsync(o => o.Id == dto.MatchId); if (match == null) { return(BadRequest(new InvalidMatchException())); } var team = new MatchTeam() { MatchId = match.Id, }; if (!string.IsNullOrEmpty(dto.Password)) { team.SetPassword(dto.Password); } Context.Add(team); await Context.SaveChangesAsync(); return(Ok(Mapper.Map <MatchTeamDto>(team))); }
private void CbAwayTeam_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { AwayTeam = (sender as ComboBox)?.SelectedItem as MatchTeam; LoadPanelWithPlayersAsync(AwayTeam, true); PnlAwayTeamGoalie.Children.Clear(); PnlAwayTeamDefender.Children.Clear(); PnlAwayTeamMidfield.Children.Clear(); PnlAwayTeamForward.Children.Clear(); }
public static MatchTeamDto AsDto(this MatchTeam team) { return(new MatchTeamDto { TeamId = team.TeamId, MatchId = team.MatchId, Score = team.Score, ClubName = team.Team.Club.Name, TeamName = team.Team.Name }); }
public async Task <IActionResult> FormatRequestAndAddMatch([FromQuery] int numOfTeams, [FromQuery] int playersPerTeam) { var createMatchRequest = new CreateMatchRequest(); createMatchRequest.MatchType = Enum.Parse <MatchType>(Request.Form["MatchType"]); var formKeys = Request.Form.Keys; Console.WriteLine($"Key count: {formKeys.Count()}"); var teams = new List <MatchTeam>(); for (var i = 0; i < 2; i++) { var team = new MatchTeam(); team.Name = Request.Form[$"Team[{i}].Name"]; team.TeamScore = int.Parse(Request.Form[$"Team[{i}].TeamScore"]); var guardianCount = formKeys.Count(g => g.Contains($"Team[{i}]") && g.Contains("GuardianName")); Console.WriteLine($"Guardians on team: {guardianCount}"); var guardianResults = new List <GuardianMatchResult>(); for (var j = 0; j < guardianCount; j++) { var results = new GuardianMatchResult { Kills = int.Parse(Request.Form[$"Team[{i}].MatchResults[{j}].Kills"]), Assists = int.Parse(Request.Form[$"Team[{i}].MatchResults[{j}].Assists"]), Deaths = int.Parse(Request.Form[$"Team[{i}].MatchResults[{j}].Deaths"]), GuardianName = Request.Form[$"Team[{i}].MatchResults[{j}].GuardianName"] }; Console.WriteLine($"Guardian results processed successfully: {results.GuardianName}"); if (results.Deaths == 0) { results.Efficiency = results.Kills + results.Assists; } else { results.Efficiency = (double)(results.Kills + results.Assists) / results.Deaths; } Console.WriteLine($"Calculated Eff = {results.Efficiency:F4}"); guardianResults.Add(results); } team.GuardianMatchResults = guardianResults; teams.Add(team); } createMatchRequest.Teams = teams; await _matchService.CreateMatch(createMatchRequest.ToMatch(), createMatchRequest.Teams); return(RedirectToAction("Index")); }
private async Task <IEnumerable <Guardian> > GetGuardiansForTeam(MatchTeam team) { var guardians = new List <Guardian>(); foreach (var result in team.GuardianMatchResults) { var guardian = await _guardianRepository.GetGuardian(result.GuardianId); guardians.Add(guardian); } return(guardians); }
public async Task AddMatchTeam(MatchTeamDto dto) { var match = await this.FindSingleMatchAsync(dto.MatchId); if (match.Teams.Any(t => t.TeamId == dto.TeamId)) { return; } var mt = new MatchTeam { MatchId = dto.MatchId, TeamId = dto.TeamId, Score = 0 }; await this._context.MatchTeams.AddAsync(mt); await this._context.SaveChangesAsync(); }
private async Task CalculateWinningElo(MatchTeam team, IEnumerable <MatchTeam> losingTeams) { var winningGuardians = await GetGuardiansForTeam(team); var teamElo = CalculateTeamAverageElo(winningGuardians); var losingTeamElos = new List <double>(); foreach (var losingTeam in losingTeams) { var guardiansForTeam = await GetGuardiansForTeam(losingTeam); var losingTeamElo = CalculateTeamAverageElo(guardiansForTeam); losingTeamElos.Add(losingTeamElo); } var averageLosingTeamElo = losingTeamElos.Average(); var eloDifference = (averageLosingTeamElo - teamElo) / 400; var invertedExpectedOutcome = Math.Pow(10, eloDifference) + 1; var expectedOutcome = 1 / invertedExpectedOutcome; foreach (var guardian in winningGuardians) { var guardianResult = team.GuardianMatchResults.FirstOrDefault(res => res.GuardianId == guardian.Id); var newGuardianElo = _guardianEloRepository.CalculateGuardianElo(guardian, true, guardianResult.Efficiency, expectedOutcome, 1, team.MatchId); await _guardianEloRepository.UpdateGuardianElo(newGuardianElo); if (newGuardianElo.NewElo >= 2100) { await _guardianRepository.UpdateGuardianEloModifier(guardian.Id, EloModifier.HighRankingGuardian); } } }
private MatchTeam ConvertRiotParticipantsToDbTeam(IEnumerable <ParticipantIdentity> riotParticipantIdentities, IEnumerable <Participant> riotParticipants, TeamStats riotTeamStats) { var team = new MatchTeam { BaronKills = riotTeamStats.BaronKills, DragonKills = riotTeamStats.DragonKills, InhibitorKills = riotTeamStats.InhibitorKills, RiftHeraldKills = riotTeamStats.RiftHeraldKills, TeamId = riotTeamStats.TeamId }; foreach (var participant in riotParticipants) { try { var participantIdentity = riotParticipantIdentities.FirstOrDefault(x => x.ParticipantId == participant.ParticipantId).Player; team.Players.Add ( new MatchPlayer() { AccountId = participantIdentity.AccountId, SummonerId = participantIdentity.SummonerId, SummonerName = participantIdentity.SummonerName, ProfileIconId = participantIdentity.ProfileIcon, TeamId = participant.TeamId, ParticipantId = participant.ParticipantId, HighestAcheivedTierLastSeason = participant.HighestAchievedSeasonTier.ToString(), Kills = participant.Stats.Kills, Deaths = participant.Stats.Deaths, Assists = participant.Stats.Assists, TotalMinionsKilled = participant.Stats.TotalMinionsKilled, ChampionId = participant.ChampionId, ChampionLevel = participant.Stats.ChampLevel, //Item ids TrinketId = participant.Stats.Item6, Item1Id = participant.Stats.Item0, Item2Id = participant.Stats.Item1, Item3Id = participant.Stats.Item2, Item4Id = participant.Stats.Item3, Item5Id = participant.Stats.Item4, Item6Id = participant.Stats.Item5, //Rune ids PrimaryRuneStyleId = participant.Stats.PerkPrimaryStyle, PrimaryRuneSubStyleOneId = participant.Stats.Perk0, PrimaryRuneSubStyleTwoId = participant.Stats.Perk1, PrimaryRuneSubStyleThreeId = participant.Stats.Perk2, PrimaryRuneSubStyleFourId = participant.Stats.Perk3, SecondaryRuneStyleId = participant.Stats.PerkSubStyle, SecondaryRuneSubStyleOneId = participant.Stats.Perk4, SecondaryRuneSubStyleTwoId = participant.Stats.Perk5, //Summoners spell ids SummonerSpellOneId = participant.Spell1Id, SummonerSpellTwoId = participant.Spell2Id, //Gold GoldEarned = participant.Stats.GoldEarned, GoldSpent = participant.Stats.GoldSpent, //Vision VisionScore = participant.Stats.VisionScore, WardsPlaced = participant.Stats.WardsPlaced, VisionWardsBoughtInGame = participant.Stats.VisionWardsBoughtInGame, SightWardsBoughtInGame = participant.Stats.SightWardsBoughtInGame, //Damage dealt/taken TotalDamageTaken = participant.Stats.TotalDamageTaken, TotalDamageDealt = participant.Stats.TotalDamageDealt, TotalDamageDealtToChampions = participant.Stats.TotalDamageDealtToChampions, TrueDamageTaken = participant.Stats.TrueDamageTaken, TrueDamageDealt = participant.Stats.TrueDamageDealt, TrueDamageDealtToChampions = participant.Stats.TrueDamageDealtToChampions, MagicDamageTaken = participant.Stats.MagicalDamageTaken, MagicDamageDealt = participant.Stats.MagicDamageDealt, MagicDamageDealtToChampions = participant.Stats.MagicDamageDealtToChampions, PhysicalDamageTaken = participant.Stats.PhysicalDamageTaken, PhysicalDamageDealt = participant.Stats.PhysicalDamageDealt, PhysicalDamageDealtToChampions = participant.Stats.PhysicalDamageDealtToChampions, LargestCriticalStrike = participant.Stats.LargestCriticalStrike, //objectives FirstTowerAssist = participant.Stats.FirstTowerAssist, FirstTowerKill = participant.Stats.FirstTowerKill, TurretKills = participant.Stats.TurretKills, DamageDealtToTurrets = participant.Stats.DamageDealtToTurrets, FirstInhibitorAssist = participant.Stats.FirstInhibitorAssist, FirstInhibitorKill = participant.Stats.FirstInhibitorKill, InhibitorKills = participant.Stats.InhibitorKills, DamageDealtToObjectives = participant.Stats.DamageDealtToObjectives, ObjectivePlayerScore = participant.Stats.ObjectivePlayerScore, //Kills FirstBloodAssist = participant.Stats.FirstBloodAssist, FirstBloodKill = participant.Stats.FirstBloodKill, LargestMultiKill = participant.Stats.LargestMultiKill, LargestKillingSpree = participant.Stats.LargestKillingSpree, PentaKills = participant.Stats.PentaKills, QuadraKills = participant.Stats.QuadraKills, KillingSprees = participant.Stats.KillingSprees, DoubleKills = participant.Stats.DoubleKills, //Farming NeutralMinionsKilled = participant.Stats.NeutralMinionsKilled, NeutralMinionsKilledEnemyJungle = participant.Stats.NeutralMinionsKilledEnemyJungle, NeutralMinionsKilledTeamJungle = participant.Stats.NeutralMinionsKilledTeamJungle, //Misc info TimeCCingOthers = participant.Stats.TimeCCingOthers, TotalTimeCrowdControlDealt = participant.Stats.TotalTimeCrowdControlDealt, TotalHeal = participant.Stats.TotalHeal, TotalUnitsHealed = participant.Stats.TotalUnitsHealed, TotalScoreRank = participant.Stats.TotalScoreRank } ); } catch (Exception) { } } return(team); }
static void Main(string[] args) { using (var conn2 = new SQLite.SQLiteConnection("..//..//..//Smarkets.SqliteScoreApp.Teams.sqlite")) { var teams = conn2.Table <Smarkets.Entity.Temp.Team>().ToList(); var results = conn2.Table <Smarkets.Entity.Temp.Result>().ToList(); foreach (var result in results) { var mt = new MatchTeam { TeamId = result.Team1Id, Key = (byte)Football.Enum.MatchTeamType.Home, Statistics = new System.Collections.Generic.List <TeamStat> { new TeamStat { Key = (byte)Football.Enum.TeamStatType.FullTimeGoal, Value = result.Team1FullTimeScore, } , new TeamStat { Key = (byte)Football.Enum.TeamStatType.HalfTimeGoal, Value = result.Team1HalfTimeScore, } } }; var mt2 = new MatchTeam { TeamId = result.Team2Id, Key = (byte)Football.Enum.MatchTeamType.Away, Statistics = new System.Collections.Generic.List <TeamStat> { new TeamStat { Key = (byte)Football.Enum.TeamStatType.FullTimeGoal, Value = result.Team2FullTimeScore, } , new TeamStat { Key = (byte)Football.Enum.TeamStatType.HalfTimeGoal, Value = result.Team2HalfTimeScore, } } }; var match = new Match { Id = result.Id, Status = (byte)UtilityEnum.ProcessState.Terminated, Teams = new System.Collections.Generic.List <MatchTeam> { mt, mt2 } }; } ; } }
public void AddMatchAndRanks(Match match, List <Team> teams) { var winningTeam = match.Result.Winner; var tierPoints = CalcTierPoints(match, teams); var impactPoints = CalcImpactPoints(match, tierPoints); var setDiff = Math.Abs(match.Result.SetsCountTeam1 - match.Result.SetsCountTeam2); var gemDiff = 0; match.Result.Sets.ForEach(x => gemDiff += (x.TeamOneGems - x.TeamTwoGems)); gemDiff = Math.Abs(gemDiff); if (winningTeam == Winner.TeamOne && gemDiff < 0) { gemDiff = gemDiff * -1; } if (winningTeam == Winner.TeamTwo && gemDiff > 0) { gemDiff = gemDiff * -1; } var changePoints = new List <decimal>(); changePoints.Add(impactPoints[0] + impactPoints[0] * (gemDiff * Constants.GemMultiplier * setDiff * Constants.SetMultiplier)); changePoints.Add(impactPoints[1] + impactPoints[1] * (gemDiff * Constants.GemMultiplier * setDiff * Constants.SetMultiplier)); changePoints.Add(impactPoints[2] + impactPoints[2] * (gemDiff * Constants.GemMultiplier * setDiff * Constants.SetMultiplier)); changePoints.Add(impactPoints[3] + impactPoints[3] * (gemDiff * Constants.GemMultiplier * setDiff * Constants.SetMultiplier)); if (winningTeam == Winner.TeamOne) { changePoints[2] = changePoints[2] * -1; changePoints[3] = changePoints[3] * -1; } else { changePoints[0] = changePoints[0] * -1; changePoints[1] = changePoints[1] * -1; } var dej = _context.Bros.Where(b => b.Name == teams.First().Bros.First().Name).FirstOrDefault(); _context.Bros.Where(b => b.Name == teams.First().Bros.First().Name).FirstOrDefault().Ranks.Add(new Rank { Ranking = teams.First().Bros.First().Ranks.LastOrDefault().Ranking + changePoints[0] }); _context.Bros.Where(b => b.Name == teams.First().Bros.Last().Name).FirstOrDefault().Ranks.Add(new Rank { Ranking = teams.First().Bros.Last().Ranks.LastOrDefault().Ranking + changePoints[1] }); _context.Bros.Where(b => b.Name == teams.Last().Bros.First().Name).FirstOrDefault().Ranks.Add(new Rank { Ranking = teams.Last().Bros.First().Ranks.LastOrDefault().Ranking + changePoints[2] }); _context.Bros.Where(b => b.Name == teams.Last().Bros.Last().Name).FirstOrDefault().Ranks.Add(new Rank { Ranking = teams.Last().Bros.Last().Ranks.LastOrDefault().Ranking + changePoints[3] }); _context.SaveChanges(); var matchDb = _context.Add(match).Entity; var matchTeam1 = new MatchTeam { TeamId = teams[0].TeamId, MatchId = matchDb.MatchId }; var matchTeam2 = new MatchTeam { TeamId = teams[1].TeamId, MatchId = matchDb.MatchId }; _context.Add(matchTeam1); _context.Add(matchTeam2); _context.SaveChanges(); }
private async Task UpdateMatch(Competition competition, Model.FIFA.Match fifaMatch) { var homeTeam = await GetOrCreateTeam(fifaMatch.Home); var awayTeam = await GetOrCreateTeam(fifaMatch.Away); var localizedNames = fifaMatch.StageName.Select(n => new LocalizedName { Locale = n.Locale, Value = n.Description }); var group = fifaMatch.GroupName.Select(n => new LocalizedName { Locale = n.Locale, Value = n.Description }); var mutation = Model.Mutations.CREATE_MATCH; var savedMatch = competition.Matches.Items.FirstOrDefault(i => i.Id == fifaMatch.IdMatch); if (savedMatch != null) { savedMatch.LocalizedNames = savedMatch.LocalizedNames ?? new List <LocalizedName>(); localizedNames = savedMatch.LocalizedNames .Concat(localizedNames) .Distinct(_localizedNameComparer); group = savedMatch.Group .Concat(group) .Distinct(_localizedNameComparer); mutation = Model.Mutations.UPDATE_MATCH; } var matchResponses = await _awsJsInterop.GraphQlAsync <Model.MatchResponses>(mutation, new { input = new { id = fifaMatch.IdMatch, group, number = fifaMatch.MatchNumber, matchCompetitionId = competition.Id, beginAt = fifaMatch.Date, placeHolderHome = homeTeam?.Name ?? fifaMatch.PlaceHolderA, placeHolderAway = awayTeam?.Name ?? fifaMatch.PlaceHolderB, localizedNames } }); var match = matchResponses.CreateMatch ?? matchResponses.UpdateMatch; if (savedMatch != null) { savedMatch.BeginAt = match.BeginAt; savedMatch.Group = match.Group; savedMatch.LocalizedNames = match.LocalizedNames; savedMatch.MatchTeams = match.MatchTeams; savedMatch.Number = match.Number; savedMatch.PlaceHolderAway = match.PlaceHolderAway; savedMatch.PlaceHolderHome = match.PlaceHolderHome; } else { var matchList = (IList <FootballChampionship.Model.Match>)competition.Matches.Items; matchList.Add(match); } var matchTeams = match.MatchTeams.Items; MatchTeam homeMatchTeam = null; if (homeTeam != null) { homeMatchTeam = matchTeams.FirstOrDefault(mt => mt.Team.Id == homeTeam.Id); if (homeMatchTeam == null) { var homeMatchTeamResponse = await _awsJsInterop.GraphQlAsync <MatchTeamResponses>(Model.Mutations.CREATE_MATCH_TEAM, new { input = new { id = Guid.NewGuid(), isHome = true, matchTeamTeamId = homeTeam.Id, matchTeamMatchId = fifaMatch.IdMatch } }); homeMatchTeam = homeMatchTeamResponse.CreateMatchTeam; } homeMatchTeam.Team = homeTeam; } MatchTeam awayMatchTeam = null; if (awayTeam != null) { awayMatchTeam = matchTeams.FirstOrDefault(mt => mt.Team.Id == awayTeam.Id); if (awayMatchTeam == null) { var awayMatchTeamResponse = await _awsJsInterop.GraphQlAsync <MatchTeamResponses>(Model.Mutations.CREATE_MATCH_TEAM, new { input = new { id = Guid.NewGuid(), isHome = false, matchTeamTeamId = awayTeam.Id, matchTeamMatchId = fifaMatch.IdMatch } }); awayMatchTeam = awayMatchTeamResponse.CreateMatchTeam; } awayMatchTeam.Team = awayTeam; } match.MatchTeams.Items = new List <MatchTeam> { homeMatchTeam, awayMatchTeam }; MatchUpdated?.Invoke(match); }