mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Fixes #39976 A good number of things were missing various parts of the logging (going to GLOB.bombers, not going to client logs, not logging to game, ect), or doing incorrect things like passing admin verbs to saved logs. Unified all the necessary actions under a single proc log_bomber() which handles everything in most use cases. This way the log isn't all jumbled up with inconsistent messages, everything's one format so you can quickly find what you need to bwoink the right person.
134 lines
4.0 KiB
Plaintext
134 lines
4.0 KiB
Plaintext
/obj/item/assembly/timer
|
|
name = "timer"
|
|
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
|
icon_state = "timer"
|
|
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
|
attachable = TRUE
|
|
|
|
var/timing = FALSE
|
|
var/time = 5
|
|
var/saved_time = 5
|
|
var/loop = FALSE
|
|
var/hearing_range = 3
|
|
|
|
/obj/item/assembly/timer/suicide_act(mob/living/user)
|
|
user.visible_message("<span class='suicide'>[user] looks at the timer and decides [user.p_their()] fate! It looks like [user.p_theyre()] going to commit suicide!</span>")
|
|
activate()//doesnt rely on timer_end to prevent weird metas where one person can control the timer and therefore someone's life. (maybe that should be how it works...)
|
|
addtimer(CALLBACK(src, .proc/manual_suicide, user), time*10)//kill yourself once the time runs out
|
|
return MANUAL_SUICIDE
|
|
|
|
/obj/item/assembly/timer/proc/manual_suicide(mob/living/user)
|
|
user.visible_message("<span class='suicide'>[user]'s time is up!</span>")
|
|
user.adjustOxyLoss(200)
|
|
user.death(0)
|
|
|
|
/obj/item/assembly/timer/Initialize()
|
|
. = ..()
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/assembly/timer/Destroy()
|
|
STOP_PROCESSING(SSobj, src)
|
|
. = ..()
|
|
|
|
/obj/item/assembly/timer/examine(mob/user)
|
|
..()
|
|
to_chat(user, "<span class='notice'>The timer is [timing ? "counting down from [time]":"set for [time] seconds"].</span>")
|
|
|
|
/obj/item/assembly/timer/activate()
|
|
if(!..())
|
|
return FALSE//Cooldown check
|
|
timing = !timing
|
|
update_icon()
|
|
return TRUE
|
|
|
|
|
|
/obj/item/assembly/timer/toggle_secure()
|
|
secured = !secured
|
|
if(secured)
|
|
START_PROCESSING(SSobj, src)
|
|
else
|
|
timing = FALSE
|
|
STOP_PROCESSING(SSobj, src)
|
|
update_icon()
|
|
return secured
|
|
|
|
|
|
/obj/item/assembly/timer/proc/timer_end()
|
|
if(!secured || next_activate > world.time)
|
|
return FALSE
|
|
pulse(FALSE)
|
|
audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*", null, hearing_range)
|
|
for(var/CHM in get_hearers_in_view(hearing_range, src))
|
|
if(ismob(CHM))
|
|
var/mob/LM = CHM
|
|
LM.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
|
|
if(loop)
|
|
timing = TRUE
|
|
update_icon()
|
|
|
|
|
|
/obj/item/assembly/timer/process()
|
|
if(!timing)
|
|
return
|
|
time--
|
|
if(time <= 0)
|
|
timing = FALSE
|
|
timer_end()
|
|
time = saved_time
|
|
|
|
|
|
/obj/item/assembly/timer/update_icon()
|
|
cut_overlays()
|
|
attached_overlays = list()
|
|
if(timing)
|
|
add_overlay("timer_timing")
|
|
attached_overlays += "timer_timing"
|
|
if(holder)
|
|
holder.update_icon()
|
|
|
|
|
|
/obj/item/assembly/timer/ui_interact(mob/user)//TODO: Have this use the wires
|
|
. = ..()
|
|
if(is_secured(user))
|
|
var/second = time % 60
|
|
var/minute = (time - second) / 60
|
|
var/dat = "<TT><B>Timing Unit</B></TT>"
|
|
dat += "<BR>[(timing ? "<A href='?src=[REF(src)];time=0'>Timing</A>" : "<A href='?src=[REF(src)];time=1'>Not Timing</A>")] [minute]:[second]"
|
|
dat += "<BR><A href='?src=[REF(src)];tp=-30'>-</A> <A href='?src=[REF(src)];tp=-1'>-</A> <A href='?src=[REF(src)];tp=1'>+</A> <A href='?src=[REF(src)];tp=30'>+</A>"
|
|
dat += "<BR><BR><A href='?src=[REF(src)];repeat=[(loop ? "0'>Stop repeating" : "1'>Set to repeat")]</A>"
|
|
dat += "<BR><BR><A href='?src=[REF(src)];refresh=1'>Refresh</A>"
|
|
dat += "<BR><BR><A href='?src=[REF(src)];close=1'>Close</A>"
|
|
var/datum/browser/popup = new(user, "timer", name)
|
|
popup.set_content(dat)
|
|
popup.open()
|
|
|
|
|
|
/obj/item/assembly/timer/Topic(href, href_list)
|
|
..()
|
|
if(!usr.canUseTopic(src, BE_CLOSE))
|
|
usr << browse(null, "window=timer")
|
|
onclose(usr, "timer")
|
|
return
|
|
|
|
if(href_list["time"])
|
|
timing = text2num(href_list["time"])
|
|
if(timing && istype(holder, /obj/item/transfer_valve))
|
|
log_bomber(usr, "activated a", src, "attachment on [holder]")
|
|
|
|
update_icon()
|
|
if(href_list["repeat"])
|
|
loop = text2num(href_list["repeat"])
|
|
|
|
if(href_list["tp"])
|
|
var/tp = text2num(href_list["tp"])
|
|
time += tp
|
|
time = min(max(round(time), 1), 600)
|
|
saved_time = time
|
|
|
|
if(href_list["close"])
|
|
usr << browse(null, "window=timer")
|
|
return
|
|
|
|
if(usr)
|
|
attack_self(usr)
|