DisplayTimeText mk2 (#30969)

* Adds new helper, DisplayTimeText

* Removed unused define

Thought it would've been nice to have for the future, but I guess it's
fine to go without it.

* CBB

* Revamp

* Early returns

* More cleanup

* Proc cleanup

* Makes fraction only show if seconds is < 1

* Last cleanup

* Revert

* Corrected incorrect round time.

Dunno how nobody ever caught that it was incorrect on live servers, gg.
This commit is contained in:
ShizCalev
2017-09-24 19:58:58 -04:00
committed by Joan Lung
parent 18f329a3f1
commit 74f5a8c904
54 changed files with 188 additions and 129 deletions

View File

@@ -43,7 +43,7 @@
/client/proc/file_spam_check() /client/proc/file_spam_check()
var/time_to_wait = GLOB.fileaccess_timer - world.time var/time_to_wait = GLOB.fileaccess_timer - world.time
if(time_to_wait > 0) if(time_to_wait > 0)
to_chat(src, "<font color='red'>Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.</font>") to_chat(src, "<font color='red'>Error: file_spam_check(): Spam. Please wait [DisplayTimeText(time_to_wait)].</font>")
return 1 return 1
GLOB.fileaccess_timer = world.time + FTPDELAY GLOB.fileaccess_timer = world.time + FTPDELAY
return 0 return 0

View File

@@ -421,7 +421,7 @@
SEND_SOUND(M, 'sound/misc/notice2.ogg') //Alerting them to their consideration SEND_SOUND(M, 'sound/misc/notice2.ogg') //Alerting them to their consideration
if(flashwindow) if(flashwindow)
window_flash(M.client) window_flash(M.client)
switch(ignore_category ? askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No","Never for this round", StealFocus=0, Timeout=poll_time) : askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No", StealFocus=0, Timeout=poll_time)) switch(ignore_category ? askuser(M,Question,"Please answer in [DisplayTimeText(poll_time)]!","Yes","No","Never for this round", StealFocus=0, Timeout=poll_time) : askuser(M,Question,"Please answer in [DisplayTimeText(poll_time)]!","Yes","No", StealFocus=0, Timeout=poll_time))
if(1) if(1)
to_chat(M, "<span class='notice'>Choice registered: Yes.</span>") to_chat(M, "<span class='notice'>Choice registered: Yes.</span>")
if(time_passed + poll_time <= world.time) if(time_passed + poll_time <= world.time)

View File

@@ -219,3 +219,8 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4,
new_x = Clamp(new_x, 0, world.maxx) new_x = Clamp(new_x, 0, world.maxx)
new_y = Clamp(new_y, 0, world.maxy) new_y = Clamp(new_y, 0, world.maxy)
return locate(new_x, new_y, starting.z) return locate(new_x, new_y, starting.z)
/proc/round_down(num)
if(round(num) != num)
return round(num--)
else return num

View File

@@ -50,3 +50,99 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
return 5 return 5
else else
return 1 return 1
//Takes a value of time in deciseconds.
//Returns a text value of that number in hours, minutes, or seconds.
/proc/DisplayTimeText(time_value)
var/second = time_value*0.1
var/second_adjusted = null
var/second_rounded = FALSE
var/minute = null
var/hour = null
var/day = null
if(!second)
return "0 seconds"
if(second >= 60)
minute = round_down(second/60)
second = round(second - (minute*60), 0.1)
second_rounded = TRUE
if(second) //check if we still have seconds remaining to format, or if everything went into minute.
second_adjusted = round(second) //used to prevent '1 seconds' being shown
if(day || hour || minute)
if(second_adjusted == 1 && second >= 1)
second = " and 1 second"
else if(second > 1)
second = " and [second_adjusted] seconds"
else //shows a fraction if seconds is < 1
if(second_rounded) //no sense rounding again if it's already done
second = " and [second] seconds"
else
second = " and [round(second, 0.1)] seconds"
else
if(second_adjusted == 1 && second >= 1)
second = "1 second"
else if(second > 1)
second = "[second_adjusted] seconds"
else
if(second_rounded)
second = "[second] seconds"
else
second = "[round(second, 0.1)] seconds"
else
second = null
if(!minute)
return "[second]"
if(minute >= 60)
hour = round_down(minute/60,1)
minute = (minute - (hour*60))
if(minute) //alot simpler from here since you don't have to worry about fractions
if(minute != 1)
if((day || hour) && second)
minute = ", [minute] minutes"
else if((day || hour) && !second)
minute = " and [minute] minutes"
else
minute = "[minute] minutes"
else
if((day || hour) && second)
minute = ", 1 minute"
else if((day || hour) && !second)
minute = " and 1 minute"
else
minute = "1 minute"
else
minute = null
if(!hour)
return "[minute][second]"
if(hour >= 24)
day = round_down(hour/24,1)
hour = (hour - (day*24))
if(hour)
if(hour != 1)
if(day && (minute || second))
hour = ", [hour] hours"
else if(day && (!minute || !second))
hour = " and [hour] hours"
else
hour = "[hour] hours"
else
if(day && (minute || second))
hour = ", 1 hour"
else if(day && (!minute || !second))
hour = " and 1 hour"
else
hour = "1 hour"
else
hour = null
if(!day)
return "[hour][minute][second]"
if(day > 1)
day = "[day] days"
else
day = "1 day"
return "[day][hour][minute][second]"

View File

@@ -322,7 +322,7 @@ SUBSYSTEM_DEF(air)
EG.dismantle() EG.dismantle()
CHECK_TICK CHECK_TICK
var/msg = "HEY! LISTEN! [(world.timeofday - timer)/10] Seconds were wasted processing [starting_ats] turf(s) (connected to [ending_ats] other turfs) with atmos differences at round start." var/msg = "HEY! LISTEN! [DisplayTimeText(world.timeofday - timer)] were wasted processing [starting_ats] turf(s) (connected to [ending_ats] other turfs) with atmos differences at round start."
to_chat(world, "<span class='boldannounce'>[msg]</span>") to_chat(world, "<span class='boldannounce'>[msg]</span>")
warning(msg) warning(msg)

View File

@@ -29,7 +29,7 @@ SUBSYSTEM_DEF(server_maint)
var/cmob = C.mob var/cmob = C.mob
if(!(isobserver(cmob) || (isdead(cmob) && C.holder))) if(!(isobserver(cmob) || (isdead(cmob) && C.holder)))
log_access("AFK: [key_name(C)]") log_access("AFK: [key_name(C)]")
to_chat(C, "<span class='danger'>You have been inactive for more than [config.afk_period / 600] minutes and have been disconnected.</span>") to_chat(C, "<span class='danger'>You have been inactive for more than [DisplayTimeText(config.afk_period)] and have been disconnected.</span>")
qdel(C) qdel(C)
if (!(!C || world.time - C.connection_time < PING_BUFFER_TIME || C.inactivity >= (wait-1))) if (!(!C || world.time - C.connection_time < PING_BUFFER_TIME || C.inactivity >= (wait-1)))

View File

