Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 41 additions & 33 deletions GenOnlineService/Database/Database.MatchHistory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -290,15 +290,15 @@ private static Expression<Func<SetPropertyCalls<MatchHistoryEntry>, SetPropertyC
}


private static async Task<string?> _getMemberSlot(AppDbContext db, long matchId, int slotIndex)
{
if (slotIndex < 0 || slotIndex > 7)
return null;
return await db.MatchHistory
.Where(m => m.MatchId == matchId)
.Select(_slotSelectors[slotIndex])
.FirstOrDefaultAsync();
private static async Task<string?> _getMemberSlot(AppDbContext db, long matchId, int slotIndex)
{
if (slotIndex < 0 || slotIndex > 7)
return null;

return await db.MatchHistory
.Where(m => m.MatchId == matchId)
.Select(_slotSelectors[slotIndex])
.FirstOrDefaultAsync();
}


Expand Down Expand Up @@ -400,29 +400,32 @@ await db.MatchHistory
}


private static string ComputeRosterType(int playersSeen, Dictionary<int, int> playersPerTeam)
private static string ComputeRosterType(Dictionary<int, int> playersPerTeam)
{
// FFA check
bool isFFA = playersSeen > 2 &&
playersPerTeam.All(kv => kv.Key == -1 || kv.Value == 1);
int noTeamCount = playersPerTeam.TryGetValue(-1, out int n) ? n : 0;

if (isFFA)
return $"{playersSeen} Player FFA";
var teamedGroups = playersPerTeam
.Where(kv => kv.Key != -1)
.Select(kv => kv.Value)
.OrderBy(c => c)
.ToList();

// Team roster type
string roster = "";
int activePlayers = noTeamCount + teamedGroups.Sum();

foreach (var kv in playersPerTeam)
if (activePlayers == 0)
{
int count = kv.Value;
return "Unknown";
}

bool isFFA = activePlayers > 2 &&
(noTeamCount == activePlayers || teamedGroups.All(c => c == 1));

if (string.IsNullOrEmpty(roster))
roster = count.ToString();
else
roster += $"v{count}";
if (isFFA)
{
return $"{activePlayers} Player FFA";
}

return roster;
return string.Join("v", teamedGroups);
}


Expand All @@ -439,7 +442,6 @@ public static async Task<ulong> CreatePlaceholderMatchHistory(
string?[] jsonSlots = new string?[8];

Dictionary<int, int> playersPerTeam = new();
int playersSeen = 0;

foreach (var member in lobby.Members)
{
Expand Down Expand Up @@ -468,16 +470,22 @@ public static async Task<ulong> CreatePlaceholderMatchHistory(

jsonSlots[member.SlotIndex] = JsonSerializer.Serialize(model);

playersSeen++;

if (playersPerTeam.ContainsKey(model.team))
playersPerTeam[model.team]++;
else
playersPerTeam[model.team] = 1;
// Observers (side == -2) are not active players
if (model.side != -2)
{
if (playersPerTeam.ContainsKey(model.team))
{
playersPerTeam[model.team]++;
}
else
{
playersPerTeam[model.team] = 1;
}
}
}

// Determine roster type
string rosterType = ComputeRosterType(playersSeen, playersPerTeam);
string rosterType = ComputeRosterType(playersPerTeam);

// Build EF entity
var entity = new MatchHistoryEntry
Expand Down Expand Up @@ -1057,4 +1065,4 @@ await db.LeaderboardYearly


}
}
}