Move minds, roles, jobs and objectives to shared (#19679)

This commit is contained in:
DrSmugleaf
2023-08-30 21:46:11 -07:00
committed by GitHub
parent b702963d5e
commit 3f3ba6ac62
139 changed files with 1209 additions and 1041 deletions

View File

@@ -0,0 +1,7 @@
using Content.Shared.Mind;
namespace Content.Client.Mind;
public sealed class MindSystem : SharedMindSystem
{
}

View File

@@ -0,0 +1,12 @@
using Content.Shared.Players;
using Robust.Shared.Players;
namespace Content.Client.Players;
public sealed class PlayerSystem : SharedPlayerSystem
{
public override PlayerData? ContentData(ICommonSession? session)
{
return null;
}
}

View File

@@ -0,0 +1,7 @@
using Content.Shared.Roles.Jobs;
namespace Content.Client.Roles.Jobs;
public sealed class JobSystem : SharedJobSystem
{
}

View File

@@ -0,0 +1,5 @@
namespace Content.Client.Roles;
public sealed class RoleSystem : EntitySystem
{
}

View File

@@ -2,10 +2,10 @@
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Robust.Client; using Robust.Client;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Exceptions; using Robust.Shared.Exceptions;

View File

@@ -12,22 +12,13 @@ using Content.IntegrationTests.Tests;
using Content.IntegrationTests.Tests.Destructible; using Content.IntegrationTests.Tests.Destructible;
using Content.IntegrationTests.Tests.DeviceNetwork; using Content.IntegrationTests.Tests.DeviceNetwork;
using Content.IntegrationTests.Tests.Interaction.Click; using Content.IntegrationTests.Tests.Interaction.Click;
using Content.Server.GameTicking;
using Content.Server.Mind.Components;
using Content.Shared.CCVar;
using Content.Shared.GameTicking;
using Robust.Client; using Robust.Client;
using Robust.Client.State;
using Robust.Server; using Robust.Server;
using Robust.Server.Player;
using Robust.Shared;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.ContentPack; using Robust.Shared.ContentPack;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.IoC; using Robust.Shared.IoC;
using Robust.Shared.Log; using Robust.Shared.Log;
using Robust.Shared.Map;
using Robust.Shared.Network;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.UnitTesting; using Robust.UnitTesting;

View File

@@ -5,7 +5,6 @@ using Content.Client.Construction;
using Content.Client.Examine; using Content.Client.Examine;
using Content.IntegrationTests.Pair; using Content.IntegrationTests.Pair;
using Content.Server.Body.Systems; using Content.Server.Body.Systems;
using Content.Server.Mind;
using Content.Server.Players; using Content.Server.Players;
using Content.Server.Stack; using Content.Server.Stack;
using Content.Server.Tools; using Content.Server.Tools;
@@ -14,6 +13,7 @@ using Content.Shared.DoAfter;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Mind;
using Robust.Client.Input; using Robust.Client.Input;
using Robust.Client.UserInterface; using Robust.Client.UserInterface;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
@@ -192,7 +192,7 @@ public abstract partial class InteractionTest
{ {
// Fuck you mind system I want an hour of my life back // Fuck you mind system I want an hour of my life back
// Mind system is a time vampire // Mind system is a time vampire
SEntMan.System<MindSystem>().WipeMind(ServerSession.ContentData()?.Mind); SEntMan.System<SharedMindSystem>().WipeMind(ServerSession.ContentData()?.Mind);
old = cPlayerMan.LocalPlayer.ControlledEntity; old = cPlayerMan.LocalPlayer.ControlledEntity;
Player = SEntMan.SpawnEntity(PlayerPrototype, PlayerCoords); Player = SEntMan.SpawnEntity(PlayerPrototype, PlayerCoords);

View File

@@ -2,9 +2,9 @@
using System.Linq; using System.Linq;
using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles;
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Mind;
using Content.Server.Players; using Content.Server.Players;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Map; using Robust.Shared.Map;
@@ -42,7 +42,7 @@ public sealed class GhostRoleTests
var entMan = server.ResolveDependency<IEntityManager>(); var entMan = server.ResolveDependency<IEntityManager>();
var sPlayerMan = server.ResolveDependency<Robust.Server.Player.IPlayerManager>(); var sPlayerMan = server.ResolveDependency<Robust.Server.Player.IPlayerManager>();
var conHost = client.ResolveDependency<IConsoleHost>(); var conHost = client.ResolveDependency<IConsoleHost>();
var mindSystem = entMan.System<MindSystem>(); var mindSystem = entMan.System<SharedMindSystem>();
var session = sPlayerMan.ServerSessions.Single(); var session = sPlayerMan.ServerSessions.Single();
var originalMindId = session.ContentData()!.Mind!.Value; var originalMindId = session.ContentData()!.Mind!.Value;

View File

@@ -1,7 +1,7 @@
using System.Linq; using System.Linq;
using Content.Server.Mind;
using Content.Server.Players; using Content.Server.Players;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Robust.Server.Console; using Robust.Server.Console;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
@@ -27,7 +27,7 @@ public sealed partial class MindTests
var entMan = server.ResolveDependency<IServerEntityManager>(); var entMan = server.ResolveDependency<IServerEntityManager>();
var playerMan = server.ResolveDependency<IPlayerManager>(); var playerMan = server.ResolveDependency<IPlayerManager>();
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
EntityUid playerEnt = default; EntityUid playerEnt = default;
EntityUid visitEnt = default; EntityUid visitEnt = default;
@@ -83,7 +83,7 @@ public sealed partial class MindTests
var playerMan = server.ResolveDependency<IPlayerManager>(); var playerMan = server.ResolveDependency<IPlayerManager>();
var player = playerMan.ServerSessions.Single(); var player = playerMan.ServerSessions.Single();
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
EntityUid playerEnt = default; EntityUid playerEnt = default;
EntityUid mindId = default!; EntityUid mindId = default!;
@@ -159,7 +159,7 @@ public sealed partial class MindTests
var entMan = server.ResolveDependency<IServerEntityManager>(); var entMan = server.ResolveDependency<IServerEntityManager>();
var playerMan = server.ResolveDependency<IPlayerManager>(); var playerMan = server.ResolveDependency<IPlayerManager>();
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var mind = GetMind(pair); var mind = GetMind(pair);
var player = playerMan.ServerSessions.Single(); var player = playerMan.ServerSessions.Single();

View File

@@ -1,8 +1,8 @@
using System.Linq; using System.Linq;
using Content.IntegrationTests.Pair; using Content.IntegrationTests.Pair;
using Content.Server.Mind;
using Content.Server.Players; using Content.Server.Players;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Enums; using Robust.Shared.Enums;
@@ -34,7 +34,7 @@ public sealed partial class MindTests
var entMan = pair.Server.ResolveDependency<IServerEntityManager>(); var entMan = pair.Server.ResolveDependency<IServerEntityManager>();
var playerMan = pair.Server.ResolveDependency<IPlayerManager>(); var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
var mindSys = entMan.System<MindSystem>(); var mindSys = entMan.System<SharedMindSystem>();
var player = playerMan.ServerSessions.Single(); var player = playerMan.ServerSessions.Single();
@@ -66,7 +66,7 @@ public sealed partial class MindTests
{ {
var entMan = pair.Server.ResolveDependency<IServerEntityManager>(); var entMan = pair.Server.ResolveDependency<IServerEntityManager>();
var playerMan = pair.Server.ResolveDependency<IPlayerManager>(); var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
var mindSys = entMan.System<MindSystem>(); var mindSys = entMan.System<SharedMindSystem>();
EntityUid ghostUid = default; EntityUid ghostUid = default;
EntityUid mindId = default!; EntityUid mindId = default!;
MindComponent mind = default!; MindComponent mind = default!;

View File

@@ -1,6 +1,6 @@
using System.Linq; using System.Linq;
using Content.Server.Mind;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Map; using Robust.Shared.Map;
@@ -124,7 +124,7 @@ public sealed partial class MindTests
{ {
await using var pair = await SetupPair(); await using var pair = await SetupPair();
var entMan = pair.Server.ResolveDependency<IEntityManager>(); var entMan = pair.Server.ResolveDependency<IEntityManager>();
var mindSys = entMan.System<MindSystem>(); var mindSys = entMan.System<SharedMindSystem>();
var mind = GetMind(pair); var mind = GetMind(pair);
// Make player visit a new mob // Make player visit a new mob

View File

@@ -3,15 +3,16 @@ using System.Linq;
using Content.Server.Ghost; using Content.Server.Ghost;
using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles;
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Mind;
using Content.Server.Mind.Commands; using Content.Server.Mind.Commands;
using Content.Server.Mind.Components;
using Content.Server.Players; using Content.Server.Players;
using Content.Server.Roles; using Content.Server.Roles;
using Content.Server.Roles.Jobs;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes; using Content.Shared.Damage.Prototypes;
using Content.Shared.FixedPoint; using Content.Shared.FixedPoint;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Roles;
using Content.Shared.Roles.Jobs;
using Robust.Server.Console; using Robust.Server.Console;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
@@ -61,7 +62,7 @@ public sealed partial class MindTests
await server.WaitAssertion(() => await server.WaitAssertion(() =>
{ {
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var entity = entMan.SpawnEntity(null, new MapCoordinates()); var entity = entMan.SpawnEntity(null, new MapCoordinates());
var mindComp = entMan.EnsureComponent<MindContainerComponent>(entity); var mindComp = entMan.EnsureComponent<MindContainerComponent>(entity);
@@ -88,7 +89,7 @@ public sealed partial class MindTests
await server.WaitAssertion(() => await server.WaitAssertion(() =>
{ {
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var entity = entMan.SpawnEntity(null, new MapCoordinates()); var entity = entMan.SpawnEntity(null, new MapCoordinates());
var mindComp = entMan.EnsureComponent<MindContainerComponent>(entity); var mindComp = entMan.EnsureComponent<MindContainerComponent>(entity);
@@ -122,7 +123,7 @@ public sealed partial class MindTests
EntityUid entity = default!; EntityUid entity = default!;
MindContainerComponent mindContainerComp = default!; MindContainerComponent mindContainerComp = default!;
EntityUid mindId = default!; EntityUid mindId = default!;
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var damageableSystem = entMan.EntitySysManager.GetEntitySystem<DamageableSystem>(); var damageableSystem = entMan.EntitySysManager.GetEntitySystem<DamageableSystem>();
await server.WaitAssertion(() => await server.WaitAssertion(() =>
@@ -176,7 +177,7 @@ public sealed partial class MindTests
await server.WaitAssertion(() => await server.WaitAssertion(() =>
{ {
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var entity = entMan.SpawnEntity(null, new MapCoordinates()); var entity = entMan.SpawnEntity(null, new MapCoordinates());
var targetEntity = entMan.SpawnEntity(null, new MapCoordinates()); var targetEntity = entMan.SpawnEntity(null, new MapCoordinates());
@@ -213,7 +214,7 @@ public sealed partial class MindTests
var entMan = server.ResolveDependency<IServerEntityManager>(); var entMan = server.ResolveDependency<IServerEntityManager>();
await pair.RunTicksSync(5); await pair.RunTicksSync(5);
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var originalMind = GetMind(pair); var originalMind = GetMind(pair);
var userId = originalMind.Comp.UserId; var userId = originalMind.Comp.UserId;
@@ -269,8 +270,8 @@ public sealed partial class MindTests
await server.WaitAssertion(() => await server.WaitAssertion(() =>
{ {
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var roleSystem = entMan.EntitySysManager.GetEntitySystem<RoleSystem>(); var roleSystem = entMan.EntitySysManager.GetEntitySystem<SharedRoleSystem>();
var entity = entMan.SpawnEntity(null, new MapCoordinates()); var entity = entMan.SpawnEntity(null, new MapCoordinates());
var mindComp = entMan.EnsureComponent<MindContainerComponent>(entity); var mindComp = entMan.EnsureComponent<MindContainerComponent>(entity);
@@ -339,7 +340,7 @@ public sealed partial class MindTests
var entMan = server.ResolveDependency<IServerEntityManager>(); var entMan = server.ResolveDependency<IServerEntityManager>();
var playerMan = server.ResolveDependency<IPlayerManager>(); var playerMan = server.ResolveDependency<IPlayerManager>();
var mindSystem = entMan.EntitySysManager.GetEntitySystem<MindSystem>(); var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
var ghostSystem = entMan.EntitySysManager.GetEntitySystem<GhostSystem>(); var ghostSystem = entMan.EntitySysManager.GetEntitySystem<GhostSystem>();
EntityUid entity = default!; EntityUid entity = default!;

View File

@@ -1,7 +1,7 @@
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -25,7 +25,7 @@ namespace Content.Server.Administration.Commands
return; return;
} }
var mindSystem = _entities.System<MindSystem>(); var mindSystem = _entities.System<SharedMindSystem>();
if (!mindSystem.TryGetMind(player, out var mindId, out var mind)) if (!mindSystem.TryGetMind(player, out var mindId, out var mind))
{ {
shell.WriteLine("You can't ghost here!"); shell.WriteLine("You can't ghost here!");

View File

@@ -1,5 +1,5 @@
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -42,7 +42,7 @@ namespace Content.Server.Administration.Commands
return; return;
} }
var mindSystem = _entities.System<MindSystem>(); var mindSystem = _entities.System<SharedMindSystem>();
if (!mindSystem.TryGetMind(target, out var mindId, out var mind)) if (!mindSystem.TryGetMind(target, out var mindId, out var mind))
{ {
shell.WriteLine(Loc.GetString("shell-entity-is-not-mob")); shell.WriteLine(Loc.GetString("shell-entity-is-not-mob"));

View File

@@ -1,7 +1,7 @@
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.Players; using Content.Server.Players;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -67,7 +67,7 @@ namespace Content.Server.Administration.Commands
return; return;
} }
var mindSystem = entityManager.System<MindSystem>(); var mindSystem = entityManager.System<SharedMindSystem>();
var metadata = entityManager.GetComponent<MetaDataComponent>(eUid); var metadata = entityManager.GetComponent<MetaDataComponent>(eUid);
var mind = playerCData.Mind ?? mindSystem.CreateMind(session.UserId, metadata.EntityName); var mind = playerCData.Mind ?? mindSystem.CreateMind(session.UserId, metadata.EntityName);

View File

@@ -9,10 +9,9 @@ using Content.Shared.Administration.Notes;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Players.PlayTimeTracking;
using Robust.Server.Player;
using Robust.Shared;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Players;
namespace Content.Server.Administration.Notes; namespace Content.Server.Administration.Notes;
@@ -33,27 +32,27 @@ public sealed class AdminNotesManager : IAdminNotesManager, IPostInjectInit
private ISawmill _sawmill = default!; private ISawmill _sawmill = default!;
public bool CanCreate(IPlayerSession admin) public bool CanCreate(ICommonSession admin)
{ {
return CanEdit(admin); return CanEdit(admin);
} }
public bool CanDelete(IPlayerSession admin) public bool CanDelete(ICommonSession admin)
{ {
return CanEdit(admin); return CanEdit(admin);
} }
public bool CanEdit(IPlayerSession admin) public bool CanEdit(ICommonSession admin)
{ {
return _admins.HasAdminFlag(admin, AdminFlags.EditNotes); return _admins.HasAdminFlag(admin, AdminFlags.EditNotes);
} }
public bool CanView(IPlayerSession admin) public bool CanView(ICommonSession admin)
{ {
return _admins.HasAdminFlag(admin, AdminFlags.ViewNotes); return _admins.HasAdminFlag(admin, AdminFlags.ViewNotes);
} }
public async Task OpenEui(IPlayerSession admin, Guid notedPlayer) public async Task OpenEui(ICommonSession admin, Guid notedPlayer)
{ {
var ui = new AdminNotesEui(); var ui = new AdminNotesEui();
_euis.OpenEui(ui, admin); _euis.OpenEui(ui, admin);
@@ -61,7 +60,7 @@ public sealed class AdminNotesManager : IAdminNotesManager, IPostInjectInit
await ui.ChangeNotedPlayer(notedPlayer); await ui.ChangeNotedPlayer(notedPlayer);
} }
public async Task OpenUserNotesEui(IPlayerSession player) public async Task OpenUserNotesEui(ICommonSession player)
{ {
var ui = new UserNotesEui(); var ui = new UserNotesEui();
_euis.OpenEui(ui, player); _euis.OpenEui(ui, player);
@@ -69,7 +68,7 @@ public sealed class AdminNotesManager : IAdminNotesManager, IPostInjectInit
await ui.UpdateNotes(); await ui.UpdateNotes();
} }
public async Task AddAdminRemark(IPlayerSession createdBy, Guid player, NoteType type, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime) public async Task AddAdminRemark(ICommonSession createdBy, Guid player, NoteType type, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime)
{ {
message = message.Trim(); message = message.Trim();
@@ -179,7 +178,7 @@ public sealed class AdminNotesManager : IAdminNotesManager, IPostInjectInit
}; };
} }
public async Task DeleteAdminRemark(int noteId, NoteType type, IPlayerSession deletedBy) public async Task DeleteAdminRemark(int noteId, NoteType type, ICommonSession deletedBy)
{ {
var note = await GetAdminRemark(noteId, type); var note = await GetAdminRemark(noteId, type);
if (note == null) if (note == null)
@@ -215,7 +214,7 @@ public sealed class AdminNotesManager : IAdminNotesManager, IPostInjectInit
NoteDeleted?.Invoke(note); NoteDeleted?.Invoke(note);
} }
public async Task ModifyAdminRemark(int noteId, NoteType type, IPlayerSession editedBy, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime) public async Task ModifyAdminRemark(int noteId, NoteType type, ICommonSession editedBy, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime)
{ {
message = message.Trim(); message = message.Trim();

View File

@@ -2,7 +2,7 @@ using System.Threading.Tasks;
using Content.Server.Database; using Content.Server.Database;
using Content.Shared.Administration.Notes; using Content.Shared.Administration.Notes;
using Content.Shared.Database; using Content.Shared.Database;
using Robust.Server.Player; using Robust.Shared.Players;
namespace Content.Server.Administration.Notes; namespace Content.Server.Administration.Notes;
@@ -12,15 +12,15 @@ public interface IAdminNotesManager
event Action<SharedAdminNote>? NoteModified; event Action<SharedAdminNote>? NoteModified;
event Action<SharedAdminNote>? NoteDeleted; event Action<SharedAdminNote>? NoteDeleted;
bool CanCreate(IPlayerSession admin); bool CanCreate(ICommonSession admin);
bool CanDelete(IPlayerSession admin); bool CanDelete(ICommonSession admin);
bool CanEdit(IPlayerSession admin); bool CanEdit(ICommonSession admin);
bool CanView(IPlayerSession admin); bool CanView(ICommonSession admin);
Task OpenEui(IPlayerSession admin, Guid notedPlayer); Task OpenEui(ICommonSession admin, Guid notedPlayer);
Task OpenUserNotesEui(IPlayerSession player); Task OpenUserNotesEui(ICommonSession player);
Task AddAdminRemark(IPlayerSession createdBy, Guid player, NoteType type, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime); Task AddAdminRemark(ICommonSession createdBy, Guid player, NoteType type, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime);
Task DeleteAdminRemark(int noteId, NoteType type, IPlayerSession deletedBy); Task DeleteAdminRemark(int noteId, NoteType type, ICommonSession deletedBy);
Task ModifyAdminRemark(int noteId, NoteType type, IPlayerSession editedBy, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime); Task ModifyAdminRemark(int noteId, NoteType type, ICommonSession editedBy, string message, NoteSeverity? severity, bool secret, DateTime? expiryTime);
/// <summary> /// <summary>
/// Queries the database and retrieves all notes, secret and visible /// Queries the database and retrieves all notes, secret and visible
/// </summary> /// </summary>

View File

@@ -2,16 +2,17 @@ using System.Linq;
using Content.Server.Administration.Managers; using Content.Server.Administration.Managers;
using Content.Server.IdentityManagement; using Content.Server.IdentityManagement;
using Content.Server.Mind; using Content.Server.Mind;
using Content.Server.Roles;
using Content.Server.Roles.Jobs;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Administration.Events; using Content.Shared.Administration.Events;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Roles;
using Content.Shared.Roles.Jobs;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Enums; using Robust.Shared.Enums;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Player;
namespace Content.Server.Administration.Systems namespace Content.Server.Administration.Systems
{ {
@@ -19,9 +20,9 @@ namespace Content.Server.Administration.Systems
{ {
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!;
[Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly SharedJobSystem _jobs = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly MindSystem _minds = default!;
[Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly SharedRoleSystem _role = default!;
private readonly Dictionary<NetUserId, PlayerInfo> _playerList = new(); private readonly Dictionary<NetUserId, PlayerInfo> _playerList = new();
@@ -104,10 +105,11 @@ namespace Content.Server.Administration.Systems
private void OnRoleEvent(RoleEvent ev) private void OnRoleEvent(RoleEvent ev)
{ {
if (!ev.Antagonist || ev.Mind.Session == null) var session = _minds.GetSession(ev.Mind);
if (!ev.Antagonist || session == null)
return; return;
UpdatePlayerList(ev.Mind.Session); UpdatePlayerList(session);
} }
private void OnAdminPermsChanged(AdminPermsChangedEventArgs obj) private void OnAdminPermsChanged(AdminPermsChangedEventArgs obj)

View File

@@ -1,9 +1,9 @@
using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.Zombies; using Content.Server.Zombies;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -16,7 +16,7 @@ public sealed partial class AdminVerbSystem
[Dependency] private readonly TraitorRuleSystem _traitorRule = default!; [Dependency] private readonly TraitorRuleSystem _traitorRule = default!;
[Dependency] private readonly NukeopsRuleSystem _nukeopsRule = default!; [Dependency] private readonly NukeopsRuleSystem _nukeopsRule = default!;
[Dependency] private readonly PiratesRuleSystem _piratesRule = default!; [Dependency] private readonly PiratesRuleSystem _piratesRule = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly SharedMindSystem _minds = default!;
// All antag verbs have names so invokeverb works. // All antag verbs have names so invokeverb works.
private void AddAntagVerbs(GetVerbsEvent<Verb> args) private void AddAntagVerbs(GetVerbsEvent<Verb> args)

View File

@@ -8,9 +8,7 @@ using Content.Server.Disposal.Tube;
using Content.Server.Disposal.Tube.Components; using Content.Server.Disposal.Tube.Components;
using Content.Server.EUI; using Content.Server.EUI;
using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles;
using Content.Server.Mind;
using Content.Server.Mind.Commands; using Content.Server.Mind.Commands;
using Content.Server.Mind.Components;
using Content.Server.Prayer; using Content.Server.Prayer;
using Content.Server.Xenoarchaeology.XenoArtifacts; using Content.Server.Xenoarchaeology.XenoArtifacts;
using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
@@ -20,6 +18,8 @@ using Content.Shared.Database;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Interaction.Helpers; using Content.Shared.Interaction.Helpers;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Robust.Server.Console; using Robust.Server.Console;
@@ -28,6 +28,7 @@ using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Map.Components; using Robust.Shared.Map.Components;
using Robust.Shared.Players;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Shared.Toolshed; using Robust.Shared.Toolshed;
@@ -54,11 +55,11 @@ namespace Content.Server.Administration.Systems
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly PrayerSystem _prayerSystem = default!; [Dependency] private readonly PrayerSystem _prayerSystem = default!;
[Dependency] private readonly EuiManager _eui = default!; [Dependency] private readonly EuiManager _eui = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly ToolshedManager _toolshed = default!; [Dependency] private readonly ToolshedManager _toolshed = default!;
[Dependency] private readonly RejuvenateSystem _rejuvenate = default!; [Dependency] private readonly RejuvenateSystem _rejuvenate = default!;
private readonly Dictionary<IPlayerSession, EditSolutionsEui> _openSolutionUis = new(); private readonly Dictionary<ICommonSession, EditSolutionsEui> _openSolutionUis = new();
public override void Initialize() public override void Initialize()
{ {
@@ -425,7 +426,7 @@ namespace Content.Server.Administration.Systems
eui.StateDirty(); eui.StateDirty();
} }
public void OnEditSolutionsEuiClosed(IPlayerSession session) public void OnEditSolutionsEuiClosed(ICommonSession session)
{ {
_openSolutionUis.Remove(session, out var eui); _openSolutionUis.Remove(session, out var eui);
} }

View File

@@ -8,9 +8,9 @@ using System.Threading.Tasks;
using Content.Server.Administration.Managers; using Content.Server.Administration.Managers;
using Content.Server.Discord; using Content.Server.Discord;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Mind;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared; using Robust.Shared;
@@ -31,7 +31,7 @@ namespace Content.Server.Administration.Systems
[Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPlayerLocator _playerLocator = default!; [Dependency] private readonly IPlayerLocator _playerLocator = default!;
[Dependency] private readonly GameTicker _gameTicker = default!; [Dependency] private readonly GameTicker _gameTicker = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly SharedMindSystem _minds = default!;
private ISawmill _sawmill = default!; private ISawmill _sawmill = default!;
private readonly HttpClient _httpClient = new(); private readonly HttpClient _httpClient = new();

View File

@@ -3,7 +3,6 @@ using System.Linq;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Ame.Components; using Content.Server.Ame.Components;
using Content.Server.Chat.Managers; using Content.Server.Chat.Managers;
using Content.Server.Mind.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Shared.Ame; using Content.Shared.Ame;
@@ -11,6 +10,7 @@ using Content.Shared.Database;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Mind.Components;
using Content.Shared.Popups; using Content.Shared.Popups;
using Robust.Server.Containers; using Robust.Server.Containers;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;

View File

@@ -4,12 +4,12 @@ using Content.Server.Body.Components;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Humanoid; using Content.Server.Humanoid;
using Content.Server.Kitchen.Components; using Content.Server.Kitchen.Components;
using Content.Server.Mind;
using Content.Shared.Body.Components; using Content.Shared.Body.Components;
using Content.Shared.Body.Organ; using Content.Shared.Body.Organ;
using Content.Shared.Body.Part; using Content.Shared.Body.Part;
using Content.Shared.Body.Systems; using Content.Shared.Body.Systems;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
using Content.Shared.Mind;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Content.Shared.Random.Helpers; using Content.Shared.Random.Helpers;
@@ -28,7 +28,7 @@ public sealed class BodySystem : SharedBodySystem
[Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!;
[Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;
public override void Initialize() public override void Initialize()

View File

@@ -1,10 +1,10 @@
using Content.Server.Body.Components; using Content.Server.Body.Components;
using Content.Server.Ghost.Components; using Content.Server.Ghost.Components;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Shared.Body.Components; using Content.Shared.Body.Components;
using Content.Shared.Body.Events; using Content.Shared.Body.Events;
using Content.Shared.Body.Organ; using Content.Shared.Body.Organ;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Movement.Components; using Content.Shared.Movement.Components;
using Content.Shared.Movement.Systems; using Content.Shared.Movement.Systems;
@@ -13,7 +13,7 @@ namespace Content.Server.Body.Systems
public sealed class BrainSystem : EntitySystem public sealed class BrainSystem : EntitySystem
{ {
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!; [Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
public override void Initialize() public override void Initialize()
{ {

View File

@@ -1,6 +1,6 @@
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Enums; using Robust.Shared.Enums;
@@ -27,7 +27,7 @@ namespace Content.Server.Chat.Commands
if (player.Status != SessionStatus.InGame || player.AttachedEntity == null) if (player.Status != SessionStatus.InGame || player.AttachedEntity == null)
return; return;
var minds = IoCManager.Resolve<IEntityManager>().System<MindSystem>(); var minds = IoCManager.Resolve<IEntityManager>().System<SharedMindSystem>();
// This check also proves mind not-null for at the end when the mob is ghosted. // This check also proves mind not-null for at the end when the mob is ghosted.
if (!minds.TryGetMind(player, out var mindId, out var mind) || if (!minds.TryGetMind(player, out var mindId, out var mind) ||
mind.OwnedEntity is not { Valid: true } victim) mind.OwnedEntity is not { Valid: true } victim)

View File

@@ -2,17 +2,18 @@ using System.Linq;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Administration.Managers; using Content.Server.Administration.Managers;
using Content.Server.Administration.Systems; using Content.Server.Administration.Systems;
using Content.Server.Mind;
using Content.Server.MoMMI; using Content.Server.MoMMI;
using Content.Server.Preferences.Managers; using Content.Server.Preferences.Managers;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Chat; using Content.Shared.Chat;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Players;
using Robust.Shared.Replays; using Robust.Shared.Replays;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -84,7 +85,7 @@ namespace Content.Server.Chat.Managers
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}"); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}");
} }
public void DispatchServerMessage(IPlayerSession player, string message, bool suppressLog = false) public void DispatchServerMessage(ICommonSession player, string message, bool suppressLog = false)
{ {
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message))); var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message)));
ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, default, false, player.ConnectedClient); ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, default, false, player.ConnectedClient);
@@ -116,7 +117,7 @@ namespace Content.Server.Chat.Managers
public void SendAdminAlert(EntityUid player, string message) public void SendAdminAlert(EntityUid player, string message)
{ {
var mindSystem = _entityManager.System<MindSystem>(); var mindSystem = _entityManager.System<SharedMindSystem>();
if (!mindSystem.TryGetMind(player, out var mindId, out var mind)) if (!mindSystem.TryGetMind(player, out var mindId, out var mind))
{ {
SendAdminAlert(message); SendAdminAlert(message);

View File

@@ -2,6 +2,7 @@ using Content.Shared.Chat;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Players;
namespace Content.Server.Chat.Managers namespace Content.Server.Chat.Managers
{ {
@@ -16,7 +17,7 @@ namespace Content.Server.Chat.Managers
/// <param name="colorOverride">Override the color of the message being sent.</param> /// <param name="colorOverride">Override the color of the message being sent.</param>
void DispatchServerAnnouncement(string message, Color? colorOverride = null); void DispatchServerAnnouncement(string message, Color? colorOverride = null);
void DispatchServerMessage(IPlayerSession player, string message, bool suppressLog = false); void DispatchServerMessage(ICommonSession player, string message, bool suppressLog = false);
void TrySendOOCMessage(IPlayerSession player, string message, OOCChatType type); void TrySendOOCMessage(IPlayerSession player, string message, OOCChatType type);

View File

@@ -1,8 +1,7 @@
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Mind.Components;
using Content.Server.Speech.Components; using Content.Server.Speech.Components;
using Content.Shared.Chemistry.Reagent; using Content.Shared.Chemistry.Reagent;
using Content.Server.Ghost.Roles.Components; using Content.Shared.Mind.Components;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
namespace Content.Server.Chemistry.ReagentEffects; namespace Content.Server.Chemistry.ReagentEffects;

View File

@@ -1,8 +1,6 @@
using Content.Server.Mind.Components;
using Content.Server.Polymorph.Components; using Content.Server.Polymorph.Components;
using Content.Server.Polymorph.Systems; using Content.Server.Polymorph.Systems;
using Content.Shared.Chemistry.Reagent; using Content.Shared.Chemistry.Reagent;
using Content.Shared.Item;
using Content.Shared.Polymorph; using Content.Shared.Polymorph;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;

View File

@@ -1,7 +1,7 @@
using Content.Server.EUI; using Content.Server.EUI;
using Content.Server.Mind;
using Content.Shared.Cloning; using Content.Shared.Cloning;
using Content.Shared.Eui; using Content.Shared.Eui;
using Content.Shared.Mind;
namespace Content.Server.Cloning namespace Content.Server.Cloning
{ {

View File

@@ -3,7 +3,6 @@ using Content.Server.Administration.Logs;
using Content.Server.Cloning.Components; using Content.Server.Cloning.Components;
using Content.Server.DeviceLinking.Systems; using Content.Server.DeviceLinking.Systems;
using Content.Server.Medical.Components; using Content.Server.Medical.Components;
using Content.Server.Mind;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems; using Content.Server.Power.EntitySystems;
using Content.Server.UserInterface; using Content.Server.UserInterface;
@@ -13,6 +12,7 @@ using Content.Shared.Database;
using Content.Shared.DeviceLinking; using Content.Shared.DeviceLinking;
using Content.Shared.DeviceLinking.Events; using Content.Shared.DeviceLinking.Events;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Mind;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using JetBrains.Annotations; using JetBrains.Annotations;
@@ -31,7 +31,7 @@ namespace Content.Server.Cloning
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly PowerReceiverSystem _powerReceiverSystem = default!; [Dependency] private readonly PowerReceiverSystem _powerReceiverSystem = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
public override void Initialize() public override void Initialize()
{ {

View File

@@ -8,11 +8,8 @@ using Content.Server.Fluids.EntitySystems;
using Content.Server.Humanoid; using Content.Server.Humanoid;
using Content.Server.Jobs; using Content.Server.Jobs;
using Content.Server.Materials; using Content.Server.Materials;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.Power.EntitySystems; using Content.Server.Power.EntitySystems;
using Content.Server.Roles.Jobs;
using Content.Server.Traits.Assorted; using Content.Server.Traits.Assorted;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.CCVar; using Content.Shared.CCVar;
@@ -26,7 +23,10 @@ using Content.Shared.Examine;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Prototypes; using Content.Shared.Humanoid.Prototypes;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Roles.Jobs;
using Robust.Server.Containers; using Robust.Server.Containers;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
@@ -59,9 +59,9 @@ namespace Content.Server.Cloning
[Dependency] private readonly IConfigurationManager _configManager = default!; [Dependency] private readonly IConfigurationManager _configManager = default!;
[Dependency] private readonly MaterialStorageSystem _material = default!; [Dependency] private readonly MaterialStorageSystem _material = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly MetaDataSystem _metaSystem = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!;
[Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly SharedJobSystem _jobs = default!;
public readonly Dictionary<MindComponent, EntityUid> ClonesWaitingForMind = new(); public readonly Dictionary<MindComponent, EntityUid> ClonesWaitingForMind = new();
public const float EasyModeCloningCost = 0.7f; public const float EasyModeCloningCost = 0.7f;

View File

@@ -1,4 +1,4 @@
using Content.Server.Mind; using Content.Shared.Mind;
namespace Content.Server.Cloning.Components namespace Content.Server.Cloning.Components
{ {

View File

@@ -25,5 +25,8 @@
<ProjectReference Include="..\RobustToolbox\Robust.Server\Robust.Server.csproj" /> <ProjectReference Include="..\RobustToolbox\Robust.Server\Robust.Server.csproj" />
<ProjectReference Include="..\Content.Shared\Content.Shared.csproj" /> <ProjectReference Include="..\Content.Shared\Content.Shared.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Objectives\Interfaces\" />
</ItemGroup>
<Import Project="..\RobustToolbox\MSBuild\Robust.Properties.targets" /> <Import Project="..\RobustToolbox\MSBuild\Robust.Properties.targets" />
</Project> </Project>

View File

@@ -13,6 +13,7 @@ using Content.Shared.StationRecords;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Players;
namespace Content.Server.CrewManifest; namespace Content.Server.CrewManifest;
@@ -30,7 +31,7 @@ public sealed class CrewManifestSystem : EntitySystem
/// </summary> /// </summary>
private readonly Dictionary<EntityUid, CrewManifestEntries> _cachedEntries = new(); private readonly Dictionary<EntityUid, CrewManifestEntries> _cachedEntries = new();
private readonly Dictionary<EntityUid, Dictionary<IPlayerSession, CrewManifestEui>> _openEuis = new(); private readonly Dictionary<EntityUid, Dictionary<ICommonSession, CrewManifestEui>> _openEuis = new();
public override void Initialize() public override void Initialize()
{ {
@@ -168,7 +169,7 @@ public sealed class CrewManifestSystem : EntitySystem
/// <param name="station">Station that we're displaying the crew manifest for.</param> /// <param name="station">Station that we're displaying the crew manifest for.</param>
/// <param name="session">The player's session.</param> /// <param name="session">The player's session.</param>
/// <param name="owner">The owner of this EUI, if there was one.</param> /// <param name="owner">The owner of this EUI, if there was one.</param>
public void CloseEui(EntityUid station, IPlayerSession session, EntityUid? owner = null) public void CloseEui(EntityUid station, ICommonSession session, EntityUid? owner = null)
{ {
if (!HasComp<StationRecordsComponent>(station)) if (!HasComp<StationRecordsComponent>(station))
{ {

View File

@@ -1,7 +1,6 @@
using Content.Server.Body.Systems; using Content.Server.Body.Systems;
using Content.Server.Drone.Components; using Content.Server.Drone.Components;
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Mind.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.Tools.Innate; using Content.Server.Tools.Innate;
using Content.Server.UserInterface; using Content.Server.UserInterface;
@@ -14,14 +13,13 @@ using Content.Shared.IdentityManagement;
using Content.Shared.Interaction.Components; using Content.Shared.Interaction.Components;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Item; using Content.Shared.Item;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Tag; using Content.Shared.Tag;
using Content.Shared.Throwing; using Content.Shared.Throwing;
using Robust.Server.GameObjects;
using Robust.Shared.Player;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Server.Drone namespace Content.Server.Drone

View File

@@ -1,7 +1,6 @@
using Content.Shared.Eui; using Content.Shared.Eui;
using Robust.Server.Player;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Players;
namespace Content.Server.EUI namespace Content.Server.EUI
{ {
@@ -23,7 +22,7 @@ namespace Content.Server.EUI
/// <summary> /// <summary>
/// The player that this EUI is open for. /// The player that this EUI is open for.
/// </summary> /// </summary>
public IPlayerSession Player { get; private set; } = default!; public ICommonSession Player { get; private set; } = default!;
public bool IsShutDown { get; private set; } public bool IsShutDown { get; private set; }
public EuiManager Manager { get; private set; } = default!; public EuiManager Manager { get; private set; } = default!;
public uint Id { get; private set; } public uint Id { get; private set; }
@@ -118,7 +117,7 @@ namespace Content.Server.EUI
netMgr.ServerSendMessage(msg, Player.ConnectedClient); netMgr.ServerSendMessage(msg, Player.ConnectedClient);
} }
internal void Initialize(EuiManager manager, IPlayerSession player, uint id) internal void Initialize(EuiManager manager, ICommonSession player, uint id)
{ {
Manager = manager; Manager = manager;
Player = player; Player = player;

View File

@@ -2,9 +2,9 @@
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Enums; using Robust.Shared.Enums;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Players;
using Robust.Shared.Utility; using Robust.Shared.Utility;
namespace Content.Server.EUI namespace Content.Server.EUI
{ {
public sealed class EuiManager : IPostInjectInit public sealed class EuiManager : IPostInjectInit
@@ -12,11 +12,11 @@ namespace Content.Server.EUI
[Dependency] private readonly IPlayerManager _players = default!; [Dependency] private readonly IPlayerManager _players = default!;
[Dependency] private readonly IServerNetManager _net = default!; [Dependency] private readonly IServerNetManager _net = default!;
private readonly Dictionary<IPlayerSession, PlayerEuiData> _playerData = private readonly Dictionary<ICommonSession, PlayerEuiData> _playerData =
new(); new();
private readonly Queue<(IPlayerSession player, uint id)> _stateUpdateQueue = private readonly Queue<(ICommonSession player, uint id)> _stateUpdateQueue =
new Queue<(IPlayerSession, uint id)>(); new Queue<(ICommonSession, uint id)>();
private sealed class PlayerEuiData private sealed class PlayerEuiData
{ {
@@ -53,7 +53,7 @@ namespace Content.Server.EUI
} }
} }
public void OpenEui(BaseEui eui, IPlayerSession player) public void OpenEui(BaseEui eui, ICommonSession player)
{ {
if (eui.Id != 0) if (eui.Id != 0)
{ {

View File

@@ -1,13 +1,12 @@
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using Content.Server.Explosion.Components; using Content.Server.Explosion.Components;
using Content.Server.Mind.Components;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Explosion; using Content.Shared.Explosion;
using Content.Shared.FixedPoint;
using Content.Shared.Maps; using Content.Shared.Maps;
using Content.Shared.Mind.Components;
using Content.Shared.Physics; using Content.Shared.Physics;
using Content.Shared.Projectiles; using Content.Shared.Projectiles;
using Content.Shared.Spawners.Components; using Content.Shared.Spawners.Components;

View File

@@ -1,5 +1,5 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Players; using Content.Shared.Players;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Network; using Robust.Shared.Network;
@@ -24,7 +24,7 @@ namespace Content.Server.GameTicking.Commands
var playerMgr = IoCManager.Resolve<IPlayerManager>(); var playerMgr = IoCManager.Resolve<IPlayerManager>();
var sysMan = IoCManager.Resolve<IEntitySystemManager>(); var sysMan = IoCManager.Resolve<IEntitySystemManager>();
var ticker = sysMan.GetEntitySystem<GameTicker>(); var ticker = sysMan.GetEntitySystem<GameTicker>();
var mind = sysMan.GetEntitySystem<MindSystem>(); var mind = sysMan.GetEntitySystem<SharedMindSystem>();
NetUserId userId; NetUserId userId;
if (args.Length == 0) if (args.Length == 0)

View File

@@ -3,12 +3,12 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Content.Server.GameTicking.Presets; using Content.Server.GameTicking.Presets;
using Content.Server.Maps; using Content.Server.Maps;
using Content.Server.Mind;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes; using Content.Shared.Damage.Prototypes;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.Player; using Robust.Server.Player;
@@ -214,7 +214,7 @@ namespace Content.Server.GameTicking
{ {
if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts
{ {
_chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), _chatManager.DispatchServerMessage((IPlayerSession) mind.Session, Loc.GetString("comp-mind-ghosting-prevented"),
true); true);
} }

View File

@@ -2,6 +2,7 @@ using Content.Server.Database;
using Content.Server.Players; using Content.Server.Players;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.GameWindow; using Content.Shared.GameWindow;
using Content.Shared.Players;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.Player; using Robust.Server.Player;

View File

@@ -4,10 +4,10 @@ using Content.Server.Discord;
using Content.Server.GameTicking.Events; using Content.Server.GameTicking.Events;
using Content.Server.Ghost; using Content.Server.Ghost;
using Content.Server.Maps; using Content.Server.Maps;
using Content.Server.Mind;
using Content.Server.Players;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Mind;
using Content.Shared.Players;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using JetBrains.Annotations; using JetBrains.Annotations;
using Prometheus; using Prometheus;

View File

@@ -4,7 +4,6 @@ using System.Numerics;
using Content.Server.Administration.Managers; using Content.Server.Administration.Managers;
using Content.Server.Ghost; using Content.Server.Ghost;
using Content.Server.Players; using Content.Server.Players;
using Content.Server.Roles.Jobs;
using Content.Server.Spawners.Components; using Content.Server.Spawners.Components;
using Content.Server.Speech.Components; using Content.Server.Speech.Components;
using Content.Server.Station.Components; using Content.Server.Station.Components;
@@ -12,6 +11,7 @@ using Content.Shared.CCVar;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using Content.Shared.Roles; using Content.Shared.Roles;
using Content.Shared.Roles.Jobs;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Map; using Robust.Shared.Map;
@@ -25,7 +25,7 @@ namespace Content.Server.GameTicking
public sealed partial class GameTicker public sealed partial class GameTicker
{ {
[Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!;
[Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly SharedJobSystem _jobs = default!;
[ValidatePrototypeId<EntityPrototype>] [ValidatePrototypeId<EntityPrototype>]
private const string ObserverPrototypeName = "MobObserver"; private const string ObserverPrototypeName = "MobObserver";

View File

@@ -5,16 +5,15 @@ using Content.Server.Chat.Systems;
using Content.Server.Database; using Content.Server.Database;
using Content.Server.Ghost; using Content.Server.Ghost;
using Content.Server.Maps; using Content.Server.Maps;
using Content.Server.Mind;
using Content.Server.Players.PlayTimeTracking; using Content.Server.Players.PlayTimeTracking;
using Content.Server.Preferences.Managers; using Content.Server.Preferences.Managers;
using Content.Server.Roles;
using Content.Server.ServerUpdates; using Content.Server.ServerUpdates;
using Content.Server.Shuttles.Systems; using Content.Server.Shuttles.Systems;
using Content.Server.Station.Systems; using Content.Server.Station.Systems;
using Content.Shared.Chat; using Content.Shared.Chat;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Mind;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Roles; using Content.Shared.Roles;
using Robust.Server; using Robust.Server;
@@ -57,7 +56,7 @@ namespace Content.Server.GameTicking
[Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly MapLoaderSystem _map = default!; [Dependency] private readonly MapLoaderSystem _map = default!;
[Dependency] private readonly GhostSystem _ghost = default!; [Dependency] private readonly GhostSystem _ghost = default!;
[Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly PlayTimeTrackingSystem _playTimeTrackings = default!; [Dependency] private readonly PlayTimeTrackingSystem _playTimeTrackings = default!;
[Dependency] private readonly PvsOverrideSystem _pvsOverride = default!; [Dependency] private readonly PvsOverrideSystem _pvsOverride = default!;
@@ -67,7 +66,7 @@ namespace Content.Server.GameTicking
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly UserDbDataManager _userDb = default!; [Dependency] private readonly UserDbDataManager _userDb = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly RoleSystem _roles = default!; [Dependency] private readonly SharedRoleSystem _roles = default!;
[ViewVariables] private bool _initialized; [ViewVariables] private bool _initialized;
[ViewVariables] private bool _postInitialized; [ViewVariables] private bool _postInitialized;

View File

@@ -2,8 +2,8 @@ using Content.Server.NPC.Components;
using Content.Server.StationEvents.Events; using Content.Server.StationEvents.Events;
using Content.Shared.Dataset; using Content.Shared.Dataset;
using Content.Shared.Roles; using Content.Shared.Roles;
using Robust.Server.Player;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Players;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations; using Robust.Shared.Serialization.TypeSerializers.Implementations;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
@@ -158,7 +158,7 @@ public sealed partial class NukeopsRuleComponent : Component
/// </summary> /// </summary>
/// todo: don't store sessions, dingus /// todo: don't store sessions, dingus
[DataField("operativePlayers")] [DataField("operativePlayers")]
public Dictionary<string, IPlayerSession> OperativePlayers = new(); public Dictionary<string, ICommonSession> OperativePlayers = new();
[DataField("faction", customTypeSerializer: typeof(PrototypeIdSerializer<NpcFactionPrototype>), required: true)] [DataField("faction", customTypeSerializer: typeof(PrototypeIdSerializer<NpcFactionPrototype>), required: true)]
public string Faction = default!; public string Faction = default!;

View File

@@ -10,7 +10,6 @@ using Content.Server.Ghost.Roles.Components;
using Content.Server.Ghost.Roles.Events; using Content.Server.Ghost.Roles.Events;
using Content.Server.Humanoid; using Content.Server.Humanoid;
using Content.Server.Mind; using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.NPC.Components; using Content.Server.NPC.Components;
using Content.Server.NPC.Systems; using Content.Server.NPC.Systems;
using Content.Server.Nuke; using Content.Server.Nuke;
@@ -30,6 +29,8 @@ using Content.Server.Store.Systems;
using Content.Shared.Dataset; using Content.Shared.Dataset;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Prototypes; using Content.Shared.Humanoid.Prototypes;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Nuke; using Content.Shared.Nuke;
@@ -69,7 +70,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
[Dependency] private readonly MapLoaderSystem _map = default!; [Dependency] private readonly MapLoaderSystem _map = default!;
[Dependency] private readonly ShuttleSystem _shuttle = default!; [Dependency] private readonly ShuttleSystem _shuttle = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly MindSystem _mindSystem = default!;
[Dependency] private readonly RoleSystem _roles = default!; [Dependency] private readonly SharedRoleSystem _roles = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly ChatSystem _chatSystem = default!;

View File

@@ -4,13 +4,13 @@ using Content.Server.Administration.Commands;
using Content.Server.Cargo.Systems; using Content.Server.Cargo.Systems;
using Content.Server.Chat.Managers; using Content.Server.Chat.Managers;
using Content.Server.GameTicking.Rules.Components; using Content.Server.GameTicking.Rules.Components;
using Content.Server.Mind;
using Content.Server.Preferences.Managers; using Content.Server.Preferences.Managers;
using Content.Server.Spawners.Components; using Content.Server.Spawners.Components;
using Content.Server.Station.Components; using Content.Server.Station.Components;
using Content.Server.Station.Systems; using Content.Server.Station.Systems;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
using Content.Shared.Mind;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using Content.Shared.Roles; using Content.Shared.Roles;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
@@ -40,7 +40,7 @@ public sealed class PiratesRuleSystem : GameRuleSystem<PiratesRuleComponent>
[Dependency] private readonly PricingSystem _pricingSystem = default!; [Dependency] private readonly PricingSystem _pricingSystem = default!;
[Dependency] private readonly MapLoaderSystem _map = default!; [Dependency] private readonly MapLoaderSystem _map = default!;
[Dependency] private readonly NamingSystem _namingSystem = default!; [Dependency] private readonly NamingSystem _namingSystem = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MetaDataSystem _metaData = default!;

View File

@@ -1,12 +1,10 @@
using Content.Server.Chat.Managers; using Content.Server.Chat.Managers;
using Content.Server.GameTicking.Rules.Components; using Content.Server.GameTicking.Rules.Components;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.Mind.Toolshed;
using Content.Server.Players; using Content.Server.Players;
using Content.Server.Station.Systems; using Content.Server.Station.Systems;
using Content.Shared.Chat; using Content.Shared.Chat;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Mind;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;

View File

@@ -6,17 +6,19 @@ using Content.Server.NPC.Systems;
using Content.Server.Objectives; using Content.Server.Objectives;
using Content.Server.PDA.Ringer; using Content.Server.PDA.Ringer;
using Content.Server.Roles; using Content.Server.Roles;
using Content.Server.Roles.Jobs;
using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Components;
using Content.Server.Traitor.Uplink; using Content.Server.Traitor.Uplink;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Dataset; using Content.Shared.Dataset;
using Content.Shared.Mind;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.PDA; using Content.Shared.PDA;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using Content.Shared.Roles; using Content.Shared.Roles;
using Content.Shared.Roles.Jobs;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.Players;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Timing; using Robust.Shared.Timing;
@@ -30,14 +32,13 @@ public sealed class TraitorRuleSystem : GameRuleSystem<TraitorRuleComponent>
[Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IChatManager _chatManager = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IComponentFactory _component = default!;
[Dependency] private readonly NpcFactionSystem _npcFaction = default!; [Dependency] private readonly NpcFactionSystem _npcFaction = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly UplinkSystem _uplink = default!; [Dependency] private readonly UplinkSystem _uplink = default!;
[Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly MindSystem _mindSystem = default!;
[Dependency] private readonly RoleSystem _roleSystem = default!; [Dependency] private readonly SharedRoleSystem _roleSystem = default!;
[Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly SharedJobSystem _jobs = default!;
[Dependency] private readonly ObjectivesSystem _objectives = default!; [Dependency] private readonly ObjectivesSystem _objectives = default!;
private int PlayersPerTraitor => _cfg.GetCVar(CCVars.TraitorPlayersPerTraitor); private int PlayersPerTraitor => _cfg.GetCVar(CCVars.TraitorPlayersPerTraitor);
@@ -202,7 +203,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem<TraitorRuleComponent>
return results; return results;
} }
public bool MakeTraitor(IPlayerSession traitor) public bool MakeTraitor(ICommonSession traitor)
{ {
var traitorRule = EntityQuery<TraitorRuleComponent>().FirstOrDefault(); var traitorRule = EntityQuery<TraitorRuleComponent>().FirstOrDefault();
if (traitorRule == null) if (traitorRule == null)

View File

@@ -4,7 +4,6 @@ using Content.Server.Actions;
using Content.Server.Chat.Managers; using Content.Server.Chat.Managers;
using Content.Server.Chat.Systems; using Content.Server.Chat.Systems;
using Content.Server.GameTicking.Rules.Components; using Content.Server.GameTicking.Rules.Components;
using Content.Server.Mind;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.Preferences.Managers; using Content.Server.Preferences.Managers;
using Content.Server.Roles; using Content.Server.Roles;
@@ -15,10 +14,12 @@ using Content.Server.Zombies;
using Content.Shared.Actions.ActionTypes; using Content.Shared.Actions.ActionTypes;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
using Content.Shared.Mind;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using Content.Shared.Roles;
using Content.Shared.Zombies; using Content.Shared.Zombies;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
@@ -44,8 +45,8 @@ public sealed class ZombieRuleSystem : GameRuleSystem<ZombieRuleComponent>
[Dependency] private readonly ActionsSystem _action = default!; [Dependency] private readonly ActionsSystem _action = default!;
[Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly ZombieSystem _zombie = default!; [Dependency] private readonly ZombieSystem _zombie = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly RoleSystem _roles = default!; [Dependency] private readonly SharedRoleSystem _roles = default!;
[Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;

View File

@@ -1,6 +1,6 @@
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -24,7 +24,7 @@ namespace Content.Server.Ghost
return; return;
} }
var minds = _entities.System<MindSystem>(); var minds = _entities.System<SharedMindSystem>();
if (!minds.TryGetMind(player, out var mindId, out var mind)) if (!minds.TryGetMind(player, out var mindId, out var mind))
{ {
shell.WriteLine("You have no Mind, you can't ghost."); shell.WriteLine("You have no Mind, you can't ghost.");

View File

@@ -2,9 +2,6 @@ using System.Linq;
using System.Numerics; using System.Numerics;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Ghost.Components; using Content.Server.Ghost.Components;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.Roles.Jobs;
using Content.Server.Visible; using Content.Server.Visible;
using Content.Server.Warps; using Content.Server.Warps;
using Content.Shared.Actions; using Content.Shared.Actions;
@@ -12,9 +9,12 @@ using Content.Shared.Administration;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Follower; using Content.Shared.Follower;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Content.Shared.Roles.Jobs;
using Content.Shared.Storage.Components; using Content.Shared.Storage.Components;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
@@ -30,15 +30,15 @@ namespace Content.Server.Ghost
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly GameTicker _ticker = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly FollowerSystem _followerSystem = default!; [Dependency] private readonly FollowerSystem _followerSystem = default!;
[Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly SharedMindSystem _minds = default!;
[Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly SharedJobSystem _jobs = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;
public override void Initialize() public override void Initialize()

View File

@@ -1,17 +1,17 @@
using Content.Server.EUI; using Content.Server.EUI;
using Content.Server.Mind;
using Content.Shared.Eui; using Content.Shared.Eui;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Mind;
namespace Content.Server.Ghost; namespace Content.Server.Ghost;
public sealed class ReturnToBodyEui : BaseEui public sealed class ReturnToBodyEui : BaseEui
{ {
private readonly MindSystem _mindSystem; private readonly SharedMindSystem _mindSystem;
private readonly MindComponent _mind; private readonly MindComponent _mind;
public ReturnToBodyEui(MindComponent mind, MindSystem mindSystem) public ReturnToBodyEui(MindComponent mind, SharedMindSystem mindSystem)
{ {
_mind = mind; _mind = mind;
_mindSystem = mindSystem; _mindSystem = mindSystem;

View File

@@ -1,9 +1,9 @@
using Robust.Server.Player; using Robust.Shared.Players;
namespace Content.Server.Ghost.Roles.Components; namespace Content.Server.Ghost.Roles.Components;
[ByRefEvent] [ByRefEvent]
public record struct TakeGhostRoleEvent(IPlayerSession Player) public record struct TakeGhostRoleEvent(ICommonSession Player)
{ {
public bool TookRole { get; set; } public bool TookRole { get; set; }
} }

View File

@@ -3,23 +3,24 @@ using Content.Server.EUI;
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Ghost.Roles.Events; using Content.Server.Ghost.Roles.Events;
using Content.Server.Ghost.Roles.UI; using Content.Server.Ghost.Roles.UI;
using Content.Server.Mind;
using Content.Server.Mind.Commands; using Content.Server.Mind.Commands;
using Content.Server.Mind.Components;
using Content.Server.Players; using Content.Server.Players;
using Content.Server.Roles;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Follower; using Content.Shared.Follower;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Ghost.Roles; using Content.Shared.Ghost.Roles;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Roles;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Enums; using Robust.Shared.Enums;
using Robust.Shared.Players;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -34,14 +35,14 @@ namespace Content.Server.Ghost.Roles
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly FollowerSystem _followerSystem = default!; [Dependency] private readonly FollowerSystem _followerSystem = default!;
[Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly RoleSystem _roleSystem = default!; [Dependency] private readonly SharedRoleSystem _roleSystem = default!;
private uint _nextRoleIdentifier; private uint _nextRoleIdentifier;
private bool _needsUpdateGhostRoleCount = true; private bool _needsUpdateGhostRoleCount = true;
private readonly Dictionary<uint, GhostRoleComponent> _ghostRoles = new(); private readonly Dictionary<uint, GhostRoleComponent> _ghostRoles = new();
private readonly Dictionary<IPlayerSession, GhostRolesEui> _openUis = new(); private readonly Dictionary<ICommonSession, GhostRolesEui> _openUis = new();
private readonly Dictionary<IPlayerSession, MakeGhostRoleEui> _openMakeGhostRoleUis = new(); private readonly Dictionary<ICommonSession, MakeGhostRoleEui> _openMakeGhostRoleUis = new();
[ViewVariables] [ViewVariables]
public IReadOnlyCollection<GhostRoleComponent> GhostRoles => _ghostRoles.Values; public IReadOnlyCollection<GhostRoleComponent> GhostRoles => _ghostRoles.Values;
@@ -123,7 +124,7 @@ namespace Content.Server.Ghost.Roles
eui.StateDirty(); eui.StateDirty();
} }
public void CloseEui(IPlayerSession session) public void CloseEui(ICommonSession session)
{ {
if (!_openUis.ContainsKey(session)) return; if (!_openUis.ContainsKey(session)) return;
@@ -132,7 +133,7 @@ namespace Content.Server.Ghost.Roles
eui?.Close(); eui?.Close();
} }
public void CloseMakeGhostRoleEui(IPlayerSession session) public void CloseMakeGhostRoleEui(ICommonSession session)
{ {
if (_openMakeGhostRoleUis.Remove(session, out var eui)) if (_openMakeGhostRoleUis.Remove(session, out var eui))
{ {
@@ -190,7 +191,7 @@ namespace Content.Server.Ghost.Roles
UpdateAllEui(); UpdateAllEui();
} }
public void Takeover(IPlayerSession player, uint identifier) public void Takeover(ICommonSession player, uint identifier)
{ {
if (!_ghostRoles.TryGetValue(identifier, out var role)) return; if (!_ghostRoles.TryGetValue(identifier, out var role)) return;
@@ -205,7 +206,7 @@ namespace Content.Server.Ghost.Roles
CloseEui(player); CloseEui(player);
} }
public void Follow(IPlayerSession player, uint identifier) public void Follow(ICommonSession player, uint identifier)
{ {
if (!_ghostRoles.TryGetValue(identifier, out var role)) return; if (!_ghostRoles.TryGetValue(identifier, out var role)) return;
if (player.AttachedEntity == null) return; if (player.AttachedEntity == null) return;
@@ -213,7 +214,7 @@ namespace Content.Server.Ghost.Roles
_followerSystem.StartFollowingEntity(player.AttachedEntity.Value, role.Owner); _followerSystem.StartFollowingEntity(player.AttachedEntity.Value, role.Owner);
} }
public void GhostRoleInternalCreateMindAndTransfer(IPlayerSession player, EntityUid roleUid, EntityUid mob, GhostRoleComponent? role = null) public void GhostRoleInternalCreateMindAndTransfer(ICommonSession player, EntityUid roleUid, EntityUid mob, GhostRoleComponent? role = null)
{ {
if (!Resolve(roleUid, ref role)) return; if (!Resolve(roleUid, ref role)) return;

View File

@@ -1,7 +1,7 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Mind.Components;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind.Components;
using Robust.Shared.Console; using Robust.Shared.Console;
namespace Content.Server.Ghost.Roles namespace Content.Server.Ghost.Roles

View File

@@ -1,10 +1,9 @@
using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Components;
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.PAI; using Content.Server.PAI;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Mind; using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Verbs; using Content.Shared.Verbs;
@@ -17,7 +16,7 @@ public sealed class ToggleableGhostRoleSystem : EntitySystem
{ {
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly SharedMindSystem _mind = default!;
//todo this really shouldn't be in here but this system was converted from PAIs //todo this really shouldn't be in here but this system was converted from PAIs
[Dependency] private readonly PAISystem _pai = default!; [Dependency] private readonly PAISystem _pai = default!;

View File

@@ -1,5 +1,4 @@
using Content.Server.Hands.Systems; using Content.Server.Hands.Systems;
using Content.Server.Mind.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Storage; using Content.Shared.Storage;

View File

@@ -1,10 +1,10 @@
using Content.Server.Light.Events; using Content.Server.Light.Events;
using Content.Server.Mind.Components;
using Content.Shared.Actions; using Content.Shared.Actions;
using Content.Shared.Decals; using Content.Shared.Decals;
using Content.Shared.Emag.Systems; using Content.Shared.Emag.Systems;
using Content.Shared.Light; using Content.Shared.Light;
using Content.Shared.Light.Component; using Content.Shared.Light.Component;
using Content.Shared.Mind.Components;
using Content.Shared.Toggleable; using Content.Shared.Toggleable;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;

View File

@@ -4,7 +4,6 @@ using Content.Server.Chemistry.EntitySystems;
using Content.Server.Construction; using Content.Server.Construction;
using Content.Server.Fluids.EntitySystems; using Content.Server.Fluids.EntitySystems;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Server.Nutrition.Components; using Content.Server.Nutrition.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.Power.Components; using Content.Server.Power.Components;
@@ -17,6 +16,7 @@ using Content.Shared.IdentityManagement;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Materials; using Content.Shared.Materials;
using Content.Shared.Mind;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -34,7 +34,7 @@ public sealed class MaterialReclaimerSystem : SharedMaterialReclaimerSystem
[Dependency] private readonly SharedBodySystem _body = default!; //bobby [Dependency] private readonly SharedBodySystem _body = default!; //bobby
[Dependency] private readonly PuddleSystem _puddle = default!; [Dependency] private readonly PuddleSystem _puddle = default!;
[Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly StackSystem _stack = default!;
[Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly SharedMindSystem _mind = default!;
/// <inheritdoc/> /// <inheritdoc/>
public override void Initialize() public override void Initialize()

View File

@@ -4,7 +4,6 @@ using Content.Server.Climbing;
using Content.Server.Construction; using Content.Server.Construction;
using Content.Server.Fluids.EntitySystems; using Content.Server.Fluids.EntitySystems;
using Content.Server.Materials; using Content.Server.Materials;
using Content.Server.Mind;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Shared.Administration.Logs; using Content.Shared.Administration.Logs;
using Content.Shared.Audio; using Content.Shared.Audio;
@@ -18,6 +17,7 @@ using Content.Shared.Interaction;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Jittering; using Content.Shared.Jittering;
using Content.Shared.Medical; using Content.Shared.Medical;
using Content.Shared.Mind;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.Components;
@@ -45,7 +45,7 @@ namespace Content.Server.Medical.BiomassReclaimer
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly MaterialStorageSystem _material = default!; [Dependency] private readonly MaterialStorageSystem _material = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly SharedMindSystem _minds = default!;
public override void Update(float frameTime) public override void Update(float frameTime)
{ {

View File

@@ -4,7 +4,6 @@ using Content.Server.DoAfter;
using Content.Server.Electrocution; using Content.Server.Electrocution;
using Content.Server.EUI; using Content.Server.EUI;
using Content.Server.Ghost; using Content.Server.Ghost;
using Content.Server.Mind;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.PowerCell; using Content.Server.PowerCell;
using Content.Shared.Damage; using Content.Shared.Damage;
@@ -13,12 +12,13 @@ using Content.Shared.Interaction;
using Content.Shared.Interaction.Components; using Content.Shared.Interaction.Components;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Medical; using Content.Shared.Medical;
using Content.Shared.Mind;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Timing; using Content.Shared.Timing;
using Content.Shared.Toggleable; using Content.Shared.Toggleable;
using Robust.Server.Player; using Robust.Shared.Players;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Server.Medical; namespace Content.Server.Medical;
@@ -42,7 +42,7 @@ public sealed class DefibrillatorSystem : EntitySystem
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!;
[Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly SharedMindSystem _mind = default!;
/// <inheritdoc/> /// <inheritdoc/>
public override void Initialize() public override void Initialize()
@@ -208,7 +208,7 @@ public sealed class DefibrillatorSystem : EntitySystem
component.NextZapTime = _timing.CurTime + component.ZapDelay; component.NextZapTime = _timing.CurTime + component.ZapDelay;
_appearance.SetData(uid, DefibrillatorVisuals.Ready, false); _appearance.SetData(uid, DefibrillatorVisuals.Ready, false);
IPlayerSession? session = null; ICommonSession? session = null;
if (_rotting.IsRotten(target)) if (_rotting.IsRotten(target))
{ {

View File

@@ -1,9 +1,8 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Mind.Components;
using Content.Server.NPC.Components;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Emoting; using Content.Shared.Emoting;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Mind.Components;
using Content.Shared.Movement.Components; using Content.Shared.Movement.Components;
using Content.Shared.Speech; using Content.Shared.Speech;
using Robust.Shared.Console; using Robust.Shared.Console;

View File

@@ -1,7 +1,8 @@
using System.Text; using System.Text;
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Roles;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Content.Shared.Roles;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -31,7 +32,7 @@ namespace Content.Server.Mind.Commands
return; return;
} }
var minds = _entities.System<MindSystem>(); var minds = _entities.System<SharedMindSystem>();
if (!minds.TryGetMind(session, out var mindId, out var mind)) if (!minds.TryGetMind(session, out var mindId, out var mind))
{ {
shell.WriteLine("Can't find that mind"); shell.WriteLine("Can't find that mind");
@@ -41,7 +42,7 @@ namespace Content.Server.Mind.Commands
var builder = new StringBuilder(); var builder = new StringBuilder();
builder.AppendFormat("player: {0}, mob: {1}\nroles: ", mind.UserId, mind.OwnedEntity); builder.AppendFormat("player: {0}, mob: {1}\nroles: ", mind.UserId, mind.OwnedEntity);
var roles = _entities.System<RoleSystem>(); var roles = _entities.System<SharedRoleSystem>();
foreach (var role in roles.MindGetAllRoles(mindId)) foreach (var role in roles.MindGetAllRoles(mindId))
{ {
builder.AppendFormat("{0} ", role.Name); builder.AppendFormat("{0} ", role.Name);

View File

@@ -5,6 +5,7 @@ using Content.Server.PDA;
using Content.Server.StationRecords.Systems; using Content.Server.StationRecords.Systems;
using Content.Shared.Access.Components; using Content.Shared.Access.Components;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Content.Shared.PDA; using Content.Shared.PDA;
using Content.Shared.StationRecords; using Content.Shared.StationRecords;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
@@ -45,7 +46,7 @@ public sealed class RenameCommand : IConsoleCommand
var oldName = metadata.EntityName; var oldName = metadata.EntityName;
entMan.System<MetaDataSystem>().SetEntityName(entityUid, name, metadata); entMan.System<MetaDataSystem>().SetEntityName(entityUid, name, metadata);
var minds = entMan.System<MindSystem>(); var minds = entMan.System<SharedMindSystem>();
if (minds.TryGetMind(entityUid, out var mindId, out var mind)) if (minds.TryGetMind(entityUid, out var mindId, out var mind))
{ {

View File

@@ -1,17 +1,11 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Ghost;
using Content.Server.Mind.Components;
using Content.Server.Objectives;
using Content.Server.Players;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Examine;
using Content.Shared.GameTicking;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Interaction.Events; using Content.Shared.Mind;
using Content.Shared.Mobs.Components; using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Players;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Map; using Robust.Shared.Map;
@@ -21,90 +15,22 @@ using Robust.Shared.Utility;
namespace Content.Server.Mind; namespace Content.Server.Mind;
public sealed class MindSystem : EntitySystem public sealed class MindSystem : SharedMindSystem
{ {
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly GameTicker _gameTicker = default!;
[Dependency] private readonly ActorSystem _actor = default!; [Dependency] private readonly ActorSystem _actor = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly GhostSystem _ghostSystem = default!;
[Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly GameTicker _gameTicker = default!;
[Dependency] private readonly SharedGhostSystem _ghosts = default!;
[Dependency] private readonly IMapManager _maps = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly IPlayerManager _players = default!;
// This is dictionary is required to track the minds of disconnected players that may have had their entity deleted. [Dependency] private readonly SharedTransformSystem _transform = default!;
private readonly Dictionary<NetUserId, EntityUid> _userMinds = new();
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<MindContainerComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<MindContainerComponent, SuicideEvent>(OnSuicide);
SubscribeLocalEvent<MindContainerComponent, EntityTerminatingEvent>(OnMindContainerTerminating); SubscribeLocalEvent<MindContainerComponent, EntityTerminatingEvent>(OnMindContainerTerminating);
SubscribeLocalEvent<VisitingMindComponent, EntityTerminatingEvent>(OnVisitingTerminating);
SubscribeLocalEvent<RoundRestartCleanupEvent>(OnReset);
}
public override void Shutdown()
{
base.Shutdown();
WipeAllMinds();
}
private void OnReset(RoundRestartCleanupEvent ev)
{
WipeAllMinds();
}
public void WipeAllMinds()
{
foreach (var mind in _userMinds.Values)
{
WipeMind(mind);
}
DebugTools.Assert(_userMinds.Count == 0);
foreach (var unCastData in _playerManager.GetAllPlayerData())
{
if (unCastData.ContentData()?.Mind is not { } mind)
continue;
Log.Error("Player mind was missing from MindSystem dictionary.");
WipeMind(mind);
}
}
public EntityUid? GetMind(NetUserId user)
{
TryGetMind(user, out var mind, out _);
return mind;
}
public bool TryGetMind(NetUserId user, [NotNullWhen(true)] out EntityUid? mindId, [NotNullWhen(true)] out MindComponent? mind)
{
if (_userMinds.TryGetValue(user, out var mindIdValue) &&
TryComp(mindIdValue, out mind))
{
DebugTools.Assert(mind.UserId == user);
DebugTools.Assert(_playerManager.GetPlayerData(user).ContentData() is not {} data
|| data.Mind == mindIdValue);
mindId = mindIdValue;
return true;
}
DebugTools.Assert(_playerManager.GetPlayerData(user).ContentData()?.Mind == null);
mindId = null;
mind = null;
return false;
}
private void OnVisitingTerminating(EntityUid uid, VisitingMindComponent component, ref EntityTerminatingEvent args)
{
if (component.MindId != null)
UnVisit(component.MindId.Value);
} }
private void OnMindContainerTerminating(EntityUid uid, MindContainerComponent component, ref EntityTerminatingEvent args) private void OnMindContainerTerminating(EntityUid uid, MindContainerComponent component, ref EntityTerminatingEvent args)
@@ -124,7 +50,7 @@ public sealed class MindSystem : EntitySystem
{ {
TransferTo(mindId, visiting, mind: mind); TransferTo(mindId, visiting, mind: mind);
if (TryComp(visiting, out GhostComponent? ghost)) if (TryComp(visiting, out GhostComponent? ghost))
_ghostSystem.SetCanReturnToBody(ghost, false); _ghosts.SetCanReturnToBody(ghost, false);
return; return;
} }
@@ -144,7 +70,7 @@ public sealed class MindSystem : EntitySystem
return; return;
// Async this so that we don't throw if the grid we're on is being deleted. // Async this so that we don't throw if the grid we're on is being deleted.
if (!_mapManager.GridExists(gridId)) if (!_maps.GridExists(gridId))
spawnPosition = _gameTicker.GetObserverSpawnPoint(); spawnPosition = _gameTicker.GetObserverSpawnPoint();
// TODO refactor observer spawning. // TODO refactor observer spawning.
@@ -159,7 +85,7 @@ public sealed class MindSystem : EntitySystem
var ghost = Spawn("MobObserver", spawnPosition); var ghost = Spawn("MobObserver", spawnPosition);
var ghostComponent = Comp<GhostComponent>(ghost); var ghostComponent = Comp<GhostComponent>(ghost);
_ghostSystem.SetCanReturnToBody(ghostComponent, false); _ghosts.SetCanReturnToBody(ghostComponent, false);
// Log these to make sure they're not causing the GameTicker round restart bugs... // Log these to make sure they're not causing the GameTicker round restart bugs...
Log.Debug($"Entity \"{ToPrettyString(uid)}\" for {mind.CharacterName} was deleted, spawned \"{ToPrettyString(ghost)}\"."); Log.Debug($"Entity \"{ToPrettyString(uid)}\" for {mind.CharacterName} was deleted, spawned \"{ToPrettyString(ghost)}\".");
@@ -171,92 +97,52 @@ public sealed class MindSystem : EntitySystem
} }
} }
private void OnExamined(EntityUid uid, MindContainerComponent mindContainer, ExaminedEvent args) public override bool TryGetMind(NetUserId user, [NotNullWhen(true)] out EntityUid? mindId, [NotNullWhen(true)] out MindComponent? mind)
{ {
if (!mindContainer.ShowExamineInfo || !args.IsInDetailsRange) if (base.TryGetMind(user, out mindId, out mind))
return; {
DebugTools.Assert(_players.GetPlayerData(user).ContentData() is not { } data || data.Mind == mindId);
return true;
}
var dead = _mobStateSystem.IsDead(uid); DebugTools.Assert(_players.GetPlayerData(user).ContentData()?.Mind == null);
var hasSession = CompOrNull<MindComponent>(mindContainer.Mind)?.Session; return false;
if (dead && !mindContainer.HasMind)
args.PushMarkup($"[color=mediumpurple]{Loc.GetString("comp-mind-examined-dead-and-irrecoverable", ("ent", uid))}[/color]");
else if (dead && hasSession == null)
args.PushMarkup($"[color=yellow]{Loc.GetString("comp-mind-examined-dead-and-ssd", ("ent", uid))}[/color]");
else if (dead)
args.PushMarkup($"[color=red]{Loc.GetString("comp-mind-examined-dead", ("ent", uid))}[/color]");
else if (!mindContainer.HasMind)
args.PushMarkup($"[color=mediumpurple]{Loc.GetString("comp-mind-examined-catatonic", ("ent", uid))}[/color]");
else if (hasSession == null)
args.PushMarkup($"[color=yellow]{Loc.GetString("comp-mind-examined-ssd", ("ent", uid))}[/color]");
} }
private void OnSuicide(EntityUid uid, MindContainerComponent component, SuicideEvent args) public bool TryGetSession(EntityUid? mindId, [NotNullWhen(true)] out IPlayerSession? session)
{ {
if (args.Handled) session = null;
return; return TryComp(mindId, out MindComponent? mind) && (session = (IPlayerSession?) mind.Session) != null;
}
if (TryComp(component.Mind, out MindComponent? mind) && mind.PreventSuicide) public IPlayerSession? GetSession(MindComponent mind)
{
return (IPlayerSession?) mind.Session;
}
public bool TryGetSession(MindComponent mind, [NotNullWhen(true)] out IPlayerSession? session)
{
return (session = GetSession(mind)) != null;
}
public override void WipeAllMinds()
{
base.WipeAllMinds();
foreach (var unCastData in _players.GetAllPlayerData())
{ {
args.BlockSuicideAttempt(true); if (unCastData.ContentData()?.Mind is not { } mind)
continue;
Log.Error("Player mind was missing from MindSystem dictionary.");
WipeMind(mind);
} }
} }
public EntityUid? GetMind(EntityUid uid, MindContainerComponent? mind = null) public override void Visit(EntityUid mindId, EntityUid entity, MindComponent? mind = null)
{ {
if (!Resolve(uid, ref mind)) base.Visit(mindId, entity, mind);
return null;
if (mind.HasMind)
return mind.Mind;
return null;
}
public EntityUid CreateMind(NetUserId? userId, string? name = null)
{
var mindId = Spawn(null, MapCoordinates.Nullspace);
var mind = EnsureComp<MindComponent>(mindId);
mind.CharacterName = name;
SetUserId(mindId, userId, mind);
Dirty(mindId, MetaData(mindId));
return mindId;
}
/// <summary>
/// True if the OwnedEntity of this mind is physically dead.
/// This specific definition, as opposed to CharacterDeadIC, is used to determine if ghosting should allow return.
/// </summary>
public bool IsCharacterDeadPhysically(MindComponent mind)
{
// This is written explicitly so that the logic can be understood.
// But it's also weird and potentially situational.
// Specific considerations when updating this:
// + Does being turned into a borg (if/when implemented) count as dead?
// *If not, add specific conditions to users of this property where applicable.*
// + Is being transformed into a donut 'dead'?
// TODO: Consider changing the way ghost roles work.
// Mind is an *IC* mind, therefore ghost takeover is IC revival right now.
// + Is it necessary to have a reference to a specific 'mind iteration' to cycle when certain events happen?
// (If being a borg or AI counts as dead, then this is highly likely, as it's still the same Mind for practical purposes.)
if (mind.OwnedEntity == null)
return true;
// This can be null if they're deleted (spike / brain nom)
var targetMobState = EntityManager.GetComponentOrNull<MobStateComponent>(mind.OwnedEntity);
// This can be null if it's a brain (this happens very often)
// Brains are the result of gibbing so should definitely count as dead
if (targetMobState == null)
return true;
// They might actually be alive.
return _mobStateSystem.IsDead(mind.OwnedEntity.Value, targetMobState);
}
public void Visit(EntityUid mindId, EntityUid entity, MindComponent? mind = null)
{
if (!Resolve(mindId, ref mind)) if (!Resolve(mindId, ref mind))
return; return;
@@ -272,7 +158,7 @@ public sealed class MindSystem : EntitySystem
return; return;
} }
mind.Session?.AttachToEntity(entity); GetSession(mind)?.AttachToEntity(entity);
mind.VisitingEntity = entity; mind.VisitingEntity = entity;
// EnsureComp instead of AddComp to deal with deferred deletions. // EnsureComp instead of AddComp to deal with deferred deletions.
@@ -281,11 +167,10 @@ public sealed class MindSystem : EntitySystem
Log.Info($"Session {mind.Session?.Name} visiting entity {entity}."); Log.Info($"Session {mind.Session?.Name} visiting entity {entity}.");
} }
/// <summary> public override void UnVisit(EntityUid mindId, MindComponent? mind = null)
/// Returns the mind to its original entity.
/// </summary>
public void UnVisit(EntityUid mindId, MindComponent? mind = null)
{ {
base.UnVisit(mindId, mind);
if (!Resolve(mindId, ref mind)) if (!Resolve(mindId, ref mind))
return; return;
@@ -298,7 +183,7 @@ public sealed class MindSystem : EntitySystem
return; return;
var owned = mind.OwnedEntity; var owned = mind.OwnedEntity;
mind.Session.AttachToEntity(owned); GetSession(mind)?.AttachToEntity(owned);
if (owned.HasValue) if (owned.HasValue)
{ {
@@ -307,74 +192,11 @@ public sealed class MindSystem : EntitySystem
} }
} }
/// <summary> public override void TransferTo(EntityUid mindId, EntityUid? entity, bool ghostCheckOverride = false, bool createGhost = true,
/// Returns the mind to its original entity. MindComponent? mind = null)
/// </summary>
public void UnVisit(IPlayerSession? player)
{ {
if (player == null || !TryGetMind(player, out var mindId, out var mind)) base.TransferTo(mindId, entity, ghostCheckOverride, createGhost, mind);
return;
UnVisit(mindId, mind);
}
/// <summary>
/// Cleans up the VisitingEntity.
/// </summary>
/// <param name="mind"></param>
private void RemoveVisitingEntity(MindComponent mind)
{
if (mind.VisitingEntity == null)
return;
var oldVisitingEnt = mind.VisitingEntity.Value;
// Null this before removing the component to avoid any infinite loops.
mind.VisitingEntity = null;
if (TryComp(oldVisitingEnt, out VisitingMindComponent? visitComp))
{
visitComp.MindId = null;
RemCompDeferred(oldVisitingEnt, visitComp);
}
RaiseLocalEvent(oldVisitingEnt, new MindUnvisitedMessage(), true);
}
public void WipeMind(IPlayerSession player)
{
var mind = player.ContentData()?.Mind;
DebugTools.Assert(GetMind(player.UserId) == mind);
WipeMind(mind);
}
/// <summary>
/// Detaches a mind from all entities and clears the user ID.
/// </summary>
public void WipeMind(EntityUid? mindId, MindComponent? mind = null)
{
if (mindId == null || !Resolve(mindId.Value, ref mind, false))
return;
TransferTo(mindId.Value, null, mind: mind);
SetUserId(mindId.Value, null, mind: mind);
}
/// <summary>
/// Transfer this mind's control over to a new entity.
/// </summary>
/// <param name="mindId">The mind to transfer</param>
/// <param name="entity">
/// The entity to control.
/// Can be null, in which case it will simply detach the mind from any entity.
/// </param>
/// <param name="ghostCheckOverride">
/// If true, skips ghost check for Visiting Entity
/// </param>
/// <exception cref="ArgumentException">
/// Thrown if <paramref name="entity"/> is already controlled by another player.
/// </exception>
public void TransferTo(EntityUid mindId, EntityUid? entity, bool ghostCheckOverride = false, bool createGhost = true, MindComponent? mind = null)
{
if (!Resolve(mindId, ref mind)) if (!Resolve(mindId, ref mind))
return; return;
@@ -410,7 +232,7 @@ public sealed class MindSystem : EntitySystem
entity = Spawn("MobObserver", position); entity = Spawn("MobObserver", position);
var ghostComponent = Comp<GhostComponent>(entity.Value); var ghostComponent = Comp<GhostComponent>(entity.Value);
_ghostSystem.SetCanReturnToBody(ghostComponent, false); _ghosts.SetCanReturnToBody(ghostComponent, false);
} }
var oldComp = mind.OwnedComponent; var oldComp = mind.OwnedComponent;
@@ -440,10 +262,11 @@ public sealed class MindSystem : EntitySystem
} }
// Player is CURRENTLY connected. // Player is CURRENTLY connected.
if (mind.Session != null && !alreadyAttached && mind.VisitingEntity == null) var session = GetSession(mind);
if (session != null && !alreadyAttached && mind.VisitingEntity == null)
{ {
_actor.Attach(entity, mind.Session, true); _actor.Attach(entity, session, true);
Log.Info($"Session {mind.Session.Name} transferred to entity {entity}."); Log.Info($"Session {session.Name} transferred to entity {entity}.");
} }
if (mind.OwnedComponent != null) if (mind.OwnedComponent != null)
@@ -454,127 +277,17 @@ public sealed class MindSystem : EntitySystem
} }
} }
/// <summary> public override void SetUserId(EntityUid mindId, NetUserId? userId, MindComponent? mind = null)
/// Adds an objective to this mind.
/// </summary>
public bool TryAddObjective(EntityUid mindId, MindComponent mind, ObjectivePrototype objectivePrototype)
{ {
if (!objectivePrototype.CanBeAssigned(mindId, mind)) base.SetUserId(mindId, userId, mind);
return false;
var objective = objectivePrototype.GetObjective(mindId, mind);
if (mind.Objectives.Contains(objective))
return false;
foreach (var condition in objective.Conditions)
{
_adminLogger.Add(LogType.Mind, LogImpact.Low, $"'{condition.Title}' added to mind of {MindOwnerLoggingString(mind)}");
}
mind.Objectives.Add(objective);
return true;
}
/// <summary>
/// Removes an objective to this mind.
/// </summary>
/// <returns>Returns true if the removal succeeded.</returns>
public bool TryRemoveObjective(MindComponent mind, int index)
{
if (index < 0 || index >= mind.Objectives.Count)
return false;
var objective = mind.Objectives[index];
foreach (var condition in objective.Conditions)
{
_adminLogger.Add(LogType.Mind, LogImpact.Low, $"'{condition.Title}' removed from the mind of {MindOwnerLoggingString(mind)}");
}
mind.Objectives.Remove(objective);
return true;
}
public bool TryGetSession(EntityUid? mindId, [NotNullWhen(true)] out IPlayerSession? session)
{
session = null;
return TryComp(mindId, out MindComponent? mind) && (session = mind.Session) != null;
}
/// <summary>
/// Gets a mind from uid and/or MindContainerComponent. Used for null checks.
/// </summary>
/// <param name="uid">Entity UID that owns the mind.</param>
/// <param name="mindId">The mind id.</param>
/// <param name="mind">The returned mind.</param>
/// <param name="container">Mind component on <paramref name="uid"/> to get the mind from.</param>
/// <returns>True if mind found. False if not.</returns>
public bool TryGetMind(
EntityUid uid,
out EntityUid mindId,
[NotNullWhen(true)] out MindComponent? mind,
MindContainerComponent? container = null)
{
mindId = default;
mind = null;
if (!Resolve(uid, ref container, false))
return false;
if (!container.HasMind)
return false;
mindId = container.Mind ?? default;
return TryComp(mindId, out mind);
}
public bool TryGetMind(
PlayerData player,
out EntityUid mindId,
[NotNullWhen(true)] out MindComponent? mind)
{
mindId = player.Mind ?? default;
return TryComp(mindId, out mind);
}
public bool TryGetMind(
IPlayerSession? player,
out EntityUid mindId,
[NotNullWhen(true)] out MindComponent? mind)
{
mindId = default;
mind = null;
return player?.ContentData() is { } data && TryGetMind(data, out mindId, out mind);
}
/// <summary>
/// Sets the Mind's OwnedComponent and OwnedEntity
/// </summary>
/// <param name="mind">Mind to set OwnedComponent and OwnedEntity on</param>
/// <param name="uid">Entity owned by <paramref name="mind"/></param>
/// <param name="mindContainerComponent">MindContainerComponent owned by <paramref name="mind"/></param>
private void SetOwnedEntity(MindComponent mind, EntityUid? uid, MindContainerComponent? mindContainerComponent)
{
if (uid != null)
Resolve(uid.Value, ref mindContainerComponent);
mind.OwnedEntity = uid;
mind.OwnedComponent = mindContainerComponent;
}
/// <summary>
/// Sets the Mind's UserId, Session, and updates the player's PlayerData. This should have no direct effect on the
/// entity that any mind is connected to, except as a side effect of the fact that it may change a player's
/// attached entity. E.g., ghosts get deleted.
/// </summary>
public void SetUserId(EntityUid mindId, NetUserId? userId, MindComponent? mind = null)
{
if (!Resolve(mindId, ref mind)) if (!Resolve(mindId, ref mind))
return; return;
if (mind.UserId == userId) if (mind.UserId == userId)
return; return;
if (userId != null && !_playerManager.TryGetPlayerData(userId.Value, out _)) if (userId != null && !_players.TryGetPlayerData(userId.Value, out _))
{ {
Log.Error($"Attempted to set mind user to invalid value {userId}"); Log.Error($"Attempted to set mind user to invalid value {userId}");
return; return;
@@ -582,14 +295,14 @@ public sealed class MindSystem : EntitySystem
if (mind.Session != null) if (mind.Session != null)
{ {
_actor.Attach(null, mind.Session); _actor.Attach(null, GetSession(mind)!);
mind.Session = null; mind.Session = null;
} }
if (mind.UserId != null) if (mind.UserId != null)
{ {
_userMinds.Remove(mind.UserId.Value); UserMinds.Remove(mind.UserId.Value);
if (_playerManager.GetPlayerData(mind.UserId.Value).ContentData() is { } oldData) if (_players.GetPlayerData(mind.UserId.Value).ContentData() is { } oldData)
oldData.Mind = null; oldData.Mind = null;
mind.UserId = null; mind.UserId = null;
} }
@@ -600,71 +313,26 @@ public sealed class MindSystem : EntitySystem
return; return;
} }
if (_userMinds.TryGetValue(userId.Value, out var oldMindId) && if (UserMinds.TryGetValue(userId.Value, out var oldMindId) &&
TryComp(oldMindId, out MindComponent? oldMind)) TryComp(oldMindId, out MindComponent? oldMind))
{ {
SetUserId(oldMindId, null, oldMind); SetUserId(oldMindId, null, oldMind);
} }
DebugTools.AssertNull(_playerManager.GetPlayerData(userId.Value).ContentData()?.Mind); DebugTools.AssertNull(_players.GetPlayerData(userId.Value).ContentData()?.Mind);
_userMinds[userId.Value] = mindId; UserMinds[userId.Value] = mindId;
mind.UserId = userId; mind.UserId = userId;
mind.OriginalOwnerUserId ??= userId; mind.OriginalOwnerUserId ??= userId;
if (_playerManager.TryGetSessionById(userId.Value, out var ret)) if (_players.TryGetSessionById(userId.Value, out var ret))
{ {
mind.Session = ret; mind.Session = ret;
_actor.Attach(mind.CurrentEntity, mind.Session); _actor.Attach(mind.CurrentEntity, ret);
} }
// session may be null, but user data may still exist for disconnected players. // session may be null, but user data may still exist for disconnected players.
if (_playerManager.GetPlayerData(userId.Value).ContentData() is { } data) if (_players.GetPlayerData(userId.Value).ContentData() is { } data)
data.Mind = mindId; data.Mind = mindId;
} }
/// <summary>
/// True if this Mind is 'sufficiently dead' IC (Objectives, EndText).
/// Note that this is *IC logic*, it's not necessarily tied to any specific truth.
/// "If administrators decide that zombies are dead, this returns true for zombies."
/// (Maybe you were looking for the action blocker system?)
/// </summary>
public bool IsCharacterDeadIc(MindComponent mind)
{
if (mind.OwnedEntity is { } owned)
{
var ev = new GetCharactedDeadIcEvent(null);
RaiseLocalEvent(owned, ref ev);
if (ev.Dead != null)
return ev.Dead.Value;
}
return IsCharacterDeadPhysically(mind);
}
/// <summary>
/// A string to represent the mind for logging
/// </summary>
public string MindOwnerLoggingString(MindComponent mind)
{
if (mind.OwnedEntity != null)
return ToPrettyString(mind.OwnedEntity.Value);
if (mind.UserId != null)
return mind.UserId.Value.ToString();
return "(originally " + mind.OriginalOwnerUserId + ")";
}
public string? GetCharacterName(NetUserId userId)
{
return TryGetMind(userId, out _, out var mind) ? mind.CharacterName : null;
}
} }
/// <summary>
/// Raised on an entity to determine whether or not they are "dead" in IC-logic.
/// If not handled, then it will simply check if they are dead physically.
/// </summary>
/// <param name="Dead"></param>
[ByRefEvent]
public record struct GetCharactedDeadIcEvent(bool? Dead);

View File

@@ -1,4 +1,5 @@
using Robust.Server.Player; using Content.Shared.Mind;
using Robust.Server.Player;
using Robust.Shared.Toolshed; using Robust.Shared.Toolshed;
using Robust.Shared.Toolshed.Errors; using Robust.Shared.Toolshed.Errors;
using Robust.Shared.Toolshed.Syntax; using Robust.Shared.Toolshed.Syntax;
@@ -11,19 +12,19 @@ namespace Content.Server.Mind.Toolshed;
[ToolshedCommand] [ToolshedCommand]
public sealed class MindCommand : ToolshedCommand public sealed class MindCommand : ToolshedCommand
{ {
private MindSystem? _mind; private SharedMindSystem? _mind;
[CommandImplementation("get")] [CommandImplementation("get")]
public MindComponent? Get([PipedArgument] IPlayerSession session) public MindComponent? Get([PipedArgument] IPlayerSession session)
{ {
_mind ??= GetSys<MindSystem>(); _mind ??= GetSys<SharedMindSystem>();
return _mind.TryGetMind(session, out _, out var mind) ? mind : null; return _mind.TryGetMind(session, out _, out var mind) ? mind : null;
} }
[CommandImplementation("get")] [CommandImplementation("get")]
public MindComponent? Get([PipedArgument] EntityUid ent) public MindComponent? Get([PipedArgument] EntityUid ent)
{ {
_mind ??= GetSys<MindSystem>(); _mind ??= GetSys<SharedMindSystem>();
return _mind.TryGetMind(ent, out _, out var mind) ? mind : null; return _mind.TryGetMind(ent, out _, out var mind) ? mind : null;
} }
@@ -33,7 +34,7 @@ public sealed class MindCommand : ToolshedCommand
[PipedArgument] EntityUid target, [PipedArgument] EntityUid target,
[CommandArgument] ValueRef<IPlayerSession> playerRef) [CommandArgument] ValueRef<IPlayerSession> playerRef)
{ {
_mind ??= GetSys<MindSystem>(); _mind ??= GetSys<SharedMindSystem>();
var player = playerRef.Evaluate(ctx); var player = playerRef.Evaluate(ctx);
if (player is null) if (player is null)

View File

@@ -1,6 +1,7 @@
using System.Linq; using System.Linq;
using Content.Server.Body.Components; using Content.Server.Body.Components;
using Content.Server.Mind.Components; using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Tag; using Content.Shared.Tag;
using Robust.Shared.Random; using Robust.Shared.Random;
@@ -15,7 +16,7 @@ public sealed class TransferMindOnGibSystem : EntitySystem
{ {
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
/// <inheritdoc/> /// <inheritdoc/>
public override void Initialize() public override void Initialize()

View File

@@ -1,16 +1,12 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Chat.Systems; using Content.Server.Chat.Systems;
using Content.Server.GameTicking;
using Content.Server.Mind.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.Speech.Muting; using Content.Server.Speech.Muting;
using Content.Shared.ActionBlocker;
using Content.Shared.Actions; using Content.Shared.Actions;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Robust.Server.Console; using Robust.Server.Console;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using System;
namespace Content.Server.Mobs; namespace Content.Server.Mobs;

View File

@@ -1,5 +1,4 @@
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Server.Morgue.Components; using Content.Server.Morgue.Components;
using Content.Server.Storage.Components; using Content.Server.Storage.Components;
using Content.Server.Storage.EntitySystems; using Content.Server.Storage.EntitySystems;
@@ -7,6 +6,7 @@ using Content.Shared.Database;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Mind;
using Content.Shared.Morgue; using Content.Shared.Morgue;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Standing; using Content.Shared.Standing;
@@ -26,7 +26,7 @@ public sealed class CrematoriumSystem : EntitySystem
[Dependency] private readonly EntityStorageSystem _entityStorage = default!; [Dependency] private readonly EntityStorageSystem _entityStorage = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly StandingStateSystem _standing = default!; [Dependency] private readonly StandingStateSystem _standing = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly SharedMindSystem _minds = default!;
public override void Initialize() public override void Initialize()
{ {

View File

@@ -1,17 +1,16 @@
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Interaction.Components; using Content.Server.Interaction.Components;
using Content.Server.Mind.Components;
using Content.Server.Nutrition.Components; using Content.Server.Nutrition.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Nutrition.AnimalHusbandry; using Content.Shared.Nutrition.AnimalHusbandry;
using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.Components;
using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.EntitySystems;
using Content.Shared.Storage; using Content.Shared.Storage;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Collections;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Timing; using Robust.Shared.Timing;

View File

@@ -1,6 +1,7 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Content.Shared.Objectives;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
@@ -30,7 +31,7 @@ namespace Content.Server.Objectives.Commands
return; return;
} }
var minds = _entityManager.System<MindSystem>(); var minds = _entityManager.System<SharedMindSystem>();
if (!minds.TryGetMind(data, out var mindId, out var mind)) if (!minds.TryGetMind(data, out var mindId, out var mind))
{ {
shell.WriteLine("Can't find the mind."); shell.WriteLine("Can't find the mind.");
@@ -44,7 +45,7 @@ namespace Content.Server.Objectives.Commands
return; return;
} }
var mindSystem = _entityManager.System<MindSystem>(); var mindSystem = _entityManager.System<SharedMindSystem>();
if (!mindSystem.TryAddObjective(mindId, mind, objectivePrototype)) if (!mindSystem.TryAddObjective(mindId, mind, objectivePrototype))
{ {
shell.WriteLine("Objective requirements dont allow that objective to be added."); shell.WriteLine("Objective requirements dont allow that objective to be added.");

View File

@@ -1,7 +1,7 @@
using System.Linq; using System.Linq;
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -24,7 +24,7 @@ namespace Content.Server.Objectives.Commands
return; return;
} }
var minds = _entities.System<MindSystem>(); var minds = _entities.System<SharedMindSystem>();
if (!minds.TryGetMind(player, out _, out var mind)) if (!minds.TryGetMind(player, out _, out var mind))
{ {
shell.WriteError(LocalizationManager.GetString("shell-target-entity-does-not-have-message", ("missing", "mind"))); shell.WriteError(LocalizationManager.GetString("shell-target-entity-does-not-have-message", ("missing", "mind")));

View File

@@ -1,6 +1,6 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Mind;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
@@ -23,7 +23,7 @@ namespace Content.Server.Objectives.Commands
} }
var mgr = IoCManager.Resolve<IPlayerManager>(); var mgr = IoCManager.Resolve<IPlayerManager>();
var minds = _entityManager.System<MindSystem>(); var minds = _entityManager.System<SharedMindSystem>();
if (!mgr.TryGetSessionByUsername(args[0], out var session)) if (!mgr.TryGetSessionByUsername(args[0], out var session))
{ {
shell.WriteLine("Can't find the playerdata."); shell.WriteLine("Can't find the playerdata.");
@@ -38,7 +38,7 @@ namespace Content.Server.Objectives.Commands
if (int.TryParse(args[1], out var i)) if (int.TryParse(args[1], out var i))
{ {
var mindSystem = _entityManager.System<MindSystem>(); var mindSystem = _entityManager.System<SharedMindSystem>();
shell.WriteLine(mindSystem.TryRemoveObjective(mind, i) shell.WriteLine(mindSystem.TryRemoveObjective(mind, i)
? "Objective successfully removed!" ? "Objective successfully removed!"
: "Objective removing failed. Maybe the index is out of bounds? Check lsobjectives!"); : "Objective removing failed. Maybe the index is out of bounds? Check lsobjectives!");

View File

@@ -1,5 +1,5 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -27,7 +27,7 @@ namespace Content.Server.Objectives.Conditions
get get
{ {
var entityManager = IoCManager.Resolve<EntityManager>(); var entityManager = IoCManager.Resolve<EntityManager>();
var mindSystem = entityManager.System<MindSystem>(); var mindSystem = entityManager.System<SharedMindSystem>();
return _mind == null || mindSystem.IsCharacterDeadIc(_mind) ? 1f : 0f; return _mind == null || mindSystem.IsCharacterDeadIc(_mind) ? 1f : 0f;
} }
} }

View File

@@ -1,7 +1,7 @@
using Content.Server.Mind;
using Content.Server.Objectives.Interfaces;
using Content.Server.Shuttles.Systems; using Content.Server.Shuttles.Systems;
using Content.Shared.Cuffs.Components; using Content.Shared.Cuffs.Components;
using Content.Shared.Mind;
using Content.Shared.Objectives.Interfaces;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -32,7 +32,7 @@ namespace Content.Server.Objectives.Conditions
{ {
get { get {
var entMan = IoCManager.Resolve<IEntityManager>(); var entMan = IoCManager.Resolve<IEntityManager>();
var mindSystem = entMan.System<MindSystem>(); var mindSystem = entMan.System<SharedMindSystem>();
if (_mind?.OwnedEntity == null if (_mind?.OwnedEntity == null
|| !entMan.TryGetComponent<TransformComponent>(_mind.OwnedEntity, out var xform)) || !entMan.TryGetComponent<TransformComponent>(_mind.OwnedEntity, out var xform))

View File

@@ -1,9 +1,9 @@
using Content.Server.Mind;
using Content.Server.Objectives.Interfaces;
using Content.Server.Roles.Jobs;
using Content.Server.Shuttles.Systems; using Content.Server.Shuttles.Systems;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.Mind;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Objectives.Interfaces;
using Content.Shared.Roles.Jobs;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -13,8 +13,8 @@ namespace Content.Server.Objectives.Conditions
{ {
// TODO refactor all of this to be ecs // TODO refactor all of this to be ecs
protected IEntityManager EntityManager => IoCManager.Resolve<IEntityManager>(); protected IEntityManager EntityManager => IoCManager.Resolve<IEntityManager>();
protected MindSystem Minds => EntityManager.System<MindSystem>(); protected SharedMindSystem Minds => EntityManager.System<SharedMindSystem>();
protected JobSystem Jobs => EntityManager.System<JobSystem>(); protected SharedJobSystem Jobs => EntityManager.System<SharedJobSystem>();
protected MobStateSystem MobStateSystem => EntityManager.System<MobStateSystem>(); protected MobStateSystem MobStateSystem => EntityManager.System<MobStateSystem>();
protected EntityUid? TargetMindId; protected EntityUid? TargetMindId;
protected MindComponent? TargetMind => EntityManager.GetComponentOrNull<MindComponent>(TargetMindId); protected MindComponent? TargetMind => EntityManager.GetComponentOrNull<MindComponent>(TargetMindId);
@@ -52,7 +52,7 @@ namespace Content.Server.Objectives.Conditions
return 1f; return 1f;
var entMan = IoCManager.Resolve<EntityManager>(); var entMan = IoCManager.Resolve<EntityManager>();
var mindSystem = entMan.System<MindSystem>(); var mindSystem = entMan.System<SharedMindSystem>();
if (mindSystem.IsCharacterDeadIc(TargetMind)) if (mindSystem.IsCharacterDeadIc(TargetMind))
return 1f; return 1f;

View File

@@ -1,8 +1,8 @@
using System.Linq; using System.Linq;
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Mind.Components; using Content.Shared.Mind.Components;
using Content.Server.Objectives.Interfaces;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Objectives.Interfaces;
using Robust.Shared.Random; using Robust.Shared.Random;
namespace Content.Server.Objectives.Conditions; namespace Content.Server.Objectives.Conditions;
@@ -17,7 +17,7 @@ public sealed partial class KillRandomHeadCondition : KillPersonCondition
var allHumans = EntityManager.EntityQuery<MindContainerComponent>(true).Where(mc => var allHumans = EntityManager.EntityQuery<MindContainerComponent>(true).Where(mc =>
{ {
var entity = EntityManager.GetComponentOrNull<MindComponent>(mc.Mind)?.OwnedEntity; var entity = EntityManagerExt.GetComponentOrNull<MindComponent>(EntityManager, (EntityUid?) mc.Mind)?.OwnedEntity;
if (entity == default) if (entity == default)
return false; return false;

View File

@@ -1,8 +1,8 @@
using Content.Server.Mind;
using Content.Server.Mind.Components;
using Content.Server.Objectives.Interfaces;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Objectives.Interfaces;
using Robust.Shared.Random; using Robust.Shared.Random;
namespace Content.Server.Objectives.Conditions; namespace Content.Server.Objectives.Conditions;

View File

@@ -1,8 +1,8 @@
using System.Linq; using System.Linq;
using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules;
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
using Content.Server.Roles.Jobs; using Content.Shared.Roles.Jobs;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -17,7 +17,7 @@ namespace Content.Server.Objectives.Conditions
{ {
var entityMgr = IoCManager.Resolve<IEntityManager>(); var entityMgr = IoCManager.Resolve<IEntityManager>();
var traitors = entityMgr.System<TraitorRuleSystem>().GetOtherTraitorMindsAliveAndConnected(mind).ToList(); var traitors = Enumerable.ToList<(EntityUid Id, MindComponent Mind)>(entityMgr.System<TraitorRuleSystem>().GetOtherTraitorMindsAliveAndConnected(mind));
if (traitors.Count == 0) if (traitors.Count == 0)
return new EscapeShuttleCondition(); //You were made a traitor by admins, and are the first/only. return new EscapeShuttleCondition(); //You were made a traitor by admins, and are the first/only.
@@ -30,7 +30,7 @@ namespace Content.Server.Objectives.Conditions
{ {
var targetName = string.Empty; var targetName = string.Empty;
var ents = IoCManager.Resolve<IEntityManager>(); var ents = IoCManager.Resolve<IEntityManager>();
var jobs = ents.System<JobSystem>(); var jobs = ents.System<SharedJobSystem>();
var jobName = jobs.MindTryGetJobName(_targetMind); var jobName = jobs.MindTryGetJobName(_targetMind);
if (_targetMind == null) if (_targetMind == null)
@@ -55,7 +55,7 @@ namespace Content.Server.Objectives.Conditions
get get
{ {
var entityManager = IoCManager.Resolve<EntityManager>(); var entityManager = IoCManager.Resolve<EntityManager>();
var mindSystem = entityManager.System<MindSystem>(); var mindSystem = entityManager.System<SharedMindSystem>();
return !entityManager.TryGetComponent(_targetMind, out MindComponent? mind) || return !entityManager.TryGetComponent(_targetMind, out MindComponent? mind) ||
!mindSystem.IsCharacterDeadIc(mind) !mindSystem.IsCharacterDeadIc(mind)
? 1f ? 1f

View File

@@ -1,8 +1,8 @@
using System.Linq; using System.Linq;
using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules;
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
using Content.Server.Roles.Jobs; using Content.Shared.Roles.Jobs;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -51,7 +51,7 @@ namespace Content.Server.Objectives.Conditions
{ {
var targetName = string.Empty; var targetName = string.Empty;
var entities = IoCManager.Resolve<IEntityManager>(); var entities = IoCManager.Resolve<IEntityManager>();
var jobs = entities.System<JobSystem>(); var jobs = entities.System<SharedJobSystem>();
var jobName = jobs.MindTryGetJobName(_targetMind); var jobName = jobs.MindTryGetJobName(_targetMind);
if (_targetMind == null) if (_targetMind == null)

View File

@@ -1,5 +1,5 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;

View File

@@ -1,4 +1,5 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Shared.Objectives;
using Content.Shared.Random; using Content.Shared.Random;
using Content.Shared.Random.Helpers; using Content.Shared.Random.Helpers;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;

View File

@@ -1,5 +1,5 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
namespace Content.Server.Objectives.Requirements namespace Content.Server.Objectives.Requirements
{ {

View File

@@ -1,5 +1,5 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
namespace Content.Server.Objectives.Requirements namespace Content.Server.Objectives.Requirements
{ {

View File

@@ -1,6 +1,6 @@
using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules;
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
namespace Content.Server.Objectives.Requirements namespace Content.Server.Objectives.Requirements
{ {

View File

@@ -1,7 +1,7 @@
using Content.Server.Mind; using Content.Shared.Mind;
using Content.Server.Objectives.Interfaces; using Content.Shared.Objectives.Interfaces;
using Content.Server.Roles.Jobs;
using Content.Shared.Roles; using Content.Shared.Roles;
using Content.Shared.Roles.Jobs;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.Objectives.Requirements namespace Content.Server.Objectives.Requirements

View File

@@ -1,6 +1,7 @@
using Content.Server.Mind; using Content.Server.Roles;
using Content.Server.Objectives.Interfaces; using Content.Shared.Mind;
using Content.Server.Roles; using Content.Shared.Objectives.Interfaces;
using Content.Shared.Roles;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Content.Server.Objectives.Requirements namespace Content.Server.Objectives.Requirements
@@ -11,7 +12,7 @@ namespace Content.Server.Objectives.Requirements
{ {
public bool CanBeAssigned(EntityUid mindId, MindComponent mind) public bool CanBeAssigned(EntityUid mindId, MindComponent mind)
{ {
var roleSystem = IoCManager.Resolve<IEntityManager>().System<RoleSystem>(); var roleSystem = IoCManager.Resolve<IEntityManager>().System<SharedRoleSystem>();
return roleSystem.MindHasRole<TraitorRoleComponent>(mindId); return roleSystem.MindHasRole<TraitorRoleComponent>(mindId);
} }
} }

View File

@@ -1,6 +1,6 @@
using Content.Server.Instruments; using Content.Server.Instruments;
using Content.Server.Mind.Components;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Mind.Components;
using Content.Shared.PAI; using Content.Shared.PAI;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;

View File

@@ -2,11 +2,12 @@ using System.Linq;
using Content.Server.Afk; using Content.Server.Afk;
using Content.Server.Afk.Events; using Content.Server.Afk.Events;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Roles; using Content.Server.Mind;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Content.Shared.GameTicking; using Content.Shared.GameTicking;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Players;
using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Players.PlayTimeTracking;
using Content.Shared.Roles; using Content.Shared.Roles;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
@@ -27,6 +28,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly IPrototypeManager _prototypes = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly MindSystem _minds = default!;
[Dependency] private readonly PlayTimeTrackingManager _tracking = default!; [Dependency] private readonly PlayTimeTrackingManager _tracking = default!;
public override void Initialize() public override void Initialize()
@@ -103,18 +105,14 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
private void OnRoleRemove(RoleRemovedEvent ev) private void OnRoleRemove(RoleRemovedEvent ev)
{ {
if (ev.Mind.Session == null) if (_minds.TryGetSession(ev.Mind, out var session))
return; _tracking.QueueRefreshTrackers(session);
_tracking.QueueRefreshTrackers(ev.Mind.Session);
} }
private void OnRoleAdd(RoleAddedEvent ev) private void OnRoleAdd(RoleAddedEvent ev)
{ {
if (ev.Mind.Session == null) if (_minds.TryGetSession(ev.Mind, out var session))
return; _tracking.QueueRefreshTrackers(session);
_tracking.QueueRefreshTrackers(ev.Mind.Session);
} }
private void OnRoundEnd(RoundRestartCleanupEvent ev) private void OnRoundEnd(RoundRestartCleanupEvent ev)

View File

@@ -1,59 +1,11 @@
using Content.Server.GameTicking; using Content.Shared.Players;
using Content.Server.Mind;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Network; using Robust.Shared.Players;
namespace Content.Server.Players namespace Content.Server.Players
{ {
/// <summary>
/// Content side for all data that tracks a player session.
/// Use <see cref="PlayerDataExt.ContentData(IPlayerData)"/> to retrieve this from an <see cref="IPlayerData"/>.
/// </summary>
public sealed class PlayerData
{
/// <summary>
/// The session ID of the player owning this data.
/// </summary>
[ViewVariables]
public NetUserId UserId { get; }
/// <summary>
/// This is a backup copy of the player name stored on connection.
/// This is useful in the event the player disconnects.
/// </summary>
[ViewVariables]
public string Name { get; }
/// <summary>
/// The currently occupied mind of the player owning this data.
/// DO NOT DIRECTLY SET THIS UNLESS YOU KNOW WHAT YOU'RE DOING.
/// </summary>
[ViewVariables, Access(typeof(MindSystem), typeof(GameTicker))]
public EntityUid? Mind { get; set; }
/// <summary>
/// If true, the player is an admin and they explicitly de-adminned mid-game,
/// so they should not regain admin if they reconnect.
/// </summary>
public bool ExplicitlyDeadminned { get; set; }
public PlayerData(NetUserId userId, string name)
{
UserId = userId;
Name = name;
}
}
public static class PlayerDataExt public static class PlayerDataExt
{ {
/// <summary>
/// Gets the correctly cast instance of content player data from an engine player data storage.
/// </summary>
public static PlayerData? ContentData(this IPlayerData data)
{
return (PlayerData?) data.ContentDataUncast;
}
/// <summary> /// <summary>
/// Gets the correctly cast instance of content player data from an engine player data storage. /// Gets the correctly cast instance of content player data from an engine player data storage.
/// </summary> /// </summary>
@@ -62,6 +14,11 @@ namespace Content.Server.Players
return session.Data.ContentData(); return session.Data.ContentData();
} }
public static PlayerData? ContentData(this ICommonSession session)
{
return ((IPlayerSession) session).ContentData();
}
/// <summary> /// <summary>
/// Gets the mind that is associated with this player. /// Gets the mind that is associated with this player.
/// </summary> /// </summary>

View File

@@ -0,0 +1,12 @@
using Content.Shared.Players;
using Robust.Shared.Players;
namespace Content.Server.Players;
public sealed class PlayerSystem : SharedPlayerSystem
{
public override PlayerData? ContentData(ICommonSession? session)
{
return session?.ContentData();
}
}

View File

@@ -1,6 +1,5 @@
using System.Linq; using System.Linq;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Mind;
using Content.Server.Pointing.Components; using Content.Server.Pointing.Components;
using Content.Server.Visible; using Content.Server.Visible;
using Content.Shared.Bed.Sleep; using Content.Shared.Bed.Sleep;
@@ -10,6 +9,7 @@ using Content.Shared.IdentityManagement;
using Content.Shared.Input; using Content.Shared.Input;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Interaction.Helpers; using Content.Shared.Interaction.Helpers;
using Content.Shared.Mind;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Pointing; using Content.Shared.Pointing;
using Content.Shared.Popups; using Content.Shared.Popups;
@@ -38,7 +38,7 @@ namespace Content.Server.Pointing.EntitySystems
[Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
[Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly SharedMindSystem _minds = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
private static readonly TimeSpan PointDelay = TimeSpan.FromSeconds(0.5f); private static readonly TimeSpan PointDelay = TimeSpan.FromSeconds(0.5f);

View File

@@ -1,7 +1,6 @@
using Content.Server.Actions; using Content.Server.Actions;
using Content.Server.Humanoid; using Content.Server.Humanoid;
using Content.Server.Inventory; using Content.Server.Inventory;
using Content.Server.Mind;
using Content.Server.Mind.Commands; using Content.Server.Mind.Commands;
using Content.Server.Nutrition; using Content.Server.Nutrition;
using Content.Server.Polymorph.Components; using Content.Server.Polymorph.Components;
@@ -11,6 +10,7 @@ using Content.Shared.Buckle;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Mind;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Polymorph; using Content.Shared.Polymorph;
@@ -41,7 +41,7 @@ namespace Content.Server.Polymorph.Systems
[Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MetaDataSystem _metaData = default!;
private ISawmill _sawmill = default!; private ISawmill _sawmill = default!;

View File

@@ -1,6 +1,6 @@
using Content.Server.Mind.Components;
using Content.Server.Revenant.Components; using Content.Server.Revenant.Components;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Revenant.Components; using Content.Shared.Revenant.Components;

View File

@@ -1,7 +1,7 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Players;
using Content.Server.Roles.Jobs; using Content.Server.Roles.Jobs;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Players;
using Content.Shared.Roles; using Content.Shared.Roles;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;

View File

@@ -1,23 +1,17 @@
using System.Diagnostics.CodeAnalysis; using System.Globalization;
using System.Globalization;
using Content.Server.Chat.Managers; using Content.Server.Chat.Managers;
using Content.Server.Mind; using Content.Server.Mind;
using Content.Server.Players; using Content.Shared.Mind;
using Content.Shared.Roles; using Content.Shared.Roles;
using Robust.Server.Player; using Content.Shared.Roles.Jobs;
using Robust.Shared.Prototypes;
namespace Content.Server.Roles.Jobs; namespace Content.Server.Roles.Jobs;
/// <summary> public sealed class JobSystem : SharedJobSystem
/// Handles the job data on mind entities.
/// </summary>
public sealed class JobSystem : EntitySystem
{ {
[Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly IChatManager _chat = default!;
[Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly MindSystem _minds = default!;
[Dependency] private readonly RoleSystem _roles = default!; [Dependency] private readonly SharedRoleSystem _roles = default!;
[Dependency] private readonly IPrototypeManager _prototypes = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -29,7 +23,7 @@ public sealed class JobSystem : EntitySystem
if (args.Silent) if (args.Silent)
return; return;
if (!_mind.TryGetSession(mindId, out var session)) if (!_minds.TryGetSession(mindId, out var session))
return; return;
if (!MindTryGetJob(mindId, out _, out var prototype)) if (!MindTryGetJob(mindId, out _, out var prototype))
@@ -51,59 +45,4 @@ public sealed class JobSystem : EntitySystem
_roles.MindAddRole(mindId, new JobComponent { PrototypeId = jobPrototypeId }); _roles.MindAddRole(mindId, new JobComponent { PrototypeId = jobPrototypeId });
} }
public bool MindHasJobWithId(EntityUid? mindId, string prototypeId)
{
return CompOrNull<JobComponent>(mindId)?.PrototypeId == prototypeId;
}
public bool MindTryGetJob(
[NotNullWhen(true)] EntityUid? mindId,
[NotNullWhen(true)] out JobComponent? comp,
[NotNullWhen(true)] out JobPrototype? prototype)
{
comp = null;
prototype = null;
return TryComp(mindId, out comp) &&
comp.PrototypeId != null &&
_prototypes.TryIndex(comp.PrototypeId, out prototype);
}
/// <summary>
/// Tries to get the job name for this mind.
/// Returns unknown if not found.
/// </summary>
public bool MindTryGetJobName([NotNullWhen(true)] EntityUid? mindId, out string name)
{
if (MindTryGetJob(mindId, out _, out var prototype))
{
name = prototype.LocalizedName;
return true;
}
name = Loc.GetString("generic-unknown-title");
return false;
}
/// <summary>
/// Tries to get the job name for this mind.
/// Returns unknown if not found.
/// </summary>
public string MindTryGetJobName([NotNullWhen(true)] EntityUid? mindId)
{
MindTryGetJobName(mindId, out var name);
return name;
}
public bool CanBeAntag(IPlayerSession player)
{
if (player.ContentData() is not { Mind: { } mindId })
return false;
if (!MindTryGetJob(mindId, out _, out var prototype))
return true;
return prototype.CanBeAntag;
}
} }

View File

@@ -1,4 +1,6 @@
namespace Content.Server.Roles; using Content.Shared.Roles;
namespace Content.Server.Roles;
/// <summary> /// <summary>
/// Added to mind entities to tag that they are a nuke operative. /// Added to mind entities to tag that they are a nuke operative.

View File

@@ -1,7 +1,8 @@
using Content.Server.Administration; using Content.Server.Administration;
using Content.Server.Players;
using Content.Server.Roles.Jobs;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Players;
using Content.Shared.Roles;
using Content.Shared.Roles.Jobs;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
@@ -43,8 +44,8 @@ namespace Content.Server.Roles
return; return;
} }
var roles = _entityManager.System<RoleSystem>(); var roles = _entityManager.System<SharedRoleSystem>();
var jobs = _entityManager.System<JobSystem>(); var jobs = _entityManager.System<SharedJobSystem>();
if (jobs.MindHasJobWithId(mind, args[1])) if (jobs.MindHasJobWithId(mind, args[1]))
roles.MindRemoveRole<JobComponent>(mind.Value); roles.MindRemoveRole<JobComponent>(mind.Value);
} }

Some files were not shown because too many files have changed in this diff Show More