@@ -176,7 +176,7 @@ SUBSYSTEM_DEF(shuttle)
emergency = backup_shuttle emergency = backup_shuttle
if(world.time - SSticker.round_start_time < config.shuttle_refuel_delay) if(world.time - SSticker.round_start_time < config.shuttle_refuel_delay)
to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - SSticker.round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.") to_chat(user, "The emergency shuttle is refueling. Please wait [DisplayTimeText((world.time - SSticker.round_start_time) - config.shuttle_refuel_delay)] before trying again.")
return return
switch(emergency.mode) switch(emergency.mode)

View File

@@ -501,7 +501,7 @@ SUBSYSTEM_DEF(ticker)
end_state.count() end_state.count()
var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
to_chat(world, "<BR>[GLOB.TAB]Shift Duration: <B>[round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]</B>") to_chat(world, "<BR>[GLOB.TAB]Shift Duration: <B>[DisplayTimeText(world.time - SSticker.round_start_time)]</B>")
to_chat(world, "<BR>[GLOB.TAB]Station Integrity: <B>[mode.station_was_nuked ? "<font color='red'>Destroyed</font>" : "[station_integrity]%"]</B>") to_chat(world, "<BR>[GLOB.TAB]Station Integrity: <B>[mode.station_was_nuked ? "<font color='red'>Destroyed</font>" : "[station_integrity]%"]</B>")
if(mode.station_was_nuked) if(mode.station_was_nuked)
SSticker.news_report = STATION_DESTROYED_NUKE SSticker.news_report = STATION_DESTROYED_NUKE

View File

@@ -162,7 +162,7 @@ SUBSYSTEM_DEF(vote)
admin = TRUE admin = TRUE
if(next_allowed_time > world.time && !admin) if(next_allowed_time > world.time && !admin)
to_chat(usr, "<span class='warning'>A vote was initiated recently, you must wait roughly [(next_allowed_time-world.time)/10] seconds before a new vote can be started!</span>") to_chat(usr, "<span class='warning'>A vote was initiated recently, you must wait [DisplayTimeText(next_allowed_time-world.time)] before a new vote can be started!</span>")
return 0 return 0
reset() reset()
@@ -189,7 +189,7 @@ SUBSYSTEM_DEF(vote)
if(mode == "custom") if(mode == "custom")
text += "\n[question]" text += "\n[question]"
log_vote(text) log_vote(text)
to_chat(world, "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=\ref[src]'>here</a> to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>") to_chat(world, "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=\ref[src]'>here</a> to place your votes.\nYou have [DisplayTimeText(config.vote_period)] to vote.</font>")
time_remaining = round(config.vote_period/10) time_remaining = round(config.vote_period/10)
for(var/c in GLOB.clients) for(var/c in GLOB.clients)
var/client/C = c var/client/C = c

View File

@@ -57,7 +57,7 @@
if(!placed) if(!placed)
if(manualplace_min_time && world.time >= manualplace_min_time) if(manualplace_min_time && world.time >= manualplace_min_time)
to_chat(src, "<b><span class='big'><font color=\"#EE4000\">You may now place your blob core.</font></span></b>") to_chat(src, "<b><span class='big'><font color=\"#EE4000\">You may now place your blob core.</font></span></b>")
to_chat(src, "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.</font></span>") to_chat(src, "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [DisplayTimeText(autoplace_max_time - world.time)].</font></span>")
manualplace_min_time = 0 manualplace_min_time = 0
if(autoplace_max_time && world.time >= autoplace_max_time) if(autoplace_max_time && world.time >= autoplace_max_time)
place_blob_core(base_point_rate, 1) place_blob_core(base_point_rate, 1)

View File

@@ -365,5 +365,5 @@
to_chat(src, "<b>Shortcuts:</b> Click = Expand Blob <b>|</b> Middle Mouse Click = Rally Spores <b>|</b> Ctrl Click = Create Shield Blob <b>|</b> Alt Click = Remove Blob") to_chat(src, "<b>Shortcuts:</b> Click = Expand Blob <b>|</b> Middle Mouse Click = Rally Spores <b>|</b> Ctrl Click = Create Shield Blob <b>|</b> Alt Click = Remove Blob")
to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.") to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.")
if(!placed && autoplace_max_time <= world.time) if(!placed && autoplace_max_time <= world.time)
to_chat(src, "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.</font></span>") to_chat(src, "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [DisplayTimeText(autoplace_max_time - world.time)].</font></span>")
to_chat(src, "<span class='big'><font color=\"#EE4000\">You [manualplace_min_time ? "will be able to":"can"] manually place your blob core by pressing the Place Blob Core button in the bottom right corner of the screen.</font></span>") to_chat(src, "<span class='big'><font color=\"#EE4000\">You [manualplace_min_time ? "will be able to":"can"] manually place your blob core by pressing the Place Blob Core button in the bottom right corner of the screen.</font></span>")

View File

@@ -207,7 +207,7 @@
time_duration = round(time_duration * (2 * efficiency), 1) time_duration = round(time_duration * (2 * efficiency), 1)
CO.active = TRUE //you'd be active in a second but you should update immediately CO.active = TRUE //you'd be active in a second but you should update immediately
invoker.visible_message("<span class='warning'>The air in front of [invoker] ripples before suddenly tearing open!</span>", \ invoker.visible_message("<span class='warning'>The air in front of [invoker] ripples before suddenly tearing open!</span>", \
"<span class='brass'>With a word, you rip open a [two_way ? "two-way":"one-way"] rift to [input_target_key]. It will last for [time_duration / 10] seconds and has [gateway_uses] use[gateway_uses > 1 ? "s" : ""].</span>") "<span class='brass'>With a word, you rip open a [two_way ? "two-way":"one-way"] rift to [input_target_key]. It will last for [DisplayTimeText(time_duration)] and has [gateway_uses] use[gateway_uses > 1 ? "s" : ""].</span>")
var/obj/effect/clockwork/spatial_gateway/S1 = new(issrcobelisk ? get_turf(src) : get_step(get_turf(invoker), invoker.dir)) var/obj/effect/clockwork/spatial_gateway/S1 = new(issrcobelisk ? get_turf(src) : get_step(get_turf(invoker), invoker.dir))
var/obj/effect/clockwork/spatial_gateway/S2 = new(istargetobelisk ? get_turf(target) : get_step(get_turf(target), target.dir)) var/obj/effect/clockwork/spatial_gateway/S2 = new(istargetobelisk ? get_turf(target) : get_step(get_turf(target), target.dir))

View File

