Make research clients grid-local (#36821)
* Limit RD servers to the station grid * the sluth
This commit is contained in:
@@ -18,10 +18,13 @@ namespace Content.Server.Research.Systems
|
||||
[Dependency] private readonly IAdminLogManager _adminLog = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly AccessReaderSystem _accessReader = default!;
|
||||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly RadioSystem _radio = default!;
|
||||
|
||||
private static readonly HashSet<Entity<ResearchServerComponent>> ClientLookup = new();
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
@@ -34,19 +37,20 @@ namespace Content.Server.Research.Systems
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a server based on it's unique numeric id.
|
||||
/// Gets a server based on its unique numeric id.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="serverUid"></param>
|
||||
/// <param name="serverComponent"></param>
|
||||
/// <returns></returns>
|
||||
public bool TryGetServerById(int id, [NotNullWhen(true)] out EntityUid? serverUid, [NotNullWhen(true)] out ResearchServerComponent? serverComponent)
|
||||
public bool TryGetServerById(EntityUid client, int id, [NotNullWhen(true)] out EntityUid? serverUid, [NotNullWhen(true)] out ResearchServerComponent? serverComponent)
|
||||
{
|
||||
serverUid = null;
|
||||
serverComponent = null;
|
||||
|
||||
var query = EntityQueryEnumerator<ResearchServerComponent>();
|
||||
while (query.MoveNext(out var uid, out var server))
|
||||
var query = GetServers(client).ToList();
|
||||
foreach (var (uid, server) in query)
|
||||
{
|
||||
if (server.Id != id)
|
||||
continue;
|
||||
@@ -61,14 +65,14 @@ namespace Content.Server.Research.Systems
|
||||
/// Gets the names of all the servers.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string[] GetServerNames()
|
||||
public string[] GetServerNames(EntityUid client)
|
||||
{
|
||||
var allServers = EntityQuery<ResearchServerComponent>(true).ToArray();
|
||||
var allServers = GetServers(client).ToArray();
|
||||
var list = new string[allServers.Length];
|
||||
|
||||
for (var i = 0; i < allServers.Length; i++)
|
||||
{
|
||||
list[i] = allServers[i].ServerName;
|
||||
list[i] = allServers[i].Comp.ServerName;
|
||||
}
|
||||
|
||||
return list;
|
||||
@@ -78,19 +82,31 @@ namespace Content.Server.Research.Systems
|
||||
/// Gets the ids of all the servers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public int[] GetServerIds()
|
||||
public int[] GetServerIds(EntityUid client)
|
||||
{
|
||||
var allServers = EntityQuery<ResearchServerComponent>(true).ToArray();
|
||||
var allServers = GetServers(client).ToArray();
|
||||
var list = new int[allServers.Length];
|
||||
|
||||
for (var i = 0; i < allServers.Length; i++)
|
||||
{
|
||||
list[i] = allServers[i].Id;
|
||||
list[i] = allServers[i].Comp.Id;
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public HashSet<Entity<ResearchServerComponent>> GetServers(EntityUid client)
|
||||
{
|
||||
ClientLookup.Clear();
|
||||
|
||||
var clientXform = Transform(client);
|
||||
if (clientXform.GridUid is not { } grid)
|
||||
return ClientLookup;
|
||||
|
||||
_lookup.GetGridEntities(grid, ClientLookup);
|
||||
return ClientLookup;
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
var query = EntityQueryEnumerator<ResearchServerComponent>();
|
||||
|
||||
Reference in New Issue
Block a user