Holy crap auth works (#2099)
* Holy crap auth works * Fix some usages of UserID instead of UserName * Refactor preferences. They be non-async now. Also faster. * Rename DbContext. * Guest username assignment. * Fix saving of profiles. * Don't store data for guests. * Fix generating invalid random colors. * Don't allow dumb garbage for char preferences. * Bans. * Lol forgot to fill out the command description. * Connection log. * Rename all the tables and columns to be snake_case. * Re-do migrations. * Fixing tests and warnings. * Update submodule
This commit is contained in:
committed by
GitHub
parent
8a33e0a9bd
commit
66c8a68891
@@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.GameObjects.Components.Access;
|
||||
using Content.Server.GameObjects.Components.GUI;
|
||||
using Content.Server.GameObjects.Components.Items.Storage;
|
||||
@@ -34,7 +33,6 @@ using Robust.Server.Interfaces.Maps;
|
||||
using Robust.Server.Interfaces.Player;
|
||||
using Robust.Server.Player;
|
||||
using Robust.Server.ServerStatus;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Enums;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.GameObjects.Systems;
|
||||
@@ -222,7 +220,7 @@ namespace Content.Server.GameTicking
|
||||
}
|
||||
}
|
||||
|
||||
public async void StartRound(bool force = false)
|
||||
public void StartRound(bool force = false)
|
||||
{
|
||||
DebugTools.Assert(RunLevel == GameRunLevel.PreRoundLobby);
|
||||
Logger.InfoS("ticker", "Starting round!");
|
||||
@@ -244,16 +242,16 @@ namespace Content.Server.GameTicking
|
||||
RoundLengthMetric.Set(0);
|
||||
|
||||
// Get the profiles for each player for easier lookup.
|
||||
var profiles = (await _prefsManager.GetSelectedProfilesForPlayersAsync(
|
||||
var profiles = _prefsManager.GetSelectedProfilesForPlayers(
|
||||
readyPlayers
|
||||
.Select(p => p.Name).ToList()))
|
||||
.Select(p => p.UserId).ToList())
|
||||
.ToDictionary(p => p.Key, p => (HumanoidCharacterProfile) p.Value);
|
||||
|
||||
foreach (var readyPlayer in readyPlayers)
|
||||
{
|
||||
if (!profiles.ContainsKey(readyPlayer.Name))
|
||||
if (!profiles.ContainsKey(readyPlayer.UserId))
|
||||
{
|
||||
profiles.Add(readyPlayer.Name, HumanoidCharacterProfile.Default());
|
||||
profiles.Add(readyPlayer.UserId, HumanoidCharacterProfile.Default());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +265,7 @@ namespace Content.Server.GameTicking
|
||||
continue;
|
||||
}
|
||||
|
||||
var profile = profiles[player.Name];
|
||||
var profile = profiles[player.UserId];
|
||||
if (profile.PreferenceUnavailable == PreferenceUnavailableMode.SpawnAsOverflow)
|
||||
{
|
||||
assignedJobs.Add(player, OverflowJob);
|
||||
@@ -277,7 +275,7 @@ namespace Content.Server.GameTicking
|
||||
// Spawn everybody in!
|
||||
foreach (var (player, job) in assignedJobs)
|
||||
{
|
||||
SpawnPlayer(player, profiles[player.Name], job, false);
|
||||
SpawnPlayer(player, profiles[player.UserId], job, false);
|
||||
}
|
||||
|
||||
// Time to start the preset.
|
||||
@@ -320,9 +318,10 @@ namespace Content.Server.GameTicking
|
||||
IoCManager.Resolve<IServerNetManager>().ServerSendToAll(msg);
|
||||
}
|
||||
|
||||
private async Task<HumanoidCharacterProfile> GetPlayerProfileAsync(IPlayerSession p) =>
|
||||
(HumanoidCharacterProfile) (await _prefsManager.GetPreferencesAsync(p.SessionId.Username))
|
||||
.SelectedCharacter;
|
||||
private HumanoidCharacterProfile GetPlayerProfile(IPlayerSession p)
|
||||
{
|
||||
return (HumanoidCharacterProfile) _prefsManager.GetPreferences(p.UserId).SelectedCharacter;
|
||||
}
|
||||
|
||||
public void EndRound(string roundEndText = "")
|
||||
{
|
||||
@@ -373,7 +372,7 @@ namespace Content.Server.GameTicking
|
||||
if (LobbyEnabled)
|
||||
_playerJoinLobby(targetPlayer);
|
||||
else
|
||||
SpawnPlayerAsync(targetPlayer);
|
||||
SpawnPlayer(targetPlayer);
|
||||
}
|
||||
|
||||
public void MakeObserve(IPlayerSession player)
|
||||
@@ -389,13 +388,23 @@ namespace Content.Server.GameTicking
|
||||
{
|
||||
if (!_playersInLobby.ContainsKey(player)) return;
|
||||
|
||||
SpawnPlayerAsync(player, jobId);
|
||||
if (!_prefsManager.HavePreferencesLoaded(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpawnPlayer(player, jobId);
|
||||
}
|
||||
|
||||
public void ToggleReady(IPlayerSession player, bool ready)
|
||||
{
|
||||
if (!_playersInLobby.ContainsKey(player)) return;
|
||||
|
||||
if (!_prefsManager.HavePreferencesLoaded(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var status = ready ? PlayerStatus.Ready : PlayerStatus.NotReady;
|
||||
_playersInLobby[player] = ready ? PlayerStatus.Ready : PlayerStatus.NotReady;
|
||||
_netManager.ServerSendMessage(_getStatusMsg(player), player.ConnectedClient);
|
||||
@@ -703,7 +712,7 @@ namespace Content.Server.GameTicking
|
||||
|
||||
case SessionStatus.Connected:
|
||||
{
|
||||
_chatManager.DispatchServerAnnouncement($"Player {args.Session.SessionId} joined server!");
|
||||
_chatManager.DispatchServerAnnouncement($"Player {args.Session.Name} joined server!");
|
||||
|
||||
if (LobbyEnabled && _roundStartCountdownHasNotStartedYetDueToNoPlayers)
|
||||
{
|
||||
@@ -716,6 +725,8 @@ namespace Content.Server.GameTicking
|
||||
|
||||
case SessionStatus.InGame:
|
||||
{
|
||||
_prefsManager.OnClientConnected(session);
|
||||
|
||||
var data = session.ContentData();
|
||||
if (data.Mind == null)
|
||||
{
|
||||
@@ -725,13 +736,14 @@ namespace Content.Server.GameTicking
|
||||
return;
|
||||
}
|
||||
|
||||
SpawnPlayerAsync(session);
|
||||
|
||||
SpawnWaitPrefs();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (data.Mind.CurrentEntity == null)
|
||||
{
|
||||
SpawnPlayerAsync(session);
|
||||
SpawnWaitPrefs();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -747,11 +759,18 @@ namespace Content.Server.GameTicking
|
||||
{
|
||||
if (_playersInLobby.ContainsKey(session)) _playersInLobby.Remove(session);
|
||||
|
||||
_chatManager.DispatchServerAnnouncement($"Player {args.Session.SessionId} left server!");
|
||||
_chatManager.DispatchServerAnnouncement($"Player {args.Session} left server!");
|
||||
ServerEmptyUpdateRestartCheck();
|
||||
_prefsManager.OnClientDisconnected(session);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
async void SpawnWaitPrefs()
|
||||
{
|
||||
await _prefsManager.WaitPreferencesLoaded(session);
|
||||
SpawnPlayer(session);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -785,11 +804,9 @@ namespace Content.Server.GameTicking
|
||||
}, _updateShutdownCts.Token);
|
||||
}
|
||||
|
||||
private async void SpawnPlayerAsync(IPlayerSession session, string jobId = null, bool lateJoin = true)
|
||||
private void SpawnPlayer(IPlayerSession session, string jobId = null, bool lateJoin = true)
|
||||
{
|
||||
var character = (HumanoidCharacterProfile) (await _prefsManager
|
||||
.GetPreferencesAsync(session.SessionId.Username))
|
||||
.SelectedCharacter;
|
||||
var character = GetPlayerProfile(session);
|
||||
|
||||
SpawnPlayer(session, character, jobId, lateJoin);
|
||||
}
|
||||
@@ -809,7 +826,7 @@ namespace Content.Server.GameTicking
|
||||
|
||||
var data = session.ContentData();
|
||||
data.WipeMind();
|
||||
data.Mind = new Mind(session.SessionId)
|
||||
data.Mind = new Mind(session.UserId)
|
||||
{
|
||||
CharacterName = character.Name
|
||||
};
|
||||
@@ -866,17 +883,15 @@ namespace Content.Server.GameTicking
|
||||
_manifest.Add(new ManifestEntry(characterName, jobId));
|
||||
}
|
||||
|
||||
private async void _spawnObserver(IPlayerSession session)
|
||||
private void _spawnObserver(IPlayerSession session)
|
||||
{
|
||||
_playerJoinGame(session);
|
||||
|
||||
var name = (await _prefsManager
|
||||
.GetPreferencesAsync(session.SessionId.Username))
|
||||
.SelectedCharacter.Name;
|
||||
var name = GetPlayerProfile(session).Name;
|
||||
|
||||
var data = session.ContentData();
|
||||
data.WipeMind();
|
||||
data.Mind = new Mind(session.SessionId);
|
||||
data.Mind = new Mind(session.UserId);
|
||||
|
||||
var mob = _spawnObserverMob();
|
||||
mob.Name = name;
|
||||
@@ -888,7 +903,6 @@ namespace Content.Server.GameTicking
|
||||
{
|
||||
_playersInLobby.Add(session, PlayerStatus.NotReady);
|
||||
|
||||
_prefsManager.OnClientConnected(session);
|
||||
_netManager.ServerSendMessage(_netManager.CreateNetMessage<MsgTickerJoinLobby>(), session.ConnectedClient);
|
||||
_netManager.ServerSendMessage(_getStatusMsg(session), session.ConnectedClient);
|
||||
_netManager.ServerSendMessage(GetInfoMsg(), session.ConnectedClient);
|
||||
@@ -907,11 +921,11 @@ namespace Content.Server.GameTicking
|
||||
private MsgTickerLobbyReady GetPlayerStatus()
|
||||
{
|
||||
var msg = _netManager.CreateNetMessage<MsgTickerLobbyReady>();
|
||||
msg.PlayerStatus = new Dictionary<NetSessionId, PlayerStatus>();
|
||||
msg.PlayerStatus = new Dictionary<NetUserId, PlayerStatus>();
|
||||
foreach (var player in _playersInLobby.Keys)
|
||||
{
|
||||
_playersInLobby.TryGetValue(player, out var status);
|
||||
msg.PlayerStatus.Add(player.SessionId, status);
|
||||
msg.PlayerStatus.Add(player.UserId, status);
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
@@ -919,9 +933,9 @@ namespace Content.Server.GameTicking
|
||||
private MsgTickerLobbyReady GetStatusSingle(IPlayerSession player, PlayerStatus status)
|
||||
{
|
||||
var msg = _netManager.CreateNetMessage<MsgTickerLobbyReady>();
|
||||
msg.PlayerStatus = new Dictionary<NetSessionId, PlayerStatus>
|
||||
msg.PlayerStatus = new Dictionary<NetUserId, PlayerStatus>
|
||||
{
|
||||
{ player.SessionId, status }
|
||||
{ player.UserId, status }
|
||||
};
|
||||
return msg;
|
||||
}
|
||||
@@ -967,7 +981,7 @@ The current game mode is: [color=white]{0}[/color].
|
||||
_netManager.ServerSendToMany(infoMsg, _playersInLobby.Keys.Select(p => p.ConnectedClient).ToList());
|
||||
}
|
||||
|
||||
private GamePreset MakeGamePreset(Dictionary<string, HumanoidCharacterProfile> readyProfiles)
|
||||
private GamePreset MakeGamePreset(Dictionary<NetUserId, HumanoidCharacterProfile> readyProfiles)
|
||||
{
|
||||
var preset = _dynamicTypeFactory.CreateInstance<GamePreset>(_presetType ?? typeof(PresetSandbox));
|
||||
preset.readyProfiles = readyProfiles;
|
||||
|
||||
Reference in New Issue
Block a user