@@ -318,23 +318,10 @@
if(servants > SCRIPT_SERVANT_REQ) if(servants > SCRIPT_SERVANT_REQ)
servants -= SCRIPT_SERVANT_REQ servants -= SCRIPT_SERVANT_REQ
production_time += min(SLAB_SERVANT_SLOWDOWN * servants, SLAB_SLOWDOWN_MAXIMUM) production_time += min(SLAB_SERVANT_SLOWDOWN * servants, SLAB_SLOWDOWN_MAXIMUM)
var/production_text_addon = ""
if(production_time != SLAB_PRODUCTION_TIME+SLAB_SLOWDOWN_MAXIMUM) if(production_time != SLAB_PRODUCTION_TIME+SLAB_SLOWDOWN_MAXIMUM)
production_text_addon = ", which increases for each human or silicon Servant above <b>[SCRIPT_SERVANT_REQ]</b>" production_time = "<b>[DisplayTimeText(production_time)]</b>, which increases for each human or silicon Servant above <b>[SCRIPT_SERVANT_REQ]</b>"
production_time = production_time/600 else
var/list/production_text production_time = "<b>[DisplayTimeText(production_time)]</b>"
if(round(production_time))
production_text = list("<b>[round(production_time)] minute\s")
if(production_time != round(production_time))
production_time -= round(production_time)
production_time *= 60
if(!LAZYLEN(production_text))
production_text = list("<b>[round(production_time, 1)] second\s")
else
production_text += " and [round(production_time, 1)] second\s"
production_text += "</b>"
production_text += production_text_addon
production_text = production_text.Join()
textlist = list("<font color=#BE8700 size=3><b><center>[text2ratvar("Purge all untruths and honor Engine.")]</center></b></font><br>\ textlist = list("<font color=#BE8700 size=3><b><center>[text2ratvar("Purge all untruths and honor Engine.")]</center></b></font><br>\
\ \
@@ -439,23 +426,10 @@
if(servants > SCRIPT_SERVANT_REQ) if(servants > SCRIPT_SERVANT_REQ)
servants -= SCRIPT_SERVANT_REQ servants -= SCRIPT_SERVANT_REQ
production_time += min(SLAB_SERVANT_SLOWDOWN * servants, SLAB_SLOWDOWN_MAXIMUM) production_time += min(SLAB_SERVANT_SLOWDOWN * servants, SLAB_SLOWDOWN_MAXIMUM)
var/production_text_addon = ""
if(production_time != SLAB_PRODUCTION_TIME+SLAB_SLOWDOWN_MAXIMUM) if(production_time != SLAB_PRODUCTION_TIME+SLAB_SLOWDOWN_MAXIMUM)
production_text_addon = ", which increases for each human or silicon Servant above <b>[SCRIPT_SERVANT_REQ]</b>" production_time = "<b>[DisplayTimeText(production_time)]</b>, which increases for each human or silicon Servant above <b>[SCRIPT_SERVANT_REQ]</b>"
production_time = production_time/600 else
var/list/production_text production_time = "<b>[DisplayTimeText(production_time)]</b>"
if(round(production_time))
production_text = list("<b>[round(production_time)] minute\s")
if(production_time != round(production_time))
production_time -= round(production_time)
production_time *= 60
if(!LAZYLEN(production_text))
production_text = list("<b>[round(production_time, 1)] second\s")
else
production_text += " and [round(production_time, 1)] second\s"
production_text += "</b>"
production_text += production_text_addon
production_text = production_text.Join()
dat += "<font color=#BE8700 size=3>Components & Their Uses</font><br><br>" dat += "<font color=#BE8700 size=3>Components & Their Uses</font><br><br>"
dat += "<b>Components</b> are your primary resource as a Servant. There are five types of component, with each one being used in different roles:<br><br>" dat += "<b>Components</b> are your primary resource as a Servant. There are five types of component, with each one being used in different roles:<br><br>"
dat += "<font color=#6E001A>[get_component_icon(BELLIGERENT_EYE)]BE</font> Belligerent Eyes are aggressive and judgemental, and are used in offensive scripture;<br>" dat += "<font color=#6E001A>[get_component_icon(BELLIGERENT_EYE)]BE</font> Belligerent Eyes are aggressive and judgemental, and are used in offensive scripture;<br>"
@@ -466,7 +440,7 @@
dat += "Although this is a good rule of thumb, their effects become much more nuanced when used together. For instance, a turret might have both belligerent eyes and \ dat += "Although this is a good rule of thumb, their effects become much more nuanced when used together. For instance, a turret might have both belligerent eyes and \
vanguard cogwheels as construction requirements, because it defends its allies by harming its enemies.<br><br>" vanguard cogwheels as construction requirements, because it defends its allies by harming its enemies.<br><br>"
dat += "Components' primary use is fueling <b>scripture</b> (covered in its own section), and they can be created through various ways. This clockwork slab, for instance, \ dat += "Components' primary use is fueling <b>scripture</b> (covered in its own section), and they can be created through various ways. This clockwork slab, for instance, \
will make a random component of every type - or a specific one, if you choose a target component from the interface - every <b>[production_text]</b>. This number will increase \ will make a random component of every type - or a specific one, if you choose a target component from the interface - every [production_time]. This number will increase \
as the amount of Servants in the covenant increase; additionally, slabs can only produce components when held by a Servant, and holding more than one slab will cause both \ as the amount of Servants in the covenant increase; additionally, slabs can only produce components when held by a Servant, and holding more than one slab will cause both \
of them to halt progress until one of them is removed from their person.<br><br>" of them to halt progress until one of them is removed from their person.<br><br>"
dat += "Your slab has an internal storage of components, but it isn't meant to be the main one. Instead, there's a <b>global storage</b> of components that can be \ dat += "Your slab has an internal storage of components, but it isn't meant to be the main one. Instead, there's a <b>global storage</b> of components that can be \

View File

@@ -105,7 +105,7 @@
..() ..()
if(is_servant_of_ratvar(user) || isobserver(user)) if(is_servant_of_ratvar(user) || isobserver(user))
if(linkedwall) if(linkedwall)
to_chat(user, "<span class='brass'>It is linked to a Clockwork Wall and will generate a component every <b>[round(get_production_time() * 0.1, 0.1)]</b> seconds!</span>") to_chat(user, "<span class='brass'>It is linked to a Clockwork Wall and will generate a component every <b>[DisplayTimeText(get_production_time())]</b>!</span>")
else else
to_chat(user, "<span class='alloy'>It is unlinked! Construct a Clockwork Wall nearby to generate components!</span>") to_chat(user, "<span class='alloy'>It is unlinked! Construct a Clockwork Wall nearby to generate components!</span>")
to_chat(user, "<b>Stored components:</b>") to_chat(user, "<b>Stored components:</b>")

View File

@@ -96,7 +96,7 @@
/proc/pollCultists(var/mob/living/Nominee) //Cult Master Poll /proc/pollCultists(var/mob/living/Nominee) //Cult Master Poll
if(world.time < CULT_POLL_WAIT) if(world.time < CULT_POLL_WAIT)
to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [round((CULT_POLL_WAIT-world.time)/10)] seconds.") to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [DisplayTimeText(CULT_POLL_WAIT-world.time)].")
return return
GLOB.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try GLOB.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try
for(var/datum/mind/B in SSticker.mode.cult) for(var/datum/mind/B in SSticker.mode.cult)
@@ -232,7 +232,7 @@
return FALSE return FALSE
if(cooldown > world.time) if(cooldown > world.time)
if(!CM.active) if(!CM.active)
to_chat(owner, "<span class='cultlarge'><b>You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can mark another target!</b></span>") to_chat(owner, "<span class='cultlarge'><b>You need to wait [DisplayTimeText(cooldown - world.time)] before you can mark another target!</b></span>")
return FALSE return FALSE
return ..() return ..()
@@ -324,7 +324,7 @@
return FALSE return FALSE
if(cooldown > world.time) if(cooldown > world.time)
if(!PM.active) if(!PM.active)
to_chat(owner, "<span class='cultlarge'><b>You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can pulse again!</b></span>") to_chat(owner, "<span class='cultlarge'><b>You need to wait [DisplayTimeText(cooldown - world.time)] before you can pulse again!</b></span>")
return FALSE return FALSE
return ..() return ..()

