mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-22 19:48:25 +01:00
250 lines
6.8 KiB
Plaintext
250 lines
6.8 KiB
Plaintext
/obj/landmark/spawnpoint
|
|
name = "unknown spawnpoint"
|
|
icon = 'icons/mapping/landmarks/spawnpoints.dmi'
|
|
icon_state = ""
|
|
/// prevent stacking of mobs
|
|
var/prevent_mob_stack = TRUE
|
|
/// Spawns left
|
|
var/spawns_left = INFINITY
|
|
/// Number of spawns currently
|
|
var/spawned = 0
|
|
/// Delete on depletion
|
|
var/delete_after_depleted = FALSE
|
|
/// Priority - landmark is binary inserted on register/unregister. Lower numbers are higher priority.
|
|
var/priority = 0
|
|
/// default spawn announce text - allowed are %NAME%, %JOB% - for more complex, override RenderAnnounceMessage()
|
|
var/announce_template = "%NAME%, %JOB% will arrive shortly."
|
|
|
|
/obj/landmark/spawnpoint/Initialize(mapload)
|
|
Register()
|
|
return ..()
|
|
|
|
/obj/landmark/spawnpoint/Destroy()
|
|
Unregister()
|
|
return ..()
|
|
|
|
/obj/landmark/spawnpoint/forceMove(atom/destination)
|
|
Unregister()
|
|
. = ..()
|
|
Register()
|
|
|
|
/obj/landmark/spawnpoint/vv_edit_var(var_name, var_value, massedit)
|
|
if(var_name == NAMEOF(src, priority))
|
|
Unregister()
|
|
. = ..()
|
|
if(var_name == NAMEOF(src, priority))
|
|
Register()
|
|
|
|
|
|
/obj/landmark/spawnpoint/proc/Register()
|
|
SHOULD_CALL_PARENT(TRUE)
|
|
SSjob.spawnpoints += src
|
|
|
|
/obj/landmark/spawnpoint/proc/Unregister()
|
|
SHOULD_CALL_PARENT(TRUE)
|
|
SSjob.spawnpoints -= src
|
|
|
|
/obj/landmark/spawnpoint/proc/AutoListRegister(list/L)
|
|
if(src in L)
|
|
return
|
|
BINARY_INSERT(src, L, /obj/landmark/spawnpoint, src, priority, COMPARE_KEY)
|
|
|
|
/obj/landmark/spawnpoint/proc/AutoListUnregister(list/L)
|
|
if(!L)
|
|
return
|
|
L -= src
|
|
|
|
/**
|
|
* Gets the spawn location of this spawnpoint
|
|
* This should usually be underneath it, as this is where the mob will be created/moved.
|
|
*/
|
|
/obj/landmark/spawnpoint/proc/GetSpawnLoc()
|
|
if(!loc)
|
|
stack_trace("Landmark: Null loc detected on GetSpawnLoc().")
|
|
return loc
|
|
|
|
/**
|
|
* Called after the mob is created/moved to the spawnpoint.
|
|
*
|
|
* @params
|
|
* - M - the mob that was spawned
|
|
* - C - (optional) - the client of the player
|
|
*/
|
|
/obj/landmark/spawnpoint/proc/OnSpawn(mob/M, client/C)
|
|
spawns_left = max(0, spawns_left - 1)
|
|
++spawned
|
|
|
|
/**
|
|
* Called to check if this spawnpoint is available for a certain mob and client
|
|
*
|
|
* @params
|
|
* - M - (optional) - the mob being spawned. This is null during latejoins and other instances where the mob is
|
|
* made when there is a spawnpoint, as opposed to roundstart creating all mobs at once
|
|
* - C - (optional) - the client of the player
|
|
* - harder - ignore checks like prevent_mob_stack
|
|
*/
|
|
/obj/landmark/spawnpoint/proc/Available(mob/M, client/C, harder = FALSE)
|
|
if(!spawns_left)
|
|
return FALSE
|
|
if(prevent_mob_stack && M && !harder)
|
|
if(ishuman(M) && (locate(/mob/living/carbon/human) in GetSpawnLoc()))
|
|
return FALSE
|
|
else if(locate(M.type) in GetSpawnLoc())
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/**
|
|
* Used first priority for job spawning
|
|
*/
|
|
/obj/landmark/spawnpoint/job
|
|
name = "unknown job spawnpoint"
|
|
icon = 'icons/mapping/landmarks/job_spawnpoints.dmi'
|
|
spawns_left = 1
|
|
/// Job path
|
|
var/job_path
|
|
/// Roundstart?
|
|
var/roundstart = TRUE
|
|
/// Latejoin?
|
|
var/latejoin = FALSE
|
|
/// Latejoin method - if there's more than one registered method available, a player may choose which one to use
|
|
var/method = LATEJOIN_METHOD_DEFAULT
|
|
/// Overrides all latejoin spawnpoints even if methods mismatch
|
|
var/latejoin_override = FALSE
|
|
|
|
/obj/landmark/spawnpoint/job/Register()
|
|
. = ..()
|
|
if(!job_path)
|
|
return
|
|
LAZYINITLIST(SSjob.job_spawnpoints)
|
|
LAZYINITLIST(SSjob.job_spawnpoints[job_path])
|
|
AutoListRegister(SSjob.job_spawnpoints[job_path])
|
|
|
|
/obj/landmark/spawnpoint/job/Unregister()
|
|
. = ..()
|
|
if(!job_path)
|
|
return
|
|
AutoListUnregister(SSjob.job_spawnpoints[job_path])
|
|
|
|
/**
|
|
* renders a html message for someone joining
|
|
* usually only called on latejoining
|
|
*
|
|
* @params
|
|
* M - mob
|
|
* C - client (optional)
|
|
* J - job datum instance (optional)
|
|
* name - spawnee's name
|
|
* job_name - job's name - useful for alt titles
|
|
*/
|
|
/obj/landmark/spawnpoint/proc/RenderAnnounceMessage(mob/M, client/C, datum/prototype/role/job/J, name, job_name)
|
|
return "[name || "Unknown"] will arrive shortly."
|
|
|
|
/**
|
|
* special announce proc - text usually broadcasted is sent here, raw, from RenderAnnounceMessage
|
|
*
|
|
* if this returns TRUE, regular announce is skipped.
|
|
*/
|
|
/obj/landmark/spawnpoint/proc/OverrideAnnounceMessage(raw)
|
|
return !length(announce_template) // by default, if announce template is empty, this will prevent announce!
|
|
|
|
/obj/landmark/spawnpoint/job/vv_edit_var(var_name, var_value, massedit)
|
|
if(var_name == NAMEOF(src, job_path))
|
|
Register()
|
|
. = ..()
|
|
if(var_name == NAMEOF(src, job_path))
|
|
Unregister()
|
|
|
|
/**
|
|
* Used when there's no job specific latejoin spawnpoints
|
|
*/
|
|
/obj/landmark/spawnpoint/latejoin
|
|
name = "unknown latejoin spawnpoint"
|
|
/// Faction
|
|
var/faction
|
|
/// Method - if there's more than one registered method available, a player may choose which one to use
|
|
var/method = LATEJOIN_METHOD_DEFAULT
|
|
|
|
/obj/landmark/spawnpoint/latejoin/Register()
|
|
. = ..()
|
|
if(!faction)
|
|
return
|
|
LAZYINITLIST(SSjob.latejoin_spawnpoints)
|
|
LAZYINITLIST(SSjob.latejoin_spawnpoints[faction])
|
|
AutoListRegister(SSjob.latejoin_spawnpoints[faction])
|
|
|
|
/obj/landmark/spawnpoint/latejoin/Unregister()
|
|
. = ..()
|
|
if(!faction)
|
|
return
|
|
AutoListUnregister(SSjob.latejoin_spawnpoints[faction])
|
|
|
|
/obj/landmark/spawnpoint/latejoin/vv_edit_var(var_name, var_value, massedit)
|
|
if(var_name == NAMEOF(src, faction))
|
|
Register()
|
|
. = ..()
|
|
if(var_name == NAMEOF(src, faction))
|
|
Unregister()
|
|
|
|
/obj/landmark/spawnpoint/latejoin/RenderAnnounceMessage(mob/M, client/C, name, job_name)
|
|
. = announce_template
|
|
. = replacetext(., "%NAME%", name)
|
|
. = replacetext(., "%JOB%", job_name)
|
|
|
|
/**
|
|
* Used when all other spawnpoints are unavailable
|
|
*/
|
|
/obj/landmark/spawnpoint/overflow
|
|
name = "unknown overflow spawnpoint"
|
|
/// Faction
|
|
var/faction
|
|
|
|
/obj/landmark/spawnpoint/overflow/Register()
|
|
. = ..()
|
|
if(!faction)
|
|
return
|
|
LAZYINITLIST(SSjob.overflow_spawnpoints)
|
|
LAZYINITLIST(SSjob.overflow_spawnpoints[faction])
|
|
AutoListRegister(SSjob.overflow_spawnpoints[faction])
|
|
|
|
/obj/landmark/spawnpoint/overflow/Unregister()
|
|
. = ..()
|
|
if(!faction)
|
|
return
|
|
AutoListUnregister(SSjob.overflow_spawnpoints[faction])
|
|
|
|
/obj/landmark/spawnpoint/overflow/vv_edit_var(var_name, var_value, massedit)
|
|
if(var_name == NAMEOF(src, faction))
|
|
Register()
|
|
. = ..()
|
|
if(var_name == NAMEOF(src, faction))
|
|
Unregister()
|
|
|
|
/**
|
|
* Custom keyed list spawnpoint supplier
|
|
*/
|
|
/obj/landmark/spawnpoint/custom
|
|
name = "unknown custom spawnpoint"
|
|
/// Key
|
|
var/key
|
|
|
|
/obj/landmark/spawnpoint/custom/Register()
|
|
. = ..()
|
|
if(!key)
|
|
return
|
|
LAZYINITLIST(SSjob.custom_spawnpoints)
|
|
LAZYINITLIST(SSjob.custom_spawnpoints[key])
|
|
AutoListRegister(SSjob.custom_spawnpoints[key])
|
|
|
|
/obj/landmark/spawnpoint/custom/Unregister()
|
|
. = ..()
|
|
if(!key)
|
|
return
|
|
AutoListUnregister(SSjob.custom_spawnpoints[key])
|
|
|
|
/obj/landmark/spawnpoint/custom/vv_edit_var(var_name, var_value, massedit)
|
|
if(var_name == NAMEOF(src, key))
|
|
Register()
|
|
. = ..()
|
|
if(var_name == NAMEOF(src, key))
|
|
Unregister()
|