mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-08-06 11:58:38 +00:00
Make it so you don't rematch with people you just dived in with
This commit is contained in:
parent
bdccb201ae
commit
688bd9a58b
2 changed files with 72 additions and 47 deletions
|
@ -1,6 +1,5 @@
|
|||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
|
@ -66,58 +65,26 @@ namespace LBPUnion.ProjectLighthouse.Controllers
|
|||
|
||||
#region Process match data
|
||||
|
||||
if (matchData is UpdateMyPlayerData)
|
||||
{
|
||||
if (MatchHelper.UserLocations.TryGetValue(user.UserId, out string? _)) MatchHelper.UserLocations.Remove(user.UserId);
|
||||
MatchHelper.UserLocations.Add(user.UserId, token.UserLocation);
|
||||
}
|
||||
if (matchData is UpdateMyPlayerData) MatchHelper.SetUserLocation(user.UserId, token.UserLocation);
|
||||
|
||||
if (matchData is FindBestRoom findBestRoom)
|
||||
if (matchData is FindBestRoom && MatchHelper.UserLocations.Count > 1)
|
||||
{
|
||||
if (MatchHelper.UserLocations.Count > 1)
|
||||
foreach ((int id, string? location) in MatchHelper.UserLocations)
|
||||
{
|
||||
foreach ((int id, string? location) in MatchHelper.UserLocations)
|
||||
{
|
||||
if (id == user.UserId) continue;
|
||||
if (location == null) continue;
|
||||
if (id == user.UserId) continue;
|
||||
if (location == null) continue;
|
||||
if (MatchHelper.DidUserRecentlyDiveInWith(user.UserId, id)) continue;
|
||||
|
||||
User? otherUser = await this.database.Users.FirstOrDefaultAsync(u => u.UserId == id);
|
||||
if (otherUser == null) continue;
|
||||
User? otherUser = await this.database.Users.FirstOrDefaultAsync(u => u.UserId == id);
|
||||
if (otherUser == null) continue;
|
||||
|
||||
FindBestRoomResponse response = new()
|
||||
{
|
||||
Players = new List<Player>
|
||||
{
|
||||
new()
|
||||
{
|
||||
MatchingRes = 0,
|
||||
PlayerId = otherUser.Username,
|
||||
},
|
||||
new()
|
||||
{
|
||||
MatchingRes = 1,
|
||||
PlayerId = user.Username,
|
||||
},
|
||||
},
|
||||
Locations = new List<string>
|
||||
{
|
||||
location,
|
||||
token.UserLocation,
|
||||
},
|
||||
Slots = new List<List<int>>
|
||||
{
|
||||
new()
|
||||
{
|
||||
5,
|
||||
0,
|
||||
},
|
||||
},
|
||||
};
|
||||
FindBestRoomResponse response = MatchHelper.FindBestRoomResponse(user.Username, otherUser.Username, token.UserLocation, location);
|
||||
|
||||
string serialized = JsonSerializer.Serialize(response, typeof(FindBestRoomResponse));
|
||||
string serialized = JsonSerializer.Serialize(response, typeof(FindBestRoomResponse));
|
||||
|
||||
return new ObjectResult($"[{{\"StatusCode\":200}},{serialized}]");
|
||||
}
|
||||
MatchHelper.AddUserRecentlyDivedIn(user.UserId, id);
|
||||
|
||||
return new ObjectResult($"[{{\"StatusCode\":200}},{serialized}]");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
|
@ -10,7 +11,64 @@ namespace LBPUnion.ProjectLighthouse.Helpers
|
|||
{
|
||||
public static class MatchHelper
|
||||
{
|
||||
public static Dictionary<int, string?> UserLocations = new();
|
||||
public static readonly Dictionary<int, string?> UserLocations = new();
|
||||
public static readonly Dictionary<int, List<int>?> UserRecentlyDivedIn = new();
|
||||
|
||||
public static void SetUserLocation(int userId, string location)
|
||||
{
|
||||
if (UserLocations.TryGetValue(userId, out string? _)) UserLocations.Remove(userId);
|
||||
UserLocations.Add(userId, location);
|
||||
}
|
||||
|
||||
public static void AddUserRecentlyDivedIn(int userId, int otherUserId)
|
||||
{
|
||||
if (!UserRecentlyDivedIn.TryGetValue(userId, out List<int>? recentlyDivedIn))
|
||||
{
|
||||
UserRecentlyDivedIn.Add(userId, recentlyDivedIn = new List<int>());
|
||||
}
|
||||
|
||||
Debug.Assert(recentlyDivedIn != null, nameof(recentlyDivedIn) + " is null, somehow.");
|
||||
|
||||
recentlyDivedIn.Add(otherUserId);
|
||||
}
|
||||
|
||||
public static bool DidUserRecentlyDiveInWith(int userId, int otherUserId)
|
||||
{
|
||||
if (!UserRecentlyDivedIn.TryGetValue(userId, out List<int>? recentlyDivedIn) || recentlyDivedIn == null) return false;
|
||||
|
||||
return recentlyDivedIn.Contains(otherUserId);
|
||||
}
|
||||
|
||||
public static FindBestRoomResponse FindBestRoomResponse(string username, string otherUsername, string location, string otherLocation)
|
||||
=> new()
|
||||
{
|
||||
Players = new List<Player>
|
||||
{
|
||||
new()
|
||||
{
|
||||
MatchingRes = 0,
|
||||
PlayerId = otherUsername,
|
||||
},
|
||||
new()
|
||||
{
|
||||
MatchingRes = 1,
|
||||
PlayerId = username,
|
||||
},
|
||||
},
|
||||
Locations = new List<string>
|
||||
{
|
||||
location,
|
||||
otherLocation,
|
||||
},
|
||||
Slots = new List<List<int>>
|
||||
{
|
||||
new()
|
||||
{
|
||||
5,
|
||||
0,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
public static IMatchData? Deserialize(string data)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue