From 73b9aae95d018b92f787ae8716b3b64073cd6469 Mon Sep 17 00:00:00 2001 From: Kyep <16434066+Kyep@users.noreply.github.com> Date: Thu, 3 Dec 2020 18:32:29 +0000 Subject: [PATCH] Terror event spawns now pick players randomly (#15026) * v1 * cleanup * Refactor (AA request) Co-authored-by: Kyep --- code/modules/events/spider_terror.dm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm index ced62a7ed86..36a8d452248 100644 --- a/code/modules/events/spider_terror.dm +++ b/code/modules/events/spider_terror.dm @@ -16,7 +16,10 @@ log_and_message_admins("Warning: Could not spawn any mobs for event Terror Spiders") /datum/event/spider_terror/start() - var/list/vents = get_valid_vent_spawns(exclude_mobs_nearby = TRUE, exclude_visible_by_mobs = TRUE) + // It is necessary to wrap this to avoid the event triggering repeatedly. + INVOKE_ASYNC(src, .proc/wrappedstart) + +/datum/event/spider_terror/proc/wrappedstart() var/spider_type var/infestation_type if((length(GLOB.clients)) < TS_HIGHPOP_TRIGGER) @@ -44,9 +47,15 @@ // Strongest, only used during highpop. spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/queen spawncount = 1 - while(spawncount && length(vents)) + var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a terror spider?", null, TRUE, source = spider_type) + if(length(candidates) < spawncount) + message_admins("Warning: not enough players volunteered to be terrors. Could only spawn [length(candidates)] out of [spawncount]!") + var/list/vents = get_valid_vent_spawns(exclude_mobs_nearby = TRUE, exclude_visible_by_mobs = TRUE) + while(spawncount && length(vents) && length(candidates)) var/obj/vent = pick_n_take(vents) - new spider_type(vent.loc) + var/mob/living/simple_animal/hostile/poison/terror_spider/S = new spider_type(vent.loc) + var/mob/M = pick_n_take(candidates) + S.key = M.key spawncount-- successSpawn = TRUE