From 48a0017caa50ba94f236fa876016c62acae8401d Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 27 Jun 2014 17:26:50 +0100 Subject: [PATCH] Rewrite of delta level - Fixed bug that required the admin who activated it to remain on the server till restart. - Changed Delta level from Sleep Timer to Controller - Added counter to debug stats to check it's working --and apparently --- aurora.dme | 1 + code/controllers/delta_level.dm | 65 +++++++++++++++++++++++++++ code/controllers/master_controller.dm | 5 ++- code/game/gamemodes/gameticker.dm | 2 + code/modules/admin/admin_verbs.dm | 35 +++++---------- code/modules/mob/mob.dm | 2 + 6 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 code/controllers/delta_level.dm diff --git a/aurora.dme b/aurora.dme index 7a76a56c..7feeb0c8 100644 --- a/aurora.dme +++ b/aurora.dme @@ -151,6 +151,7 @@ #include "code\controllers\_DynamicAreaLighting_TG.dm" #include "code\controllers\autotransfer.dm" #include "code\controllers\configuration.dm" +#include "code\controllers\delta_level.dm" #include "code\controllers\failsafe.dm" #include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" diff --git a/code/controllers/delta_level.dm b/code/controllers/delta_level.dm new file mode 100644 index 00000000..ccca1e2c --- /dev/null +++ b/code/controllers/delta_level.dm @@ -0,0 +1,65 @@ +// This is the timer for the Delta Alert Level +// As a note I really hate making controllers +// Scrap that I hate typos +// +// - SoundScopes + +var/global/datum/delta_level/delta_level + +datum/delta_level + var/active = 0 + var/endtime + +//Leaving this here just incase we want a way to cancel it. +datum/delta_level/proc/cancel() + active = 0 + + // returns the time (in seconds) before explosion +datum/delta_level/proc/timeleft() + if(active) + var/timeleft = round((endtime - world.timeofday)/10 ,1) + return timeleft + + // sets the time left to a given delay (in seconds) +datum/delta_level/proc/settimeleft(var/delay) + endtime = world.timeofday + delay * 10 + +datum/delta_level/proc/activate() + active = 1 + settimeleft(590) + ticker.mode:explosion_in_progress = 1 + for(var/mob/M in player_list) + M << 'sound/machines/Alarm.ogg' + world << timeleft() + +datum/delta_level/proc/dotheboom() + for(var/i = 9 to 1 step -1) + world << i+1 + sleep(10) + + enter_allowed = 0 + if(ticker) + for(var/mob/M in player_list) + M << 'sound/effects/Explosion2.ogg' + ticker.station_explosion_cinematic(0,null) + + if(ticker.mode) + ticker.mode:station_was_nuked = 1 + ticker.mode:explosion_in_progress = 0 + +datum/delta_level/proc/process() + if(!active) + return + var/timeleft = timeleft() + if(timeleft > 1e5) // midnight rollover protection + timeleft = 0 + + for (var/obj/machinery/status_display/SD in machines) + SD.set_picture("redalert") + + if(timeleft>0) + return + else + active = 0 + dotheboom() + diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index b76e824f..ea15dfba 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -51,6 +51,7 @@ datum/controller/game_controller/New() if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() if(!emergency_shuttle) emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle() + if(!delta_level) delta_level = new /datum/delta_level() datum/controller/game_controller/proc/setup() world.tick_lag = config.Ticklag @@ -280,7 +281,7 @@ datum/controller/game_controller/proc/process_machines_power() if(M) if(M.use_power) M.auto_use_power() - + if(A.apc.len && A.master == A) i++ continue @@ -295,7 +296,7 @@ datum/controller/game_controller/proc/process_machines_rebuild() A.powerupdate += 1 active_areas |= A rebuild_active_areas = 0 - + datum/controller/game_controller/proc/process_objects() var/i = 1 diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index c37120d0..55f503f5 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -309,6 +309,8 @@ var/global/datum/controller/gameticker/ticker emergency_shuttle.process() + delta_level.process() + var/mode_finished = mode.check_finished() || (emergency_shuttle.location == 2 && emergency_shuttle.alert == 1) if(!mode.explosion_in_progress && mode_finished) current_state = GAME_STATE_FINISHED diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 1c2309ab..0baf1688 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -610,22 +610,22 @@ var/list/admin_verbs_mod = list( feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].") message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the disease [D].", 1) - + /client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom set category = "Fun" set name = "Give Disease" set desc = "Gives a Disease to a mob." - + var/datum/disease2/disease/D = new /datum/disease2/disease() - + var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater") - + D.makerandom(greater) if (!greater) D.infectionchance = 1 - + D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num - + if(istype(T,/mob/living/carbon/human)) var/mob/living/carbon/human/H = T if (H.species) @@ -634,7 +634,7 @@ var/list/admin_verbs_mod = list( var/mob/living/carbon/monkey/M = T D.affected_species = list(M.greaterform) infect_virus2(T,D,1) - + feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].") message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1) @@ -907,23 +907,8 @@ var/list/admin_verbs_mod = list( if("Red") set_security_level(SEC_LEVEL_RED) if("Delta") - if (alert(usr, "Everyone will die, there is no cancelling.", "Are you sure you want Code Delta?", "Yes", "No") != "Yes") //Confirmation box incase of miss-clicks + if (alert(usr, "Everyone will die, there is no cancelling yet.", "Are you sure you want Code Delta?", "Yes", "No") != "Yes") //Confirmation box incase of miss-clicks return set_security_level(SEC_LEVEL_DELTA) - ticker.mode:explosion_in_progress = 1 - for(var/mob/M in player_list) - M << 'sound/machines/Alarm.ogg' - for(var/i = 600 to 1 step -1) //TODO: Change this for a normal timer? - for (var/obj/machinery/status_display/SD in machines) - SD.set_picture("redalert") //A bug here makes a cool flashing alert signs. Keep? - sleep(10) - if(i <= 7) - world << i+3 //Adding 3 to make the cinematic match with the timer - enter_allowed = 0 - if(ticker) - for(var/mob/M in player_list) - M << 'sound/effects/Explosion2.ogg' - ticker.station_explosion_cinematic(0,null) //Can't fully test auto restart on test server. - if(ticker.mode) - ticker.mode:station_was_nuked = 1 - ticker.mode:explosion_in_progress = 0 + delta_level:active = 1 + delta_level.activate() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e199d49c..04f8b299 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -705,6 +705,8 @@ note dizziness decrements automatically in the mob's Life() proc. stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]") else stat(null,"MasterController-ERROR") + if(delta_level:active) + stat(null,"Delta Countdown-[delta_level.timeleft()]") if(listed_turf && client) if(get_dist(listed_turf,src) > 1)