View File

@@ -10,7 +10,7 @@
..() ..()
to_chat(user, "<span class='notice'>\The [src] is [anchored ? "":"not "]secured to the floor.</span>") to_chat(user, "<span class='notice'>\The [src] is [anchored ? "":"not "]secured to the floor.</span>")
if((iscultist(user) || isobserver(user)) && cooldowntime > world.time) if((iscultist(user) || isobserver(user)) && cooldowntime > world.time)
to_chat(user, "<span class='cultitalic'>The magic in [src] is too weak, [p_they()] will be ready to use again in [getETA()].</span>") to_chat(user, "<span class='cultitalic'>The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
/obj/structure/destructible/cult/examine_status(mob/user) /obj/structure/destructible/cult/examine_status(mob/user)
if(iscultist(user) || isobserver(user)) if(iscultist(user) || isobserver(user))
@@ -50,13 +50,6 @@
animate(src, color = previouscolor, time = 8) animate(src, color = previouscolor, time = 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/obj/structure/destructible/cult/proc/getETA()
var/time = (cooldowntime - world.time)/600
var/eta = "[round(time, 1)] minutes"
if(time <= 1)
time = (cooldowntime - world.time)*0.1
eta = "[round(time, 1)] seconds"
return eta
/obj/structure/destructible/cult/talisman /obj/structure/destructible/cult/talisman
name = "altar" name = "altar"
@@ -72,7 +65,7 @@
to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with a tome first.</span>") to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with a tome first.</span>")
return return
if(cooldowntime > world.time) if(cooldowntime > world.time)
to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [getETA()].</span>") to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return return
var/choice = alert(user,"You study the schematics etched into the forge...",,"Eldritch Whetstone","Zealot's Blindfold","Flask of Unholy Water") var/choice = alert(user,"You study the schematics etched into the forge...",,"Eldritch Whetstone","Zealot's Blindfold","Flask of Unholy Water")
var/pickedtype var/pickedtype
@@ -105,7 +98,7 @@
to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with a tome first.</span>") to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with a tome first.</span>")
return return
if(cooldowntime > world.time) if(cooldowntime > world.time)
to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [getETA()].</span>") to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return return
var/choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Nar-Sien Hardsuit") var/choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Nar-Sien Hardsuit")
var/pickedtype var/pickedtype
@@ -212,7 +205,7 @@
to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with a tome first.</span>") to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with a tome first.</span>")
return return
if(cooldowntime > world.time) if(cooldowntime > world.time)
to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [getETA()].</span>") to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return return
var/choice = alert(user,"You flip through the black pages of the archives...",,"Supply Talisman","Shuttle Curse","Veil Walker Set") var/choice = alert(user,"You flip through the black pages of the archives...",,"Supply Talisman","Shuttle Curse","Veil Walker Set")
var/list/pickedtype = list() var/list/pickedtype = list()

View File

@@ -13,7 +13,7 @@
var/flash = " - || - " var/flash = " - || - "
var/obj/machinery/abductor/console/console var/obj/machinery/abductor/console/console
var/message_cooldown = 0 var/message_cooldown = 0
var/breakout_time = 0.75 var/breakout_time = 450
/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user) /obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
@@ -50,9 +50,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \ user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \
"<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a metallic creaking from [src].</span>") "<span class='italics'>You hear a metallic creaking from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open) if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
return return
user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \ user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \

View File

@@ -19,7 +19,7 @@
return return
declaring_war = TRUE declaring_war = TRUE
var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew? You have [-round((world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide", "Declare war?", "Yes", "No") var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew? You have [DisplayTimeText(world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)] to decide", "Declare war?", "Yes", "No")
declaring_war = FALSE declaring_war = FALSE
if(!check_allowed(user)) if(!check_allowed(user))

View File

@@ -43,7 +43,7 @@
to_chat(user, "<span class='danger'>[src] is out of foam and cannot be activated.</span>") to_chat(user, "<span class='danger'>[src] is out of foam and cannot be activated.</span>")
return return
if(cooldown_time > world.time) if(cooldown_time > world.time)
to_chat(user, "<span class='danger'>[src] cannot be activated for another <b>[round((world.time - cooldown_time) * 0.1)]</b> second\s.</span>") to_chat(user, "<span class='danger'>[src] cannot be activated for <b>[DisplayTimeText(world.time - cooldown_time)]</b>.</span>")
return return
new /obj/effect/particle_effect/foam(loc) new /obj/effect/particle_effect/foam(loc)
uses-- uses--

View File

@@ -169,7 +169,7 @@
if("working") if("working")
temp_html += status temp_html += status
temp_html += "<h1>System Busy</h1>" temp_html += "<h1>System Busy</h1>"
temp_html += "Working ... Please wait ([radduration] Seconds)" temp_html += "Working ... Please wait ([DisplayTimeText(radduration)])"
if("buffer") if("buffer")
temp_html += status temp_html += status
temp_html += buttons temp_html += buttons

View File

@@ -51,9 +51,7 @@
d2 = "<A href='?src=\ref[src];time=0'>Stop Time Launch</A>" d2 = "<A href='?src=\ref[src];time=0'>Stop Time Launch</A>"
else else
d2 = "<A href='?src=\ref[src];time=1'>Initiate Time Launch</A>" d2 = "<A href='?src=\ref[src];time=1'>Initiate Time Launch</A>"
var/second = time % 60 dat += "<HR>\nTimer System: [d2]\nTime Left: [DisplayTimeText(time)] <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>"
var/minute = (time - second) / 60
dat += "<HR>\nTimer System: [d2]\nTime Left: [minute ? "[minute]:" : null][second] <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>"
var/temp = "" var/temp = ""
var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
for(var/t in L) for(var/t in L)

View File

@@ -96,7 +96,7 @@
dat += "</div><br>" dat += "</div><br>"
dat += "<A href='?src=\ref[src];action=select'> Select Track</A><br>" dat += "<A href='?src=\ref[src];action=select'> Select Track</A><br>"
dat += "Track Selected: [selection.song_name]<br>" dat += "Track Selected: [selection.song_name]<br>"
dat += "Track Length: [selection.song_length/10] seconds<br><br>" dat += "Track Length: [DisplayTimeText(selection.song_length)]<br><br>"
dat += "<br>DJ's Soundboard:<b><br>" dat += "<br>DJ's Soundboard:<b><br>"
dat +="<div class='statusDisplay'><div style='text-align:center'>" dat +="<div class='statusDisplay'><div style='text-align:center'>"
dat += "<A href='?src=\ref[src];action=horn'>Air Horn</A> " dat += "<A href='?src=\ref[src];action=horn'>Air Horn</A> "
@@ -122,7 +122,7 @@
return return
if(!active) if(!active)
if(stop > world.time) if(stop > world.time)
to_chat(usr, "<span class='warning'>Error: The device is still resetting from the last activation, it will be ready again in [round((stop-world.time)/10)] seconds.</span>") to_chat(usr, "<span class='warning'>Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].</span>")
playsound(src, 'sound/misc/compiler-failure.ogg', 50, 1) playsound(src, 'sound/misc/compiler-failure.ogg', 50, 1)
return return
active = TRUE active = TRUE

View File

@@ -15,7 +15,7 @@
var/scan_level var/scan_level
var/precision_coeff var/precision_coeff
var/message_cooldown var/message_cooldown
var/breakout_time = 2 var/breakout_time = 1200
/obj/machinery/dna_scannernew/RefreshParts() /obj/machinery/dna_scannernew/RefreshParts()
scan_level = 0 scan_level = 0
@@ -73,9 +73,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \ user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \
"<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a metallic creaking from [src].</span>") "<span class='italics'>You hear a metallic creaking from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked) if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
return return
locked = FALSE locked = FALSE

View File

@@ -20,7 +20,7 @@ The console is located at computer/gulag_teleporter.dm
circuit = /obj/item/circuitboard/machine/gulag_teleporter circuit = /obj/item/circuitboard/machine/gulag_teleporter
var/locked = FALSE var/locked = FALSE
var/message_cooldown var/message_cooldown
var/breakout_time = 1 var/breakout_time = 600
var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner
var/shoes_type = /obj/item/clothing/shoes/sneakers/orange var/shoes_type = /obj/item/clothing/shoes/sneakers/orange
var/obj/machinery/gulag_item_reclaimer/linked_reclaimer var/obj/machinery/gulag_item_reclaimer/linked_reclaimer
@@ -104,9 +104,9 @@ The console is located at computer/gulag_teleporter.dm
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \ user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \
"<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a metallic creaking from [src].</span>") "<span class='italics'>You hear a metallic creaking from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked) if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
return return
locked = FALSE locked = FALSE

