From d1faeac8d85b39fb890ba41aeabd622e48986755 Mon Sep 17 00:00:00 2001 From: Kilakk Date: Thu, 6 Jun 2013 17:04:49 -0400 Subject: [PATCH 1/3] Adds emergency response team verb * Adds a verb for (b)admins in "Special Verbs" that lets you spawn in an emergency response team a la deathsquid-button * Spawned-in ERTs can choose their own ridiculous name * Command alerts, because everyone loves those --- baystation12.dme | 1 + code/WorkInProgress/kilakk/responseteam.dm | 186 +++++++++++++++++++++ code/modules/admin/admin_verbs.dm | 3 +- 3 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 code/WorkInProgress/kilakk/responseteam.dm diff --git a/baystation12.dme b/baystation12.dme index 0ea75da44d9..c11959342ae 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1297,6 +1297,7 @@ #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" #include "code\WorkInProgress\Cib\MedicalSideEffects.dm" +#include "code\WorkInProgress\kilakk\responseteam.dm" #include "code\WorkInProgress\Mini\ATM.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Ported\policetape.dm" diff --git a/code/WorkInProgress/kilakk/responseteam.dm b/code/WorkInProgress/kilakk/responseteam.dm new file mode 100644 index 00000000000..dd77afb54ee --- /dev/null +++ b/code/WorkInProgress/kilakk/responseteam.dm @@ -0,0 +1,186 @@ +// emergency response teams +// work in progress + +var/const/members_possible = 5 +var/sent_emergency_team = 0 + +/client/proc/response_team() + set name = "Dispatch Emergency Response Team" + set category = "Special Verbs" + set desc = "Send an emergency response team to the station" + + if(!holder) + usr << "\red Only administrators may use this command." + return + if(!ticker) + usr << "\red The game hasn't started yet!" + return + if(ticker.current_state == GAME_STATE_PREGAME) + usr << "\red The round hasn't started yet!" + return + if(sent_emergency_team == 1) + usr << "\red Central Command has already dispatched an emergency response team!" + return + if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes") + return + if(get_security_level() != "red") // Allow admins to reconsider if the alert level isn't Red + switch(alert("The station has not entered code red recently. Do you still want to dispatch a response team?",,"Yes","No")) + if("No") + return + + var/situation = null + while(!situation) + situation = copytext(sanitize(input(src, "Please specify the mission the emergency response team will undertake.", "Specify Mission", "")),1,MAX_MESSAGE_LEN) + if(!situation) + if(alert("You haven't specified a mission. Exit the setup process?",,"No","Yes")=="Yes") + return + + if(sent_emergency_team) + usr << "\red Looks like somebody beat you to it!" + return + + sent_emergency_team = 1 + message_admins("[key_name_admin(usr)] has dispatched an Emergency Response Team.", 1) + log_admin("[key_name(usr)] used Dispatch Response Team.") + + var/member_number = members_possible + var/leader_selected = 0 + + // Shamelessly stolen nuke code + var/nuke_code + var/temp_code + for(var/obj/machinery/nuclearbomb/N in world) + temp_code = text2num(N.r_code) + if(temp_code) + nuke_code = N.r_code + break + + // Time to pick people! + var/list/candidates = list() // ghosts who can be picked + var/list/members = list() // ghosts who have been picked + for(var/mob/dead/observer/G in player_list) + if(!G.client.holder && !G.client.is_afk()) + if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) + candidates += G.key + for(var/i=members_possible,(i>0&&candidates.len), i--) + var/candidate = input("Choose characters to spawn as response team members. This will go on until there are no more ghosts to pick from or until all slots are full.", "Active Players") as null|anything in candidates + candidates -= candidate + members += candidate + + command_alert("Sensors indicate that [station_name()] has entered Code Red and is in need of assistance. We will prepare and dispatch an emergency response team to deal with the situation.", "NMV Icarus Command") + + for(var/obj/effect/landmark/L in world) + if(L.name == "Response Team") + leader_selected = member_number == 1?1:0 // The last person selected will be the leader + + var/mob/living/carbon/human/new_member = create_response_team(L, leader_selected) + + new_member.age = !leader_selected ? rand(23,35) : rand(35,45) + + if(members.len) + new_member.key = pick(members) + members -= new_member.key + + if(!new_member.key) // It works ok? sort of + del(new_member) + break + + switch(alert(new_member, "You are an Emergency Response Team member! Are you a boy or a girl?",,"Male","Female")) + if("Male") + new_member.gender = MALE + if("Female") + new_member.gender = FEMALE + + var/new_name = input(new_member, "...Erm, what was your name again?", "Choose your name") as text + + if(!new_name) + new_member.real_name = "Agent [pick("Red","Yellow","Orange","Silver","Gold", "Pink", "Purple", "Rainbow")]" // Choose a "random" agent name + new_member.name = usr.real_name + else + new_member.real_name = new_name + new_member.name = new_name + + new_member.dna.ready_dna(new_member) + updateappearance(new_member, new_member.dna.uni_identity) // This is supposed to make you look like a girl if you happened to choose "female". Dunno if there's a better way to do it? + + new_member.mind_initialize() + new_member.mind.assigned_role = "Emergency Response Team" + new_member.mind.special_role = "Emergency Response Team" + ticker.mode.traitors += new_member.mind // ERTs will show up at the end of the round on the "traitor" list + + new_member.mind.store_memory("Mission Parameters: \red [situation].") + + if(leader_selected) + new_member.mind.store_memory("Nuclear Authentication Code: \red [nuke_code]") + + new_member << "\blue You are the Emergency Response Team[!leader_selected?"!":" Leader!"] \nAs a response team [!leader_selected?"member":"leader"] you answer directly to [!leader_selected?"your team leader.":"Central Command."] \nYou have been deployed by NanoTrasen Central Command in Tau Ceti to resolve a Code Red alert aboard [station_name()], and have been provided with the following instructions and information regarding your mission: \red [situation]" + + if(leader_selected) + new_member << "\red The Nuclear Authentication Code is: [nuke_code]. You are instructed not to detonate the nuclear device aboard [station_name()] unless absolutely necessary." + + new_member.equip_response_team(leader_selected) // Start equipping them + + member_number-- + return 1 + +// Mob creation +/client/proc/create_response_team(obj/spawn_location, leader_selected = 0) + var/mob/living/carbon/human/new_member = new(spawn_location.loc) + + return new_member +/* // Couldn't how to figure out how to make fancy do-it-yourself input boxes with all this stuff down + new_member.age = !leader_selected ? rand(23,35) : rand(35,45) + new_member.dna.ready_dna(new_member) + + // Minds + new_member.mind_initialize() + new_member.mind.assigned_role = "Emergency Response Team" + new_member.mind.special_role = "Emergency Response Team" +// ticker.mode.traitors += new_member.mind + + return new_member*/ + +// Equip mob +/mob/living/carbon/human/proc/equip_response_team(leader_selected = 0) + + // Headset + equip_to_slot_or_del(new /obj/item/device/radio/headset/ert(src), slot_ears) + + // Uniform + equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform) + equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(src), slot_shoes) + equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves) + equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(src), slot_belt) + + // Glasses + equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(src), slot_glasses) + + // Backpack + equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back) + + // Put stuff into their backpacks + equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(src), slot_in_backpack) + equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid(src), slot_in_backpack) // Not sure about this + + // Loyalty implants + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src) + L.imp_in = src + L.implanted = 1 + + // ID cards + var/obj/item/weapon/card/id/E = new(src) + E.name = "[real_name]'s ID Card (Emergency Response Team)" + E.icon_state = "centcom" + E.access = get_all_accesses() // ERTs can go everywhere on the station + if(leader_selected) + E.name = "[real_name]'s ID Card (Emergency Response Team Leader)" + E.access += get_all_centcom_access() + E.assignment = "Emergency Response Team Leader" + else + E.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + E.assignment = "Emergency Response Team" + E.registered_name = real_name + equip_to_slot_or_del(E, slot_wear_id) + + return 1 + diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 62b8b84324e..c8ff992b155 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -66,7 +66,8 @@ var/list/admin_verbs_admin = list( /client/proc/toggleattacklogs, /client/proc/toggledebuglogs, /datum/admins/proc/show_skills, - /client/proc/check_customitem_activity + /client/proc/check_customitem_activity, + /client/proc/response_team ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, From 386694376917059c08f66c9badb792195cf253ec Mon Sep 17 00:00:00 2001 From: Kilakk Date: Thu, 6 Jun 2013 17:05:07 -0400 Subject: [PATCH 2/3] Adds the "Response Team" landmark to the ERT room --- maps/tgstation.2.1.0.0.1.dmm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/maps/tgstation.2.1.0.0.1.dmm b/maps/tgstation.2.1.0.0.1.dmm index a9fcddce2ee..30d69bf1239 100644 --- a/maps/tgstation.2.1.0.0.1.dmm +++ b/maps/tgstation.2.1.0.0.1.dmm @@ -7217,7 +7217,7 @@ "cIO" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "cIP" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "cIQ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/briefcase,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) -"cIR" = (/turf/unsimulated/floor{tag = "icon-yellow (NORTHWEST)"; icon_state = "yellow"; dir = 9},/area/centcom/control) +"cIR" = (/obj/effect/landmark{name = "Response Team"; tag = "Response Team"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "cIS" = (/turf/unsimulated/floor{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/centcom/control) "cIT" = (/turf/unsimulated/floor{tag = "icon-whitehall (NORTHWEST)"; icon_state = "whitehall"; dir = 9},/area/centcom/control) "cIU" = (/turf/unsimulated/floor{tag = "icon-whitehall (NORTHEAST)"; icon_state = "whitehall"; dir = 5},/area/centcom/control) @@ -10011,6 +10011,7 @@ "dKA" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_east_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/mine/eva) "dKB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = null},/turf/simulated/floor/plating,/area/mine/living_quarters) "dKC" = (/obj/machinery/door/airlock/external{name = "Mining Shuttle Airlock"; req_access_txt = "48"},/turf/simulated/floor/plating,/area/mine/production) +"dKD" = (/obj/effect/landmark{name = "Response Team"; tag = "Response Team"},/turf/unsimulated/floor{tag = "icon-yellow (NORTHWEST)"; icon_state = "yellow"; dir = 9},/area/centcom/control) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10416,10 +10417,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactjctjctjctjctjctjctjctjctjctjctjctjctjcFycFycFycFycFycFycFycFycFycFycFycFycFycIhcIicIicIhaaaaaaaaacHzcIjcHZcHZcHZcHZcHzcHFcEOcHGcEicEJcEJcGAcEAcEAcEAcEAcEAcEAcEAcEAcEAcGJcEJcEJcEiaaaaaaaaaaaaaaacEicIkcHMcEicIccIlcIccFccHOcHOcHOcHOcHOcHOcEicEOcIecFecFecIfcEOcIgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacImcIncIncIncIncIocIocIncIncIpaaacHzcHZcHZcHZcHZcIqcHzcIrcEOcIscEicEicItcEicEicEicEicEicIucEicEicEicEicEicEicEicEiaaaaaaaaaaaaaaacEicIvcHMcEicFCcFccFccFccHOaaaaaaaaaaaaaaacEicEOcIecFecFecIfcEOcIgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIwcIxcIycIzcIAcIzcIzcIBcICcIncIpcHzcHZcIDcIEcIFcIGcHzcIHcEOcEOcEOcEOcEOcEOcIIcEicEicIJcIJcIJcEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicEicEicEicEicEicEicEicHOaaaaaaaaaaaaaaacIKcEOcIecFecFecIfcEOcIgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIwcIxcIycIzcIzcIzcIzcIzcIzcILcIMcHzcHZcINcIOcIPcIOcHzcIQcEOcIRcIScITcIUcEOcIVcEicEicEicIWcEicEicEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcEOcEOcIYcIYcEOcEOcIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIwcIxcIycIZcIZcIZcIZcIZcIZcIncJacHzcHZcHZcHZcHZcHZcHzcJbcEOcJccJdcJecJfcEOcJgcEicEzcGJcEJcGAcJhcEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicJicEOcEOcEOcEOcJjcEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJkcIncIncIncIncIncIncIncIncJaaaacHzcHzcHzcHzcHzcHzcHzcJlcEOcJmcJncJocJpcEOcJqcEicJrcJscJtcJscJucEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicEicEicEicEicEicEicEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicJvcEOcJwcJxcJycJzcEOcJAcJBcEIcJCcEJcJDcFScHOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJEcJFcJGcJGcJGcJHcJIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIwcIxcIycIzcIzcIzcIzcIzcIzcILcIMcHzcHZcINcIOcIPcIOcHzcIQcIRdKDcIScITcIUcEOcIVcEicEicEicIWcEicEicEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcEOcEOcIYcIYcEOcEOcIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIwcIxcIycIZcIZcIZcIZcIZcIZcIncJacHzcHZcHZcHZcHZcHZcHzcJbcIRcJccJdcJecJfcEOcJgcEicEzcGJcEJcGAcJhcEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicJicEOcEOcEOcEOcJjcEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJkcIncIncIncIncIncIncIncIncJaaaacHzcHzcHzcHzcHzcHzcHzcJlcIRcJmcJncJocJpcEOcJqcEicJrcJscJtcJscJucEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicEicEicEicEicEicEicEiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicJvcIRcJwcJxcJycJzcEOcJAcJBcEIcJCcEJcJDcFScHOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJEcJFcJGcJGcJGcJHcJIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicEOcEOcEOcEOcEOcEOcEOcJJcJBcETcHecGUcHecJKcHOaaaaaaaaaaaaaaaaaaaaaaaaaaacJEcJLcJMcJNcJOcJNcJPcJQcJIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEicJRcJScJTcJUcEOcJVcJWcJXcJBcJYcJZcKacJZcKbcHOaaaaaaaaaaaaaaaaaaaaaaaaaaacKccKdcKecKfcKfcKfcKgcKhcKcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcJBcKicJBcJBcJBcJBcEIcEJcKjcEJcKkcHOcHOcHOaaaaaaaaaaaaaaaaaaaaacKccKlcKecKfcKfcKmcKgcKncKcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From faf5b86e49487180e52913e8fb816139bdd6f601 Mon Sep 17 00:00:00 2001 From: Kilakk Date: Thu, 6 Jun 2013 23:29:15 -0400 Subject: [PATCH 3/3] Changed the way ERTs are selected * Ghosts get a pop-up thingy that asks them if they want to be considered * Ghosts that're antag-banned and/or jobbanned from security officer are exempt * 30 second timer because timers are !!FUN!! --- code/WorkInProgress/kilakk/responseteam.dm | 55 +++++++++++++--------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/code/WorkInProgress/kilakk/responseteam.dm b/code/WorkInProgress/kilakk/responseteam.dm index dd77afb54ee..c5b49537c45 100644 --- a/code/WorkInProgress/kilakk/responseteam.dm +++ b/code/WorkInProgress/kilakk/responseteam.dm @@ -55,17 +55,42 @@ var/sent_emergency_team = 0 nuke_code = N.r_code break - // Time to pick people! - var/list/candidates = list() // ghosts who can be picked +/* var/list/candidates = list() // ghosts who can be picked var/list/members = list() // ghosts who have been picked for(var/mob/dead/observer/G in player_list) if(!G.client.holder && !G.client.is_afk()) if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) candidates += G.key for(var/i=members_possible,(i>0&&candidates.len), i--) - var/candidate = input("Choose characters to spawn as response team members. This will go on until there are no more ghosts to pick from or until all slots are full.", "Active Players") as null|anything in candidates - candidates -= candidate - members += candidate + var/candidate = input("Choose characters to spawn as response team members. This will go on until there are no more ghosts to pick from or until all slots are full.", "Active Players") as null|anything in candidates */ + + // I tried doing this differently. Ghosts get a pop-up box similar to pAIs and one-click-antag + // Biggest diff here is in how the candidates list is updated + alert(usr, "Active ghosts are currently being given a chance to be considered to join the emergency response team. Please wait about 30 seconds.") // There's probably a better way to do this, with a fancy count-down timer or something + + var/list/candidates = list() + var/list/members = list() + var/time_passed = world.time + + for(var/mob/dead/observer/G in player_list) + if(!jobban_isbanned(G, "Syndicate") || !jobban_isbanned(G, "Emergency Response Team") || !jobban_isbanned(G, "Security Officer")) + spawn(0) + switch(alert(G, "Do you want to be considered for the Emergency Response Team? Please answer in 30 seconds!",,"Yes","No")) + if("Yes") + if((world.time-time_passed)>300) + return + candidates += G.key + if("No") + return + else + return + + sleep(300) + + for(var/i=members_possible,(i>0&&candidates.len), i--) // The rest of the choosing process is just an input with a list of candidates on it + var/chosen = input("Time's up! Choose characters to spawn as reponse team members. This will go on until there are no more ghosts to pick from or until all slots are full.", "Considered Players") as null|anything in candidates + candidates -= chosen + members += chosen command_alert("Sensors indicate that [station_name()] has entered Code Red and is in need of assistance. We will prepare and dispatch an emergency response team to deal with the situation.", "NMV Icarus Command") @@ -101,22 +126,19 @@ var/sent_emergency_team = 0 new_member.name = new_name new_member.dna.ready_dna(new_member) - updateappearance(new_member, new_member.dna.uni_identity) // This is supposed to make you look like a girl if you happened to choose "female". Dunno if there's a better way to do it? + new_member.update_body(1) new_member.mind_initialize() new_member.mind.assigned_role = "Emergency Response Team" new_member.mind.special_role = "Emergency Response Team" ticker.mode.traitors += new_member.mind // ERTs will show up at the end of the round on the "traitor" list + new_member << "\blue You are the Emergency Response Team[!leader_selected?"!":" Leader!"] \nAs a response team [!leader_selected?"member":"leader"] you answer directly to [!leader_selected?"your team leader.":"Central Command."] \nYou have been deployed by NanoTrasen Central Command in Tau Ceti to resolve a Code Red alert aboard [station_name()], and have been provided with the following instructions and information regarding your mission: \red [situation]" new_member.mind.store_memory("Mission Parameters: \red [situation].") - if(leader_selected) - new_member.mind.store_memory("Nuclear Authentication Code: \red [nuke_code]") - - new_member << "\blue You are the Emergency Response Team[!leader_selected?"!":" Leader!"] \nAs a response team [!leader_selected?"member":"leader"] you answer directly to [!leader_selected?"your team leader.":"Central Command."] \nYou have been deployed by NanoTrasen Central Command in Tau Ceti to resolve a Code Red alert aboard [station_name()], and have been provided with the following instructions and information regarding your mission: \red [situation]" - if(leader_selected) new_member << "\red The Nuclear Authentication Code is: [nuke_code]. You are instructed not to detonate the nuclear device aboard [station_name()] unless absolutely necessary." + new_member.mind.store_memory("Nuclear Authentication Code: \red [nuke_code]") new_member.equip_response_team(leader_selected) // Start equipping them @@ -128,17 +150,6 @@ var/sent_emergency_team = 0 var/mob/living/carbon/human/new_member = new(spawn_location.loc) return new_member -/* // Couldn't how to figure out how to make fancy do-it-yourself input boxes with all this stuff down - new_member.age = !leader_selected ? rand(23,35) : rand(35,45) - new_member.dna.ready_dna(new_member) - - // Minds - new_member.mind_initialize() - new_member.mind.assigned_role = "Emergency Response Team" - new_member.mind.special_role = "Emergency Response Team" -// ticker.mode.traitors += new_member.mind - - return new_member*/ // Equip mob /mob/living/carbon/human/proc/equip_response_team(leader_selected = 0)