[READY]Makes addtimer use callbacks (#22660)

* Makes addtimer use callbacks

* I broke the comment

* I fucked up the regex

* this was a silly idea.
This commit is contained in:
Kyle Spier-Swenson
2017-01-04 16:02:56 +13:00
committed by oranges
parent fd337f0741
commit bee4b132a3
183 changed files with 358 additions and 376 deletions
+1 -1
View File
@@ -1317,7 +1317,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
#define QDEL_IN(item, time) addtimer(GLOBAL_PROC, "qdel", time, TIMER_NORMAL, item)
#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, item), time)
/proc/check_for_cleanbot_bug()
var/static/admins_warned //bet you didn't know you could do this!
+1 -1
View File
@@ -56,7 +56,7 @@
animate(alert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
if(alert.timeout)
addtimer(src, "alert_timeout", alert.timeout, TIMER_NORMAL, alert, category)
addtimer(CALLBACK(src, .proc/alert_timeout, alert, category), alert.timeout)
alert.timeout = world.time + alert.timeout - world.tick_lag
return alert
+1 -1
View File
@@ -112,7 +112,7 @@
C.parallax_movedir = new_parallax_movedir
if (C.parallax_animate_timer)
deltimer(C.parallax_animate_timer)
C.parallax_animate_timer = addtimer(src, .update_parallax_motionblur, min(shortesttimer, PARALLAX_LOOP_TIME), TIMER_NORMAL, C, animatedir, new_parallax_movedir, newtransform)
C.parallax_animate_timer = addtimer(CALLBACK(src, .proc/update_parallax_motionblur, C, animatedir, new_parallax_movedir, newtransform), min(shortesttimer, PARALLAX_LOOP_TIME))
/datum/hud/proc/update_parallax_motionblur(client/C, animatedir, new_parallax_movedir, matrix/newtransform)
C.parallax_animate_timer = FALSE
+1 -1
View File
@@ -146,7 +146,7 @@ var/list/obj/item/device/paicard/pai_card_list = list()
continue
//G << 'sound/misc/server-ready.ogg' //Alerting them to their consideration
G << "<span class='ghostalert'>Someone is requesting a pAI personality! Use the pAI button to submit yourself as one.</span>"
addtimer(src, "spam_again", spam_delay)
addtimer(CALLBACK(src, .proc/spam_again), spam_delay)
var/list/available = list()
for(var/datum/paiCandidate/c in SSpai.candidates)
if(c.ready)
+12 -30
View File
@@ -26,30 +26,19 @@ var/datum/subsystem/timer/SStimer
can_fire = 0 //nothing to do, lets stop firing.
return
for(var/datum/timedevent/event in processing)
if(!event.thingToCall || qdeleted(event.thingToCall))
qdel(event)
if(event.timeToRun <= world.time)
runevent(event)
event.callback.InvokeAsync()
qdel(event)
if (MC_TICK_CHECK)
return
/datum/subsystem/timer/proc/runevent(datum/timedevent/event)
set waitfor = 0
if(event.thingToCall == GLOBAL_PROC && istext(event.procToCall))
call("/proc/[event.procToCall]")(arglist(event.argList))
else
call(event.thingToCall, event.procToCall)(arglist(event.argList))
/datum/subsystem/timer/Recover()
processing |= SStimer.processing
hashes |= SStimer.hashes
/datum/timedevent
var/thingToCall
var/procToCall
var/datum/callback/callback
var/timeToRun
var/argList
var/id
var/hash
var/static/nextid = 1
@@ -62,39 +51,32 @@ var/datum/subsystem/timer/SStimer
SStimer.hashes -= hash
return QDEL_HINT_IWILLGC
/proc/addtimer(thingToCall, procToCall, wait, unique = TIMER_NORMAL, ...)
if (!thingToCall || !procToCall)
/proc/addtimer(datum/callback/callback, wait, unique = TIMER_NORMAL)
if (!callback)
return
if (!SStimer.can_fire)
SStimer.can_fire = 1
var/datum/timedevent/event = new()
event.thingToCall = thingToCall
event.procToCall = procToCall
event.callback = callback
event.timeToRun = world.time + wait
var/hashlist = args.Copy()
var/list/hashlist = args.Copy()
hashlist[1] = "[thingToCall](\ref[thingToCall])"
hashlist[1] = "[callback.object](\ref[callback.object])"
hashlist.Insert(2, callback.delegate, callback.arguments)
event.hash = jointext(hashlist, null)
var/bad_args = unique != TIMER_NORMAL && unique != TIMER_UNIQUE
if(args.len > 4 || bad_args)
if(bad_args)
stack_trace("Invalid arguments in call to addtimer! Attempt to call [thingToCall] proc [procToCall]")
event.argList = args.Copy(4)
else
event.argList = args.Copy(5)
// Check for dupes if unique = 1.
if(!bad_args && unique != TIMER_NORMAL) //faster than checking if(unique == TIMER_UNIQUE)
if(unique == TIMER_UNIQUE)
var/datum/timedevent/hash_event = SStimer.hashes[event.hash]
if(hash_event)
return hash_event.id
SStimer.hashes[event.hash] = event
if (wait <= 0)
SStimer.runevent(event)
callback.InvokeAsync()
SStimer.hashes -= event.hash
return
// If we are unique (or we're not checking that), add the timer and return the id.
SStimer.processing += event
+1 -1
View File
@@ -29,7 +29,7 @@ var/datum/subsystem/weather/SSweather
var/datum/weather/W = pickweight(possible_weather_for_this_z)
run_weather(W.name, Z)
eligible_zlevels -= Z
addtimer(src, "make_z_eligible", rand(3000, 6000) + W.weather_duration_upper, TIMER_UNIQUE, Z) //Around 5-10 minutes between weathers
addtimer(CALLBACK(src, .proc/make_z_eligible, Z), rand(3000, 6000) + W.weather_duration_upper, TIMER_UNIQUE) //Around 5-10 minutes between weathers
/datum/subsystem/weather/Initialize(start_timeofday)
..()
+1 -1
View File
@@ -40,7 +40,7 @@
ticker.mode.servants_of_ratvar += owner.mind
ticker.mode.update_servant_icons_added(owner.mind)
if(jobban_isbanned(owner, ROLE_SERVANT_OF_RATVAR))
addtimer(ticker.mode, "replace_jobbaned_player", 0, TIMER_NORMAL, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR)
addtimer(CALLBACK(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR), 0)
if(owner.mind)
owner.mind.special_role = "Servant of Ratvar"
owner.attack_log += "\[[time_stamp()]\] <font color=#BE8700>Has been converted to the cult of Ratvar!</font>"
+1 -1
View File
@@ -20,7 +20,7 @@
var/datum/game_mode/cult/C = ticker.mode
C.memorize_cult_objectives(owner.mind)
if(jobban_isbanned(owner, ROLE_CULTIST))
addtimer(ticker.mode, "replace_jobbaned_player", 0, TIMER_NORMAL, owner, ROLE_CULTIST, ROLE_CULTIST)
addtimer(CALLBACK(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_CULTIST, ROLE_CULTIST), 0)
if(owner.mind)
owner.mind.special_role = "Cultist"
owner.attack_log += "\[[time_stamp()]\] <font color=#960000>Has been converted to the cult of Nar'Sie!</font>"
+2 -2
View File
@@ -57,7 +57,7 @@
/datum/callback/proc/Invoke(...)
if (!object)
CRASH("Cannot call null.[delegate]")
return
var/list/calling_arguments = arguments
@@ -75,7 +75,7 @@
/datum/callback/proc/InvokeAsync(...)
set waitfor = 0
if (!object)
CRASH("Cannot call null.[delegate]")
return
var/list/calling_arguments = arguments
+2 -2
View File
@@ -82,9 +82,9 @@
/datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound)
if(location)
if(effect)
addtimer(src, "do_effect", 0, TIMER_NORMAL, location, effect)
addtimer(CALLBACK(src, .proc/do_effect, location, effect), 0)
if(sound)
addtimer(src, "do_sound", 0, TIMER_NORMAL, location, sound)
addtimer(CALLBACK(src, .proc/do_sound, location, sound), 0)
/datum/teleport/proc/do_effect(atom/location, datum/effect_system/effect)
src = null
+1 -1
View File
@@ -471,7 +471,7 @@
D.adjustStaminaLoss(20)
D.Stun(5)
restraining = 1
addtimer(src, "drop_restraining", 50, TIMER_UNIQUE)
addtimer(CALLBACK(src, .proc/drop_restraining), 50, TIMER_UNIQUE)
return 1
/datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D)
+2 -2
View File
@@ -62,7 +62,7 @@
var/damnation_type = 0
var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
var/isholy = FALSE //is this person a chaplain or admin role allowed to use bibles
var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems)
/datum/mind/New(var/key)
@@ -1496,7 +1496,7 @@
if(istype(S, type))
continue
S.charge_counter = delay
addtimer(S, "start_recharge", 0)
addtimer(CALLBACK(S, /obj/effect/proc_holder/spell.proc/start_recharge), 0)
/datum/mind/proc/get_ghost(even_if_they_cant_reenter)
for(var/mob/dead/observer/G in dead_mob_list)
+1 -1
View File
@@ -237,7 +237,7 @@
owner.visible_message("<span class='danger'>[owner] starts having a seizure!</span>", "<span class='userdanger'>You have a seizure!</span>")
owner.Paralyse(10)
owner.Jitter(1000)
addtimer(src, "jitter_less", 90, TIMER_NORMAL, owner)
addtimer(CALLBACK(src, .proc/jitter_less, owner), 90)
/datum/mutation/human/epilepsy/proc/jitter_less(mob/living/carbon/human/owner)
if(owner)
+1 -1
View File
@@ -110,7 +110,7 @@
owner.add_stun_absorption("inathneq", 150, 2, "'s flickering blue aura momentarily intensifies!", "Inath-neq's power absorbs the stun!", " glowing with a flickering blue light!")
owner.status_flags |= GODMODE
animate(owner, color = oldcolor, time = 150, easing = EASE_IN)
addtimer(owner, "update_atom_colour", 150)
addtimer(CALLBACK(owner, /atom/proc/update_atom_colour), 150)
playsound(owner, 'sound/magic/Ethereal_Enter.ogg', 50, 1)
/datum/status_effect/inathneqs_endowment/on_remove()
+1 -1
View File
@@ -19,7 +19,7 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
if(owner)
LAZYADD(owner.status_effects, src)
all_status_effects += src
addtimer(src, "start_ticking", 1) //Give us time to set any variables
addtimer(CALLBACK(src, .proc/start_ticking), 1) //Give us time to set any variables
/datum/status_effect/Destroy()
STOP_PROCESSING(SSprocessing, src)
+3 -3
View File
@@ -70,7 +70,7 @@
M << telegraph_message
if(telegraph_sound)
M << sound(telegraph_sound)
addtimer(src, "start", telegraph_duration)
addtimer(CALLBACK(src, .proc/start), telegraph_duration)
/datum/weather/proc/start()
if(stage >= MAIN_STAGE)
@@ -85,7 +85,7 @@
if(weather_sound)
M << sound(weather_sound)
START_PROCESSING(SSweather, src)
addtimer(src, "wind_down", weather_duration)
addtimer(CALLBACK(src, .proc/wind_down), weather_duration)
/datum/weather/proc/wind_down()
if(stage >= WIND_DOWN_STAGE)
@@ -100,7 +100,7 @@
if(end_sound)
M << sound(end_sound)
STOP_PROCESSING(SSweather, src)
addtimer(src, "end", end_duration)
addtimer(CALLBACK(src, .proc/end), end_duration)
/datum/weather/proc/end()
if(stage == END_STAGE)
+2 -2
View File
@@ -31,13 +31,13 @@
if(!A.shorted)
A.shorted = TRUE
A.update_icon()
addtimer(A, "reset", 1200, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/airalarm.proc/reset, wire), 1200)
if(WIRE_IDSCAN) // Toggle lock.
A.locked = !A.locked
if(WIRE_AI) // Disable AI control for a while.
if(!A.aidisabled)
A.aidisabled = TRUE
addtimer(A, "reset", 100, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/airalarm.proc/reset, wire), 100)
if(WIRE_PANIC) // Toggle panic siphon.
if(!A.shorted)
if(A.mode == 1) // AALARM_MODE_SCRUB
+3 -3
View File
@@ -29,14 +29,14 @@
if(WIRE_POWER1, WIRE_POWER2) // Short for a long while.
if(!A.shorted)
A.shorted = TRUE
addtimer(A, "reset", 1200, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/power/apc.proc/reset, wire), 1200)
if(WIRE_IDSCAN) // Unlock for a little while.
A.locked = FALSE
addtimer(A, "reset", 300, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/power/apc.proc/reset, wire), 300)
if(WIRE_AI) // Disable AI control for a very short time.
if(!A.aidisabled)
A.aidisabled = TRUE
addtimer(A, "reset", 10, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/power/apc.proc/reset, wire), 10)
/datum/wires/apc/on_cut(index, mend)
var/obj/machinery/power/apc/A = holder
+3 -3
View File
@@ -27,13 +27,13 @@
switch(wire)
if(WIRE_HACK)
A.adjust_hacked(!A.hacked)
addtimer(A, "reset", 60, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/autolathe.proc/reset, wire), 60)
if(WIRE_SHOCK)
A.shocked = !A.shocked
addtimer(A, "reset", 60, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/autolathe.proc/reset, wire), 60)
if(WIRE_DISABLE)
A.disabled = !A.disabled
addtimer(A, "reset", 60, TIMER_NORMAL, wire)
addtimer(CALLBACK(A, /obj/machinery/autolathe.proc/reset, wire), 60)
/datum/wires/autolathe/on_cut(wire, mend)
var/obj/machinery/autolathe/A = holder
+4 -4
View File
@@ -197,7 +197,7 @@ var/list/teleportlocs = list()
if(D.operating)
D.nextstate = CLOSED
else if(!D.density)
addtimer(D, "close", 0)
addtimer(CALLBACK(D, /obj/machinery/door/firedoor.proc/close), 0)
for(var/obj/machinery/firealarm/F in RA)
F.update_icon()
for (var/obj/machinery/camera/C in RA)
@@ -223,7 +223,7 @@ var/list/teleportlocs = list()
if(D.operating)
D.nextstate = OPEN
else if(D.density)
addtimer(D, "open", 0)
addtimer(CALLBACK(D, /obj/machinery/door/firedoor.proc/open), 0)
for(var/obj/machinery/firealarm/F in RA)
F.update_icon()
@@ -257,7 +257,7 @@ var/list/teleportlocs = list()
for (var/mob/living/silicon/SILICON in player_list)
if(SILICON.triggerAlarm("Burglar", src, cameras, trigger))
//Cancel silicon alert after 1 minute
addtimer(SILICON, "cancelAlarm", 600, TIMER_NORMAL,"Burglar",src,trigger)
addtimer(CALLBACK(SILICON, /mob/living/silicon.proc/cancelAlarm,"Burglar",src,trigger), 600)
/area/proc/set_fire_alarm_effect()
fire = 1
@@ -294,7 +294,7 @@ var/list/teleportlocs = list()
if(D.operating)
D.nextstate = OPEN
else if(D.density)
addtimer(D, "open", 0)
addtimer(CALLBACK(D, /obj/machinery/door/firedoor.proc/open), 0)
/area/proc/updateicon()
if ((fire || eject || party) && (!requires_power||power_environ))//If it doesn't require power, can still activate this proc.
@@ -22,7 +22,7 @@
user.visible_message("<span class='warning'>[user] vomits a glob of acid on [user.p_their()] [O]!</span>", \
"<span class='warning'>We vomit acidic ooze onto our restraints!</span>")
addtimer(src, "dissolve_handcuffs", 30, TIMER_NORMAL, user, O)
addtimer(CALLBACK(src, .proc/dissolve_handcuffs, user, O), 30)
used = TRUE
if(user.wear_suit && user.wear_suit.breakouttime && !used)
@@ -31,7 +31,7 @@
return 0
user.visible_message("<span class='warning'>[user] vomits a glob of acid across the front of [user.p_their()] [S]!</span>", \
"<span class='warning'>We vomit acidic ooze onto our straight jacket!</span>")
addtimer(src, "dissolve_straightjacket", 30, TIMER_NORMAL, user, S)
addtimer(CALLBACK(src, .proc/dissolve_straightjacket, user, S), 30)
used = TRUE
@@ -41,7 +41,7 @@
return 0
C.visible_message("<span class='warning'>[C]'s hinges suddenly begin to melt and run!</span>")
user << "<span class='warning'>We vomit acidic goop onto the interior of [C]!</span>"
addtimer(src, "open_closet", 70, TIMER_NORMAL, user, C)
addtimer(CALLBACK(src, .proc/open_closet, user, C), 70)
used = TRUE
if(istype(user.loc, /obj/structure/spider/cocoon) && !used)
@@ -50,7 +50,7 @@
return 0
C.visible_message("<span class='warning'>[src] shifts and starts to fall apart!</span>")
user << "<span class='warning'>We secrete acidic enzymes from our skin and begin melting our cocoon...</span>"
addtimer(src, "dissolve_cocoon", 25, TIMER_NORMAL, user, C) //Very short because it's just webs
addtimer(CALLBACK(src, .proc/dissolve_cocoon, user, C), 25) //Very short because it's just webs
used = TRUE
if(used)
@@ -18,7 +18,7 @@
user.update_stat()
user.update_canmove()
addtimer(src, "ready_to_regenerate", LING_FAKEDEATH_TIME, TIMER_UNIQUE, user)
addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE)
feedback_add_details("changeling_powers","FD")
return 1
@@ -36,7 +36,7 @@
by quick repeated use!</span>"
recent_uses++
addtimer(src, "fleshmend", 0, TIMER_NORMAL, user)
addtimer(CALLBACK(src, .proc/fleshmend, user), 0)
feedback_add_details("changeling_powers","RR")
return 1
@@ -149,7 +149,7 @@
target.visible_message("<span class='warning'>A grotesque blade forms around [target.name]\'s arm!</span>", "<span class='userdanger'>Your arm twists and mutates, transforming into a horrific monstrosity!</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
playsound(target, 'sound/effects/blobattack.ogg', 30, 1)
addtimer(src, "remove_fake", 600, TIMER_NORMAL, target, blade)
addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600)
feedback_add_details("changeling_powers","AS")
return 1
@@ -224,7 +224,7 @@
/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target)
add_logs(user, target, "stung", "LSD sting")
addtimer(src, "hallucination_time", rand(300,600), TIMER_NORMAL, target)
addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600))
feedback_add_details("changeling_powers","HS")
return 1
@@ -30,7 +30,7 @@
/obj/effect/clockwork/overlay/wall/New()
..()
queue_smooth_neighbors(src)
addtimer(GLOBAL_PROC, "queue_smooth", 1, TIMER_NORMAL, src)
addtimer(CALLBACK(GLOBAL_PROC, .proc/queue_smooth, src), 1)
/obj/effect/clockwork/overlay/wall/Destroy()
queue_smooth_neighbors(src)
@@ -111,7 +111,7 @@
if(glow)
qdel(glow)
animate(src, color = oldcolor, time = 20)
addtimer(src, "update_atom_colour", 20)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 20)
visible_message("<span class='warning'>[src] slowly stops glowing!</span>")
return
post_channel(L)
@@ -137,7 +137,7 @@
qdel(src)
else
animate(src, color = oldcolor, time = 20)
addtimer(src, "update_atom_colour", 20)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 20)
visible_message("<span class='warning'>[src] slowly stops glowing!</span>")
@@ -217,7 +217,7 @@
var/datum/status_effect/cyborg_power_regen/CPR = cyborg.apply_status_effect(STATUS_EFFECT_POWERREGEN)
CPR.power_to_give = giving_power * 0.1 //ten ticks, restoring 10% each
animate(cyborg, color = previous_color, time = 100)
addtimer(cyborg, "update_atom_colour", 100)
addtimer(CALLBACK(cyborg, /atom/proc/update_atom_colour), 100)
/obj/effect/clockwork/sigil/transmission/proc/cyborg_checks(mob/living/silicon/robot/cyborg)
if(!cyborg.cell)
@@ -287,7 +287,7 @@
return
visible_message("<span class='warning'>[src] begins to glow bright blue!</span>")
animate(src, alpha = 255, time = 10)
addtimer(src, "update_alpha", 10)
addtimer(CALLBACK(src, .proc/update_alpha), 10)
sleep(10)
//as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality
while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && vitality)) && get_turf(L) == get_turf(src))
@@ -383,7 +383,7 @@
visible_message("<span class='warning'>[src] slowly stops glowing!</span>")
if(sigil_active || alpha == 255)
animate(src, alpha = initial(alpha), time = 10)
addtimer(src, "update_alpha", 10)
addtimer(CALLBACK(src, .proc/update_alpha), 10)
/obj/effect/clockwork/sigil/vitality/proc/update_alpha()
if(sigil_active)
@@ -15,7 +15,7 @@
/obj/effect/clockwork/spatial_gateway/New()
..()
addtimer(src, "check_setup", 1)
addtimer(CALLBACK(src, .proc/check_setup), 1)
/obj/effect/clockwork/spatial_gateway/Destroy()
deltimer(timerid)
@@ -135,7 +135,7 @@
if(!no_cost)
uses = max(0, uses - 1)
linked_gateway.uses = max(0, linked_gateway.uses - 1)
addtimer(src, "check_uses", 10)
addtimer(CALLBACK(src, .proc/check_uses), 10)
return TRUE
/obj/effect/clockwork/spatial_gateway/proc/check_uses()
@@ -188,7 +188,7 @@
if(reinf)
prosel_cost -= REPLICANT_ROD
for(var/obj/structure/grille/G in get_turf(src))
addtimer(proselytizer, "proselytize", 0, TIMER_NORMAL, G, user)
addtimer(CALLBACK(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/proselytize, G, user), 0)
return list("operation_time" = prosel_time, "new_obj_type" = windowtype, "alloy_cost" = prosel_cost, "spawn_dir" = dir, "dir_in_new" = new_dir)
/obj/structure/window/reinforced/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer)
@@ -64,7 +64,7 @@
add_logs(ranged_ability_user, L, "bound with Geis")
if(slab.speed_multiplier >= 0.5) //excuse my debug...
ranged_ability_user.notransform = TRUE
addtimer(src, "reset_user_notransform", 5, TIMER_NORMAL, ranged_ability_user) //stop us moving for a little bit so we don't break the scripture following this
addtimer(CALLBACK(src, .proc/reset_user_notransform, ranged_ability_user), 5) //stop us moving for a little bit so we don't break the scripture following this
slab.busy = null
var/datum/clockwork_scripture/geis/conversion = new
conversion.slab = slab
@@ -44,7 +44,7 @@
user.emote("scream")
user.apply_damage(30, BRUTE, "head")
user.adjustBrainLoss(30)
addtimer(user, "unEquip", 1, TIMER_NORMAL, src, 1) //equipped happens before putting stuff on(but not before picking items up). thus, we need to wait for it to be on before forcing it off.
addtimer(CALLBACK(user, /mob/living.proc/unEquip), src, 1) //equipped happens before putting stuff on(but not before picking items up), 1). thus, we need to wait for it to be on before forcing it off.
/obj/item/clothing/head/helmet/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
if(equipper && !is_servant_of_ratvar(equipper))
@@ -106,7 +106,7 @@
user.apply_damage(15, BURN, "chest")
user.adjust_fire_stacks(2)
user.IgniteMob()
addtimer(user, "unEquip", 1, TIMER_NORMAL, src, 1)
addtimer(CALLBACK(user, /mob/living.proc/unEquip, src, 1), 1)
/obj/item/clothing/gloves/clockwork
name = "clockwork gauntlets"
@@ -166,7 +166,7 @@
user.emote("scream")
user.apply_damage(7, BRUTE, "l_arm")
user.apply_damage(7, BRUTE, "r_arm")
addtimer(user, "unEquip", 1, TIMER_NORMAL, src, 1)
addtimer(CALLBACK(user, /mob/living.proc/unEquip, src, 1), 1)
/obj/item/clothing/shoes/clockwork
name = "clockwork treads"
@@ -213,4 +213,4 @@
user.emote("scream")
user.apply_damage(7, BURN, "l_leg")
user.apply_damage(7, BURN, "r_leg")
addtimer(user, "unEquip", 1, TIMER_NORMAL, src, 1)
addtimer(CALLBACK(user, /mob/living.proc/unEquip, src, 1), 1)
@@ -102,7 +102,7 @@
/obj/item/clockwork/slab/dropped(mob/user)
. = ..()
addtimer(src, "check_on_mob", 1, TIMER_NORMAL, user) //dropped is called before the item is out of the slot, so we need to check slightly later
addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later
/obj/item/clockwork/slab/proc/check_on_mob(mob/user)
if(user && !(src in user.held_items) && slab_ability && slab_ability.ranged_ability_user) //if we happen to check and we AREN'T in user's hands, remove whatever ability we have
@@ -436,7 +436,7 @@
if("toggle")
recollecting = !recollecting
if("recite")
addtimer(src, "recite_scripture", 0, TIMER_NORMAL, text2path(params["category"]), usr, FALSE)
addtimer(CALLBACK(src, .proc/recite_scripture, text2path(params["category"]), usr, FALSE), 0)
if("select")
selected_scripture = params["category"]
if("bind")
@@ -52,7 +52,7 @@
/obj/item/clothing/glasses/judicial_visor/dropped(mob/user)
. = ..()
addtimer(src, "check_on_mob", 1, TIMER_NORMAL, user) //dropped is called before the item is out of the slot, so we need to check slightly later
addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later
/obj/item/clothing/glasses/judicial_visor/proc/check_on_mob(mob/user)
if(user && src != user.get_item_by_slot(slot_glasses)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from
@@ -131,7 +131,7 @@
continue
V.recharging = TRUE //To prevent exploiting multiple visors to bypass the cooldown
V.update_status()
addtimer(V, "recharge_visor", (ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown) * 2, TIMER_NORMAL, ranged_ability_user)
addtimer(CALLBACK(V, /obj/item/clothing/glasses/judicial_visor.proc/recharge_visor), (ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown) * 2, ranged_ability_user)
clockwork_say(ranged_ability_user, text2ratvar("Kneel, heathens!"))
ranged_ability_user.visible_message("<span class='warning'>[ranged_ability_user]'s judicial visor fires a stream of energy at [target], creating a strange mark!</span>", "<span class='heavy_brass'>You direct [visor]'s power to [target]. You must wait for some time before doing this again.</span>")
var/turf/targetturf = get_turf(target)
@@ -139,7 +139,7 @@
add_logs(ranged_ability_user, targetturf, "created a judicial marker")
ranged_ability_user.update_action_buttons_icon()
ranged_ability_user.update_inv_glasses()
addtimer(visor, "recharge_visor", ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown, TIMER_NORMAL, ranged_ability_user)//Cooldown is reduced by 10x if Ratvar is up
addtimer(CALLBACK(visor, /obj/item/clothing/glasses/judicial_visor.proc/recharge_visor), ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown, ranged_ability_user)//Cooldown is reduced by 10x if Ratvar is up
remove_ranged_ability()
return TRUE
@@ -160,7 +160,7 @@
..()
SetLuminosity(4, 3)
user = caster
addtimer(src, "judicialblast", 0, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/judicialblast), 0)
/obj/effect/clockwork/judicial_marker/proc/judicialblast()
playsound(src, 'sound/magic/MAGIC_MISSILE.ogg', 50, 1, 1, 1)
@@ -36,7 +36,7 @@
throwforce = initial(throwforce)
armour_penetration = 0
clockwork_desc = "A powerful spear of Ratvarian making. It's more effective against enemy cultists and silicons, though it won't last for long."
timerid = addtimer(src, "break_spear", 600, TIMER_NORMAL)
timerid = addtimer(CALLBACK(src, .proc/break_spear), 600)
/obj/item/clockwork/ratvarian_spear/cyborg/ratvar_act() //doesn't break!
if(ratvar_awakens)
@@ -210,7 +210,7 @@
var/invoker_old_color = invoker.color
invoker.color = "#AF0AAF"
animate(invoker, color = invoker_old_color, time = flee_time+grace_period)
addtimer(invoker, "update_atom_colour", flee_time+grace_period)
addtimer(CALLBACK(invoker, /atom/proc/update_atom_colour), flee_time+grace_period)
if(chant_number != chant_amount) //if this is the last chant, we don't have a movement period because the chant is over
var/endtime = world.time + flee_time
var/starttime = world.time
@@ -204,7 +204,7 @@
playsound(invoker, 'sound/magic/lightningbolt.ogg', 100, 0)
if(invoker.stat == CONSCIOUS)
animate(invoker, color = oldcolor, time = 10)
addtimer(invoker, "update_atom_colour", 10)
addtimer(CALLBACK(invoker, /atom/proc/update_atom_colour), 10)
for(var/mob/living/L in view(7, invoker))
if(is_servant_of_ratvar(L) || L.null_rod_check())
continue
@@ -210,10 +210,10 @@
if(!ratvar_awakens)
R.clockwork_desc = "A powerful spear of Ratvarian making. It's more effective against enemy cultists and silicons, though it won't last for long."
owner << "<span class='warning'>Your spear begins to break down in this plane of existence. You can't use it for long!</span>"
R.timerid = addtimer(R, "break_spear", base_cooldown, TIMER_NORMAL)
R.timerid = addtimer(CALLBACK(R, /obj/item/clockwork/ratvarian_spear.proc/break_spear), base_cooldown)
cooldown = base_cooldown + world.time
owner.update_action_buttons_icon()
addtimer(src, "update_actions", base_cooldown, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/update_actions), base_cooldown)
return TRUE
/datum/action/innate/function_call/proc/update_actions()
@@ -36,7 +36,7 @@
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
addtimer(src, "update_atom_colour", 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/obj/structure/destructible/clockwork/examine(mob/user)
var/can_see_clockwork = is_servant_of_ratvar(user) || isobserver(user)
@@ -23,7 +23,7 @@
/obj/structure/destructible/clockwork/massive/celestial_gateway/New()
..()
addtimer(src, "spawn_animation", 0)
addtimer(CALLBACK(src, .proc/spawn_animation), 0)
/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/spawn_animation()
var/turf/T = get_turf(src)
@@ -208,7 +208,7 @@
sleep(3)
new/obj/structure/destructible/clockwork/massive/ratvar(startpoint)
else
addtimer(SSshuttle.emergency, "request", 0, TIMER_NORMAL, null, 0) //call the shuttle immediately
addtimer(CALLBACK(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 0), 0) //call the shuttle immediately
sleep(3)
send_to_playing_players("<span class='ratvar'>\"[text2ratvar("Behold")]!\"</span>\n<span class='inathneq_large'>\"[text2ratvar("See Engine's mercy")]!\"</span>\n\
<span class='sevtug_large'>\"[text2ratvar("Observe Engine's design skills")]!\"</span>\n<span class='nezbere_large'>\"[text2ratvar("Behold Engine's light")]!!\"</span>\n\
@@ -24,7 +24,7 @@
var/image/alert_overlay = image('icons/effects/clockwork_effects.dmi', "ratvar_alert")
var/area/A = get_area(src)
notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay)
addtimer(SSshuttle.emergency, "request", 50, TIMER_NORMAL, null, 0.1)
addtimer(CALLBACK(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0.1), 50)
/obj/structure/destructible/clockwork/massive/ratvar/Destroy()
ratvar_awakens--
+1 -1
View File
@@ -46,7 +46,7 @@
var/previouscolor = color
color = "#FAE48C"
animate(src, color = previouscolor, time = 8)
addtimer(src, "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
+4 -4
View File
@@ -188,7 +188,7 @@ structure_check() searches for nearby cultist structures required for the invoca
var/oldcolor = color
color = rgb(255, 0, 0)
animate(src, color = oldcolor, time = 5)
addtimer(src, "update_atom_colour", 5)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 5)
//Malformed Rune: This forms if a rune is not drawn correctly. Invoking it does nothing but hurt the user.
/obj/effect/rune/malformed
@@ -402,7 +402,7 @@ var/list/teleport_runes = list()
..()
do_sacrifice(L, invokers)
animate(src, color = oldcolor, time = 5)
addtimer(src, "update_atom_colour", 5)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 5)
rune_in_use = FALSE
/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers)
@@ -795,7 +795,7 @@ var/list/wall_runes = list()
W.density = TRUE
W.update_state()
W.spread_density()
density_timer = addtimer(src, "lose_density", 900)
density_timer = addtimer(CALLBACK(src, .proc/lose_density), 900)
/obj/effect/rune/wall/proc/lose_density()
if(density)
@@ -805,7 +805,7 @@ var/list/wall_runes = list()
var/oldcolor = color
add_atom_colour("#696969", FIXED_COLOUR_PRIORITY)
animate(src, color = oldcolor, time = 50, easing = EASE_IN)
addtimer(src, "recharge", 50)
addtimer(CALLBACK(src, .proc/recharge), 50)
/obj/effect/rune/wall/proc/recharge()
recharging = FALSE
+1 -1
View File
@@ -179,7 +179,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
G.add_gang_hud(gangster_mind)
if(jobban_isbanned(gangster_mind.current, ROLE_GANG))
addtimer(src, "replace_jobbaned_player", 0, TIMER_NORMAL, gangster_mind.current, ROLE_GANG, ROLE_GANG)
addtimer(CALLBACK(src, /datum/game_mode.proc/replace_jobbaned_player, gangster_mind.current, ROLE_GANG, ROLE_GANG), 0)
return 2
////////////////////////////////////////////////////////////////////
//Deals with players reverting to neutral (Not a gangster anymore)//
@@ -162,8 +162,8 @@
for(var/obj/machinery/door/D in airlocks)
if(D.z != ZLEVEL_STATION)
continue
addtimer(D, "hostile_lockdown", 0, TIMER_NORMAL, src)
addtimer(D, "disable_lockdown", 900)
addtimer(CALLBACK(D, /obj/machinery/door.proc/hostile_lockdown, src), 0)
addtimer(CALLBACK(D, /obj/machinery/door.proc/disable_lockdown), 900)
var/obj/machinery/computer/communications/C = locate() in machines
if(C)
@@ -172,9 +172,9 @@
verbs -= /mob/living/silicon/ai/proc/lockdown
minor_announce("Hostile runtime detected in door controllers. Isolation Lockdown protocols are now in effect. Please remain calm.","Network Alert:", 1)
src << "<span class = 'warning'>Lockdown Initiated. Network reset in 90 seconds.</span>"
addtimer(GLOBAL_PROC, "minor_announce", 900, TIMER_NORMAL,
addtimer(CALLBACK(GLOBAL_PROC, .proc/minor_announce,
"Automatic system reboot complete. Have a secure day.",
"Network reset:")
"Network reset:"), 900)
/datum/AI_Module/large/destroy_rcd
module_name = "Destroy RCDs"
@@ -41,7 +41,7 @@
B.victim << "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>"
var/delay = rand(150,250) + B.victim.brainloss
addtimer(src, "return_control", delay, TIMER_NORMAL, src.loc)
addtimer(CALLBACK(src, .proc/return_control, src.loc), delay)
/mob/living/captive_brain/proc/return_control(mob/living/simple_animal/borer/B)
if(!B || !B.controlling)
@@ -272,7 +272,7 @@ var/total_borer_hosts_needed = 10
else
src << "<span class='warning'>You start shaking off your lethargy as the sugar leaves your host's blood. This will take about 10 seconds...</span>"
waketimerid = addtimer(src,"wakeup",10,TIMER_NORMAL)
waketimerid = addtimer(CALLBACK(src, "wakeup"), 10)
if(controlling)
if(docile)
@@ -509,7 +509,7 @@ var/total_borer_hosts_needed = 10
leaving = TRUE
addtimer(src, "release_host", 100, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/release_host), 100)
/mob/living/simple_animal/borer/proc/release_host()
if(!victim || !src || qdeleted(victim) || qdeleted(src))
@@ -633,7 +633,7 @@ var/total_borer_hosts_needed = 10
bonding = TRUE
var/delay = 200+(victim.brainloss*5)
addtimer(src, "assume_control", delay, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/assume_control), delay)
/mob/living/simple_animal/borer/proc/assume_control()
if(!victim || !src || controlling || victim.stat == DEAD)
@@ -186,7 +186,7 @@
adjustBruteLoss(25) //hella effective
inhibited = 1
update_action_buttons_icon()
addtimer(src, "reset_inhibit", 30, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/reset_inhibit), 30)
/mob/living/simple_animal/revenant/proc/reset_inhibit()
if(src)
@@ -332,7 +332,7 @@
/obj/item/weapon/ectoplasm/revenant/New()
..()
addtimer(src, "try_reform", 600, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/try_reform), 600)
/obj/item/weapon/ectoplasm/revenant/proc/try_reform()
if(src)
@@ -195,7 +195,7 @@
/obj/effect/proc_holder/spell/aoe_turf/revenant/overload/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
if(attempt_cast(user))
for(var/turf/T in targets)
addtimer(src, "overload", 0, TIMER_NORMAL, T, user)
addtimer(CALLBACK(src, .proc/overload, T, user), 0)
/obj/effect/proc_holder/spell/aoe_turf/revenant/overload/proc/overload(turf/T, mob/user)
for(var/obj/machinery/light/L in T)
@@ -235,7 +235,7 @@
/obj/effect/proc_holder/spell/aoe_turf/revenant/defile/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
if(attempt_cast(user))
for(var/turf/T in targets)
addtimer(src, "defile", 0, TIMER_NORMAL, T)
addtimer(CALLBACK(src, .proc/defile, T), 0)
/obj/effect/proc_holder/spell/aoe_turf/revenant/defile/proc/defile(turf/T)
if(T.flags & NOJAUNT)
@@ -282,7 +282,7 @@
/obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
if(attempt_cast(user))
for(var/turf/T in targets)
addtimer(src, "malfunction", 0, TIMER_NORMAL, T, user)
addtimer(CALLBACK(src, .proc/malfunction, T, user), 0)
/obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction/proc/malfunction(turf/T, mob/user)
for(var/mob/living/simple_animal/bot/bot in T)
@@ -326,7 +326,7 @@
/obj/effect/proc_holder/spell/aoe_turf/revenant/blight/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
if(attempt_cast(user))
for(var/turf/T in targets)
addtimer(src, "blight", 0, TIMER_NORMAL, T, user)
addtimer(CALLBACK(src, .proc/blight, T, user), 0)
/obj/effect/proc_holder/spell/aoe_turf/revenant/blight/proc/blight(turf/T, mob/user)
for(var/mob/living/mob in T)
@@ -62,6 +62,6 @@
affected_mob.dna.species.handle_hair(affected_mob,"#1d2953")
affected_mob.visible_message("<span class='warning'>[affected_mob] looks terrifyingly gaunt...</span>", "<span class='revennotice'>You suddenly feel like your skin is <i>wrong</i>...</span>")
affected_mob.add_atom_colour("#1d2953", TEMPORARY_COLOUR_PRIORITY)
addtimer(src, "cure", 100, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/cure), 100)
else
return
+1 -1
View File
@@ -76,7 +76,7 @@
scan_for_target()
point_to_target()
my_god_jc_a_bomb()
addtimer(src, "refresh_target", 50, TIMER_UNIQUE)
addtimer(CALLBACK(src, .proc/refresh_target), 50, TIMER_UNIQUE)
/obj/item/weapon/pinpointer/proc/scan_for_target() //Looks for whatever it's tracking
if(target)
+1 -1
View File
@@ -275,7 +275,7 @@
rev_mind.special_role = "Revolutionary"
update_rev_icons_added(rev_mind)
if(jobban_isbanned(rev_mind.current, ROLE_REV))
addtimer(src, "replace_jobbaned_player", 0, TIMER_NORMAL, rev_mind.current, ROLE_REV, ROLE_REV)
addtimer(CALLBACK(src, .proc/replace_jobbaned_player), 0, rev_mind.current, ROLE_REV, ROLE_REV)
return 1
//////////////////////////////////////////////////////////////////////////////
//Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph.
+1 -1
View File
@@ -161,7 +161,7 @@
if(device)
device.pulsed()
addtimer(src, "update_icon", 15)
addtimer(CALLBACK(src, .proc/update_icon), 15)
/obj/machinery/button/power_change()
..()
+2 -2
View File
@@ -102,7 +102,7 @@
if(can_use())
cameranet.addCamera(src)
emped = 0 //Resets the consecutive EMP count
addtimer(src, "cancelCameraAlarm", 100)
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
for(var/mob/O in mob_list)
if (O.client && O.client.eye == src)
O.unset_machine()
@@ -286,7 +286,7 @@
if(status)
change_msg = "reactivates"
triggerCameraAlarm()
addtimer(src, "cancelCameraAlarm", 100)
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
if(displaymessage)
if(user)
visible_message("<span class='danger'>[user] [change_msg] [src]!</span>")
+2 -2
View File
@@ -134,7 +134,7 @@
if(!G)
return FALSE
if(clonemind.damnation_type) //Can't clone the damned.
addtimer(src, "horrifyingsound", 0)
addtimer(CALLBACK(src, .proc/horrifyingsound), 0)
mess = 1
icon_state = "pod_g"
update_icon()
@@ -145,7 +145,7 @@
countdown.start()
eject_wait = TRUE
addtimer(src, "wait_complete", 30)
addtimer(CALLBACK(src, .proc/wait_complete), 30)
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src)
+1 -1
View File
@@ -114,7 +114,7 @@
user.clear_fullscreen("flash", 5)
watchers[user] = C
use_power(50)
addtimer(src, "use_camera_console", 5, TIMER_NORMAL, user)
addtimer(CALLBACK(src, .proc/use_camera_console, user), 5)
else
user.unset_machine()
+1 -1
View File
@@ -260,7 +260,7 @@ var/global/datum/crewmonitor/crewmonitor = new
return ..()
/datum/crewmonitor/proc/queueUpdate(z)
addtimer(crewmonitor, "update", 5, TIMER_UNIQUE, z)
addtimer(CALLBACK(crewmonitor, .proc/update, z), 5, TIMER_UNIQUE)
/datum/crewmonitor/proc/sendResources(var/client/client)
send_asset(client, "crewmonitor.js")
@@ -15,7 +15,7 @@
/obj/machinery/computer/gulag_teleporter_computer/New()
..()
addtimer(src, "scan_machinery", 5)
addtimer(CALLBACK(src, .proc/scan_machinery), 5)
/obj/machinery/computer/gulag_teleporter_computer/Destroy()
if(id)
@@ -124,7 +124,7 @@
if("teleport")
if(!teleporter || !beacon)
return
addtimer(src, "teleport", 5, TIMER_NORMAL, usr)
addtimer(CALLBACK(src, .proc/teleport, usr), 5)
/obj/machinery/computer/gulag_teleporter_computer/proc/scan_machinery()
teleporter = findteleporter()
+1 -1
View File
@@ -49,7 +49,7 @@
// Will help make emagging the console not so easy to get away with.
MK.info += "<br><br><font color='red'>£%@%(*$%&(£&?*(%&£/{}</font>"
var/time = 100 * length(src.linkedServer.decryptkey)
addtimer(src, "UnmagConsole", time)
addtimer(CALLBACK(src, .proc/UnmagConsole), time)
message = rebootmsg
else
user << "<span class='notice'>A no server error appears on the screen.</span>"
+1 -1
View File
@@ -100,7 +100,7 @@
/obj/structure/barricade/security/New()
..()
addtimer(src, "deploy", 40)
addtimer(CALLBACK(src, .proc/deploy), 40)
/obj/structure/barricade/security/proc/deploy()
icon_state = "barrier1"
+5 -5
View File
@@ -232,7 +232,7 @@ var/list/airlock_overlays = list()
if(cyclelinkedairlock.operating)
cyclelinkedairlock.delayed_close_requested = TRUE
else
addtimer(cyclelinkedairlock, "close", 2)
addtimer(CALLBACK(cyclelinkedairlock, .proc/close), 2)
..()
@@ -1244,9 +1244,9 @@ var/list/airlock_overlays = list()
playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
if(autoclose && normalspeed)
addtimer(src, "autoclose", 150)
addtimer(CALLBACK(src, .proc/autoclose), 150)
else if(autoclose && !normalspeed)
addtimer(src, "autoclose", 15)
addtimer(CALLBACK(src, .proc/autoclose), 15)
if(!density)
return 1
@@ -1266,7 +1266,7 @@ var/list/airlock_overlays = list()
update_freelook_sight()
if(delayed_close_requested)
delayed_close_requested = FALSE
addtimer(src, "close", 2)
addtimer(CALLBACK(src, .proc/close), 2)
return 1
@@ -1279,7 +1279,7 @@ var/list/airlock_overlays = list()
if(safe)
for(var/atom/movable/M in get_turf(src))
if(M.density && M != src) //something is blocking the door
addtimer(src, "autoclose", 60)
addtimer(CALLBACK(src, .proc/autoclose), 60)
return
if(forced < 2)
+1 -1
View File
@@ -465,7 +465,7 @@
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
addtimer(src, "update_atom_colour", 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/obj/machinery/door/airlock/clockwork/attackby(obj/item/I, mob/living/user, params)
if(!attempt_construction(I, user))
+2 -2
View File
@@ -92,7 +92,7 @@
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(door.density)
continue
addtimer(door, "close", 0)
addtimer(CALLBACK(door, /obj/machinery/door/window/brigdoor.proc/close), 0)
for(var/obj/structure/closet/secure_closet/brig/C in targets)
if(C.broken)
@@ -121,7 +121,7 @@
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(!door.density)
continue
addtimer(door, "open", 0)
addtimer(CALLBACK(door, /obj/machinery/door/window/brigdoor.proc/open), 0)
for(var/obj/structure/closet/secure_closet/brig/C in targets)
if(C.broken)
+2 -2
View File
@@ -191,7 +191,7 @@
if(secondsElectrified == 0)
secondsElectrified = -1
shockedby += "\[[time_stamp()]\]EM Pulse"
addtimer(src, "unelectrify", 300)
addtimer(CALLBACK(src, .proc/unelectrify), 300)
..()
/obj/machinery/door/proc/unelectrify()
@@ -253,7 +253,7 @@
for(var/atom/movable/M in get_turf(src))
if(M.density && M != src) //something is blocking the door
if(autoclose)
addtimer(src, "autoclose", 60)
addtimer(CALLBACK(src, .proc/autoclose), 60)
return
operating = 1
+2 -2
View File
@@ -30,9 +30,9 @@
/obj/machinery/door/poddoor/shuttledock/proc/check()
var/turf/T = get_step(src, checkdir)
if(!istype(T, turftype))
addtimer(src, "open", 0, TIMER_UNIQUE)
addtimer(CALLBACK(src, .proc/open), 0, TIMER_UNIQUE)
else
addtimer(src, "close", 0, TIMER_UNIQUE)
addtimer(CALLBACK(src, .proc/close), 0, TIMER_UNIQUE)
/obj/machinery/door/poddoor/Bumped(atom/AM)
if(density)
+1 -1
View File
@@ -339,7 +339,7 @@
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
addtimer(src, "update_atom_colour", 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/obj/machinery/door/window/clockwork/allowed(mob/M)
if(is_servant_of_ratvar(M))
@@ -56,10 +56,10 @@
if(program)
program.receive_user_command(href_list["command"])
addtimer(program, "process", 5)
addtimer(CALLBACK(program, /datum/computer/file/embedded_program.proc/process), 5)
usr.set_machine(src)
addtimer(src, "updateDialog", 5)
addtimer(CALLBACK(src, .proc/updateDialog), 5)
/obj/machinery/embedded_controller/process()
if(program)
+2 -2
View File
@@ -94,7 +94,7 @@
playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0)
/obj/machinery/firealarm/proc/alarm_in(time)
addtimer(src, "alarm", time, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/alarm), time)
/obj/machinery/firealarm/proc/reset()
if(!is_operational())
@@ -103,7 +103,7 @@
A.firereset(src)
/obj/machinery/firealarm/proc/reset_in(time)
addtimer(src, "reset", time, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/reset), time)
/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+1 -1
View File
@@ -35,7 +35,7 @@ The console is located at computer/gulag_teleporter.dm
/obj/item/clothing/mask/gas))
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gulag_teleporter(null)
B.apply_default_parts(src)
addtimer(src, "locate_reclaimer", 5)
addtimer(CALLBACK(src, .proc/locate_reclaimer), 5)
/obj/machinery/gulag_teleporter/Destroy()
if(linked_reclaimer)
+1 -1
View File
@@ -121,7 +121,7 @@
use_power(power)
flick("limbgrower_fill",src)
icon_state = "limbgrower_idleon"
addtimer(src, "build_item",32*prod_coeff)
addtimer(CALLBACK(src, .proc/build_item),32*prod_coeff)
else
usr << "<span class=\"alert\">The limb grower is busy. Please wait for completion of previous operation.</span>"
+1 -1
View File
@@ -134,7 +134,7 @@
on = !on
if(on)
addtimer(src, "magnetic_process", 0)
addtimer(CALLBACK(src, .proc/magnetic_process), 0)
+1 -1
View File
@@ -152,7 +152,7 @@ var/const/SAFETY_COOLDOWN = 100
safety_mode = TRUE
update_icon()
L.loc = src.loc
addtimer(src, "reboot", SAFETY_COOLDOWN)
addtimer(CALLBACK(src, .proc/reboot), SAFETY_COOLDOWN)
/obj/machinery/recycler/proc/reboot()
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
+2 -2
View File
@@ -217,7 +217,7 @@
occupant.adjustFireLoss(rand(10, 16))
if(iscarbon(occupant))
occupant.emote("scream")
addtimer(src, "cook", 50, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/cook), 50)
else
uv_cycles = initial(uv_cycles)
uv = FALSE
@@ -263,7 +263,7 @@
add_fingerprint(user)
if(locked)
visible_message("<span class='notice'>You see [user] kicking against the doors of [src]!</span>", "<span class='notice'>You start kicking against the doors...</span>")
addtimer(src, "resist_open", 300, TIMER_NORMAL, user)
addtimer(CALLBACK(src, .proc/resist_open, user), 300)
else
open_machine()
dump_contents()
+2 -2
View File
@@ -34,7 +34,7 @@
. = (payload in src) && (active || ignore_active) && !defused
if(.)
payload.detonate()
/obj/machinery/syndicatebomb/obj_break()
if(!try_detonate())
..()
@@ -419,7 +419,7 @@
chem_splash(get_turf(src), spread_range, list(reactants), temp_boost)
// Detonate it again in one second, until it's out of juice.
addtimer(src, "detonate", 10)
addtimer(CALLBACK(src, .proc/detonate), 10)
// If it's not a time release bomb, do normal explosion
+1 -1
View File
@@ -103,7 +103,7 @@
// So he can't jump out the gate right away.
R.SetLockdown()
addtimer(src, "unlock_new_robot", 50, TIMER_NORMAL, R)
addtimer(CALLBACK(src, .proc/unlock_new_robot, R), 50)
/obj/machinery/transformer/proc/unlock_new_robot(mob/living/silicon/robot/R)
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
+1 -1
View File
@@ -87,7 +87,7 @@
/obj/item/mecha_parts/mecha_equipment/proc/start_cooldown()
set_ready_state(0)
chassis.use_power(energy_drain)
addtimer(src, "set_ready_state", equip_cooldown, TIMER_NORMAL, 1)
addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown)
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target)
if(!chassis)
+2 -2
View File
@@ -68,7 +68,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown()
set_ready_state(0)
chassis.use_power(energy_drain*get_shot_amount())
addtimer(src, "set_ready_state", equip_cooldown, TIMER_NORMAL, 1)
addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown)
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
equip_cooldown = 8
@@ -344,7 +344,7 @@
var/turf/T = get_turf(src)
message_admins("[key_name(chassis.occupant, chassis.occupant.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[chassis.occupant]'>?</A>) fired a [src] in ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
log_game("[key_name(chassis.occupant)] fired a [src] ([T.x],[T.y],[T.z])")
addtimer(F, "prime", det_time)
addtimer(CALLBACK(F, /obj/item/weapon/grenade/flashbang.proc/prime), det_time)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze
name = "\improper SOB-3 grenade launcher"
@@ -52,7 +52,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
for(var/i in 1 to number)
if(total_effects > 20)
return
addtimer(src, "generate_effect", 0)
addtimer(CALLBACK(src, .proc/generate_effect), 0)
/datum/effect_system/proc/generate_effect()
if(holder)
@@ -68,7 +68,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
for(var/j in 1 to steps_amt)
sleep(5)
step(E,direction)
addtimer(src, "decrement_total_effect", 20)
addtimer(CALLBACK(src, .proc/decrement_total_effect), 20)
/datum/effect_system/proc/decrement_total_effect()
total_effects--
@@ -42,7 +42,7 @@
/obj/effect/particle_effect/smoke/proc/kill_smoke()
STOP_PROCESSING(SSobj, src)
addtimer(src, "fade_out", 0)
addtimer(CALLBACK(src, .proc/fade_out), 0)
QDEL_IN(src, 10)
/obj/effect/particle_effect/smoke/process()
@@ -64,7 +64,7 @@
if(C.smoke_delay)
return 0
C.smoke_delay++
addtimer(src, "remove_smoke_delay", 10, TIMER_NORMAL, C)
addtimer(CALLBACK(src, .proc/remove_smoke_delay, C), 10)
return 1
/obj/effect/particle_effect/smoke/proc/remove_smoke_delay(mob/living/carbon/C)
+1 -1
View File
@@ -52,7 +52,7 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list(
else //if on the floor, glowshroom on-floor sprite
icon_state = "[base_icon_state]f"
addtimer(src, "Spread", delay)
addtimer(CALLBACK(src, .proc/Spread), delay)
/obj/structure/glowshroom/proc/Spread()
for(var/i = 1 to yield)
+2 -2
View File
@@ -20,14 +20,14 @@
owner.status_flags |= XENO_HOST
START_PROCESSING(SSobj, src)
owner.med_hud_set_status()
addtimer(src, "AddInfectionImages", 0, TIMER_NORMAL, owner)
addtimer(CALLBACK(src, .proc/AddInfectionImages, owner), 0)
/obj/item/organ/body_egg/Remove(var/mob/living/carbon/M, special = 0)
STOP_PROCESSING(SSobj, src)
if(owner)
owner.status_flags &= ~(XENO_HOST)
owner.med_hud_set_status()
addtimer(src, "RemoveInfectionImages", 0, TIMER_NORMAL, owner)
addtimer(CALLBACK(src, .proc/RemoveInfectionImages, owner), 0)
..()
/obj/item/organ/body_egg/process()
+1 -1
View File
@@ -59,7 +59,7 @@
user << "Your name has been sent to your employers for approval."
// Autoapproves after a certain time
response_timer_id = addtimer(src, "rename_station", approval_time, TIMER_NORMAL, new_name, user)
response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user), approval_time)
admins << "<span class='adminnotice'><b><font color=orange>CUSTOM STATION RENAME:</font></b>[key_name_admin(user)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) proposes to rename the station to [new_name] (will autoapprove in [approval_time / 10] seconds). (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[user]'>BSA</A>) (<A HREF='?_src_=holder;reject_custom_name=\ref[src]'>REJECT</A>) (<a href='?_src_=holder;CentcommReply=\ref[user]'>RPLY</a>)</span>"
/obj/item/station_charter/proc/reject_proposed(user)
@@ -197,7 +197,7 @@
. = TRUE
/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans)
addtimer(src,"talk_into_impl",0, TIMER_NORMAL,M,message,channel,spans)
addtimer(CALLBACK(src, .proc/talk_into_impl, M, message, channel, spans), 0)
return ITALICS | REDUCE_RANGE
/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans)
+1 -1
View File
@@ -43,7 +43,7 @@
core = ncore
icon_state = "core_container_loaded"
user << "<span class='warning'>Container is sealing...</span>"
addtimer(src, "seal", 50)
addtimer(CALLBACK(src, .proc/seal), 50)
return 1
/obj/item/nuke_core_container/proc/seal()
+1 -1
View File
@@ -363,7 +363,7 @@
if(charging)
return
if(candy < candymax)
addtimer(src, "charge_lollipops", charge_delay, TIMER_NORMAL)
addtimer(CALLBACK(src, .proc/charge_lollipops), charge_delay)
charging = TRUE
/obj/item/borg/lollipop/proc/charge_lollipops()
@@ -231,8 +231,8 @@
toggle_action.Grant(R)
return 1
/obj/item/borg/uprgade/selfrepair/dropped()
addtimer(src, "check_dropped", 1)
/obj/item/borg/upgrade/selfrepair/dropped()
addtimer(CALLBACK(src, .proc/check_dropped), 1)
/obj/item/borg/upgrade/selfrepair/proc/check_dropped()
if(loc != cyborg)
+1 -1
View File
@@ -362,7 +362,7 @@
/obj/effect/decal/cleanable/ash/snappop_phoenix/New()
. = ..()
addtimer(src, "respawn", respawn_time)
addtimer(CALLBACK(src, .proc/respawn), respawn_time)
/obj/effect/decal/cleanable/ash/snappop_phoenix/proc/respawn()
new /obj/item/toy/snappop/phoenix(get_turf(src))
+1 -1
View File
@@ -551,7 +551,7 @@ RCD
buzz loudly!</b></span>","<span class='danger'><b>[src] begins \
vibrating violently!</b></span>")
// 5 seconds to get rid of it
addtimer(src, "detonate_pulse_explode", 50)
addtimer(CALLBACK(src, .proc/detonate_pulse_explode), 50)
/obj/item/weapon/rcd/proc/detonate_pulse_explode()
explosion(src, 0, 0, 3, 1, flame_range = 1)
@@ -94,7 +94,7 @@
target.add_overlay(image_overlay, 1)
user << "<span class='notice'>You plant the bomb. Timer counting down from [timer].</span>"
addtimer(src, "explode", timer * 10)
addtimer(CALLBACK(src, .proc/explode), timer * 10)
/obj/item/weapon/c4/proc/explode()
if(qdeleted(src))
@@ -45,7 +45,7 @@
var/mob/living/carbon/C = user
C.throw_mode_on()
addtimer(src, "prime", det_time)
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
@@ -287,7 +287,7 @@
message_admins("grenade primed by an assembly, attached by [key_name_admin(M)]<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>(?)</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</A>) and last touched by [key_name_admin(last)]<A HREF='?_src_=holder;adminmoreinfo=\ref[last]'>(?)</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[last]'>FLW</A>) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[A.name] (JMP)</a>.")
log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])")
else
addtimer(src, "prime", det_time)
addtimer(CALLBACK(src, .proc/prime), det_time)
var/turf/DT = get_turf(src)
var/area/DA = get_area(DT)
log_game("A grenade detonated at [DA.name] ([DT.x], [DT.y], [DT.z])")
@@ -43,7 +43,7 @@
payload = payload_type
active = 1
walk_away(src,loc,rand(1,4))
addtimer(src, "prime", rand(15,60))
addtimer(CALLBACK(src, .proc/prime), rand(15,60))
/obj/item/weapon/grenade/clusterbuster/segment/prime()
@@ -58,7 +58,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
C.throw_mode_on()
addtimer(src, "prime", det_time)
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
update_mob()
@@ -84,7 +84,7 @@
target.add_overlay(image_overlay, 1)
if(!nadeassembly)
user << "<span class='notice'>You plant the bomb. Timer counting down from [det_time].</span>"
addtimer(src, "prime", det_time*10)
addtimer(CALLBACK(src, .proc/prime), det_time*10)
/obj/item/weapon/grenade/plastic/suicide_act(mob/user)
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) suicided with [src] at ([user.x],[user.y],[user.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",0,1)
@@ -46,7 +46,7 @@
if(isfloorturf(T))
var/turf/open/floor/F = T
F.wet = TURF_WET_PERMAFROST
addtimer(F, "MakeDry", rand(3000, 3100), TIMER_NORMAL, TURF_WET_PERMAFROST)
addtimer(CALLBACK(F, /turf/open/floor.proc/MakeDry), rand(3000, 3100), TURF_WET_PERMAFROST)
for(var/mob/living/carbon/L in T)
L.adjustStaminaLoss(stamina_damage)
L.bodytemperature -= 230
+1 -1
View File
@@ -299,7 +299,7 @@
/obj/item/weapon/restraints/legcuffs/beartrap/energy/New()
..()
addtimer(src, "dissipate", 100)
addtimer(CALLBACK(src, .proc/dissipate), 100)
/obj/item/weapon/restraints/legcuffs/beartrap/energy/proc/dissipate()
if(!istype(loc, /mob))
@@ -77,10 +77,10 @@
ready_implants--
if(!replenishing && auto_replenish)
replenishing = TRUE
addtimer(src,"replenish",replenish_cooldown)
addtimer(CALLBACK(src,"replenish"),replenish_cooldown)
if(injection_cooldown > 0)
ready = FALSE
addtimer(src,"set_ready",injection_cooldown)
addtimer(CALLBACK(src,"set_ready"),injection_cooldown)
else
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1)
update_icon()
@@ -106,7 +106,7 @@
if(ready_implants < max_implants)
ready_implants++
if(ready_implants < max_implants)
addtimer(src,"replenish",replenish_cooldown)
addtimer(CALLBACK(src,"replenish"),replenish_cooldown)
else
replenishing = FALSE
+2 -2
View File
@@ -271,7 +271,7 @@
impale(user)
return
if((wielded) && prob(50))
addtimer(src, "jedi_spin", 0, TIMER_UNIQUE, user)
addtimer(CALLBACK(src, .proc/jedi_spin, user), 0, TIMER_UNIQUE)
/obj/item/weapon/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2))
@@ -339,7 +339,7 @@
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
add_fingerprint(user)
// Light your candles while spinning around the room
addtimer(src, "jedi_spin", 0, TIMER_UNIQUE, user)
addtimer(CALLBACK(src, .proc/jedi_spin, user), 0, TIMER_UNIQUE)
/obj/item/weapon/twohanded/dualsaber/green/New()
item_color = "green"
+1 -1
View File
@@ -215,7 +215,7 @@ var/global/image/acid_overlay = image("icon" = 'icons/effects/effects.dmi', "ico
being_shocked = 1
var/power_bounced = power / 2
tesla_zap(src, 3, power_bounced)
addtimer(src, "reset_shocked", 10)
addtimer(CALLBACK(src, .proc/reset_shocked), 10)
/obj/proc/reset_shocked()
being_shocked = 0
+1 -1
View File
@@ -222,7 +222,7 @@
/obj/structure/alien/egg/New()
new /obj/item/clothing/mask/facehugger(src)
..()
addtimer(src, "Grow", rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME))
addtimer(CALLBACK(src, .proc/Grow), rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME))
/obj/structure/alien/egg/Destroy()
remove_from_proximity_list(src, 1)
+1 -1
View File
@@ -36,7 +36,7 @@
user << "<span class='notice'>The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.</span>"
user.reagents.add_reagent("godblood",20)
update_icons()
addtimer(src, "update_icons", time_between_uses)
addtimer(CALLBACK(src, .proc/update_icons), time_between_uses)
/obj/structure/healingfountain/proc/update_icons()
+1 -1
View File
@@ -239,7 +239,7 @@
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
addtimer(src, "update_atom_colour", 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/obj/structure/grille/ratvar/ratvar_act()
return
+1 -1
View File
@@ -15,7 +15,7 @@
smoke.start()
visible_message("<span class='boldannounce'>The [src] warps in!</span>")
playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1)
addtimer(src, "warpbots", rand(10, 600))
addtimer(CALLBACK(src, .proc/warpbots), rand(10, 600))
/obj/structure/hivebot_beacon/proc/warpbots()
icon_state = "def_radar"
+2 -2
View File
@@ -99,7 +99,7 @@
var/mob/living/M = user
M.electrocute_act(15,"Energy Barrier", safety=1)
shockcd = TRUE
addtimer(src, "cooldown", 5)
addtimer(CALLBACK(src, .proc/cooldown), 5)
/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/user)
if(!shockcd)
@@ -107,4 +107,4 @@
var/mob/living/M = user
M.electrocute_act(15,"Energy Barrier", safety=1)
shockcd = TRUE
addtimer(src, "cooldown", 5)
addtimer(CALLBACK(src, .proc/cooldown), 5)

Some files were not shown because too many files have changed in this diff Show More