diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 2e7f878e98..ec98faf2d4 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -607,32 +607,30 @@ var/global/datum/controller/occupations/job_master
tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|YOUNG=[level6]|-"
feedback_add_details("job_preferences",tmp_str)
-/datum/controller/occupations/proc/LateSpawn(var/mob/living/carbon/human/H, var/rank)
- //spawn at one of the latespawn locations
+/datum/controller/occupations/proc/LateSpawn(var/client/C, var/rank)
var/datum/spawnpoint/spawnpos
-// if(H.client.prefs.spawnpoint)
-// spawnpos = spawntypes[H.client.prefs.spawnpoint]
-
- if(H.client.prefs.spawnpoint)
- if(!(H.client.prefs.spawnpoint in using_map.allowed_spawns))
- if(H) // This seems redundant...
- to_chat(H, "Your chosen spawnpoint ([H.client.prefs.spawnpoint]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead.")
+ //Spawn them at their preferred one
+ if(C.prefs.spawnpoint)
+ if(!(C.prefs.spawnpoint in using_map.allowed_spawns))
+ to_chat(C, "Your chosen spawnpoint ([C.prefs.spawnpoint]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead.")
spawnpos = null
else
- spawnpos = spawntypes[H.client.prefs.spawnpoint]
+ spawnpos = spawntypes[C.prefs.spawnpoint]
+ //We will return a list key'd by "turf" and "msg"
+ . = list("turf","msg")
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
if(spawnpos.check_job_spawning(rank))
- H.forceMove(spawnpos.get_spawn_position())
- . = spawnpos.msg
+ .["turf"] = spawnpos.get_spawn_position()
+ .["msg"] = spawnpos.msg
else
- H << "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead."
+ to_chat(C,"Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.")
var/spawning = pick(latejoin)
- H.forceMove(get_turf(spawning))
- . = "will arrive to the station shortly by shuttle"
+ .["turf"] = get_turf(spawning)
+ .["msg"] = "will arrive to the station shortly by shuttle"
else
var/spawning = pick(latejoin)
- H.forceMove(get_turf(spawning))
- . = "has arrived on the station"
+ .["turf"] = get_turf(spawning)
+ .["msg"] = "has arrived on the station"
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 25f2f15108..37b6d77a9e 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -326,13 +326,23 @@
if(!IsJobAvailable(rank))
src << alert("[rank] is not available. Please try another.")
return 0
+ if(!client)
+ return 0
+
+ //Find our spawning point.
+ var/list/join_props = job_master.LateSpawn(client, rank)
+ var/turf/T = join_props["turf"]
+ var/join_message = join_props["msg"]
+
+ if(!T || !join_message)
+ return 0
spawning = 1
close_spawn_windows()
job_master.AssignRole(src, rank, 1)
- var/mob/living/character = create_character() //creates the human and transfers vars and mind
+ var/mob/living/character = create_character(T) //creates the human and transfers vars and mind
character = job_master.EquipRank(character, rank, 1) //equips the human
UpdateFactionList(character)
@@ -354,14 +364,11 @@
qdel(src)
return
- //Find our spawning point.
- var/join_message = job_master.LateSpawn(character, rank)
// Equip our custom items only AFTER deploying to spawn points eh?
equip_custom_items(character)
character.apply_traits()
- character.lastarea = get_area(loc)
// Moving wheelchair if they have one
if(character.buckled && istype(character.buckled, /obj/structure/bed/chair/wheelchair))
character.buckled.loc = character.loc
@@ -419,7 +426,7 @@
src << browse(dat, "window=latechoices;size=300x640;can_close=1")
-/mob/new_player/proc/create_character()
+/mob/new_player/proc/create_character(var/turf/T)
spawning = 1
close_spawn_windows()
@@ -434,12 +441,12 @@
if(chosen_species && use_species_name)
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
if(is_alien_whitelisted(chosen_species))
- new_character = new(loc, use_species_name)
+ new_character = new(T, use_species_name)
if(!new_character)
- new_character = new(loc)
+ new_character = new(T)
- new_character.lastarea = get_area(loc)
+ new_character.lastarea = get_area(T)
if(ticker.random_players)
new_character.gender = pick(MALE, FEMALE)