Makes uses of do_after sane (#18334)

* Prevents insta-actions

* Do_after sanity

NOTE: NUKE do_after_action

* Update bonfire.dm

* The  rest of them

Also fixes a tpyo

* no minitest :)

* .

* .

* Gets rid of the slowdown for now

---------

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
Cameron Lennox
2025-09-07 20:25:08 -04:00
committed by GitHub
parent 736fe6ef28
commit d73f6b8dbd
330 changed files with 682 additions and 690 deletions
+1 -1
View File
@@ -132,7 +132,7 @@
to_chat(user, span_warning("You need one coil of wire to wire [src]."))
return
to_chat(user, span_notice("You start to wire [src]."))
if(do_after(user, 40) && build_step == 6)
if(do_after(user, 4 SECONDS, target = src) && build_step == 6)
if(C.use(1))
build_step++
to_chat(user, span_notice("You wire the ED-209 assembly."))
+1 -1
View File
@@ -168,7 +168,7 @@
else if(O.has_tool_quality(TOOL_CROWBAR))
if(open && paicard)
to_chat(user, span_notice("You are attempting to remove the pAI.."))
if(do_after(user,10 * O.toolspeed))
if(do_after(user, 1 SECOND * O.toolspeed, target = src))
ejectpai(user)
else
..()
+2 -2
View File
@@ -119,7 +119,7 @@
cleantime = istype(D, /obj/effect/decal/cleanable/dirt) ? 10 : 50
if(prob(20))
automatic_custom_emote(AUDIBLE_MESSAGE, "begins to clean up \the [D]")
if(do_after(src, cleantime * cTimeMult))
if(do_after(src, cleantime * cTimeMult, target = D))
if(istype(loc, /turf/simulated))
var/turf/simulated/f = loc
f.dirt = 0
@@ -138,7 +138,7 @@
if(cleantime != 0)
if(prob(20))
automatic_custom_emote(AUDIBLE_MESSAGE, "begins to clean up \the [loc]")
if(do_after(src, cleantime * cTimeMult))
if(do_after(src, cleantime * cTimeMult, target = loc))
if(blood)
wash(CLEAN_TYPE_BLOOD)
if(istype(loc, /turf/simulated))
+1 -1
View File
@@ -152,7 +152,7 @@
to_chat(user, span_warning("You need one coil of wire to wire [src]."))
return
to_chat(user, span_notice("You start to wire [src]."))
if(do_after(user, 40) && build_step == 6)
if(do_after(user, 4 SECONDS, target = src) && build_step == 6)
if(C.use(1))
build_step++
to_chat(user, span_notice("You wire the ED-209 assembly."))
+2 -2
View File
@@ -176,7 +176,7 @@
to_chat(user, span_warning("You need one coil of wire to wire \the [src]."))
return
to_chat(user, span_notice("You start to wire \the [src]."))
if(do_after(user, 40))
if(do_after(user, 4 SECONDS, target = src))
if(C.use(1))
build_step++
to_chat(user, span_notice("You wire the ED-CLN assembly."))
@@ -198,7 +198,7 @@
playsound(src, W.usesound, 100, 1)
var/turf/T = get_turf(user)
to_chat(user, span_notice("Attatching the mop to the frame..."))
if(do_after(user, 40) && get_turf(user) == T)
if(do_after(user, 4 SECONDS, target = src) && get_turf(user) == T)
build_step++
name = "mopped ED-CLN assembly"
to_chat(user, span_notice("Mop attached."))
+5 -5
View File
@@ -192,7 +192,7 @@
visible_message(span_notice("[src] starts [T.dead? "removing the plant from" : "harvesting"] \the [A]."))
busy = 1
if(do_after(src, 30, A))
if(do_after(src, 3 SECONDS, target = A))
visible_message(span_notice("[src] [T.dead? "removes the plant from" : "harvests"] \the [A]."))
T.attack_hand(src)
if(FARMBOT_WATER)
@@ -201,7 +201,7 @@
visible_message(span_notice("[src] starts watering \the [A]."))
busy = 1
if(do_after(src, 30, A))
if(do_after(src, 3 SECONDS, target = A))
playsound(src, 'sound/effects/slosh.ogg', 25, 1)
visible_message(span_notice("[src] waters \the [A]."))
tank.reagents.trans_to(T, 100 - T.waterlevel)
@@ -211,7 +211,7 @@
visible_message(span_notice("[src] starts uprooting the weeds in \the [A]."))
busy = 1
if(do_after(src, 30))
if(do_after(src, 3 SECONDS, target = A))
visible_message(span_notice("[src] uproots the weeds in \the [A]."))
T.weedlevel = 0
if(FARMBOT_NUTRIMENT)
@@ -220,7 +220,7 @@
visible_message(span_notice("[src] starts fertilizing \the [A]."))
busy = 1
if(do_after(src, 30, A))
if(do_after(src, 3 SECONDS, target = A))
visible_message(span_notice("[src] fertilizes \the [A]."))
T.reagents.add_reagent(REAGENT_ID_AMMONIA, 10)
@@ -237,7 +237,7 @@
visible_message(span_notice("[src] starts refilling its tank from \the [A]."))
busy = 1
while(do_after(src, 10) && tank.reagents.total_volume < tank.reagents.maximum_volume)
while(do_after(src, 1 SECOND, target = A) && tank.reagents.total_volume < tank.reagents.maximum_volume)
tank.reagents.add_reagent("water", 100) //VOREStation Edit
if(prob(5))
playsound(src, 'sound/effects/slosh.ogg', 25, 1)
+7 -7
View File
@@ -209,12 +209,12 @@
update_icons()
if(F.flooring)
visible_message(span_warning("\The [src] begins to tear the floor tile from the floor!"))
if(do_after(src, 50))
if(do_after(src, 5 SECONDS, target = A))
F.break_tile_to_plating()
addTiles(1)
else
visible_message(span_danger("\The [src] begins to tear through the floor!"))
if(do_after(src, 150)) // Extra time because this can and will kill.
if(do_after(src, 15 SECONDS, target = A)) // Extra time because this can and will kill.
F.ReplaceWithLattice()
addTiles(1)
target = null
@@ -229,7 +229,7 @@
busy = 1
update_icons()
visible_message(span_infoplain(span_bold("\The [src]") + " begins to repair the hole."))
if(do_after(src, 50))
if(do_after(src, 5 SECONDS, target = A))
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
var/obj/item/I
if(building == 1)
@@ -246,7 +246,7 @@
busy = 1
update_icons()
visible_message(span_infoplain(span_bold("\The [src]") + " begins to remove the broken floor."))
if(do_after(src, 50, F))
if(do_after(src, 5 SECONDS, target = F))
if(F.broken || F.burnt)
F.make_plating()
target = null
@@ -256,7 +256,7 @@
busy = 1
update_icons()
visible_message(span_infoplain(span_bold("\The [src]") + " begins to improve the floor."))
if(do_after(src, 50))
if(do_after(src, 5 SECONDS, target = F))
if(!F.flooring)
F.set_flooring(get_flooring_data(floor_build_type))
addTiles(-1)
@@ -268,7 +268,7 @@
visible_message(span_infoplain(span_bold("\The [src]") + " begins to collect tiles."))
busy = 1
update_icons()
if(do_after(src, 20))
if(do_after(src, 2 SECONDS, target = T))
if(T)
var/eaten = min(maxAmount - amount, T.get_amount())
T.use(eaten)
@@ -282,7 +282,7 @@
visible_message(span_infoplain(span_bold("\The [src]") + " begins to make tiles."))
busy = 1
update_icons()
if(do_after(50))
if(do_after(src, 5 SECONDS, target = A))
if(M)
M.use(1)
addTiles(4)
+2 -2
View File
@@ -206,12 +206,12 @@
say(message)
playsound(src, messagevoice[message], 70, FALSE)
if(do_after(H, 3 SECONDS, target=src))
if(do_after(H, 3 SECONDS, target = src))
tip_over(H)
else if(istype(H) && H.a_intent == I_HELP && is_tipped)
H.visible_message(span_notice("[H] begins righting [src]."), span_notice("You begin righting [src]..."))
if(do_after(H, 3 SECONDS, target=src))
if(do_after(H, 3 SECONDS, target = src))
set_right(H)
else
tgui_interact(H)
+2 -2
View File
@@ -16,7 +16,7 @@
/mob/living/proc/harvest(var/mob/user, var/obj/item/I)
if(meat_type && meat_amount>0 && (stat == DEAD) && !being_butchered)
being_butchered = TRUE
while(meat_amount > 0 && do_after(user, 0.5 SECONDS * (mob_size / 10), src))
while(meat_amount > 0 && do_after(user, 0.5 SECONDS * (mob_size / 10), target = src))
var/obj/item/meat = new meat_type(get_turf(src))
if(name_the_meat)
meat.name = "[src.name] [meat.name]"
@@ -36,7 +36,7 @@
return FALSE
/mob/living/proc/handle_butcher(var/mob/user, var/obj/item/I)
if(!user || do_after(user, 2 SECONDS * mob_size / 10, src))
if(!user || do_after(user, 2 SECONDS * mob_size / 10, target = src))
if(LAZYLEN(butchery_loot))
if(LAZYLEN(butchery_loot))
for(var/path in butchery_loot)
@@ -61,7 +61,7 @@
user.visible_message(span_danger("\The [user] begins to slit [src]'s throat with \the [W]!"))
user.next_move = world.time + 20 //also should prevent user from triggering this repeatedly
if(!do_after(user, 20))
if(!do_after(user, 2 SECONDS, target = src))
return 0
if(!(G && G.assailant == user && G.affecting == src)) //check that we still have a grab
return 0
@@ -1546,7 +1546,7 @@
else
to_chat(U, span_warning("You begin to relocate [S]'s [current_limb.joint]..."))
if(!do_after(U, 30))
if(!do_after(U, 3 SECONDS, target = src))
return
if(!current_limb || !S || !U)
return
@@ -138,7 +138,7 @@
H.visible_message(span_danger("\The [H] is trying to perform CPR on \the [src]!"))
if(!do_after(H, 30))
if(!do_after(H, 3 SECONDS, target = src))
return FALSE
H.visible_message(span_danger("\The [H] performs CPR on \the [src]!"))
@@ -461,7 +461,7 @@
return FALSE
user.visible_message(span_warning("[user] begins to dislocate [src]'s [organ.joint]!"))
if(do_after(user, 100))
if(do_after(user, 10 SECONDS, target = src))
organ.dislocate(1)
src.visible_message(span_danger("[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!"))
return TRUE
@@ -672,7 +672,7 @@ emp_act
organ_chance = 75
user.next_move = world.time + 20
user.visible_message(span_danger("\The [user] begins to twist \the [W] around inside [src]'s [chest]!"))
if(!do_after(user, 20))
if(!do_after(user, 2 SECONDS, target = src))
return 0
if(!(G && G.assailant == user && G.affecting == src)) //check that we still have a grab
return 0
@@ -153,7 +153,7 @@
var/obj/item/organ/external/E = get_active_hand()
if(!check_can_attach_modular_limb(E))
return FALSE
if(!do_after(src, 2 SECONDS, src))
if(!do_after(src, 2 SECONDS, target = src))
return FALSE
if(!check_can_attach_modular_limb(E))
return FALSE
@@ -186,7 +186,7 @@
var/obj/item/organ/external/E = tgui_input_list(src, "Which limb do you wish to detach?", "Limb Removal", detachable_limbs)
if(!check_can_detach_modular_limb(E))
return FALSE
if(!do_after(src, 2 SECONDS, src))
if(!do_after(src, 2 SECONDS, target = src))
return FALSE
if(!check_can_detach_modular_limb(E))
return FALSE
@@ -290,7 +290,7 @@
src.visible_message(span_filter_notice(span_bold("[src]") + "'s flesh begins to mend..."))
var/delay_length = round(active_regen_delay * species.active_regen_mult)
if(do_after(src,delay_length))
if(do_after(src, delay_length, target = src))
adjust_nutrition(-200)
for(var/obj/item/organ/I in internal_organs)
@@ -176,7 +176,7 @@
var/score2 = (scale2 * strength2)
var/competition = pick(score1;player1, score2;player2)
if(!do_after(player1, 50, player2))
if(!do_after(player1, 5 SECONDS, target = player2))
player2.visible_message(span_notice("The players cancelled their competition!"))
return 0
if(!hand_games_check(player1,player2))
@@ -223,7 +223,7 @@
var/score2 = (scale2 * strength2)
var/competition = pick(score1;player1, score2;player2)
if(!do_after(player1, 10, player2))
if(!do_after(player1, 1 SECOND, target = player2))
player2.visible_message(span_notice("The players cancelled their competition!"))
return 0
if(!hand_games_check(player1,player2))
@@ -248,7 +248,7 @@
if(!hand_games_check(player1,player2))
return
player1.visible_message(span_notice("[player1] challenges [player2] to a thumb war!"))
if(!do_after(player1, 50, player2))
if(!do_after(player1, 5 SECONDS, target = player2))
player2.visible_message(span_notice("The players cancelled their thumb war!"))
return 0
if(!hand_games_check(player1,player2))
@@ -51,7 +51,7 @@
span_warning("You gnaw on \the [SJ]. (This will take around [round(breakouttime / 600)] minutes and you need to stand still.)")
)
if(do_after(src, breakouttime, timed_action_flags = IGNORE_INCAPACITATED))
if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_INCAPACITATED))
if(!wear_suit)
return
visible_message(
@@ -74,7 +74,7 @@
span_warning("You attempt to rip your [wear_suit.name] apart. (This will take around 5 seconds and you need to stand still)")
)
if(do_after(src, 20 SECONDS, timed_action_flags = IGNORE_INCAPACITATED)) // Same scaling as breaking cuffs, 5 seconds to 120 seconds, 20 seconds to 480 seconds.
if(do_after(src, 20 SECONDS, target = src, timed_action_flags = IGNORE_INCAPACITATED)) // Same scaling as breaking cuffs, 5 seconds to 120 seconds, 20 seconds to 480 seconds.
if(!wear_suit || buckled)
return
@@ -145,7 +145,7 @@
return
else
visible_message(span_infoplain(span_bold("\The [src]") + " begins to change the form of \the [I]."))
if(!do_after(src, 10 SECONDS, I))
if(!do_after(src, 10 SECONDS, target = I))
visible_message(span_infoplain(span_bold("\The [src]") + " leaves \the [I] in its original form."))
return 0
visible_message(span_infoplain(span_bold("\The [src]") + " transmutes \the [I] into \the [transmute_product.name]."))
@@ -185,7 +185,7 @@
if(species.lleill_energy < energy_cost_spawn)
to_chat(src, span_warning("You do not have enough energy to do that!"))
return
if(!do_after(src, 10 SECONDS, src))
if(!do_after(src, 10 SECONDS, target = src))
src.visible_message(span_infoplain(span_bold("\The [src]") + " begins to form white rings on the ground."))
return 0
to_chat(src, span_warning("You place a new glamour ring at your feet."))
@@ -315,7 +315,7 @@
src.visible_message(span_infoplain(span_bold("\The [src]") + " boops [chosen_target] on the nose."))
if(contact_type == "Custom")
src.visible_message(span_infoplain("[custom_text]"))
if(!do_after(src, 10 SECONDS, chosen_target))
if(!do_after(src, 10 SECONDS, target = chosen_target))
src.visible_message(span_infoplain(span_bold("\The [src]") + " and \the [chosen_target] break contact before energy has been transferred."))
return
src.visible_message(span_infoplain(span_bold("\The [src]") + " and \the [chosen_target] complete their contact."))
@@ -366,7 +366,7 @@
return
else
visible_message(span_infoplain(span_bold("\The [src]") + " begins to change the form of \the [I]."))
if(!do_after(src, 10 SECONDS, I))
if(!do_after(src, 10 SECONDS, target = I))
visible_message(span_infoplain(span_bold("\The [src]") + " leaves \the [I] in its original form."))
return 0
visible_message(span_infoplain(span_bold("\The [src]") + " transmutes \the [I] into \the [transmute_product.name]."))
@@ -457,7 +457,7 @@
return
visible_message(span_infoplain(span_bold("\The [src]") + " begins significantly shifting their form."))
if(!do_after(src, 10 SECONDS, src))
if(!do_after(src, 10 SECONDS, target = src))
visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form."))
return 0
@@ -548,7 +548,7 @@
return
visible_message(span_infoplain(span_bold("\The [src]") + " begins significantly shifting their form."))
if(!do_after(src, 10 SECONDS, src))
if(!do_after(src, 10 SECONDS, target = src))
visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form."))
return 0
visible_message(span_infoplain(span_bold("\The [src]") + " has reverted to their original form."))
@@ -666,7 +666,7 @@
return
visible_message(span_infoplain(span_bold("\The [src]") + " begins significantly shifting their form."))
if(!do_after(src, 10 SECONDS, src))
if(!do_after(src, 10 SECONDS, target = src))
visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form."))
return 0
@@ -255,7 +255,7 @@
if(m_action == "Yes")
to_chat(M, span_warning("You begin to break the lines of the glamour ring."))
if(!do_after(M, 10 SECONDS, src))
if(!do_after(M, 10 SECONDS, target = src))
to_chat(M, span_warning("You leave the glamour ring alone."))
return
to_chat(M, span_warning("You have destroyed \the [src]."))
@@ -270,7 +270,7 @@
if(LL.ring_cooldown + 10 MINUTES > world.time)
to_chat(M, span_warning("You must wait a while before drawing energy from the glamour again."))
return
if(!do_after(M, 10 SECONDS, src))
if(!do_after(M, 10 SECONDS, target = src))
to_chat(M, span_warning("You stop drawing energy."))
return
LL.lleill_energy = min((LL.lleill_energy + 75),LL.lleill_energy_max)
@@ -595,7 +595,7 @@ var/list/wrapped_species_by_ref = list()
oocnotes = 1
to_chat(character, span_notify("You begin to reform. You will need to remain still."))
character.visible_message(span_notify("[character] rapidly contorts and shifts!"), span_danger("You begin to reform."))
if(do_after(character, 40))
if(do_after(character, 4 SECONDS, target = src))
if(character.client.prefs) //Make sure we didn't d/c
character.client.prefs.vanity_copy_to(src, FALSE, flavour, oocnotes, FALSE, FALSE)
character.visible_message(span_notify("[character] adopts a new form!"), span_danger("You have reformed."))
@@ -653,7 +653,7 @@ var/list/wrapped_species_by_ref = list()
to_chat(character, span_notify("You begin to reassemble into [victim]. You will need to remain still."))
character.visible_message(span_notify("[character] rapidly contorts and shifts!"), span_danger("You begin to reassemble into [victim]."))
if(do_after(character, 40))
if(do_after(character, 4 SECONDS, target = victim))
checking = FALSE
for(var/obj/item/grab/G in character)
if(G.affecting == victim && G.state >= GRAB_AGGRESSIVE)
@@ -440,7 +440,7 @@
to_chat(src,span_warning("You can't change forms while inside something."))
return
to_chat(src, span_notice("You rapidly disassociate your form."))
if(force || do_after(src,20))
if(force || do_after(src, 2 SECONDS, target = src))
handle_grasp() //It's possible to blob out before some key parts of the life loop. This results in things getting dropped at null. TODO: Fix the code so this can be done better.
remove_micros(src, src) //Living things don't fare well in roblobs.
if(buckled)
@@ -554,7 +554,7 @@
to_chat(blob,span_warning("You can't change forms while inside something."))
return
to_chat(src, span_notice("You rapidly reassemble your form."))
if(force || do_after(blob,20))
if(force || do_after(blob, 2 SECONDS, target = src))
if(buckled)
buckled.unbuckle_mob()
if(LAZYLEN(buckled_mobs))
@@ -53,7 +53,7 @@
else
blob = temporary_form
active_regen = 1
if(do_after(blob,50))
if(do_after(blob, 5 SECONDS, target = src))
var/list/limblist = species.has_limbs[choice]
var/limbpath = limblist["path"]
var/obj/item/organ/external/new_eo = new limbpath(src)
@@ -106,7 +106,7 @@
var/obj/item/organ/internal/nano/refactory/refactory = nano_get_refactory()
if(refactory.get_stored_material(MAT_STEEL) >= 10000)
to_chat(protie, span_notify("You begin to rebuild. You will need to remain still."))
if(do_after(protie, 400))
if(do_after(protie, 40 SECONDS, target = src))
if(species?:OurRig) //Unsafe, but we should only ever be using this with a Protean
species?:OurRig?:make_alive(src,1) //Re-using this proc
refactory.use_stored_material(MAT_STEEL,refactory.get_stored_material(MAT_STEEL)) //Use all of our steel
@@ -129,7 +129,7 @@
oocnotes = 1
to_chat(protie, span_notify("You begin to reassemble. You will need to remain still."))
protie.visible_message(span_notify("[protie] rapidly contorts and shifts!"), span_danger("You begin to reassemble."))
if(do_after(protie, 40))
if(do_after(protie, 4 SECONDS, target = src))
if(protie.client.prefs) //Make sure we didn't d/c
var/obj/item/rig/protean/Rig = species?:OurRig
protie.client.prefs.vanity_copy_to(src, FALSE, flavour, oocnotes, TRUE, FALSE)
@@ -191,7 +191,7 @@
to_chat(protie, span_notify("You begin to reassemble into [victim]. You will need to remain still."))
protie.visible_message(span_notify("[protie] rapidly contorts and shifts!"), span_danger("You begin to reassemble into [victim]."))
if(do_after(protie, 40))
if(do_after(protie, 4 SECONDS, target = src))
checking = FALSE
for(var/obj/item/grab/G in protie)
if(G.affecting == victim && G.state >= GRAB_AGGRESSIVE)
@@ -327,7 +327,7 @@
to_chat(protie, span_warning("You need to be repaired first before you can act!"))
return
to_chat(protie, span_notice("You rapidly condense into your module."))
if(forced || do_after(protie,20))
if(forced || do_after(protie, 2 SECONDS, target = src))
if(!temporary_form) //If you're human, force you into blob form before rig'ing
nano_blobform(forced)
spawn(2)
@@ -700,7 +700,7 @@
return
if(G.loc == protie && G.state >= GRAB_AGGRESSIVE)
protie.visible_message(span_warning("[protie] is attempting to latch onto [target]!"), span_danger("You attempt to latch onto [target]!"))
if(do_after(protie, 50, target))
if(do_after(protie, 5 SECONDS, target))
if(G.loc == protie && G.state >= GRAB_AGGRESSIVE)
target.drop_from_inventory(target.back)
protie.visible_message(span_danger("[protie] latched onto [target]!"), span_danger("You latch yourself onto [target]!"))
@@ -250,13 +250,13 @@
if(1)
if(W.has_tool_quality(TOOL_SCREWDRIVER))
playsound(src, W.usesound, 50, 1)
if(do_after(user,50,src))
if(do_after(user, 5 SECONDS, target = src))
to_chat(user, span_notice("You unscrew the maintenace panel on the [src]."))
dead +=1
return
if(2)
if(istype(W, /obj/item/protean_reboot))//placeholder
if(do_after(user,50,src))
if(do_after(user, 5 SECONDS, target = src))
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
to_chat(user, span_notice("You carefully slot [W] in the [src]."))
dead +=1
@@ -264,7 +264,7 @@
return
if(3)
if(istype(W, /obj/item/stack/nanopaste))
if(do_after(user,50,src))
if(do_after(user, 5 SECONDS, target = src))
playsound(src, 'sound/effects/ointment.ogg', 50, 1)
to_chat(user, span_notice("You slather the interior confines of the [src] with the [W]."))
dead +=1
@@ -274,9 +274,9 @@
if(istype(W, /obj/item/shockpaddles))
if(W?:can_use(user))
to_chat(user, span_notice("You hook up the [W] to the contact points in the maintenance assembly"))
if(do_after(user,50,src))
if(do_after(user, 5 SECONDS, target = src))
playsound(src, 'sound/machines/defib_charge.ogg', 50, 0)
if(do_after(user,10,src))
if(do_after(user, 1 SECOND, target = src))
playsound(src, 'sound/machines/defib_zap.ogg', 50, 1, -1)
playsound(src, 'sound/machines/defib_success.ogg', 50, 0)
new /obj/effect/gibspawner/robot(src.loc)
@@ -311,7 +311,7 @@
var/obj/item/rig_module/mod = W
to_chat(user, "You begin installing \the [mod] into \the [src].")
if(!do_after(user,40))
if(!do_after(user, 4 SECONDS, target = src))
return
if(!user || !W)
return
@@ -117,7 +117,7 @@
to_chat(src, span_warning("This is going to cause [B] to keep bleeding!"))
to_chat(B, span_danger("You are going to keep bleeding from this bite!"))
if(do_after(src, 300, B)) //Thrirty seconds.
if(do_after(src, 30 SECONDS, target = B))
if(!Adjacent(B)) return
if(noise)
src.visible_message(span_infoplain(span_red(span_bold("[src] suddenly extends their fangs and plunges them down into [B]'s neck!"))))
@@ -493,7 +493,7 @@
last_special = world.time + vore_shred_time
visible_message(span_danger("[src] appears to be preparing to do something to [T]!")) //Let everyone know that bad times are ahead
if(do_after(src, vore_shred_time, T)) //Ten seconds. You have to be in a neckgrab for this, so you're already in a bad position.
if(do_after(src, vore_shred_time, target = T)) //Ten seconds. You have to be in a neckgrab for this, so you're already in a bad position.
if(can_shred(T) != T)
to_chat(src,span_warning("Looks like you lost your chance..."))
return
@@ -634,7 +634,7 @@
to_chat(src, span_warning("You can't do that in your current state."))
return
if(do_after(src, 25))
if(do_after(src, 25, target = src))
var/obj/item/storage/vore_egg/bugcocoon/C = new(loc)
forceMove(C)
@@ -726,7 +726,7 @@
to_chat(target, span_critical("Something begins to circle around you in the water!")) //Dun dun...
var/starting_loc = target.loc
if(do_after(src, 50))
if(do_after(src, 5 SECONDS, target))
if(target.loc != starting_loc)
to_chat(target, span_warning("You got away from whatever that was..."))
to_chat(src, span_notice("They got away."))
@@ -1158,7 +1158,7 @@
visible_message(span_warning("[src] is preparing to [trait_injection_verb] [target]!"))
if(do_after(src, 50, target)) //A decent enough timer.
if(do_after(src, 5 SECONDS, target)) //A decent enough timer.
add_attack_logs(src,target,"Injection trait ([trait_injection_selected], [trait_injection_amount])")
if(target.reagents && (trait_injection_amount > 0) && !synth)
target.reagents.add_reagent(trait_injection_selected, trait_injection_amount)
@@ -1223,7 +1223,7 @@
src.visible_message(span_bolddanger("[src] moves their head next to [T]'s neck, seemingly looking for something!"))
if(do_after(src, 300, T)) //Thrirty seconds.
if(do_after(src, 30 SECONDS, target = T)) //Thrirty seconds.
if(choice == REAGENT_APHRODISIAC)
src.show_message(span_warning("You sink your fangs into [T] and inject your aphrodisiac!"))
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
@@ -1317,7 +1317,7 @@ var/eggs = 0
if(!choice)
return
if(do_after(src, 300)) //Thrirty seconds.
if(do_after(src, 30 SECONDS, target = src)) //Thrirty seconds.
if(choice == "Make a Egg")
src.show_message(span_warning("You feel your belly bulging a bit, you made an egg!"))
C.nutrition -=150
@@ -13,22 +13,22 @@
// Handle things that are part of this interface but not removing/replacing a given item.
if("pockets")
visible_message(span_danger("\The [user] is trying to empty \the [src]'s pockets!"))
if(do_after(user,HUMAN_STRIP_DELAY,src))
if(do_after(user, HUMAN_STRIP_DELAY, target = src))
empty_pockets(user)
return
if("splints")
visible_message(span_danger("\The [user] is trying to remove \the [src]'s splints!"))
if(do_after(user,HUMAN_STRIP_DELAY,src))
if(do_after(user, HUMAN_STRIP_DELAY, target = src))
remove_splints(user)
return
if("sensors")
visible_message(span_danger("\The [user] is trying to set \the [src]'s sensors!"))
if(do_after(user,HUMAN_STRIP_DELAY,src))
if(do_after(user, HUMAN_STRIP_DELAY, target = src))
toggle_sensors(user)
return
if("internals")
visible_message(span_danger("\The [user] is trying to set \the [src]'s internals!"))
if(do_after(user,HUMAN_STRIP_DELAY,src))
if(do_after(user, HUMAN_STRIP_DELAY, target = src))
toggle_internals(user)
return
if("tie")
@@ -40,7 +40,7 @@
return
visible_message(span_danger("\The [user] is trying to remove \the [src]'s [A.name]!"))
if(!do_after(user,HUMAN_STRIP_DELAY,src))
if(!do_after(user, HUMAN_STRIP_DELAY, target = src))
return
if(!A || suit.loc != src || !(A in suit.accessories))
@@ -104,7 +104,7 @@
else
visible_message(span_danger("\The [user] is trying to put \a [wrapped] on \the [src]!"))
if(!do_after(user,HUMAN_STRIP_DELAY,src))
if(!do_after(user, HUMAN_STRIP_DELAY, target = src))
return
if(!stripping)
+1 -1
View File
@@ -87,7 +87,7 @@
span_warning("You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)")
)
if(do_after(src, 2 MINUTES, timed_action_flags = IGNORE_INCAPACITATED))
if(do_after(src, 2 MINUTES, target = src, timed_action_flags = IGNORE_INCAPACITATED))
if(!buckled)
return
visible_message(span_danger("[src] manages to unbuckle themself!"),
+1 -1
View File
@@ -117,7 +117,7 @@
return
visible_message(span_warning("[src] begins chargin' their lazor!"))
if(!do_after(src, 5 SECONDS, chosen_target))
if(!do_after(src, 5 SECONDS, target = chosen_target))
return
if(chosen_target.z != src.z || get_dist(src,chosen_target) > 7)
return
+2 -2
View File
@@ -790,7 +790,7 @@ var/list/ai_verbs_default = list(
if(anchored)
playsound(src, W.usesound, 50, 1)
user.visible_message(span_notice("\The [user] starts to unbolt \the [src] from the plating..."))
if(!do_after(user,40 * W.toolspeed))
if(!do_after(user, 4 SECONDS * W.toolspeed, target = src))
user.visible_message(span_notice("\The [user] decides not to unbolt \the [src]."))
return
user.visible_message(span_notice("\The [user] finishes unfastening \the [src]!"))
@@ -799,7 +799,7 @@ var/list/ai_verbs_default = list(
else
playsound(src, W.usesound, 50, 1)
user.visible_message(span_notice("\The [user] starts to bolt \the [src] to the plating..."))
if(!do_after(user,40 * W.toolspeed))
if(!do_after(user, 4 SECONDS * W.toolspeed, target = src))
user.visible_message(span_notice("\The [user] decides not to bolt \the [src]."))
return
user.visible_message(span_notice("\The [user] finishes fastening down \the [src]!"))
@@ -38,13 +38,13 @@
if(stat == DEAD)
healths.icon_state = "health7"
/mob/living/silicon/pai/proc/full_restore()
/mob/living/silicon/pai/proc/full_restore() //This is using do_after all kinds of weird...
adjustBruteLoss(- bruteloss)
adjustFireLoss(- fireloss)
do_after(src, 1 SECONDS)
do_after(src, 1 SECONDS, target = src)
card.setEmotion(16)
stat = CONSCIOUS
do_after(src, 5 SECONDS)
do_after(src, 5 SECONDS, target = src)
var/mob/observer/dead/ghost = src.get_ghost()
if(ghost)
ghost.notify_revive("Someone is trying to revive you. Re-enter your body if you want to be revived!", 'sound/effects/pai-restore.ogg', source = card)
@@ -65,7 +65,7 @@
if(!R.use_direct_power(power_tick, 500)) //We don't want to drain ourselves too far down during exploration
to_chat(R, span_warning("Not enough power to initialize the repair system."))
return
if(do_after(R, tick_delay))
if(do_after(R, tick_delay, target = R))
if(!C)
return
C.brute_damage -= min(C.brute_damage, heal_per_tick)
@@ -249,7 +249,7 @@
return
to_chat(user, span_filter_notice("It has [uses] lights remaining. Attempting to fabricate a replacement. Please stand still."))
cooldown = 1
if(do_after(user, 50))
if(do_after(user, 5 SECONDS, target = src))
glass.use_charge(125)
add_uses(1)
cooldown = 0
@@ -282,7 +282,7 @@
return
busy = TRUE
to_chat(user, span_notice("You begin to attach \the [C] to \the [A]..."))
if(do_after(user, 30))
if(do_after(user, 3 SECONDS, target = src))
to_chat(user, span_notice("You have attached \the [src] to \the [A]."))
var/obj/machinery/clamp/clamp = new/obj/machinery/clamp(A.loc, A)
clamps.Add(clamp)
@@ -292,7 +292,7 @@
else
busy = TRUE
to_chat(user, span_notice("You begin to remove \the [C] from \the [A]..."))
if(do_after(user, 30))
if(do_after(user, 3 SECONDS, target = src))
to_chat(user, span_notice("You have removed \the [src] from \the [A]."))
clamps.Remove(C)
qdel(C)
@@ -90,7 +90,7 @@
to_chat(user, span_warning("\The [target] is too large to fit into your [src.name]"))
return
user.visible_message(span_warning("[hound.name] is ingesting [target.name] into their [src.name]."), span_notice("You start ingesting [target] into your [src.name]..."))
if(do_after(user, 30, target) && length(contents) < max_item_count)
if(do_after(user, 3 SECONDS, target) && length(contents) < max_item_count)
target.forceMove(src)
user.visible_message(span_warning("[hound.name]'s [src.name] groans lightly as [target.name] slips inside."), span_notice("Your [src.name] groans lightly as [target] slips inside."))
playsound(src, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/preference/toggle/eating_noises)
@@ -103,7 +103,7 @@
if(istype(target, /mob/living/simple_mob/animal/passive/mouse)) //Edible mice, dead or alive whatever. Mostly for carcass picking you cruel bastard :v
var/mob/living/simple_mob/trashmouse = target
user.visible_message(span_warning("[hound.name] is ingesting [trashmouse] into their [src.name]."), span_notice("You start ingesting [trashmouse] into your [src.name]..."))
if(do_after(user, 30, trashmouse) && length(contents) < max_item_count)
if(do_after(user, 3 SECONDS, target = trashmouse) && length(contents) < max_item_count)
trashmouse.forceMove(src)
trashmouse.reset_view(src)
user.visible_message(span_warning("[hound.name]'s [src.name] groans lightly as [trashmouse] slips inside."), span_notice("Your [src.name] groans lightly as [trashmouse] slips inside."))
@@ -123,7 +123,7 @@
to_chat(user, span_warning("[trashman] is buckled and can not be put into your [src.name]."))
return
user.visible_message(span_warning("[hound.name] is ingesting [trashman] into their [src.name]."), span_notice("You start ingesting [trashman] into your [src.name]..."))
if(do_after(user, 30, trashman) && !patient && !trashman.buckled && length(contents) < max_item_count)
if(do_after(user, 3 SECONDS, target = trashman) && !patient && !trashman.buckled && length(contents) < max_item_count)
trashman.forceMove(src)
trashman.reset_view(src)
START_PROCESSING(SSobj, src)
@@ -47,7 +47,7 @@
to_chat(D, span_danger("You begin decompiling [M]."))
if(!do_after(D,50))
if(!do_after(D, 5 SECONDS, target = src))
to_chat(D, span_danger("You need to remain still while decompiling such a large object."))
return
@@ -41,7 +41,7 @@
to_chat(D, span_danger("You begin decompiling [M]."))
if(!do_after(D,50))
if(!do_after(D, 5 SECONDS, target = src))
to_chat(D, span_danger("You need to remain still while decompiling such a large object."))
return
@@ -773,7 +773,7 @@
if(bolt)
to_chat(user,span_filter_notice("You begin removing \the [bolt]."))
if(do_after(user, 2 SECONDS, src))
if(do_after(user, 2 SECONDS, target = src))
bolt.forceMove(get_turf(src))
bolt = null
@@ -100,7 +100,7 @@
LAZYREMOVE(stored_atoms, remove_ref)
else
user.visible_message(span_infoplain(span_bold("\The [user]") + " begins unloading \the [removing] from \the [src]'s cargo compartment."))
if(do_after(user, 3 SECONDS, src) && !QDELETED(removing) && removing.loc == src)
if(do_after(user, 3 SECONDS, target = src) && !QDELETED(removing) && removing.loc == src)
drop_stored_atom(removing, user)
return TRUE
@@ -127,7 +127,7 @@
visible_message(span_infoplain(span_bold("\The [src]") + " begins loading \the [dropping] into its cargo compartment."))
else
user.visible_message(span_infoplain(span_bold("\The [user]") + " begins loading \the [dropping] into \the [src]'s cargo compartment."))
if(do_after(user, 3 SECONDS, src) && can_mouse_drop(dropping, user) && can_store_atom(dropping, user))
if(do_after(user, 3 SECONDS, target = src) && can_mouse_drop(dropping, user) && can_store_atom(dropping, user))
store_atom(dropping, user)
return FALSE
+1 -1
View File
@@ -163,7 +163,7 @@
set waitfor = FALSE
set_AI_busy(TRUE)
if(do_after(src, reload_time))
if(do_after(src, reload_time, target = src))
if(reload_sound)
playsound(src, reload_sound, 70, 1)
reload_count = 0
@@ -92,7 +92,7 @@
if(!that_one)
return ..()
to_chat(that_one, span_danger("\The [user]'s hand reaches toward you!!!"))
if(!do_after(user, 3 SECONDS, src))
if(!do_after(user, 3 SECONDS, target = src))
return ..()
if(!istype(that_one.loc,/turf/simulated/floor/outdoors/fur))
to_chat(user, span_warning("\The [that_one] got away..."))
@@ -266,7 +266,7 @@
to_chat(src, span_notice("You begin to eat \the [E]..."))
if(!do_after(src, 20 SECONDS, E))
if(!do_after(src, 20 SECONDS, target = E))
return
to_chat(src, span_notice("[msg]"))
if(nut || aff)
@@ -332,7 +332,7 @@
to_chat(src, span_warning("You decide not to transition."))
return
to_chat(src, span_notice("You begin to transition down to \the [our_dest], stay still..."))
if(!do_after(src, 15 SECONDS))
if(!do_after(src, 15 SECONDS, target = src))
to_chat(src, span_warning("You were interrupted."))
return
visible_message(span_warning("\The [src] disappears!!!"))
@@ -343,7 +343,7 @@
else
to_chat(src, span_notice("You begin to transition back to space, stay still..."))
if(!do_after(src, 15 SECONDS))
if(!do_after(src, 15 SECONDS, target = src))
to_chat(src, span_warning("You were interrupted."))
return
@@ -1059,7 +1059,7 @@
to_chat(user, span_warning("You can see \the [controller] inside! Tendrils of nerves seem to have attached themselves to \the [controller]! There's no room for you right now!"))
return
user.visible_message(span_notice("\The [user] reaches out to touch \the [src]..."),span_notice("You reach out to touch \the [src]..."))
if(!do_after(user, 10 SECONDS, src))
if(!do_after(user, 10 SECONDS, target = src))
user.visible_message(span_warning("\The [user] pulls back from \the [src]."),span_warning("You pull back from \the [src]."))
return
if(controller) //got busy while you were waiting, get rekt
@@ -88,7 +88,7 @@
to_chat(M, "Something slimy begins probing at the opening of your ear canal...")
to_chat(src, span_warning("You slither up [M] and begin probing at their ear canal..."))
if(!do_after(src,30))
if(!do_after(src, 3 SECONDS, target = M))
to_chat(src, span_warning("As [M] moves away, you are dislodged and fall to the ground."))
return
@@ -470,7 +470,7 @@ GLOBAL_LIST_EMPTY(wounds_being_tended_by_drakes)
global.wounds_being_tended_by_drakes[friend_ref] = world.time + (8 SECONDS)
set_AI_busy(TRUE)
if(!do_after(src, 8 SECONDS, friend) || QDELETED(friend) || friend.has_modifier_of_type(/datum/modifier/sifsap_salve) || incapacitated() || !spend_sap(10))
if(!do_after(src, 8 SECONDS, target = friend) || QDELETED(friend) || friend.has_modifier_of_type(/datum/modifier/sifsap_salve) || incapacitated() || !spend_sap(10))
global.wounds_being_tended_by_drakes -= friend_ref
set_AI_busy(FALSE)
return TRUE
@@ -304,7 +304,7 @@
M.take_damage(damage_to_apply)
if(prob(3))
visible_message(span_critical("\The [src] begins digging its claws into \the [M]'s hatch!"))
if(do_after(src, 1 SECOND))
if(do_after(src, 1 SECOND, target = M))
visible_message(span_critical("\The [src] rips \the [M]'s access hatch open, dragging [M.occupant] out!"))
M.go_out()
@@ -279,7 +279,7 @@
to_chat(user, span_notice("We cannot get through that host's protective gear."))
return
if(!do_after(src,2))
if(!do_after(src, 2, target))
to_chat(user, span_notice("As [M] moves away, we are dislodged and fall to the ground."))
return
@@ -244,12 +244,12 @@
/mob/living/simple_mob/animal/space/space_worm/proc/AttemptToEat(var/atom/target)
if(istype(target,/turf/simulated/wall))
var/turf/simulated/wall/W = target
if((!W.reinf_material && do_after(src, 5 SECONDS)) || do_after(src, 10 SECONDS)) // 10 seconds for an R-wall, 5 seconds for a normal one.
if((!W.reinf_material && do_after(src, 5 SECONDS, target)) || do_after(src, 10 SECONDS, target)) // 10 seconds for an R-wall, 5 seconds for a normal one.
if(target)
W.dismantle_wall()
return 1
else if(istype(target,/atom/movable))
if(istype(target,/mob) || do_after(src, 5)) // 5 ticks to eat stuff like tables.
if(istype(target,/mob) || do_after(src, 5, target)) // 5 ticks to eat stuff like tables.
var/atom/movable/objectOrMob = target
if(istype(objectOrMob, /obj/machinery/door)) // Doors and airlocks take time based on their durability and our damageo.
var/obj/machinery/door/D = objectOrMob
@@ -261,7 +261,7 @@
objectOrMob = null
break
if(do_after(src, 5))
if(do_after(src, 5, target))
D.visible_message(span_danger("Something crashes against \the [D]!"))
D.take_damage(2 * melee_damage_upper)
else
@@ -279,7 +279,7 @@
EF.visible_message(span_danger("Something begins forcing itself through \the [EF]!"))
else
EF.visible_message(span_danger("\The [src] begins forcing itself through \the [EF]!"))
if(do_after(src, EF.strength * 5))
if(do_after(src, EF.strength * 5, target))
EF.adjust_strength(rand(-8, -10))
EF.visible_message(span_danger("\The [src] crashes through \the [EF]!"))
else
@@ -464,7 +464,7 @@
return
visible_message("<b>\The [src]</b> begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src))
if(!do_after(src, 10 SECONDS, target = src))
visible_message("<b>\The [src]</b> ceases shifting their form.")
return 0
@@ -86,7 +86,7 @@
to_chat(src, span_danger("You begin to resist \the [prey_name]'s control!!!"))
to_chat(pred_body, span_danger("You feel the captive mind of [src] begin to resist your control."))
if(do_after(src, 10 SECONDS))
if(do_after(src, 10 SECONDS, target = prey_name))
restore_control()
else
to_chat(src, span_notice("Your attempt to regain control has been interrupted..."))
@@ -243,7 +243,7 @@
to_chat(pred, span_warning("You can feel the will of another overwriting your own, control of your body being sapped away from you..."))
to_chat(prey, span_warning("You can feel the will of your host diminishing as you exert your will over them!"))
if(!do_after(prey, 10 SECONDS))
if(!do_after(prey, 10 SECONDS, target = pred))
to_chat(prey, span_notice("Your attempt to regain control has been interrupted..."))
to_chat(pred, span_notice("The dominant sensation fades away..."))
return
@@ -338,7 +338,7 @@
to_chat(src, span_danger("You begin to resist \the [prey_name]'s control!!!"))
to_chat(pred_body, span_danger("You feel the captive mind of [src] begin to resist your control."))
if(do_after(src, 10 SECONDS))
if(do_after(src, 10 SECONDS, target = prey_name))
restore_control()
else
to_chat(src, span_notice("Your attempt to regain control has been interrupted..."))
@@ -394,7 +394,7 @@
if(istype(G) && M == G.affecting)
src.visible_message(span_danger("[src] seems to be doing something to [M], resulting in [M]'s body looking increasingly drowsy with every passing moment!"))
if(!do_after(src, 10 SECONDS))
if(!do_after(src, 10 SECONDS, target = M))
to_chat(M, span_notice("The alien presence fades, and you are left along in your body..."))
to_chat(src, span_notice("Your attempt to gather [M]'s mind has been interrupted."))
return
@@ -443,9 +443,9 @@
set desc = "If your body is inside of your predator still, attempts to re-insert yourself into it."
if(prey_body && prey_body.loc.loc == pred_body)
to_chat(src, span_notice("You exert your will and attempt to return to yout body!!!"))
to_chat(src, span_notice("You exert your will and attempt to return to your body!!!"))
to_chat(pred_body, span_warning("\The [src] resists your hold and attempts to return to their body!"))
if(do_after(src, 10 SECONDS))
if(do_after(src, 10 SECONDS, target = pred_body))
if(prey_body && prey_body.loc.loc == pred_body)
prey_body.ckey = prey_ckey
@@ -512,7 +512,7 @@
return
to_chat(pred, span_warning("You diminish your will, reducing it and allowing will of your prey to take over..."))
to_chat(prey, span_warning("You can feel the will of your host diminishing as you are given control over them!"))
if(!do_after(pred, 10 SECONDS))
if(!do_after(pred, 10 SECONDS, target = prey))
to_chat(pred, span_notice("Your attempt to share control has been interrupted..."))
to_chat(prey, span_notice("The dominant sensation fades away..."))
return
@@ -79,7 +79,7 @@
EXTRAPOLATOR_ACT_ADD_DISEASES(., base_disease)
// Still no idea why extrapolator == src, but I'll leave this for later if I find out.
// if(!dry_run && !EXTRAPOLATOR_ACT_CHECK(., EXTRAPOLATOR_ACT_PRIORITY_SPECIAL) && extrapolator.create_culture(user, base_disease))
if(do_after(user, 2 SECONDS))
if(do_after(user, 2 SECONDS, target = src))
user.visible_message(span_danger("[user] stabs [src] with [extrapolator], sucking it up!"), \
span_danger("You stab [src] with [extrapolator]'s probe, destroying it!"))
death()
@@ -211,7 +211,7 @@ GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list(
var/N = 0
for(H in vore_selected.contents) //Only works for carbons, RIP mice. Should pick the first human the code finds.
user.visible_message(span_infoplain("[user] uses a loop of wire to try fishing someone out of \the [src]."), span_infoplain("You use a loop of wire to try snagging someone trapped in \the [src]..."))
if(do_after(user, rand(3 SECONDS, 7 SECONDS))) //You can just spam click to stack attempts if you feel like abusing it.
if(do_after(user, rand(3 SECONDS, 7 SECONDS), target = src)) //You can just spam click to stack attempts if you feel like abusing it.
if(prob(15))
user.visible_message(span_notice("[user] pulls a sticky [H] free from \the [src]."), span_infoplain("You heft [H] free from \the [src]."))
LAZYSET(prey_excludes, H, world.time)
@@ -30,7 +30,7 @@
span_notice("[user] begins freeing [victim] from \the [src]."),
span_notice("You carefully begin to free [victim] from \the [src]."),
)
if(do_after(user, 5))
if(do_after(user, 5, target = src))
user.visible_message(span_notice("[victim] has been freed from \the [src] by [user]."))
for(var/A in buckled_mobs)
unbuckle_mob(A)
@@ -242,7 +242,7 @@
escape_time = 0.5 * base_escape_time
else
escape_time = base_escape_time //Admeme size scale
if(do_after(user, escape_time, src, timed_action_flags = IGNORE_INCAPACITATED))
if(do_after(user, escape_time, target = src, timed_action_flags = IGNORE_INCAPACITATED))
if(!has_buckled_mobs())
return
to_chat(user, "You tug free of the tacky, rubbery strands!")
+1 -1
View File
@@ -30,7 +30,7 @@
return FALSE
/mob/living/simple_mob/proc/unique_tame_check(var/obj/O, var/mob/user)
if(do_after(user, 0.5 SECONDS, src))
if(do_after(user, 0.5 SECONDS, target = src))
return TRUE
return FALSE
+1 -1
View File
@@ -939,7 +939,7 @@
else
to_chat(U, span_warning("You attempt to get a good grip on [selection] in [S]'s body."))
if(!do_after(U, 30))
if(!do_after(U, 3 SECONDS, target = src))
return
if(!selection || !S || !U)
return
+1 -1
View File
@@ -135,7 +135,7 @@
return
attacker.visible_message(span_danger("[attacker] starts forcing [target] to the ground!"))
if(do_after(attacker, 20) && target)
if(do_after(attacker, 2 SECONDS, target) && target)
last_action = world.time
attacker.visible_message(span_danger("[attacker] forces [target] to the ground!"))
apply_pinning(target, attacker)