View File

@@ -79,7 +79,7 @@
return return
if(world.time < last_teleport + teleport_cooldown) if(world.time < last_teleport + teleport_cooldown)
to_chat(user, "<span class='warning'>[src] is recharging power. Please wait [round((last_teleport + teleport_cooldown - world.time) / 10)] seconds.</span>") to_chat(user, "<span class='warning'>[src] is recharging power. Please wait [DisplayTimeText(last_teleport + teleport_cooldown - world.time)].</span>")
return return
if(teleporting) if(teleporting)

View File

@@ -27,7 +27,7 @@
var/uv_super = FALSE var/uv_super = FALSE
var/uv_cycles = 6 var/uv_cycles = 6
var/message_cooldown var/message_cooldown
var/breakout_time = 0.5 var/breakout_time = 300
/obj/machinery/suit_storage_unit/standard_unit /obj/machinery/suit_storage_unit/standard_unit
suit_type = /obj/item/clothing/suit/space/eva suit_type = /obj/item/clothing/suit/space/eva
@@ -267,9 +267,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='notice'>You see [user] kicking against the doors of [src]!</span>", \ user.visible_message("<span class='notice'>You see [user] kicking against the doors of [src]!</span>", \
"<span class='notice'>You start kicking against the doors... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a thump from [src].</span>") "<span class='italics'>You hear a thump from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src ) if(!user || user.stat != CONSCIOUS || user.loc != src )
return return
user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \ user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \

View File

@@ -206,12 +206,12 @@
. = ..() . = ..()
/obj/structure/spider/cocoon/container_resist(mob/living/user) /obj/structure/spider/cocoon/container_resist(mob/living/user)
var/breakout_time = 1 var/breakout_time = 600
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
to_chat(user, "<span class='notice'>You struggle against the tight bonds... (This will take about [breakout_time] minutes.)</span>") to_chat(user, "<span class='notice'>You struggle against the tight bonds... (This will take about [DisplayTimeText(breakout_time)].)</span>")
visible_message("You see something struggling and writhing in \the [src]!") visible_message("You see something struggling and writhing in \the [src]!")
if(do_after(user,(breakout_time*60*10), target = src)) if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src) if(!user || user.stat != CONSCIOUS || user.loc != src)
return return
qdel(src) qdel(src)

View File

@@ -59,7 +59,7 @@
to_chat(user, "Your name has been sent to your employers for approval.") to_chat(user, "Your name has been sent to your employers for approval.")
// Autoapproves after a certain time // Autoapproves after a certain time
response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE)
to_chat(GLOB.admins, "<span class='adminnotice'><b><font color=orange>CUSTOM STATION RENAME:</font></b>[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [approval_time / 10] seconds). [ADMIN_SMITE(user)] (<A HREF='?_src_=holder;[HrefToken(TRUE)];reject_custom_name=\ref[src]'>REJECT</A>) [ADMIN_CENTCOM_REPLY(user)]</span>") to_chat(GLOB.admins, "<span class='adminnotice'><b><font color=orange>CUSTOM STATION RENAME:</font></b>[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (<A HREF='?_src_=holder;[HrefToken(TRUE)];reject_custom_name=\ref[src]'>REJECT</A>) [ADMIN_CENTCOM_REPLY(user)]</span>")
/obj/item/station_charter/proc/reject_proposed(user) /obj/item/station_charter/proc/reject_proposed(user)
if(!user) if(!user)

View File

@@ -176,7 +176,7 @@ MASS SPECTROMETER
to_chat(user, "<span class='info'>Time of Death:</span> [M.tod]") to_chat(user, "<span class='info'>Time of Death:</span> [M.tod]")
var/tdelta = round(world.time - M.timeofdeath) var/tdelta = round(world.time - M.timeofdeath)
if(tdelta < (DEFIB_TIME_LIMIT * 10)) if(tdelta < (DEFIB_TIME_LIMIT * 10))
to_chat(user, "<span class='danger'>Subject died [tdelta / 10] seconds ago, defibrillation may be possible!</span>") to_chat(user, "<span class='danger'>Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!</span>")
for(var/thing in M.viruses) for(var/thing in M.viruses)
var/datum/disease/D = thing var/datum/disease/D = thing

View File

