Odin Ghost Role Update (#10220)

* Odin Ghost Role Update

* Overhauls Odin Access according to the existing access levels
* Overhauls the get_cetncom_access proc
* Fixes nt ghost roles having complete access to everything (instead of just the station)
* Updates get_cetncom_access with actually used roles
* Updates jobs in get_all_centcom_jobs
* Adds a bartender / chef job to the odin
* Adds a janitor job to the odin
* Adds a medical doctor / pharmacist job to the odin

* * Add two hooks that are called when a emergency/crew transfer is called
* Add a chance that the odin chef / bartender role is enabled upon crew transfer
* Locks down the odin and spawns in the checkpoint security if a crew transfer / emergency shuttle under certain conditions

* * Increases the chef-count to 2
* Removes the produce from the chef-backpack as they have a vending machine full of it.

* * Changes the time when the lockdown occurs / the spawnpoints are enabled to after the transfer shuttle has departed.

* * Let CCIA enable (some of) those roles.

* Galoshes for the Janitor

* * Add logging

Co-authored-by: Werner <Arrow768@users.noreply.github.com>
This commit is contained in:
Werner
2020-10-12 23:06:36 +02:00
committed by GitHub
co-authored by Werner
parent e9120eb134
commit 121569bdf3
9 changed files with 563 additions and 110 deletions
+2
View File
@@ -177,6 +177,8 @@
//Proc to enable the ghostspawner
/datum/ghostspawner/proc/enable()
if(usr)
log_and_message_admins("has enabled the ghostspawner [src.name]")
enabled = TRUE
if(enable_dmessage)
for(var/mob/abstract/observer/O in player_list)
+141 -2
View File
@@ -60,8 +60,8 @@
possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL)
allow_appearance_change = APPEARANCE_PLASTICSURGERY
assigned_role = "Emergency Response Team Commander"
special_role = "ERT Commander"
assigned_role = "CCIA Agent"
special_role = "CCIA Agent"
respawn_flag = null
mob_name = null
@@ -126,6 +126,113 @@
req_perms = R_CCIAA
max_count = 3
/datum/ghostspawner/human/admin/odindoc
short_name = "odindoc"
name = "Odin Medical Doctor"
desc = "Provide medical assistance for those arriving on the Odin."
enabled = FALSE
spawnpoints = list("OdinDoctor")
req_perms = null
req_perms_edit = R_CCIAA
max_count = 4
//Vars related to human mobs
outfit = /datum/outfit/admin/nt/odindoc
possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL)
allow_appearance_change = APPEARANCE_PLASTICSURGERY
assigned_role = "Odin Medical Doctor"
special_role = "Odin Medical Doctor"
respawn_flag = null
mob_name = null
/datum/ghostspawner/human/admin/odinpharm
short_name = "odinpharm"
name = "Odin Pharmacist"
desc = "Provide medication for the Doctors on the Odin and those in need."
enabled = FALSE
spawnpoints = list("OdinPharm")
req_perms = null
req_perms_edit = R_CCIAA
max_count = 1
outfit = /datum/outfit/admin/nt/odinpharm
possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL)
allow_appearance_change = APPEARANCE_PLASTICSURGERY
assigned_role = "Odin Pharmacist"
special_role = "Odin Pharmacist"
respawn_flag = null
mob_name = null
/datum/ghostspawner/human/admin/odinchef
short_name = "odinchef"
name = "Odin Chef"
desc = "Feed starving crew members on the Odin."
enabled = FALSE
spawnpoints = list("OdinChef")
req_perms = null
req_perms_edit = R_CCIAA
max_count = 2
outfit = /datum/outfit/admin/nt/odinchef
possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI)
allow_appearance_change = APPEARANCE_PLASTICSURGERY
assigned_role = "Odin Chef"
special_role = "Odin Chef"
respawn_flag = null
mob_name = null
/datum/ghostspawner/human/admin/odinbartender
short_name = "odinbartender"
name = "Odin Bartender"
desc = "Ensure enough drinks are available to the crew on the Odin."
enabled = FALSE
spawnpoints = list("OdinBartender")
req_perms = null
req_perms_edit = R_CCIAA
max_count = 1
outfit = /datum/outfit/admin/nt/odinbartender
possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI)
allow_appearance_change = APPEARANCE_PLASTICSURGERY
assigned_role = "Odin Bartender"
special_role = "Odin Bartender"
respawn_flag = null
mob_name = null
/datum/ghostspawner/human/admin/odinjanitor
short_name = "odinjanitor"
name = "Odin Sanitation Specialist"
desc = "You are a expert in your field. A true authority. The crew looks to you when they get into a sticky situation. You are a janitor on the Odin."
enabled = FALSE
spawnpoints = list("OdinJanitor")
req_perms = null
max_count = 1
outfit = /datum/outfit/admin/nt/odinjanitor
possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI)
allow_appearance_change = APPEARANCE_PLASTICSURGERY
assigned_role = "Sanitation Specialist"
special_role = "Sanitation Specialist"
respawn_flag = null
mob_name = null
mob_name_prefix = "Spec. "
mob_name_pick_message = "Pick a callsign or last-name."
/datum/ghostspawner/human/admin/tcflsentinel
short_name = "tcflsentinel"
name = "TCFL Sentinel"
@@ -202,3 +309,35 @@
M.ghostize(1)
verbs -= /client/proc/despawn
qdel(M)
/hook/shuttle_moved/proc/setup_odin_for_shuttle(var/obj/effect/shuttle_landmark/start_location, var/obj/effect/shuttle_landmark/destination)
if(start_location.landmark_tag != "nav_emergency_start")
return TRUE
if(emergency_shuttle.evac)
if(get_security_level() != "green" )
var/datum/wifi/sender/door/wifi_sender = new("odin_arrivals_lockdown", SSghostroles)
wifi_sender.activate("close")
qdel(wifi_sender)
if(prob(80))
var/datum/ghostspawner/G = SSghostroles.get_spawner("checkpointsec")
G.enable()
return TRUE
else
if(get_security_level() == "green" && prob(70))
var/datum/ghostspawner/G = SSghostroles.get_spawner("odinchef")
G.enable()
G = SSghostroles.get_spawner("odinbartender")
G.enable()
if(get_security_level() == "blue")
var/datum/wifi/sender/door/wifi_sender = new("odin_arrivals_lockdown", SSghostroles)
wifi_sender.activate("close")
qdel(wifi_sender)
if(prob(50))
var/datum/ghostspawner/G = SSghostroles.get_spawner("checkpointsec")
G.enable()
return TRUE