From d021604f4296bf75284f1ffd421a9f74d4fa44e6 Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Wed, 26 Nov 2025 22:54:43 +0100 Subject: [PATCH] Make gameticker spawn code more modular (#41588) gameticker dospawn --- .../GameTicking/GameTicker.Spawning.cs | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 2338d4f1fe..007f0d3597 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -254,28 +254,7 @@ namespace Content.Server.GameTicking return; } - PlayerJoinGame(player, silent); - - var data = player.ContentData(); - - DebugTools.AssertNotNull(data); - - var newMind = _mind.CreateMind(data!.UserId, character.Name); - _mind.SetUserId(newMind, data.UserId); - - var jobPrototype = _prototypeManager.Index(jobId); - - _playTimeTrackings.PlayerRolesChanged(player); - - var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character); - DebugTools.AssertNotNull(mobMaybe); - var mob = mobMaybe!.Value; - - _mind.TransferTo(newMind, mob); - - _roles.MindAddJobRole(newMind, silent: silent, jobPrototype: jobId); - var jobName = _jobs.MindTryGetJobName(newMind); - _admin.UpdatePlayerList(player); + DoSpawn(player, character, station, jobId, silent, out var mob, out var jobPrototype, out var jobName); if (lateJoin && !silent) { @@ -348,6 +327,43 @@ namespace Content.Server.GameTicking RaiseLocalEvent(mob, aev, true); } + /// + /// Creates a mob on the specified station, creates the new mind, equips job-specific starting gear and loadout + /// + public void DoSpawn( + ICommonSession player, + HumanoidCharacterProfile character, + EntityUid station, + string jobId, + bool silent, + out EntityUid mob, + out JobPrototype jobPrototype, + out string jobName) + { + PlayerJoinGame(player, silent); + + var data = player.ContentData(); + + DebugTools.AssertNotNull(data); + + var newMind = _mind.CreateMind(data!.UserId, character.Name); + _mind.SetUserId(newMind, data.UserId); + + jobPrototype = _prototypeManager.Index(jobId); + + _playTimeTrackings.PlayerRolesChanged(player); + + var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character); + DebugTools.AssertNotNull(mobMaybe); + mob = mobMaybe!.Value; + + _mind.TransferTo(newMind, mob); + + _roles.MindAddJobRole(newMind, silent: silent, jobPrototype: jobId); + jobName = _jobs.MindTryGetJobName(newMind); + _admin.UpdatePlayerList(player); + } + public void Respawn(ICommonSession player) { _mind.WipeMind(player); -- 2.52.0