Content update for NetEntities (#18935)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Content.Server.Access.Systems;
|
||||
using Content.Server.Administration;
|
||||
using Content.Server.Administration.Systems;
|
||||
@@ -17,6 +18,9 @@ namespace Content.Server.Mind.Commands;
|
||||
[AdminCommand(AdminFlags.VarEdit)]
|
||||
public sealed class RenameCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IEntityManager _entManager = default!;
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
|
||||
public string Command => "rename";
|
||||
public string Description => "Renames an entity and its cloner entries, ID cards, and PDAs.";
|
||||
public string Help => "rename <Username|EntityUid> <New character name>";
|
||||
@@ -36,53 +40,53 @@ public sealed class RenameCommand : IConsoleCommand
|
||||
return;
|
||||
}
|
||||
|
||||
var entMan = IoCManager.Resolve<IEntityManager>();
|
||||
|
||||
if (!TryParseUid(args[0], shell, entMan, out var entityUid))
|
||||
if (!TryParseUid(args[0], shell, _entManager, out var entityUid))
|
||||
return;
|
||||
|
||||
// Metadata
|
||||
var metadata = entMan.GetComponent<MetaDataComponent>(entityUid);
|
||||
var metadata = _entManager.GetComponent<MetaDataComponent>(entityUid.Value);
|
||||
var oldName = metadata.EntityName;
|
||||
entMan.System<MetaDataSystem>().SetEntityName(entityUid, name, metadata);
|
||||
_entManager.System<MetaDataSystem>().SetEntityName(entityUid.Value, name, metadata);
|
||||
|
||||
var minds = entMan.System<SharedMindSystem>();
|
||||
var minds = _entManager.System<SharedMindSystem>();
|
||||
|
||||
if (minds.TryGetMind(entityUid, out var mindId, out var mind))
|
||||
if (minds.TryGetMind(entityUid.Value, out var mindId, out var mind))
|
||||
{
|
||||
// Mind
|
||||
mind.CharacterName = name;
|
||||
}
|
||||
|
||||
// Id Cards
|
||||
if (entMan.TrySystem<IdCardSystem>(out var idCardSystem))
|
||||
if (_entManager.TrySystem<IdCardSystem>(out var idCardSystem))
|
||||
{
|
||||
if (idCardSystem.TryFindIdCard(entityUid, out var idCard))
|
||||
if (idCardSystem.TryFindIdCard(entityUid.Value, out var idCard))
|
||||
{
|
||||
idCardSystem.TryChangeFullName(idCard.Owner, name, idCard);
|
||||
|
||||
// Records
|
||||
// This is done here because ID cards are linked to station records
|
||||
if (entMan.TrySystem<StationRecordsSystem>(out var recordsSystem)
|
||||
&& entMan.TryGetComponent(idCard.Owner, out StationRecordKeyStorageComponent? keyStorage)
|
||||
if (_entManager.TrySystem<StationRecordsSystem>(out var recordsSystem)
|
||||
&& _entManager.TryGetComponent(idCard.Owner, out StationRecordKeyStorageComponent? keyStorage)
|
||||
&& keyStorage.Key != null)
|
||||
{
|
||||
if (recordsSystem.TryGetRecord<GeneralStationRecord>(keyStorage.Key.Value.OriginStation,
|
||||
var origin = keyStorage.Key.Value.OriginStation;
|
||||
|
||||
if (recordsSystem.TryGetRecord<GeneralStationRecord>(origin,
|
||||
keyStorage.Key.Value,
|
||||
out var generalRecord))
|
||||
{
|
||||
generalRecord.Name = name;
|
||||
}
|
||||
|
||||
recordsSystem.Synchronize(keyStorage.Key.Value.OriginStation);
|
||||
recordsSystem.Synchronize(origin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PDAs
|
||||
if (entMan.TrySystem<PdaSystem>(out var pdaSystem))
|
||||
if (_entManager.TrySystem<PdaSystem>(out var pdaSystem))
|
||||
{
|
||||
var query = entMan.EntityQueryEnumerator<PdaComponent>();
|
||||
var query = _entManager.EntityQueryEnumerator<PdaComponent>();
|
||||
while (query.MoveNext(out var uid, out var pda))
|
||||
{
|
||||
if (pda.OwnerName == oldName)
|
||||
@@ -93,21 +97,20 @@ public sealed class RenameCommand : IConsoleCommand
|
||||
}
|
||||
|
||||
// Admin Overlay
|
||||
if (entMan.TrySystem<AdminSystem>(out var adminSystem)
|
||||
&& entMan.TryGetComponent<ActorComponent>(entityUid, out var actorComp))
|
||||
if (_entManager.TrySystem<AdminSystem>(out var adminSystem)
|
||||
&& _entManager.TryGetComponent<ActorComponent>(entityUid, out var actorComp))
|
||||
{
|
||||
adminSystem.UpdatePlayerList(actorComp.PlayerSession);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryParseUid(string str, IConsoleShell shell,
|
||||
IEntityManager entMan, out EntityUid entityUid)
|
||||
private bool TryParseUid(string str, IConsoleShell shell,
|
||||
IEntityManager entMan, [NotNullWhen(true)] out EntityUid? entityUid)
|
||||
{
|
||||
if (EntityUid.TryParse(str, out entityUid) && entMan.EntityExists(entityUid))
|
||||
if (NetEntity.TryParse(str, out var entityUidNet) && _entManager.TryGetEntity(entityUidNet, out entityUid) && entMan.EntityExists(entityUid))
|
||||
return true;
|
||||
|
||||
var playerMan = IoCManager.Resolve<IPlayerManager>();
|
||||
if (playerMan.TryGetSessionByUsername(str, out var session) && session.AttachedEntity.HasValue)
|
||||
if (_playerManager.TryGetSessionByUsername(str, out var session) && session.AttachedEntity.HasValue)
|
||||
{
|
||||
entityUid = session.AttachedEntity.Value;
|
||||
return true;
|
||||
@@ -117,6 +120,8 @@ public sealed class RenameCommand : IConsoleCommand
|
||||
shell.WriteError("Can't find username/uid: " + str);
|
||||
else
|
||||
shell.WriteError(str + " does not have an entity.");
|
||||
|
||||
entityUid = EntityUid.Invalid;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user