mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 15:45:25 +01:00
Refactors false alarms (#22010)
* rework anomalies * oh yeah, events, too. * does remaining events * fixes most issues * oops * this too * ensures traders actually fake announce properly * fix tear * missing return * And another missing return
This commit is contained in:
@@ -278,7 +278,7 @@
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
var/announce_ion_laws = (show_log == "Yes" ? 1 : -1)
|
||||
|
||||
new /datum/event/ion_storm(0, announce_ion_laws)
|
||||
new /datum/event/ion_storm(botEmagChance = 0, announceEvent = announce_ion_laws)
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Add Random AI Law") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggle_antagHUD_use()
|
||||
@@ -584,7 +584,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
var/announce_ion_laws = (show_log == "Yes" ? 1 : -1)
|
||||
|
||||
new /datum/event/ion_storm(0, announce_ion_laws, input)
|
||||
new /datum/event/ion_storm(botEmagChance = 0, announceEvent = announce_ion_laws, ionMessage = input)
|
||||
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Add Custom AI Law") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
/datum/event/alien_infestation/setup()
|
||||
announceWhen = rand(announceWhen, announceWhen + 50)
|
||||
|
||||
/datum/event/alien_infestation/announce()
|
||||
if(successSpawn)
|
||||
/datum/event/alien_infestation/announce(false_alarm)
|
||||
if(successSpawn || false_alarm)
|
||||
GLOB.major_announcement.Announce("Confirmed outbreak of level 3-X biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak3.ogg')
|
||||
else
|
||||
log_and_message_admins("Warning: Could not spawn any mobs for event Alien Infestation")
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
startWhen = 3
|
||||
announceWhen = 10
|
||||
anomaly_path = /obj/effect/anomaly/bluespace
|
||||
|
||||
/datum/event/anomaly/anomaly_bluespace/announce()
|
||||
GLOB.minor_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_bluespace.ogg')
|
||||
prefix_message = "Unstable bluespace anomaly detected on long range scanners."
|
||||
announce_sound = 'sound/AI/anomaly_bluespace.ogg'
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
startWhen = 3
|
||||
announceWhen = 10
|
||||
anomaly_path = /obj/effect/anomaly/cryo
|
||||
|
||||
/datum/event/anomaly/anomaly_cryo/announce()
|
||||
GLOB.minor_announcement.Announce("Cryogenic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_pyro.ogg')
|
||||
prefix_message = "Cryogenic anomaly detected on long range scanners."
|
||||
announce_sound = 'sound/AI/anomaly_pyro.ogg'
|
||||
|
||||
@@ -5,25 +5,43 @@
|
||||
var/obj/effect/anomaly/anomaly_path = /obj/effect/anomaly/flux
|
||||
var/turf/target_turf
|
||||
announceWhen = 1
|
||||
/// The prefix message for the anomaly annoucement.
|
||||
var/prefix_message = "Localized hyper-energetic flux wave detected on long range scanners."
|
||||
/// Sound effect used
|
||||
var/announce_sound = 'sound/AI/anomaly_flux.ogg'
|
||||
|
||||
|
||||
/datum/event/anomaly/setup()
|
||||
target_turf = find_targets(TRUE)
|
||||
|
||||
/datum/event/anomaly/proc/find_targets(warn_on_fail = FALSE)
|
||||
var/turf/target
|
||||
for(var/tries in 0 to TURF_FIND_TRIES)
|
||||
impact_area = findEventArea()
|
||||
if(!impact_area)
|
||||
CRASH("No valid areas for anomaly found.")
|
||||
if(warn_on_fail)
|
||||
CRASH("No valid areas for anomaly found.")
|
||||
else
|
||||
return
|
||||
var/list/candidate_turfs = get_area_turfs(impact_area)
|
||||
while(length(candidate_turfs))
|
||||
var/turf/candidate = pick_n_take(candidate_turfs)
|
||||
if(!is_blocked_turf(candidate,TRUE))
|
||||
target_turf = candidate
|
||||
target = candidate
|
||||
break
|
||||
if(target_turf)
|
||||
break
|
||||
if(!target_turf)
|
||||
CRASH("Anomaly: Unable to find a valid turf to spawn the anomaly. Last area tried: [impact_area] - [impact_area.type]")
|
||||
|
||||
/datum/event/anomaly/announce()
|
||||
GLOB.minor_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg')
|
||||
return target
|
||||
|
||||
/datum/event/anomaly/announce(false_alarm)
|
||||
var/area/target = false_alarm ? findEventArea() : impact_area
|
||||
if(false_alarm && !target)
|
||||
log_debug("Failed to find a valid area when trying to make a false alarm anomaly!")
|
||||
return
|
||||
GLOB.minor_announcement.Announce("[prefix_message] Expected location: [target.name].", "Anomaly Alert", announce_sound)
|
||||
|
||||
/datum/event/anomaly/start()
|
||||
var/newAnomaly = new anomaly_path(target_turf)
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
startWhen = 10
|
||||
announceWhen = 3
|
||||
anomaly_path = /obj/effect/anomaly/flux
|
||||
|
||||
/datum/event/anomaly/anomaly_flux/announce()
|
||||
GLOB.minor_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg')
|
||||
prefix_message = "Localized hyper-energetic flux wave detected on long range scanners."
|
||||
announce_sound = 'sound/AI/anomaly_flux.ogg'
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
startWhen = 3
|
||||
announceWhen = 20
|
||||
anomaly_path = /obj/effect/anomaly/grav
|
||||
|
||||
/datum/event/anomaly/anomaly_grav/announce()
|
||||
GLOB.minor_announcement.Announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_gravity.ogg')
|
||||
prefix_message = "Gravitational anomaly detected on long range scanners."
|
||||
announce_sound = 'sound/AI/anomaly_gravity.ogg'
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
startWhen = 3
|
||||
announceWhen = 10
|
||||
anomaly_path = /obj/effect/anomaly/pyro
|
||||
|
||||
/datum/event/anomaly/anomaly_pyro/announce()
|
||||
GLOB.minor_announcement.Announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_pyro.ogg')
|
||||
prefix_message = "Pyroclastic anomaly detected on long range scanners."
|
||||
announce_sound = 'sound/AI/anomaly_pyro.ogg'
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
startWhen = 10
|
||||
announceWhen = 3
|
||||
anomaly_path = /obj/effect/anomaly/bhole
|
||||
|
||||
/datum/event/anomaly/anomaly_vortex/announce()
|
||||
GLOB.minor_announcement.Announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert", 'sound/AI/anomaly_vortex.ogg')
|
||||
prefix_message = "Localized high-intensity vortex anomaly detected on long range scanners."
|
||||
announce_sound = 'sound/AI/anomaly_vortex.ogg'
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
endWhen = 240
|
||||
var/successSpawn = FALSE //So we don't make a command report if nothing gets spawned.
|
||||
|
||||
/datum/event/blob/announce()
|
||||
if(successSpawn)
|
||||
/datum/event/blob/announce(false_alarm)
|
||||
if(successSpawn || false_alarm)
|
||||
GLOB.major_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
else
|
||||
log_and_message_admins("Warning: Could not spawn any mobs for event Blob")
|
||||
|
||||
@@ -13,8 +13,18 @@
|
||||
"Advertising is legalized lying! But don't let that put you off our great deals!", \
|
||||
"You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")
|
||||
|
||||
/datum/event/brand_intelligence/announce()
|
||||
GLOB.minor_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.category] vendor.", "Machine Learning Alert", 'sound/AI/brand_intelligence.ogg')
|
||||
/datum/event/brand_intelligence/announce(false_alarm)
|
||||
var/alarm_source = originMachine
|
||||
if(originMachine)
|
||||
alarm_source = originMachine.category
|
||||
else if(false_alarm)
|
||||
alarm_source = pick(VENDOR_TYPE_GENERIC, VENDOR_TYPE_CLOTHING, VENDOR_TYPE_FOOD, VENDOR_TYPE_DRINK, VENDOR_TYPE_SUPPLIES, VENDOR_TYPE_DEPARTMENTAL, VENDOR_TYPE_RECREATION)
|
||||
else
|
||||
log_debug("Couldn't announce brand intelligence -- no machine was selected, and it wasn't a false alarm! Killing event.")
|
||||
kill()
|
||||
return
|
||||
|
||||
GLOB.minor_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [alarm_source] vendor.", "Machine Learning Alert", 'sound/AI/brand_intelligence.ogg')
|
||||
|
||||
/datum/event/brand_intelligence/start()
|
||||
var/list/obj/machinery/economy/vending/leaderables = list()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/datum/event/communications_blackout/announce()
|
||||
/datum/event/communications_blackout/announce(false_alarm)
|
||||
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
|
||||
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v?-BZZZT", \
|
||||
"Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \
|
||||
@@ -11,7 +11,7 @@
|
||||
to_chat(A, "<span class='warning'><b>[alert]</b></span>")
|
||||
to_chat(A, "<br>")
|
||||
|
||||
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
|
||||
if(prob(30) || false_alarm) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
|
||||
GLOB.minor_announcement.Announce(alert)
|
||||
|
||||
/datum/event/communications_blackout/start()
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
* Only called once.
|
||||
* Ensure no sleep is called. Use INVOKE_ASYNC to call procs which do.
|
||||
*/
|
||||
/datum/event/proc/announce()
|
||||
/datum/event/proc/announce(false_alarm = FALSE)
|
||||
return
|
||||
|
||||
/**
|
||||
@@ -172,9 +172,10 @@
|
||||
SSevents.active_events -= src
|
||||
SSevents.event_complete(src)
|
||||
|
||||
/datum/event/New(datum/event_meta/EM)
|
||||
/datum/event/New(datum/event_meta/EM, skeleton = FALSE)
|
||||
// event needs to be responsible for this, as stuff like APLUs currently make their own events for curious reasons
|
||||
SSevents.active_events += src
|
||||
if(!skeleton)
|
||||
SSevents.active_events += src
|
||||
|
||||
if(!EM)
|
||||
EM = new /datum/event_meta(EVENT_LEVEL_MAJOR, "Unknown, Most likely admin called", src.type)
|
||||
@@ -186,7 +187,8 @@
|
||||
|
||||
startedAt = world.time
|
||||
|
||||
setup()
|
||||
if(!skeleton)
|
||||
setup()
|
||||
..()
|
||||
|
||||
//Called after something followable has been spawned by an event
|
||||
@@ -195,3 +197,9 @@
|
||||
/datum/event/proc/announce_to_ghosts(atom/atom_of_interest)
|
||||
if(atom_of_interest)
|
||||
notify_ghosts("[name] has an object of interest: [atom_of_interest]!", title = "Something's Interesting!", source = atom_of_interest, action = NOTIFY_FOLLOW)
|
||||
|
||||
/// Override this to make a custom fake announcement that differs from the normal announcement.
|
||||
/// Used for false alarms.
|
||||
/// If this proc returns TRUE, the regular Announce() won't be called.
|
||||
/datum/event/proc/fake_announce()
|
||||
return FALSE
|
||||
|
||||
@@ -1,46 +1,43 @@
|
||||
/datum/event/falsealarm
|
||||
announceWhen = 0
|
||||
endWhen = 1
|
||||
var/static/list/possible_event_types = list(
|
||||
/datum/event/alien_infestation,
|
||||
/datum/event/apc_overload,
|
||||
/datum/event/apc_short,
|
||||
/datum/event/blob,
|
||||
/datum/event/brand_intelligence,
|
||||
/datum/event/bureaucratic_error,
|
||||
/datum/event/communications_blackout,
|
||||
/datum/event/electrical_storm,
|
||||
/datum/event/immovable_rod,
|
||||
/datum/event/infestation,
|
||||
/datum/event/ion_storm,
|
||||
/datum/event/mass_hallucination,
|
||||
/datum/event/meteor_wave,
|
||||
/datum/event/prison_break,
|
||||
/datum/event/rogue_drone,
|
||||
/datum/event/solar_flare,
|
||||
/datum/event/spider_infestation,
|
||||
/datum/event/tear,
|
||||
/datum/event/traders,
|
||||
/datum/event/vent_clog
|
||||
) + subtypesof(/datum/event/anomaly) + subtypesof(/datum/event/carp_migration)
|
||||
|
||||
var/datum/event/working_event
|
||||
|
||||
/datum/event/falsealarm/start()
|
||||
. = ..()
|
||||
var/datum/event/working_event_type = pick(possible_event_types)
|
||||
working_event = new working_event_type(skeleton = TRUE)
|
||||
log_debug("False alarm selecting [working_event] to imitate")
|
||||
|
||||
/datum/event/falsealarm/announce()
|
||||
var/list/event
|
||||
var/list/minor_fake_events = list(
|
||||
list("A solar flare has been detected on collision course with the station. Do not conduct space walks or approach windows until the flare has passed!", "Incoming Solar Flare", 'sound/AI/flare.ogg'),
|
||||
list("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00`5vc-BZZT"),
|
||||
list("Overload detected in [station_name()]'s powernet. Engineering, please repair shorted APCs.", "Systems Power Failure", 'sound/AI/power_overload.ogg'),
|
||||
list("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: Kitchen.", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg'),
|
||||
list("Overload detected in [station_name()]'s powernet. Engineering, please check all underfloor APC terminals.", "Critical Power Failure", 'sound/AI/power_overload.ogg'),
|
||||
list("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.", "Network Alert", 'sound/AI/door_runtimes.ogg'),
|
||||
list("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be a vendomat.", "Machine Learning Alert", 'sound/AI/brand_intelligence.ogg'),
|
||||
list("Massive migration of unknown biological entities has been detected near [station_name()], please stand-by.", "Lifesign Alert"),
|
||||
list("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", 'sound/AI/elec_storm.ogg'),
|
||||
list("What the fuck was that?!", "General Alert"),
|
||||
list("Bioscans indicate that spiders have been breeding in the vault. Clear them out, before this starts to affect productivity.", "Lifesign Alert"),
|
||||
list("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ions.ogg'),
|
||||
list("The [station_name()] is passing through a minor radiation field. Be advised that acute exposure to space radiation can induce hallucinogenic episodes."),
|
||||
list("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg'),
|
||||
list("Malignant trojan detected in [station_name()] imprisonment subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "Security Alert"),
|
||||
list("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/AI/radiation.ogg'),
|
||||
list("Contact has been lost with a combat drone wing operating out of the NSV Icarus. If any are sighted in the area, approach with caution.", "Rogue drone alert"),
|
||||
list("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/AI/aliens.ogg'),
|
||||
list("A Honknomoly has opened. Expected location: Clown's Office.", "Honknomoly Alert", 'sound/items/airhorn.ogg'),
|
||||
list("A tear in the fabric of space and time has opened. Expected location: Mime's Office.", "Anomaly Alert", 'sound/AI/anomaly.ogg'),
|
||||
list("A trading shuttle from Jupiter Station has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted"),
|
||||
list("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert", 'sound/AI/scrubbers.ogg'),
|
||||
list("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", 'sound/AI/spanomalies.ogg')
|
||||
)
|
||||
if(working_event.fake_announce())
|
||||
return
|
||||
working_event.announce(TRUE)
|
||||
message_admins("False Alarm: [working_event]")
|
||||
kill()
|
||||
|
||||
var/list/major_fake_events = list(
|
||||
list("Confirmed outbreak of level 3-X biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak3.ogg', 'sound/effects/siren-spooky.ogg'),
|
||||
list("Confirmed outbreak of level 3-S biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak3.ogg', 'sound/effects/siren-spooky.ogg'),
|
||||
list("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
)
|
||||
|
||||
if(prob(90))
|
||||
event = pick_n_take(minor_fake_events)
|
||||
GLOB.minor_announcement.Announce(event[1], listgetindex(event, 2), listgetindex(event, 3))
|
||||
else
|
||||
event = pick_n_take(major_fake_events)
|
||||
GLOB.major_announcement.Announce(event[1], listgetindex(event, 2), listgetindex(event, 3), new_sound2 = listgetindex(event, 4))
|
||||
|
||||
message_admins("False Alarm: [event[1]]")
|
||||
/datum/event/falsealarm/end()
|
||||
QDEL_NULL(working_event)
|
||||
|
||||
@@ -1,14 +1,3 @@
|
||||
#define LOC_KITCHEN 0
|
||||
#define LOC_ATMOS 1
|
||||
#define LOC_INCIN 2
|
||||
#define LOC_CHAPEL 3
|
||||
#define LOC_LIBRARY 4
|
||||
#define LOC_HYDRO 5
|
||||
#define LOC_VAULT 6
|
||||
#define LOC_CONSTR 7
|
||||
#define LOC_TECH 8
|
||||
#define LOC_ARMORY 9
|
||||
|
||||
#define VERM_MICE 0
|
||||
#define VERM_LIZARDS 1
|
||||
#define VERM_SPIDERS 2
|
||||
@@ -20,53 +9,36 @@
|
||||
var/locstring
|
||||
var/vermin
|
||||
var/vermstring
|
||||
var/static/list/spawn_areas = list(
|
||||
/area/station/service/kitchen = "the kitchen",
|
||||
/area/station/engineering/atmos = "atmospherics",
|
||||
/area/station/maintenance/incinerator = "the incinerator",
|
||||
/area/station/service/chapel = "the chapel",
|
||||
/area/station/service/library = "the library",
|
||||
/area/station/service/hydroponics = "hydroponics",
|
||||
/area/station/command/vault = "the vault",
|
||||
/area/station/public/construction = "the construction area",
|
||||
/area/station/engineering/tech_storage = "technical storage",
|
||||
/area/station/security/armory/secure = "the armory"
|
||||
)
|
||||
|
||||
/datum/event/infestation/start()
|
||||
|
||||
location = rand(0,9)
|
||||
var/list/turf/simulated/floor/turfs = list()
|
||||
var/spawn_area_type
|
||||
switch(location)
|
||||
if(LOC_KITCHEN)
|
||||
spawn_area_type = /area/station/service/kitchen
|
||||
locstring = "the kitchen"
|
||||
if(LOC_ATMOS)
|
||||
spawn_area_type = /area/station/engineering/atmos
|
||||
locstring = "atmospherics"
|
||||
if(LOC_INCIN)
|
||||
spawn_area_type = /area/station/maintenance/incinerator
|
||||
locstring = "the incinerator"
|
||||
if(LOC_CHAPEL)
|
||||
spawn_area_type = /area/station/service/chapel
|
||||
locstring = "the chapel"
|
||||
if(LOC_LIBRARY)
|
||||
spawn_area_type = /area/station/service/library
|
||||
locstring = "the library"
|
||||
if(LOC_HYDRO)
|
||||
spawn_area_type = /area/station/service/hydroponics
|
||||
locstring = "hydroponics"
|
||||
if(LOC_VAULT)
|
||||
spawn_area_type = /area/station/command/vault
|
||||
locstring = "the vault"
|
||||
if(LOC_CONSTR)
|
||||
spawn_area_type = /area/station/public/construction
|
||||
locstring = "the construction area"
|
||||
if(LOC_TECH)
|
||||
spawn_area_type = /area/station/engineering/tech_storage
|
||||
locstring = "technical storage"
|
||||
if(LOC_ARMORY)
|
||||
spawn_area_type = /area/station/security/armory/secure
|
||||
locstring = "armory"
|
||||
|
||||
var/area/spawn_area_type = pick(spawn_areas)
|
||||
locstring = spawn_areas[location]
|
||||
for(var/areapath in typesof(spawn_area_type))
|
||||
var/area/A = locate(areapath)
|
||||
if(!A)
|
||||
log_debug("Failed to locate area for infestation event!")
|
||||
kill()
|
||||
return
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(turf_clear(F))
|
||||
turfs += F
|
||||
|
||||
var/list/spawn_types = list()
|
||||
var/max_number
|
||||
vermin = rand(0,2)
|
||||
vermin = rand(0, 2)
|
||||
switch(vermin)
|
||||
if(VERM_MICE)
|
||||
spawn_types = list(/mob/living/simple_animal/mouse/gray, /mob/living/simple_animal/mouse/brown, /mob/living/simple_animal/mouse/white)
|
||||
@@ -93,17 +65,14 @@
|
||||
new spawn_type(T)
|
||||
|
||||
|
||||
/datum/event/infestation/announce()
|
||||
GLOB.minor_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
|
||||
/datum/event/infestation/announce(false_alarm)
|
||||
var/vermin_chosen = vermstring || pick("spiders", "lizards", "mice")
|
||||
var/location_str = locstring
|
||||
if(false_alarm)
|
||||
var/area/loc_area = pick(spawn_areas)
|
||||
location_str = spawn_areas[loc_area]
|
||||
|
||||
#undef LOC_KITCHEN
|
||||
#undef LOC_ATMOS
|
||||
#undef LOC_INCIN
|
||||
#undef LOC_CHAPEL
|
||||
#undef LOC_LIBRARY
|
||||
#undef LOC_HYDRO
|
||||
#undef LOC_VAULT
|
||||
#undef LOC_TECH
|
||||
GLOB.minor_announcement.Announce("Bioscans indicate that [vermin_chosen] have been breeding in [location_str]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
|
||||
|
||||
#undef VERM_MICE
|
||||
#undef VERM_LIZARDS
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
var/ionAnnounceChance = 33
|
||||
announceWhen = 1
|
||||
|
||||
/datum/event/ion_storm/New(botEmagChance = 10, announceEvent = ION_NOANNOUNCEMENT, ionMessage = null, ionAnnounceChance = 33)
|
||||
/datum/event/ion_storm/New(datum/event_meta/EM, skeleton = FALSE, botEmagChance = 10, announceEvent = ION_NOANNOUNCEMENT, ionMessage = null, ionAnnounceChance = 33)
|
||||
src.botEmagChance = botEmagChance
|
||||
src.announceEvent = announceEvent
|
||||
src.ionMessage = ionMessage
|
||||
src.ionAnnounceChance = ionAnnounceChance
|
||||
..()
|
||||
|
||||
/datum/event/ion_storm/announce()
|
||||
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)))
|
||||
/datum/event/ion_storm/announce(false_alarm)
|
||||
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)) || false_alarm)
|
||||
GLOB.minor_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ions.ogg')
|
||||
|
||||
/datum/event/ion_storm/start()
|
||||
|
||||
@@ -13,12 +13,11 @@
|
||||
|
||||
waves = severity * 2 + rand(0, severity) //4-6 waves on medium. 6-9 waves on major. More consistant.
|
||||
|
||||
/datum/event/meteor_wave/announce()
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
GLOB.minor_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
else
|
||||
GLOB.minor_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
|
||||
/datum/event/meteor_wave/announce(false_alarm)
|
||||
if(severity == EVENT_LEVEL_MAJOR || (false_alarm && prob(30)))
|
||||
GLOB.minor_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
else
|
||||
GLOB.minor_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
|
||||
|
||||
//meteor showers are lighter and more common,
|
||||
/datum/event/meteor_wave/tick()
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
src.endWhen = src.releaseWhen+2
|
||||
|
||||
|
||||
/datum/event/prison_break/announce()
|
||||
if(areas && areas.len > 0)
|
||||
/datum/event/prison_break/announce(false_alarm)
|
||||
if(length(areas) || false_alarm)
|
||||
GLOB.minor_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()
|
||||
|
||||
@@ -10,8 +10,8 @@ GLOBAL_VAR_INIT(sent_spiders_to_station, 0)
|
||||
spawncount = round(num_players() * 0.8)
|
||||
GLOB.sent_spiders_to_station = 1
|
||||
|
||||
/datum/event/spider_infestation/announce()
|
||||
if(successSpawn)
|
||||
/datum/event/spider_infestation/announce(false_alarm)
|
||||
if(successSpawn || false_alarm)
|
||||
GLOB.minor_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
else
|
||||
log_and_message_admins("Warning: Could not spawn any mobs for event Spider Infestation")
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
announceWhen = rand(announceWhen, announceWhen + 30)
|
||||
spawncount = 1
|
||||
|
||||
/datum/event/spider_terror/announce()
|
||||
if(successSpawn)
|
||||
/datum/event/spider_terror/announce(false_alarm)
|
||||
if(successSpawn || false_alarm)
|
||||
GLOB.major_announcement.Announce("Confirmed outbreak of level 3-S biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak3.ogg')
|
||||
else
|
||||
log_and_message_admins("Warning: Could not spawn any mobs for event Terror Spiders")
|
||||
|
||||
@@ -40,8 +40,17 @@
|
||||
/datum/event/tear/proc/spawn_tear(location)
|
||||
TE = new /obj/effect/tear(location)
|
||||
|
||||
/datum/event/tear/announce()
|
||||
GLOB.minor_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly.ogg')
|
||||
/datum/event/tear/announce(false_alarm)
|
||||
var/area/target_area = impact_area
|
||||
if(!target_area)
|
||||
if(false_alarm)
|
||||
target_area = findEventArea()
|
||||
else
|
||||
log_debug("Tried to announce a tear without a valid area!")
|
||||
kill()
|
||||
return
|
||||
|
||||
GLOB.minor_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [target_area.name].", "Anomaly Alert", 'sound/AI/anomaly.ogg')
|
||||
|
||||
/datum/event/tear/end()
|
||||
if(TE)
|
||||
|
||||
@@ -13,6 +13,14 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol"))
|
||||
if(GLOB.unused_trade_stations.len)
|
||||
station = pick_n_take(GLOB.unused_trade_stations)
|
||||
|
||||
/datum/event/traders/fake_announce()
|
||||
. = TRUE
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
|
||||
GLOB.minor_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused")
|
||||
return
|
||||
GLOB.minor_announcement.Announce("A trading shuttle from Jupiter Station has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted")
|
||||
|
||||
|
||||
/datum/event/traders/start()
|
||||
if(!station) // If there are no unused stations, just no.
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user