@@ -111,7 +111,6 @@ effective or pretty fucking useless.
/obj/item/device/healthanalyzer/rad_laser/interact(mob/user) /obj/item/device/healthanalyzer/rad_laser/interact(mob/user)
user.set_machine(src) user.set_machine(src)
var/cooldown = GetCooldown()
var/dat = "Irradiation: <A href='?src=\ref[src];rad=1'>[irradiate ? "On" : "Off"]</A><br>" var/dat = "Irradiation: <A href='?src=\ref[src];rad=1'>[irradiate ? "On" : "Off"]</A><br>"
dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): <A href='?src=\ref[src];stealthy=[TRUE]'>[stealth ? "On" : "Off"]</A><br>" dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): <A href='?src=\ref[src];stealthy=[TRUE]'>[stealth ? "On" : "Off"]</A><br>"
dat += "Scan Mode: <a href='?src=\ref[src];mode=1'>" dat += "Scan Mode: <a href='?src=\ref[src];mode=1'>"
@@ -133,7 +132,7 @@ effective or pretty fucking useless.
<A href='?src=\ref[src];radwav=-5'>-</A><A href='?src=\ref[src];radwav=-1'>-</A> <A href='?src=\ref[src];radwav=-5'>-</A><A href='?src=\ref[src];radwav=-1'>-</A>
[(wavelength+(intensity*4))] [(wavelength+(intensity*4))]
<A href='?src=\ref[src];radwav=1'>+</A><A href='?src=\ref[src];radwav=5'>+</A><BR> <A href='?src=\ref[src];radwav=1'>+</A><A href='?src=\ref[src];radwav=5'>+</A><BR>
Laser Cooldown: [cooldown] Seconds<BR> Laser Cooldown: [DisplayTimeText(GetCooldown())]<BR>
"} "}
var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240) var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240)

View File

@@ -20,7 +20,7 @@
var/special = FALSE var/special = FALSE
var/special_name = "special function" var/special_name = "special function"
var/message_cooldown var/message_cooldown
var/breakout_time = 1 var/breakout_time = 600
/obj/machinery/implantchair/Initialize() /obj/machinery/implantchair/Initialize()
. = ..() . = ..()
@@ -124,9 +124,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \ user.visible_message("<span class='notice'>You see [user] kicking against the door of [src]!</span>", \
"<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a metallic creaking from [src].</span>") "<span class='italics'>You hear a metallic creaking from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open) if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
return return
user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \ user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \

View File

@@ -15,7 +15,7 @@
max_integrity = 200 max_integrity = 200
integrity_failure = 50 integrity_failure = 50
armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60) armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60)
var/breakout_time = 2 var/breakout_time = 1200
var/message_cooldown var/message_cooldown
var/can_weld_shut = TRUE var/can_weld_shut = TRUE
var/horizontal = FALSE var/horizontal = FALSE
@@ -366,9 +366,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='warning'>[src] begins to shake violently!</span>", \ user.visible_message("<span class='warning'>[src] begins to shake violently!</span>", \
"<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear banging from [src].</span>") "<span class='italics'>You hear banging from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) ) if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) )
return return
//we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting

View File

@@ -4,7 +4,7 @@
icon_state = "crittercrate" icon_state = "crittercrate"
horizontal = FALSE horizontal = FALSE
allow_objects = FALSE allow_objects = FALSE
breakout_time = 1 breakout_time = 600
material_drop = /obj/item/stack/sheet/mineral/wood material_drop = /obj/item/stack/sheet/mineral/wood
material_drop_amount = 4 material_drop_amount = 4
delivery_icon = "deliverybox" delivery_icon = "deliverybox"

View File

@@ -24,7 +24,7 @@
var/locked = FALSE var/locked = FALSE
var/opendir = SOUTH var/opendir = SOUTH
var/message_cooldown var/message_cooldown
var/breakout_time = 1 var/breakout_time = 600
/obj/structure/bodycontainer/Destroy() /obj/structure/bodycontainer/Destroy()
open() open()
@@ -97,9 +97,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message(null, \ user.visible_message(null, \
"<span class='notice'>You lean on the back of [src] and start pushing the tray open... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You lean on the back of [src] and start pushing the tray open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a metallic creaking from [src].</span>") "<span class='italics'>You hear a metallic creaking from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src ) if(!user || user.stat != CONSCIOUS || user.loc != src )
return return
user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \ user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \

View File

@@ -317,7 +317,7 @@
dat += "Replacement Game Mode: <B>[SSticker.mode.replacementmode.name]</B><BR>" dat += "Replacement Game Mode: <B>[SSticker.mode.replacementmode.name]</B><BR>"
else else
dat += "Current Game Mode: <B>[SSticker.mode.name]</B><BR>" dat += "Current Game Mode: <B>[SSticker.mode.name]</B><BR>"
dat += "Round Duration: <B>[round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]</B><BR>" dat += "Round Duration: <B>[DisplayTimeText(world.time - SSticker.round_start_time)]</B><BR>"
dat += "<B>Emergency shuttle</B><BR>" dat += "<B>Emergency shuttle</B><BR>"
if(EMERGENCY_IDLE_OR_RECALLED) if(EMERGENCY_IDLE_OR_RECALLED)
dat += "<a href='?_src_=holder;[HrefToken()];call_shuttle=1'>Call Shuttle</a><br>" dat += "<a href='?_src_=holder;[HrefToken()];call_shuttle=1'>Call Shuttle</a><br>"

View File

@@ -114,7 +114,7 @@
end_time -= start_time end_time -= start_time
to_chat(usr, "<span class='admin'>SDQL query results: [query_text]</span>") to_chat(usr, "<span class='admin'>SDQL query results: [query_text]</span>")
to_chat(usr, "<span class='admin'>SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.</span>") to_chat(usr, "<span class='admin'>SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.</span>")
to_chat(usr, "<span class='admin'>SDQL query took [end_time/10] seconds to complete.</span>") to_chat(usr, "<span class='admin'>SDQL query took [DisplayTimeText(end_time)] to complete.</span>")
/proc/SDQL_qdel_datum(datum/d) /proc/SDQL_qdel_datum(datum/d)
qdel(d) qdel(d)

View File

@@ -399,9 +399,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
dat += "</b>[GLOB.TAB][TicketHref("Refresh", ref_src)][GLOB.TAB][TicketHref("Re-Title", ref_src, "retitle")]" dat += "</b>[GLOB.TAB][TicketHref("Refresh", ref_src)][GLOB.TAB][TicketHref("Re-Title", ref_src, "retitle")]"
if(state != AHELP_ACTIVE) if(state != AHELP_ACTIVE)
dat += "[GLOB.TAB][TicketHref("Reopen", ref_src, "reopen")]" dat += "[GLOB.TAB][TicketHref("Reopen", ref_src, "reopen")]"
dat += "<br><br>Opened at: [gameTimestamp(wtime = opened_at)] (Approx [(world.time - opened_at) / 600] minutes ago)" dat += "<br><br>Opened at: [gameTimestamp(wtime = opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)"
if(closed_at) if(closed_at)
dat += "<br>Closed at: [gameTimestamp(wtime = closed_at)] (Approx [(world.time - closed_at) / 600] minutes ago)" dat += "<br>Closed at: [gameTimestamp(wtime = closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)"
dat += "<br><br>" dat += "<br><br>"
if(initiator) if(initiator)
dat += "<b>Actions:</b> [FullMonty(ref_src)]<br>" dat += "<b>Actions:</b> [FullMonty(ref_src)]<br>"

View File

@@ -43,8 +43,8 @@
log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] lastDblClick = [M.next_click] world.time = [world.time]") log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] lastDblClick = [M.next_click] world.time = [world.time]")
M.next_move = 1 M.next_move = 1
M.next_click = 0 M.next_click = 0
message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!") message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [DisplayTimeText(largest_move_time)]!")
message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!") message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [DisplayTimeText(largest_click_time)]!")
message_admins("world.time = [world.time]") message_admins("world.time = [world.time]")
SSblackbox.add_details("admin_verb","Unfreeze Everyone") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! SSblackbox.add_details("admin_verb","Unfreeze Everyone") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return return

