using Robust.Server.Player;
using Robust.Shared.Network;
using Robust.Shared.ViewVariables;
namespace Content.Server.Players
{
///
/// Content side for all data that tracks a player session.
/// Use to retrieve this from an .
///
public sealed class PlayerData
{
///
/// The session ID of the player owning this data.
///
[ViewVariables]
public NetUserId UserId { get; }
///
/// The currently occupied mind of the player owning this data.
/// DO NOT DIRECTLY SET THIS UNLESS YOU KNOW WHAT YOU'RE DOING.
///
[ViewVariables]
public Mind.Mind? Mind { get; set; }
///
/// If true, the player is an admin and they explicitly de-adminned mid-game,
/// so they should not regain admin if they reconnect.
///
public bool ExplicitlyDeadminned { get; set; }
public void WipeMind()
{
Mind?.TransferTo(null);
Mind?.RemoveOwningPlayer();
Mind = null;
}
public PlayerData(NetUserId userId)
{
UserId = userId;
}
}
public static class PlayerDataExt
{
///
/// Gets the correctly cast instance of content player data from an engine player data storage.
///
public static PlayerData? ContentData(this IPlayerData data)
{
return (PlayerData?) data.ContentDataUncast;
}
///
/// Gets the correctly cast instance of content player data from an engine player data storage.
///
public static PlayerData? ContentData(this IPlayerSession session)
{
return session.Data.ContentData();
}
}
}