Files
Aurora.3/code/modules/events/prison_break.dm
fernerr 5e02e38437 Hivebots: The Second Wave (#7002)
Changed the spawning mechanics of hivebots and expanded their roster with three new types, Bomber, Guardian and Harvester.
    Tweaked the slime infestation event to be a bit more colorful and spawn a couple more slimes than currently.
    Made it so infestation events no longer trigger outside the station at shuttle docks,, inside xenobiology cells, substations, at centcomm or outside etc.
    Fixed the prison break event from not working correctly with virology, added a chance for it to happen at the bridge.
    Fixed some announcements missing their custom titles. Particularly those used by random events. Tweaked their font and size.
2019-10-20 00:18:23 +03:00

79 lines
3.5 KiB
Plaintext

/datum/event/prison_break
startWhen = 5
announceWhen = 75
var/releaseWhen = 60
var/list/area/areas = list() //List of areas to affect. Filled by start()
ic_name = "an imprisonment system virus"
no_fake = 1
var/eventDept = "Security" //Department name in announcement
var/list/areaName = list("Brig") //Names of areas mentioned in AI and Engineering announcements
var/list/areaType = list(/area/security/prison, /area/security/brig) //Area types to include.
var/list/areaNotType = list() //Area types to specifically exclude.
/datum/event/prison_break/virology
eventDept = "Medical"
areaName = list("Virology")
areaType = list(/area/medical/virology, /area/medical/virologyaccess, /area/medical/quarantineaccess, /area/medical/quarantine, /area/medical/virologytesting)
/datum/event/prison_break/xenobiology
eventDept = "Science"
areaName = list("Xenobiology")
areaType = list(/area/rnd/xenobiology)
areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage)
/datum/event/prison_break/station
eventDept = "Station"
areaName = list("Brig","Virology","Xenobiology")
areaType = list(/area/security/prison, /area/security/brig, /area/medical/virology, /area/medical/virologyaccess, /area/medical/quarantineaccess, /area/medical/quarantine, /area/medical/virologytesting, /area/rnd/xenobiology)
areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage)
/datum/event/prison_break/bridge
eventDept = "Bridge"
areaName = list("Bridge")
areaType = list(/area/bridge, /area/teleporter, /area/crew_quarters/heads/cryo, /area/maintenance/maintcentral)
areaNotType = list(/area/bridge/aibunker, /area/bridge/levela, /area/bridge/selfdestruct)
/datum/event/prison_break/setup()
announceWhen = rand(75, 105)
releaseWhen = rand(60, 90)
src.endWhen = src.releaseWhen+2
/datum/event/prison_break/announce()
if(areas && areas.len > 0)
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
/datum/event/prison_break/start()
for(var/area/A in the_station_areas)
if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType))
areas += A
if(areas && areas.len > 0)
var/my_department = "[station_name()] firewall subroutines"
var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [worldtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.<br>"
for(var/obj/machinery/message_server/MS in SSmachinery.processing_machines)
MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2)
for(var/mob/living/silicon/ai/A in player_list)
to_chat(A, "<span class='danger'>Malicious program detected in the [english_list(areaName)] lighting and airlock control systems by [my_department].</span>")
else
world.log << "ERROR: Could not initate grey-tide. Unable to find suitable containment area."
kill()
/datum/event/prison_break/tick()
if(activeFor == releaseWhen)
if(areas && areas.len > 0)
for(var/area/A in areas)
for(var/obj/machinery/light/L in A)
L.flicker(10)
/datum/event/prison_break/end()
for(var/area/A in shuffle(areas))
A.prison_break()