View File

@@ -33,7 +33,7 @@
var/escape_in_progress = FALSE var/escape_in_progress = FALSE
var/message_cooldown var/message_cooldown
var/breakout_time = 0.5 var/breakout_time = 300
/obj/machinery/atmospherics/components/unary/cryo_cell/Initialize() /obj/machinery/atmospherics/components/unary/cryo_cell/Initialize()
. = ..() . = ..()
@@ -246,9 +246,9 @@
user.changeNext_move(CLICK_CD_BREAKOUT) user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT user.last_special = world.time + CLICK_CD_BREAKOUT
user.visible_message("<span class='notice'>You see [user] kicking against the glass of [src]!</span>", \ user.visible_message("<span class='notice'>You see [user] kicking against the glass of [src]!</span>", \
"<span class='notice'>You struggle inside [src], kicking the release with your foot... (this will take about [(breakout_time<1) ? "[breakout_time*60] seconds" : "[breakout_time] minute\s"].)</span>", \ "<span class='notice'>You struggle inside [src], kicking the release with your foot... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
"<span class='italics'>You hear a thump from [src].</span>") "<span class='italics'>You hear a thump from [src].</span>")
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src ) if(!user || user.stat != CONSCIOUS || user.loc != src )
return return
user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \ user.visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>", \

View File

@@ -210,7 +210,7 @@
return return
if(user.ckey in team_members) if(user.ckey in team_members)
if(user.ckey in recently_dead_ckeys) if(user.ckey in recently_dead_ckeys)
to_chat(user, "It must be more than [respawn_cooldown/10] seconds from your last death to respawn!") to_chat(user, "It must be more than [DisplayTimeText(respawn_cooldown)] from your last death to respawn!")
return return
var/client/new_team_member = user.client var/client/new_team_member = user.client
if(user.mind && user.mind.current) if(user.mind && user.mind.current)

View File

@@ -123,7 +123,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
to_chat(user, "<span class='notice'>Error: No destination found.</span>") to_chat(user, "<span class='notice'>Error: No destination found.</span>")
return return
if(world.time < wait) if(world.time < wait)
to_chat(user, "<span class='notice'>Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.</span>") to_chat(user, "<span class='notice'>Error: Warpspace triangulation in progress. Estimated time to completion: [DisplayTimeText(wait - world.time)].</span>")
return return
for(var/obj/machinery/gateway/G in linked) for(var/obj/machinery/gateway/G in linked)

View File

@@ -88,7 +88,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
if(usrinfo) //If this info isn't null, it hasn't been added yet if(usrinfo) //If this info isn't null, it hasn't been added yet
desclines.Add(usrinfo) desclines.Add(usrinfo)
if(silencing) if(silencing)
desclines += " (This error will now be silenced for [configured_error_silence_time / 600] minutes)" desclines += " (This error will now be silenced for [DisplayTimeText(configured_error_silence_time)])"
if(GLOB.error_cache) if(GLOB.error_cache)
GLOB.error_cache.log_error(E, desclines) GLOB.error_cache.log_error(E, desclines)

View File

@@ -391,12 +391,7 @@
/mob/dead/new_player/proc/LateChoices() /mob/dead/new_player/proc/LateChoices()
var/mills = world.time - SSticker.round_start_time // 1/10 of a second, not real milliseconds but whatever var/dat = "<div class='notice'>Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)]</div>"
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
var/mins = (mills % 36000) / 600
var/hours = mills / 36000
var/dat = "<div class='notice'>Round Duration: [round(hours)]h [round(mins)]m</div>"
if(SSshuttle.emergency) if(SSshuttle.emergency)
switch(SSshuttle.emergency.mode) switch(SSshuttle.emergency.mode)

View File

@@ -296,10 +296,9 @@
return return
I.being_removed = TRUE I.being_removed = TRUE
breakouttime = I.breakouttime breakouttime = I.breakouttime
var/displaytime = breakouttime / 600
if(!cuff_break) if(!cuff_break)
visible_message("<span class='warning'>[src] attempts to remove [I]!</span>") visible_message("<span class='warning'>[src] attempts to remove [I]!</span>")
to_chat(src, "<span class='notice'>You attempt to remove [I]... (This will take around [displaytime] minutes and you need to stand still.)</span>") to_chat(src, "<span class='notice'>You attempt to remove [I]... (This will take around [DisplayTimeText(breakouttime)] and you need to stand still.)</span>")
if(do_after(src, breakouttime, 0, target = src)) if(do_after(src, breakouttime, 0, target = src))
clear_cuffs(I, cuff_break) clear_cuffs(I, cuff_break)
else else

View File

@@ -231,7 +231,7 @@
if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore
return return
var/time_taken = I.embedded_unsafe_removal_time*I.w_class var/time_taken = I.embedded_unsafe_removal_time*I.w_class
usr.visible_message("<span class='warning'>[usr] attempts to remove [I] from their [L.name].</span>","<span class='notice'>You attempt to remove [I] from your [L.name]... (It will take [time_taken/10] seconds.)</span>") usr.visible_message("<span class='warning'>[usr] attempts to remove [I] from their [L.name].</span>","<span class='notice'>You attempt to remove [I] from your [L.name]... (It will take [DisplayTimeText(time_taken)].)</span>")
if(do_after(usr, time_taken, needhand = 1, target = src)) if(do_after(usr, time_taken, needhand = 1, target = src))
if(!I || !L || I.loc != src || !(I in L.embedded_objects)) if(!I || !L || I.loc != src || !(I in L.embedded_objects))
return return

View File

@@ -97,7 +97,7 @@
/mob/living/silicon/ai/proc/announcement() /mob/living/silicon/ai/proc/announcement()
var/static/announcing_vox = 0 // Stores the time of the last announcement var/static/announcing_vox = 0 // Stores the time of the last announcement
if(announcing_vox > world.time) if(announcing_vox > world.time)
to_chat(src, "<span class='notice'>Please wait [round((announcing_vox - world.time) / 10)] seconds.</span>") to_chat(src, "<span class='notice'>Please wait [DisplayTimeText(announcing_vox - world.time)].</span>")
return return
var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text

View File

