From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Thu, 29 Aug 2024 05:27:47 +0000 (+1000) Subject: Fixup playerspawn stuff (#31546) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=f0615ec3c8a4e305a21fa475a0a7fe1204972368;p=space-station-14.git Fixup playerspawn stuff (#31546) * Fixup playerspawn stuff - Also removed arrivals forcing, this should just turn containerspawnpoint off. * fix this one * test fix * really fix --- diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index 5771e0f06c..b08f774271 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -248,14 +248,14 @@ namespace Content.IntegrationTests.Tests var jobs = new HashSet>(comp.SetupAvailableJobs.Keys); var spawnPoints = entManager.EntityQuery() - .Where(x => x.SpawnType == SpawnPointType.Job) - .Select(x => x.Job!.Value); + .Where(x => x.SpawnType == SpawnPointType.Job && x.Job != null) + .Select(x => x.Job.Value); jobs.ExceptWith(spawnPoints); spawnPoints = entManager.EntityQuery() - .Where(x => x.SpawnType == SpawnPointType.Job) - .Select(x => x.Job!.Value); + .Where(x => x.SpawnType is SpawnPointType.Job or SpawnPointType.Unset && x.Job != null) + .Select(x => x.Job.Value); jobs.ExceptWith(spawnPoints); diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 0b86383faa..9b94d6024e 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -11,6 +11,7 @@ using Content.Server.Screens.Components; using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Events; using Content.Server.Spawners.Components; +using Content.Server.Spawners.EntitySystems; using Content.Server.Station.Components; using Content.Server.Station.Events; using Content.Server.Station.Systems; @@ -69,11 +70,6 @@ public sealed class ArrivalsSystem : EntitySystem /// public bool Enabled { get; private set; } - /// - /// Flags if all players must arrive via the Arrivals system, or if they can spawn in other ways. - /// - public bool Forced { get; private set; } - /// /// Flags if all players spawning at the departure terminal have godmode until they leave the terminal. /// @@ -95,6 +91,8 @@ public sealed class ArrivalsSystem : EntitySystem { base.Initialize(); + SubscribeLocalEvent(HandlePlayerSpawning, before: new []{ typeof(ContainerSpawnPointSystem), typeof(SpawnPointSystem)}); + SubscribeLocalEvent(OnStationPostInit); SubscribeLocalEvent(OnShuttleStartup); @@ -112,11 +110,9 @@ public sealed class ArrivalsSystem : EntitySystem // Don't invoke immediately as it will get set in the natural course of things. Enabled = _cfgManager.GetCVar(CCVars.ArrivalsShuttles); - Forced = _cfgManager.GetCVar(CCVars.ForceArrivals); ArrivalsGodmode = _cfgManager.GetCVar(CCVars.GodmodeArrivals); _cfgManager.OnValueChanged(CCVars.ArrivalsShuttles, SetArrivals); - _cfgManager.OnValueChanged(CCVars.ForceArrivals, b => Forced = b); _cfgManager.OnValueChanged(CCVars.GodmodeArrivals, b => ArrivalsGodmode = b); // Command so admins can set these for funsies @@ -339,7 +335,7 @@ public sealed class ArrivalsSystem : EntitySystem return; // Only works on latejoin even if enabled. - if (!Enabled || !Forced && _ticker.RunLevel != GameRunLevel.InRound) + if (!Enabled || _ticker.RunLevel != GameRunLevel.InRound) return; if (!HasComp(ev.Station)) diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index e213f29d07..ef0ece524c 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -15,6 +15,12 @@ public sealed class ContainerSpawnPointSystem : EntitySystem [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(HandlePlayerSpawning, before: new []{ typeof(SpawnPointSystem) }); + } + public void HandlePlayerSpawning(PlayerSpawningEvent args) { if (args.SpawnResult != null) diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index fcbc3aa52f..3090f15880 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -56,27 +56,11 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem private bool _randomizeCharacters; - private Dictionary> _spawnerCallbacks = new(); - /// public override void Initialize() { base.Initialize(); Subs.CVar(_configurationManager, CCVars.ICRandomCharacters, e => _randomizeCharacters = e, true); - - _spawnerCallbacks = new Dictionary>() - { - { SpawnPriorityPreference.Arrivals, _arrivalsSystem.HandlePlayerSpawning }, - { - SpawnPriorityPreference.Cryosleep, ev => - { - if (_arrivalsSystem.Forced) - _arrivalsSystem.HandlePlayerSpawning(ev); - else - _containerSpawnPointSystem.HandlePlayerSpawning(ev); - } - } - }; } /// @@ -98,33 +82,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem var ev = new PlayerSpawningEvent(job, profile, station); - if (station != null && profile != null) - { - // Try to call the character's preferred spawner first. - if (_spawnerCallbacks.TryGetValue(profile.SpawnPriority, out var preferredSpawner)) - { - preferredSpawner(ev); - - foreach (var (key, remainingSpawner) in _spawnerCallbacks) - { - if (key == profile.SpawnPriority) - continue; - - remainingSpawner(ev); - } - } - else - { - // Call all of them in the typical order. - foreach (var typicalSpawner in _spawnerCallbacks.Values) - { - typicalSpawner(ev); - } - } - } - RaiseLocalEvent(ev); - DebugTools.Assert(ev.SpawnResult is { Valid: true } or null); return ev.SpawnResult; diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 4d1ba39a3e..95fb7bd692 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1478,12 +1478,6 @@ namespace Content.Shared.CCVar public static readonly CVarDef ArrivalsReturns = CVarDef.Create("shuttle.arrivals_returns", false, CVar.SERVERONLY); - /// - /// Should all players be forced to spawn at departures, even on roundstart, even if their loadout says they spawn in cryo? - /// - public static readonly CVarDef ForceArrivals = - CVarDef.Create("shuttle.force_arrivals", false, CVar.SERVERONLY); - /// /// Should all players who spawn at arrivals have godmode until they leave the map? /// diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index e1348c7b38..1425531282 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -242,7 +242,6 @@ suffix: Job spawn components: - type: ContainerSpawnPoint - spawnType: Job containerId: station_ai_mind_slot job: StationAi - type: Sprite