@@ -159,7 +159,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
resulthealth = round((summoner.health / summoner.maxHealth) * 100, 0.5) resulthealth = round((summoner.health / summoner.maxHealth) * 100, 0.5)
stat(null, "Summoner Health: [resulthealth]%") stat(null, "Summoner Health: [resulthealth]%")
if(cooldown >= world.time) if(cooldown >= world.time)
stat(null, "Manifest/Recall Cooldown Remaining: [max(round((cooldown - world.time)*0.1, 0.1), 0)] seconds") stat(null, "Manifest/Recall Cooldown Remaining: [DisplayTimeText(cooldown - world.time)]")
/mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range /mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range
. = ..() . = ..()

View File

@@ -30,7 +30,7 @@
..() ..()
if(statpanel("Status")) if(statpanel("Status"))
if(stealthcooldown >= world.time) if(stealthcooldown >= world.time)
stat(null, "Stealth Cooldown Remaining: [max(round((stealthcooldown - world.time)*0.1, 0.1), 0)] seconds") stat(null, "Stealth Cooldown Remaining: [DisplayTimeText(stealthcooldown - world.time)]")
/mob/living/simple_animal/hostile/guardian/assassin/AttackingTarget() /mob/living/simple_animal/hostile/guardian/assassin/AttackingTarget()
. = ..() . = ..()
@@ -79,7 +79,7 @@
updatestealthalert() updatestealthalert()
toggle = TRUE toggle = TRUE
else if(!forced) else if(!forced)
to_chat(src, "<span class='danger'><B>You cannot yet enter stealth, wait another [max(round((stealthcooldown - world.time)*0.1, 0.1), 0)] seconds!</span></B>") to_chat(src, "<span class='danger'><B>You cannot yet enter stealth, wait another [DisplayTimeText(stealthcooldown - world.time)]!</span></B>")
/mob/living/simple_animal/hostile/guardian/assassin/proc/updatestealthalert() /mob/living/simple_animal/hostile/guardian/assassin/proc/updatestealthalert()
if(stealthcooldown <= world.time) if(stealthcooldown <= world.time)

View File

@@ -14,7 +14,7 @@
..() ..()
if(statpanel("Status")) if(statpanel("Status"))
if(bomb_cooldown >= world.time) if(bomb_cooldown >= world.time)
stat(null, "Bomb Cooldown Remaining: [max(round((bomb_cooldown - world.time)*0.1, 0.1), 0)] seconds") stat(null, "Bomb Cooldown Remaining: [DisplayTimeText(bomb_cooldown - world.time)]")
/mob/living/simple_animal/hostile/guardian/bomb/AttackingTarget() /mob/living/simple_animal/hostile/guardian/bomb/AttackingTarget()
. = ..() . = ..()

View File

@@ -24,7 +24,7 @@
..() ..()
if(statpanel("Status")) if(statpanel("Status"))
if(beacon_cooldown >= world.time) if(beacon_cooldown >= world.time)
stat(null, "Beacon Cooldown Remaining: [max(round((beacon_cooldown - world.time)*0.1, 0.1), 0)] seconds") stat(null, "Beacon Cooldown Remaining: [DisplayTimeText(beacon_cooldown - world.time)]")
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
. = ..() . = ..()

View File

@@ -20,7 +20,7 @@
if(href_list["move"]) if(href_list["move"])
var/obj/item/circuitboard/computer/syndicate_shuttle/board = circuit var/obj/item/circuitboard/computer/syndicate_shuttle/board = circuit
if(board.challenge && world.time < SYNDICATE_CHALLENGE_TIMER) if(board.challenge && world.time < SYNDICATE_CHALLENGE_TIMER)
to_chat(usr, "<span class='warning'>You've issued a combat challenge to the station! You've got to give them at least [round(((SYNDICATE_CHALLENGE_TIMER - world.time) / 10) / 60)] more minutes to allow them to prepare.</span>") to_chat(usr, "<span class='warning'>You've issued a combat challenge to the station! You've got to give them at least [DisplayTimeText(SYNDICATE_CHALLENGE_TIMER - world.time)] more to allow them to prepare.</span>")
return 0 return 0
board.moved = TRUE board.moved = TRUE
..() ..()

View File

@@ -82,7 +82,7 @@ a.updated {
mystocks = S.shareholders[logged_in] mystocks = S.shareholders[logged_in]
dat += "<hr /><div class='stock'><span class='company'>[S.name]</span> <span class='s_company'>([S.short_name])</span>[S.bankrupt ? " <b style='color:red'>BANKRUPT</b>" : null]<br>" dat += "<hr /><div class='stock'><span class='company'>[S.name]</span> <span class='s_company'>([S.short_name])</span>[S.bankrupt ? " <b style='color:red'>BANKRUPT</b>" : null]<br>"
if (S.last_unification) if (S.last_unification)
dat += "<b>Unified shares</b> [(world.time - S.last_unification) / 600] minutes ago.<br>" dat += "<b>Unified shares</b> [DisplayTimeText(world.time - S.last_unification)] ago.<br>"
dat += "<b>Current value per share:</b> [S.current_value] | <a href='?src=\ref[src];viewhistory=\ref[S]'>View history</a><br><br>" dat += "<b>Current value per share:</b> [S.current_value] | <a href='?src=\ref[src];viewhistory=\ref[S]'>View history</a><br><br>"
dat += "You currently own <b>[mystocks]</b> shares in this company. There are [S.available_shares] purchasable shares on the market currently.<br>" dat += "You currently own <b>[mystocks]</b> shares in this company. There are [S.available_shares] purchasable shares on the market currently.<br>"
if (S.bankrupt) if (S.bankrupt)

View File

@@ -61,7 +61,7 @@
else else
cooldown = revive_cost + world.time cooldown = revive_cost + world.time
reviving = FALSE reviving = FALSE
to_chat(owner, "<span class='notice'>Your reviver implant shuts down and starts recharging. It will be ready again in [revive_cost/10] seconds.</span>") to_chat(owner, "<span class='notice'>Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].</span>")
return return
if(cooldown > world.time) if(cooldown > world.time)

View File

@@ -91,7 +91,7 @@
. = ..() . = ..()
if(!IsAvailable()) if(!IsAvailable())
if(world.time < cords.next_command) if(world.time < cords.next_command)
to_chat(owner, "<span class='notice'>You must wait [(cords.next_command - world.time)/10] seconds before Speaking again.</span>") to_chat(owner, "<span class='notice'>You must wait [DisplayTimeText(cords.next_command - world.time)] before Speaking again.</span>")
return return
var/command = input(owner, "Speak with the Voice of God", "Command") var/command = input(owner, "Speak with the Voice of God", "Command")
if(QDELETED(src) || QDELETED(owner)) if(QDELETED(src) || QDELETED(owner))
@@ -102,7 +102,7 @@
/obj/item/organ/vocal_cords/colossus/can_speak_with() /obj/item/organ/vocal_cords/colossus/can_speak_with()
if(world.time < next_command) if(world.time < next_command)
to_chat(owner, "<span class='notice'>You must wait [(next_command - world.time)/10] seconds before Speaking again.</span>") to_chat(owner, "<span class='notice'>You must wait [DisplayTimeText(next_command - world.time)] before Speaking again.</span>")
return FALSE return FALSE
if(!owner) if(!owner)
return FALSE return FALSE