From f85a202d80f7f0bfeb083e34e50e740a7e92f357 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Fri, 22 Aug 2025 17:35:16 -0700 Subject: [PATCH] [MIRROR] Refactors do_after w/ TG's do_after (#11486) Co-authored-by: Cameron Lennox --- code/__defines/dcs/signals/signals_datum.dm | 2 +- code/__defines/do_afters.dm | 10 + code/__defines/flags.dm | 12 ++ code/__defines/traits/declarations.dm | 2 + code/_helpers/mobs.dm | 139 +++++++------ code/_onclick/hud/action/action.dm | 8 +- code/_onclick/hud/radial.dm | 4 +- code/controllers/subsystems/garbage.dm | 2 +- code/datums/browser.dm | 2 +- code/datums/chat_message.dm | 8 +- code/datums/cinematics/_cinematic.dm | 4 +- code/datums/cogbar.dm | 100 +++++++++ .../components/connect_containers_ch.dm | 4 +- code/datums/components/connect_loc_behalf.dm | 6 +- code/datums/components/connect_mob_behalf.dm | 4 +- code/datums/components/connect_range_ch.dm | 4 +- code/datums/components/overlay_lighting.dm | 16 +- code/datums/components/recursive_move.dm | 10 +- .../species/shadekin/powers/dark_maw.dm | 4 +- code/datums/components/traits/weaver.dm | 4 +- code/datums/elements/_element.dm | 4 +- code/datums/progressbar.dm | 189 +++++++++++++----- .../proximity_monitor/proximity_monitor_ch.dm | 8 +- code/datums/weakrefs.dm | 2 +- code/game/atoms_movable.dm | 6 +- code/game/machinery/medical_kiosk.dm | 2 +- code/game/mecha/equipment/tools/passenger.dm | 2 +- code/game/objects/items.dm | 4 +- .../objects/items/devices/denecrotizer_vr.dm | 6 +- code/game/objects/items/stacks/medical.dm | 2 +- code/game/objects/items/stacks/nanopaste.dm | 6 +- .../objects/items/weapons/capture_crystal.dm | 16 +- .../objects/items/weapons/storage/pouches.dm | 4 +- code/game/objects/items/weapons/weaponry.dm | 2 +- code/game/objects/micro_structures.dm | 14 +- code/game/objects/structures/door_assembly.dm | 22 +- code/game/objects/structures/droppod.dm | 2 +- code/game/objects/structures/girders.dm | 20 +- code/game/objects/structures/low_wall.dm | 4 +- code/game/turfs/simulated/floor_attackby.dm | 2 +- .../simulated/outdoors/survival_action_vr.dm | 8 +- code/modules/admin/tag.dm | 2 +- .../admin/view_variables/mark_datum.dm | 6 +- code/modules/ai/ai_holder_targeting.dm | 6 +- code/modules/catalogue/cataloguer.dm | 2 +- code/modules/client/client procs.dm | 2 +- code/modules/client/stored_item.dm | 4 +- code/modules/clothing/spacesuits/rig/rig.dm | 2 +- .../entrepreneur/entrepreneur_items.dm | 4 +- .../eventkit/generic_objects/generic_item.dm | 4 +- .../generic_objects/generic_structure.dm | 4 +- code/modules/food/drinkingglass/extras.dm | 2 +- code/modules/food/food/superfoods.dm | 2 +- code/modules/food/food/superfoods_ch.dm | 2 +- code/modules/hydroponics/trays/tray_soil.dm | 2 +- code/modules/lootpanel/contents.dm | 4 +- code/modules/lootpanel/search_object.dm | 2 +- .../mob/living/carbon/human/human_movement.dm | 6 +- .../living/carbon/human/human_powers_vr.dm | 6 +- .../mob/living/carbon/human/human_resist.dm | 4 +- .../human/species/lleill/lleill_abilities.dm | 14 +- .../human/species/lleill/lleill_items.dm | 4 +- .../human/species/species_shapeshift.dm | 4 +- .../species/station/protean/protean_blob.dm | 4 +- .../species/station/protean/protean_powers.dm | 12 +- .../species/station/protean/protean_rig.dm | 8 +- .../station/station_special_abilities.dm | 2 +- code/modules/mob/living/carbon/resist.dm | 6 +- code/modules/mob/living/living_powers.dm | 2 +- .../silicon/robot/dogborg/dog_modules.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../subtypes/animal/alien animals/stardog.dm | 8 +- .../subtypes/animal/alien animals/teppi.dm | 4 +- .../simple_mob/subtypes/glamour/ddraig.dm | 2 +- .../subtypes/vore/dominated_brain.dm | 20 +- .../simple_mob/subtypes/vore/slug_ch.dm | 2 +- .../simple_mob/subtypes/vore/softdog.dm | 2 +- code/modules/mob/mob_defines.dm | 6 +- code/modules/overmap/ships/ship_vr.dm | 2 +- .../modules/projectiles/guns/launcher/bows.dm | 2 +- code/modules/tooltip/tooltip.dm | 4 +- code/modules/vore/eating/belly_obj_vr.dm | 2 +- code/modules/vore/eating/living_vr.dm | 2 +- code/modules/vore/eating/silicon_vr.dm | 2 +- code/modules/vore/eating/vore_procs.dm | 2 +- icons/effects/progressbar.dmi | Bin 571 -> 1246 bytes .../code/datums/components/squeak.dm | 4 +- modular_chomp/code/game/machinery/buttons.dm | 2 +- modular_chomp/code/modules/halloween/items.dm | 2 +- .../human/species/species_shapeshift_ch.dm | 2 +- vorestation.dme | 2 + 91 files changed, 558 insertions(+), 310 deletions(-) create mode 100644 code/__defines/do_afters.dm create mode 100644 code/datums/cogbar.dm diff --git a/code/__defines/dcs/signals/signals_datum.dm b/code/__defines/dcs/signals/signals_datum.dm index eb7a00aac5..72439b6f79 100644 --- a/code/__defines/dcs/signals/signals_datum.dm +++ b/code/__defines/dcs/signals/signals_datum.dm @@ -10,7 +10,7 @@ /// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation #define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" /// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called -#define COMSIG_PARENT_QDELETING "parent_qdeleting" +#define COMSIG_QDELETING "parent_qdeleting" /// Called whenever an admin manually deletes an object, via the "Delete" verb, before qdel() is called: (client/deleting_admin) #define COMSIG_ADMIN_DELETING "parent_admin_deleting" /// generic topic handler (usr, href_list) diff --git a/code/__defines/do_afters.dm b/code/__defines/do_afters.dm new file mode 100644 index 0000000000..cba02d6cf6 --- /dev/null +++ b/code/__defines/do_afters.dm @@ -0,0 +1,10 @@ +#define DOAFTER_SOURCE_SURGERY "doafter_surgery" +#define DOAFTER_SOURCE_MECHADRILL "doafter_mechadrill" +#define DOAFTER_SOURCE_SURVIVALPEN "doafter_survivalpen" +#define DOAFTER_SOURCE_GETTING_UP "doafter_gettingup" +#define DOAFTER_SOURCE_CLIMBING_LADDER "doafter_climbingladder" +#define DOAFTER_SOURCE_SPIDER "doafter_spider" +#define DOAFTER_SOURCE_HEAL_TOUCH "doafter_heal_touch" +#define DOAFTER_SOURCE_PLANTING_DEVICE "doafter_planting_device" +#define DOAFTER_SOURCE_CHARGE_CRANKRECHARGE "doafter_charge_crank_recharge" +#define DOAFTER_SOURCE_REMOVING_HOOK "doafter_removing_hook" diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index 19a67310f1..2dbc836c2b 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -54,6 +54,18 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define PASSBLOB (1<<3) #define PASSMOB (1<<4) +// timed_action_flags parameter for `/proc/do_after` +/// Can do the action even if mob moves location +#define IGNORE_USER_LOC_CHANGE (1<<0) +/// Can do the action even if the target moves location +#define IGNORE_TARGET_LOC_CHANGE (1<<1) +/// Can do the action even if the item is no longer being held +#define IGNORE_HELD_ITEM (1<<2) +/// Can do the action even if the mob is incapacitated (ex. handcuffed) +#define IGNORE_INCAPACITATED (1<<3) +/// Used to prevent important slowdowns from being abused by drugs like kronkaine +#define IGNORE_SLOWDOWNS (1<<4) + // Flags for do_after/do_mob exclusivity. #define TASK_TARGET_EXCLUSIVE (1<<1) #define TASK_USER_EXCLUSIVE (1<<2) diff --git a/code/__defines/traits/declarations.dm b/code/__defines/traits/declarations.dm index 8936a3d55d..f95a6a5c28 100644 --- a/code/__defines/traits/declarations.dm +++ b/code/__defines/traits/declarations.dm @@ -15,3 +15,5 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Prevents the affected object from opening a loot window via alt click. See atom/AltClick() #define TRAIT_ALT_CLICK_BLOCKER "no_alt_click" + +#define TRAIT_INCAPACITATED "incapacitated" diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index b37db57a74..dc92eb5cbd 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -264,90 +264,115 @@ Proc for attack log creation, because really why not if (progbar) qdel(progbar) -/proc/do_after(mob/user, delay, atom/target = null, needhand = TRUE, progress = TRUE, incapacitation_flags = INCAPACITATION_DEFAULT, ignore_movement = FALSE, max_distance = null, exclusive = FALSE) +/** + * Timed action involving one mob user. Target is optional. + * + * Checks that `user` does not move, change hands, get stunned, etc. for the + * given `delay`. Returns `TRUE` on success or `FALSE` on failure. + * + * @param {mob} user - The mob performing the action. + * + * @param {number} delay - The time in deciseconds. Use the SECONDS define for readability. `1 SECONDS` is 10 deciseconds. + * + * @param {atom} target - The target of the action. This is where the progressbar will display. + * + * @param {flag} timed_action_flags - Flags to control the behavior of the timed action. + * + * @param {boolean} progress - Whether to display a progress bar / cogbar. + * + * @param {datum/callback} extra_checks - Additional checks to perform before the action is executed. + * + * @param {string} interaction_key - The assoc key under which the do_after is capped, with max_interact_count being the cap. Interaction key will default to target if not set. + * + * @param {number} max_interact_count - The maximum amount of interactions allowed. + * + * @param {boolean} hidden - By default, any action 1 second or longer shows a cog over the user while it is in progress. If hidden is set to TRUE, the cog will not be shown. + * + * @param {icon} icon - The icon file of the cog. Default: 'icons/effects/progressbar.dmi' + * + * @param {iconstate} iconstate - The icon state of the cog. Default: "Cog" + */ +/proc/do_after(mob/user, delay, atom/target, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, interaction_key, max_interact_count = 1, hidden = FALSE, icon = 'icons/effects/progressbar.dmi', iconstate = "cog", max_distance = null) if(!user) return FALSE - if(!delay) - return TRUE //Okay. Done. - if(user.status_flags & DOING_TASK) - to_chat(user, span_warning("You're in the middle of doing something else already.")) - return FALSE //Performing an exclusive do_after or do_mob already - if(target?.flags & IS_BUSY) - to_chat(user, span_warning("Someone is already doing something with \the [target].")) - return FALSE + if(!isnum(delay)) + CRASH("do_after was passed a non-number delay: [delay || "null"].") - var/atom/target_loc = null - if(target) - target_loc = target.loc + if(!interaction_key && target) + interaction_key = target //Use the direct ref to the target + if(interaction_key) //Do we have a interaction_key now? + var/current_interaction_count = LAZYACCESS(user.do_afters, interaction_key) || 0 + if(current_interaction_count >= max_interact_count) //We are at our peak + return + LAZYSET(user.do_afters, interaction_key, current_interaction_count + 1) - var/atom/original_loc = user.loc + var/atom/user_loc = user.loc + var/atom/target_loc = target?.loc - var/obj/mecha/M = null - - if(istype(user.loc, /obj/mecha)) - original_loc = get_turf(original_loc) - M = user.loc + var/drifting = FALSE + /* //We don't have a drift handler yet, sadly. + if(!isnull(user.drift_handler)) + drifting = TRUE*/ var/holding = user.get_active_hand() + if(!(timed_action_flags & IGNORE_SLOWDOWNS)) + var/slowdown = user.calculate_item_encumbrance() + if(slowdown) + delay *= slowdown + var/datum/progressbar/progbar - if (progress) - progbar = new(user, delay, target) + var/datum/cogbar/cog + + if(progress) + if(user.client) + progbar = new(user, delay, target || user) + + if(!hidden && delay >= 1 SECONDS) + cog = new(user, icon, iconstate) SEND_SIGNAL(user, COMSIG_DO_AFTER_BEGAN) var/endtime = world.time + delay var/starttime = world.time - - if(exclusive & TASK_USER_EXCLUSIVE) - user.status_flags |= DOING_TASK - - if(target && (exclusive & TASK_TARGET_EXCLUSIVE)) - target.flags |= IS_BUSY - . = TRUE while (world.time < endtime) stoplag(1) - if(progress) + + if(!QDELETED(progbar)) progbar.update(world.time - starttime) - if(!user || user.incapacitated(incapacitation_flags)) + /*if(drifting && isnull(user.drift_handler)) //We don't have a drift handler yet, sadly. + drifting = FALSE + user_loc = user.loc*/ + + if(QDELETED(user) \ + || (!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \ + || (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_hand() != holding) \ + || (!(timed_action_flags & IGNORE_INCAPACITATED) && HAS_TRAIT(user, TRAIT_INCAPACITATED)) \ + || (max_distance && target && get_dist(user, target) > max_distance) \ + || (extra_checks && !extra_checks.Invoke())) . = FALSE break - if(M) - if(user.loc != M || (M.loc != original_loc && !ignore_movement)) // Mech coooooode. - . = FALSE - break - - else if(user.loc != original_loc && !ignore_movement) + if(target && (user != target) && \ + (QDELETED(target) \ + || (!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) && target.loc != target_loc))) . = FALSE break - if(target_loc && (QDELETED(target))) - . = FALSE - break + if(!QDELETED(progbar)) + progbar.end_progress() - if(target && target_loc != target.loc && !ignore_movement) - . = FALSE - break + cog?.remove() - if(needhand) - if(user.get_active_hand() != holding) - . = FALSE - break - - if(max_distance && target && get_dist(user, target) > max_distance) - . = FALSE - break - - if(exclusive & TASK_USER_EXCLUSIVE) - user.status_flags &= ~DOING_TASK - if(target && (exclusive & TASK_TARGET_EXCLUSIVE)) - target.flags &= ~IS_BUSY - - if(progbar) - qdel(progbar) + if(interaction_key) + var/reduced_interaction_count = (LAZYACCESS(user.do_afters, interaction_key) || 0) - 1 + if(reduced_interaction_count > 0) // Not done yet! + LAZYSET(user.do_afters, interaction_key, reduced_interaction_count) + return + // all out, let's clear er out fully + LAZYREMOVE(user.do_afters, interaction_key) SEND_SIGNAL(user, COMSIG_DO_AFTER_ENDED) /atom/proc/living_mobs(var/range = world.view, var/count_held = FALSE) //CHOMPEdit Start diff --git a/code/_onclick/hud/action/action.dm b/code/_onclick/hud/action/action.dm index 77975659e4..d1d6a3a6bb 100644 --- a/code/_onclick/hud/action/action.dm +++ b/code/_onclick/hud/action/action.dm @@ -52,7 +52,7 @@ /// Links the passed target to our action, registering any relevant signals /datum/action/proc/link_to(Target) target = Target - RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref), override = TRUE) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(clear_ref), override = TRUE) if(isatom(target)) RegisterSignal(target, COMSIG_ATOM_UPDATED_ICON, PROC_REF(on_target_icon_update)) @@ -90,7 +90,7 @@ SEND_SIGNAL(src, COMSIG_ACTION_GRANTED, grant_to) SEND_SIGNAL(grant_to, COMSIG_MOB_GRANTED_ACTION, src) owner = grant_to - RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref), override = TRUE) + RegisterSignal(owner, COMSIG_QDELETING, PROC_REF(clear_ref), override = TRUE) GiveAction(grant_to) @@ -109,9 +109,9 @@ SEND_SIGNAL(src, COMSIG_ACTION_REMOVED, owner) SEND_SIGNAL(owner, COMSIG_MOB_REMOVED_ACTION, src) - UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + UnregisterSignal(owner, COMSIG_QDELETING) if(target == owner) - RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref)) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(clear_ref)) owner = null diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index b803227325..888710de73 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -12,10 +12,10 @@ GLOBAL_LIST_EMPTY(radial_menus) /obj/screen/radial/proc/set_parent(new_value) if(parent) - UnregisterSignal(parent, COMSIG_PARENT_QDELETING) + UnregisterSignal(parent, COMSIG_QDELETING) parent = new_value if(parent) - RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(handle_parent_del)) + RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(handle_parent_del)) /obj/screen/radial/proc/handle_parent_del() SIGNAL_HANDLER diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 5d22fcf42d..0923ede9bb 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -369,7 +369,7 @@ SUBSYSTEM_DEF(garbage) to_delete.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/start_tick = world.tick_usage - SEND_SIGNAL(to_delete, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy + SEND_SIGNAL(to_delete, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up. if(world.time != start_time) diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 081016629f..c66ddb4be5 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -20,7 +20,7 @@ var/client/client_user = user user = client_user.mob src.user = user - RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(user_deleted)) + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(user_deleted)) src.window_id = window_id if (title) src.title = strip_improper(title) diff --git a/code/datums/chat_message.dm b/code/datums/chat_message.dm index 8c16e3e631..0260aa1138 100644 --- a/code/datums/chat_message.dm +++ b/code/datums/chat_message.dm @@ -80,7 +80,7 @@ var/list/runechat_image_cache = list() /datum/chatmessage/Destroy() if(istype(owned_by, /client)) // hopefully the PARENT_QDELETING on client should beat this if it's a disconnect - UnregisterSignal(owned_by, COMSIG_PARENT_QDELETING) + UnregisterSignal(owned_by, COMSIG_QDELETING) if(owned_by.seen_messages) LAZYREMOVEASSOC(owned_by.seen_messages, message_loc, src) owned_by.images.Remove(message) @@ -112,7 +112,7 @@ var/list/runechat_image_cache = list() // Register client who owns this message owned_by = owner.client - RegisterSignal(owned_by, COMSIG_PARENT_QDELETING, PROC_REF(unregister_qdel_self)) // this should only call owned_by if the client is destroyed + RegisterSignal(owned_by, COMSIG_QDELETING, PROC_REF(unregister_qdel_self)) // this should only call owned_by if the client is destroyed var/extra_length = owned_by.prefs?.read_preference(/datum/preference/toggle/runechat_long_messages) var/maxlen = extra_length ? CHAT_MESSAGE_EXT_LENGTH : CHAT_MESSAGE_LENGTH @@ -202,7 +202,7 @@ var/list/runechat_image_cache = list() if(!owned_by) qdel(src) return - RegisterSignal(message_loc, COMSIG_PARENT_QDELETING, PROC_REF(qdel_self)) + RegisterSignal(message_loc, COMSIG_QDELETING, PROC_REF(qdel_self)) if(owned_by.seen_messages) var/idx = 1 var/combined_height = approx_lines @@ -294,7 +294,7 @@ var/list/runechat_image_cache = list() /datum/chatmessage/proc/unregister_qdel_self() // this should only call owned_by if the client is destroyed SIGNAL_HANDLER - UnregisterSignal(owned_by, COMSIG_PARENT_QDELETING) + UnregisterSignal(owned_by, COMSIG_QDELETING) owned_by = null qdel_self() diff --git a/code/datums/cinematics/_cinematic.dm b/code/datums/cinematics/_cinematic.dm index 6a49548f1f..f73ade4d7a 100644 --- a/code/datums/cinematics/_cinematic.dm +++ b/code/datums/cinematics/_cinematic.dm @@ -121,7 +121,7 @@ watching += watching_client watching_mob.overlay_fullscreen("cinematic", /obj/screen/fullscreen/cinematic_backdrop) watching_client.screen += screen - RegisterSignal(watching_client, COMSIG_PARENT_QDELETING, PROC_REF(remove_watcher)) + RegisterSignal(watching_client, COMSIG_QDELETING, PROC_REF(remove_watcher)) /// Simple helper for playing sounds from the cinematic. /datum/cinematic/proc/play_cinematic_sound(sound_to_play) @@ -170,7 +170,7 @@ if(!(no_longer_watching in watching)) CRASH("cinematic remove_watcher was passed a client which wasn't watching.") - UnregisterSignal(no_longer_watching, COMSIG_PARENT_QDELETING) + UnregisterSignal(no_longer_watching, COMSIG_QDELETING) // We'll clear the cinematic if they have a mob which has one, // but we won't remove TRAIT_NO_TRANSFORM. Wait for the cinematic end to do that. no_longer_watching.mob?.clear_fullscreen("cinematic") diff --git a/code/datums/cogbar.dm b/code/datums/cogbar.dm new file mode 100644 index 0000000000..45be7e63ad --- /dev/null +++ b/code/datums/cogbar.dm @@ -0,0 +1,100 @@ +#define COGBAR_ANIMATION_TIME (0.5 SECONDS) + +/** + * ### Cogbar + * Represents that the user is busy doing something. + */ +/datum/cogbar + /// Who's doing the thing + var/mob/user + /// The user client + var/client/user_client + /// The visible element to other players + var/obj/effect/overlay/vis/cog + /// The blank image that overlaps the cog - hides it from the source user + var/image/blank + /// The offset of the icon + var/offset_y + /// Icon path of the cog + var/cogicon + /// The icon state + var/cogiconstate + + +/datum/cogbar/New(mob/user, cogicon, cogiconstate) + src.user = user + src.user_client = user.client + src.cogicon = cogicon + src.cogiconstate = cogiconstate + var/list/icon_offsets = user.get_oversized_icon_offsets() + offset_y = icon_offsets["y"] + if(isnull(cogicon)) + stack_trace("/datum/cogbar was created with a null icon.") + qdel(src) + return + if(isnull(cogiconstate)) + stack_trace("/datum/cogbar was created with a null icon state.") + qdel(src) + return + + add_cog_to_user() + + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(on_user_delete)) + + +/datum/cogbar/Destroy() + if(user) + SSvis_overlays.remove_vis_overlay(user, user.managed_vis_overlays) + user_client?.images -= blank + + user = null + user_client = null + cog = null + QDEL_NULL(blank) + + return ..() + + +/// Adds the cog to the user, visible by other players +/datum/cogbar/proc/add_cog_to_user() + cog = SSvis_overlays.add_vis_overlay(user, + icon = cogicon, + iconstate = cogiconstate, + plane = ABOVE_PLANE, + add_appearance_flags = APPEARANCE_UI_IGNORE_ALPHA, + unique = TRUE, + alpha = 0, + ) + cog.pixel_y = ICON_SIZE_Y + offset_y + animate(cog, alpha = user.alpha, time = COGBAR_ANIMATION_TIME) + + if(isnull(user_client)) + return + + blank = image('icons/system/blank_32x32.dmi', cog, "nothing") + blank.plane = ABOVE_PLANE //Change to SET_PLANE_EXPLICIT(blank, HIGH_GAME_PLANE, user) + blank.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + blank.override = TRUE + + user_client.images += blank + + +/// Removes the cog from the user +/datum/cogbar/proc/remove() + if(isnull(cog)) + qdel(src) + return + + animate(cog, alpha = 0, time = COGBAR_ANIMATION_TIME) + + QDEL_IN(src, COGBAR_ANIMATION_TIME) + + +/// When the user is deleted, remove the cog +/datum/cogbar/proc/on_user_delete(datum/source) + SIGNAL_HANDLER + + qdel(src) + + +#undef COGBAR_ANIMATION_TIME diff --git a/code/datums/components/connect_containers_ch.dm b/code/datums/components/connect_containers_ch.dm index f8018168a1..22efc63435 100644 --- a/code/datums/components/connect_containers_ch.dm +++ b/code/datums/components/connect_containers_ch.dm @@ -32,13 +32,13 @@ /datum/component/connect_containers/proc/set_tracked(atom/movable/new_tracked) if(tracked) - UnregisterSignal(tracked, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) + UnregisterSignal(tracked, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) unregister_signals(tracked.loc) tracked = new_tracked if(!tracked) return RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel)) + RegisterSignal(tracked, COMSIG_QDELETING, PROC_REF(handle_tracked_qdel)) update_signals(tracked) /datum/component/connect_containers/proc/handle_tracked_qdel() diff --git a/code/datums/components/connect_loc_behalf.dm b/code/datums/components/connect_loc_behalf.dm index 6709668f77..af5022328e 100644 --- a/code/datums/components/connect_loc_behalf.dm +++ b/code/datums/components/connect_loc_behalf.dm @@ -19,20 +19,20 @@ /datum/component/connect_loc_behalf/RegisterWithParent() RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel)) + RegisterSignal(tracked, COMSIG_QDELETING, PROC_REF(handle_tracked_qdel)) update_signals() /datum/component/connect_loc_behalf/UnregisterFromParent() unregister_signals() UnregisterSignal(tracked, list( COMSIG_MOVABLE_MOVED, - COMSIG_PARENT_QDELETING, + COMSIG_QDELETING, )) tracked = null /datum/component/connect_loc_behalf/proc/handle_tracked_qdel() - SIGNAL_HANDLER // COMSIG_PARENT_QDELETING + SIGNAL_HANDLER // COMSIG_QDELETING qdel(src) /datum/component/connect_loc_behalf/proc/update_signals() diff --git a/code/datums/components/connect_mob_behalf.dm b/code/datums/components/connect_mob_behalf.dm index 1c1a8a6523..b8aa014f81 100644 --- a/code/datums/components/connect_mob_behalf.dm +++ b/code/datums/components/connect_mob_behalf.dm @@ -19,12 +19,12 @@ src.tracked = tracked /datum/component/connect_mob_behalf/RegisterWithParent() - RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel)) + RegisterSignal(tracked, COMSIG_QDELETING, PROC_REF(handle_tracked_qdel)) update_signals() /datum/component/connect_mob_behalf/UnregisterFromParent() unregister_signals() - UnregisterSignal(tracked, COMSIG_PARENT_QDELETING) + UnregisterSignal(tracked, COMSIG_QDELETING) tracked = null tracked_mob = null diff --git a/code/datums/components/connect_range_ch.dm b/code/datums/components/connect_range_ch.dm index c87d203a2d..95cb560c86 100644 --- a/code/datums/components/connect_range_ch.dm +++ b/code/datums/components/connect_range_ch.dm @@ -52,14 +52,14 @@ unregister_signals(isturf(tracked) ? tracked : tracked.loc) UnregisterSignal(tracked, list( COMSIG_MOVABLE_MOVED, - COMSIG_PARENT_QDELETING, + COMSIG_QDELETING, )) tracked = new_tracked if(!tracked) return //Register signals on the new tracked atom and its surroundings. RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel)) + RegisterSignal(tracked, COMSIG_QDELETING, PROC_REF(handle_tracked_qdel)) update_signals(tracked) /datum/component/connect_range/proc/handle_tracked_qdel() diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 3385ae0323..680c3ea2a4 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -227,15 +227,15 @@ parent_attached_to = new_parent_attached_to if(.) var/atom/movable/old_parent_attached_to = . - UnregisterSignal(old_parent_attached_to, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) + UnregisterSignal(old_parent_attached_to, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) if(old_parent_attached_to == current_holder) - RegisterSignal(old_parent_attached_to, COMSIG_PARENT_QDELETING, PROC_REF(on_holder_qdel)) + RegisterSignal(old_parent_attached_to, COMSIG_QDELETING, PROC_REF(on_holder_qdel)) RegisterSignal(old_parent_attached_to, COMSIG_MOVABLE_MOVED, PROC_REF(on_holder_moved)) RegisterSignal(old_parent_attached_to, COMSIG_LIGHT_EATER_QUEUE, PROC_REF(on_light_eater)) if(parent_attached_to) if(parent_attached_to == current_holder) - UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) - RegisterSignal(parent_attached_to, COMSIG_PARENT_QDELETING, PROC_REF(on_parent_attached_to_qdel)) + UnregisterSignal(current_holder, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) + RegisterSignal(parent_attached_to, COMSIG_QDELETING, PROC_REF(on_parent_attached_to_qdel)) RegisterSignal(parent_attached_to, COMSIG_MOVABLE_MOVED, PROC_REF(on_parent_attached_to_moved)) RegisterSignal(parent_attached_to, COMSIG_LIGHT_EATER_QUEUE, PROC_REF(on_light_eater)) check_holder() @@ -249,7 +249,7 @@ new_holder = null // Forbid crates from holding lights, this only applies to contents 'holding', when you put a flashlight into a crate for example. Not crates with lights... Not that there are any. if(current_holder) if(current_holder != parent && current_holder != parent_attached_to) - UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) + UnregisterSignal(current_holder, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) if(directional) UnregisterSignal(current_holder, COMSIG_ATOM_DIR_CHANGE) if(overlay_lighting_flags & LIGHTING_ON) @@ -259,7 +259,7 @@ clean_old_turfs() return if(new_holder != parent && new_holder != parent_attached_to) - RegisterSignal(new_holder, COMSIG_PARENT_QDELETING, PROC_REF(on_holder_qdel)) + RegisterSignal(new_holder, COMSIG_QDELETING, PROC_REF(on_holder_qdel)) RegisterSignal(new_holder, COMSIG_MOVABLE_MOVED, PROC_REF(on_holder_moved)) RegisterSignal(new_holder, COMSIG_LIGHT_EATER_QUEUE, PROC_REF(on_light_eater)) if(directional) @@ -288,7 +288,7 @@ ///Called when the current_holder is qdeleted, to remove the light effect. /datum/component/overlay_lighting/proc/on_holder_qdel(atom/movable/source, force) SIGNAL_HANDLER - UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + UnregisterSignal(current_holder, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) if(directional) UnregisterSignal(current_holder, COMSIG_ATOM_DIR_CHANGE) set_holder(null) @@ -317,7 +317,7 @@ ///Called when the current_holder is qdeleted, to remove the light effect. /datum/component/overlay_lighting/proc/on_parent_attached_to_qdel(atom/movable/source, force) SIGNAL_HANDLER - UnregisterSignal(parent_attached_to, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + UnregisterSignal(parent_attached_to, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) if(directional) UnregisterSignal(parent_attached_to, COMSIG_ATOM_DIR_CHANGE) if(parent_attached_to == current_holder) diff --git a/code/datums/components/recursive_move.dm b/code/datums/components/recursive_move.dm index c3cd13bb62..a3e1b70d44 100644 --- a/code/datums/components/recursive_move.dm +++ b/code/datums/components/recursive_move.dm @@ -12,7 +12,7 @@ /datum/component/recursive_move/RegisterWithParent() . = ..() holder = parent - RegisterSignal(holder, COMSIG_PARENT_QDELETING, PROC_REF(on_holder_qdel)) + RegisterSignal(holder, COMSIG_QDELETING, PROC_REF(on_holder_qdel)) spawn(0) // Delayed action if our holder is spawned in nullspace and then loc = target, hopefully this catches it. VV Add item does this, for example. if(!QDELETED(src)) setup_parents() @@ -35,7 +35,7 @@ recursion++ parents += cur_parent RegisterSignal(cur_parent, COMSIG_ATOM_EXITED, PROC_REF(heirarchy_changed)) - RegisterSignal(cur_parent, COMSIG_PARENT_QDELETING, PROC_REF(on_qdel)) + RegisterSignal(cur_parent, COMSIG_QDELETING, PROC_REF(on_qdel)) cur_parent = cur_parent.loc @@ -65,7 +65,7 @@ if(!length(parents)) return for(var/atom/movable/cur_parent in parents) - UnregisterSignal(cur_parent, COMSIG_PARENT_QDELETING) + UnregisterSignal(cur_parent, COMSIG_QDELETING) UnregisterSignal(cur_parent, COMSIG_ATOM_EXITED) UnregisterSignal(parents[parents.len], COMSIG_ATOM_ENTERING) @@ -93,7 +93,7 @@ /datum/component/recursive_move/proc/on_holder_qdel() SIGNAL_HANDLER - UnregisterSignal(holder, COMSIG_PARENT_QDELETING) + UnregisterSignal(holder, COMSIG_QDELETING) reset_parents() holder = null qdel(src) @@ -101,7 +101,7 @@ /datum/component/recursive_move/Destroy() . = ..() reset_parents() - if(holder) UnregisterSignal(holder, COMSIG_PARENT_QDELETING) + if(holder) UnregisterSignal(holder, COMSIG_QDELETING) holder = null /datum/component/recursive_move/proc/reset_parents() diff --git a/code/datums/components/species/shadekin/powers/dark_maw.dm b/code/datums/components/species/shadekin/powers/dark_maw.dm index edf5cdda4a..cbe5596ca5 100644 --- a/code/datums/components/species/shadekin/powers/dark_maw.dm +++ b/code/datums/components/species/shadekin/powers/dark_maw.dm @@ -72,7 +72,7 @@ owner = user if(owner.vore_selected) target = owner.vore_selected - RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(drop_everything_and_delete)) + RegisterSignal(owner, COMSIG_QDELETING, PROC_REF(drop_everything_and_delete)) has_signal = TRUE SK = owner.get_shadekin_component() @@ -112,7 +112,7 @@ STOP_PROCESSING(SSobj, src) if(owner) if(has_signal) - UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + UnregisterSignal(owner, COMSIG_QDELETING) var/datum/component/shadekin/SK = owner.get_shadekin_component() if(SK) SK.active_dark_maws -= src diff --git a/code/datums/components/traits/weaver.dm b/code/datums/components/traits/weaver.dm index 84505901d6..24b712745a 100644 --- a/code/datums/components/traits/weaver.dm +++ b/code/datums/components/traits/weaver.dm @@ -115,7 +115,7 @@ to_chat(owner, span_warning("You can't weave here!")) return - if(do_after(owner, desired_result.time, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(owner, desired_result.time)) if(desired_result.cost > silk_reserve) to_chat(owner, span_warning("You don't have enough silk to weave that!")) return @@ -168,7 +168,7 @@ to_chat(owner, span_warning("You can't weave here!")) return - if(do_after(owner, desired_result.time, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(owner, desired_result.time)) if(desired_result.cost > silk_reserve) to_chat(owner, span_warning("You don't have enough silk to weave that!")) return diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index 7f019508a3..b2e021ad2b 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -26,7 +26,7 @@ return ELEMENT_INCOMPATIBLE SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src) if(element_flags & ELEMENT_DETACH_ON_HOST_DESTROY) - RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(OnTargetDelete), override = TRUE) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(OnTargetDelete), override = TRUE) /datum/element/proc/OnTargetDelete(datum/source) SIGNAL_HANDLER @@ -38,7 +38,7 @@ SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src) - UnregisterSignal(source, COMSIG_PARENT_QDELETING) + UnregisterSignal(source, COMSIG_QDELETING) /datum/element/Destroy(force) if(!force) diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 25e1ecfc4d..ebc4c4de4f 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -1,69 +1,158 @@ #define PROGRESSBAR_HEIGHT 6 +#define PROGRESSBAR_ANIMATION_TIME 5 /datum/progressbar - var/goal = 1 + ///The progress bar visual element. var/image/bar - var/shown = 0 + ///The target where this progress bar is applied and where it is shown. + var/atom/bar_loc + ///The mob whose client sees the progress bar. var/mob/user - var/client/client - var/listindex + ///The client seeing the progress bar. + var/client/user_client + ///Effectively the number of steps the progress bar will need to do before reaching completion. + var/goal = 1 + ///Control check to see if the progress was interrupted before reaching its goal. + var/last_progress = 0 + ///Variable to ensure smooth visual stacking on multiple progress bars. + var/listindex = 0 + ///The type of our last value for bar_loc, for debugging + var/location_type + ///Where to draw the progress bar above the icon + var/offset_y -/datum/progressbar/New(mob/User, goal_number, atom/target) +/datum/progressbar/New(mob/User, goal_number, atom/target, starting_amount) . = ..() - if(!istype(target)) - target = User - if(goal_number) - goal = goal_number - bar = image('icons/effects/progressbar.dmi', target, "prog_bar_0") - bar.alpha = 0 - bar.plane = PLANE_PLAYER_HUD + if (!istype(target)) + stack_trace("Invalid target [target] passed in") + qdel(src) + return + if(QDELETED(User) || !istype(User)) + stack_trace("/datum/progressbar created with [isnull(User) ? "null" : "invalid"] user") + qdel(src) + return + if(!isnum(goal_number)) + stack_trace("/datum/progressbar created with [isnull(User) ? "null" : "invalid"] goal_number") + qdel(src) + return + goal = goal_number + bar_loc = target + location_type = bar_loc.type + + var/list/icon_offsets = target.get_oversized_icon_offsets() + var/offset_x = icon_offsets["x"] + offset_y = icon_offsets["y"] + + bar = image('icons/effects/progressbar.dmi', bar_loc, "prog_bar_0", pixel_x = offset_x) + bar.plane = PLANE_PLAYER_HUD //Swap to SET_PLANE_EXPLICIT(bar, LAYER_HUD_ITEM, User) if we ever get the plane update bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA user = User - if(user) - client = user.client - LAZYINITLIST(user.progressbars) - LAZYINITLIST(user.progressbars[bar.loc]) - var/list/bars = user.progressbars[bar.loc] - bars.Add(src) + LAZYADDASSOCLIST(user.progressbars, bar_loc, src) + var/list/bars = user.progressbars[bar_loc] listindex = bars.len - animate(bar, pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = 5, easing = SINE_EASING) -/datum/progressbar/proc/update(progress) - if(!user || !user.client) - shown = 0 - return - if(user.client != client) - if(client) - client.images -= bar - if(user.client) - user.client.images += bar + if(user.client) + user_client = user.client + add_prog_bar_image_to_client() - progress = CLAMP(progress, 0, goal) - bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" - if(!shown && user.client?.prefs?.read_preference(/datum/preference/toggle/show_progress_bar)) - user.client.images += bar - shown = 1 + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(on_user_delete)) + RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(clean_user_client)) + RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(on_user_login)) -/datum/progressbar/proc/shiftDown() - --listindex - var/shiftheight = bar.pixel_y - PROGRESSBAR_HEIGHT - animate(bar, pixel_y = shiftheight, time = 5, easing = SINE_EASING) + if(starting_amount) + update(starting_amount) /datum/progressbar/Destroy() - for(var/datum/progressbar/P as anything in user.progressbars[bar.loc]) - if(P != src && P.listindex > listindex) - P.shiftDown() + if(user) + for(var/pb in user.progressbars[bar_loc]) + var/datum/progressbar/progress_bar = pb + if(progress_bar == src || progress_bar.listindex <= listindex) + continue + progress_bar.listindex-- - var/list/bars = user.progressbars[bar.loc] - bars.Remove(src) - if(!bars.len) - LAZYREMOVE(user.progressbars, bar.loc) - animate(bar, alpha = 0, time = 5) - spawn(5) - if(client) - client.images -= bar - QDEL_NULL(bar) - . = ..() + progress_bar.bar.pixel_z = ICON_SIZE_Y + offset_y + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) + var/dist_to_travel = ICON_SIZE_Y + offset_y + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) - PROGRESSBAR_HEIGHT + animate(progress_bar.bar, pixel_z = dist_to_travel, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) + LAZYREMOVEASSOC(user.progressbars, bar_loc, src) + user = null + + if(user_client) + clean_user_client() + + bar_loc = null + bar = null + + return ..() + + +///Called right before the user's Destroy() +/datum/progressbar/proc/on_user_delete(datum/source) + SIGNAL_HANDLER + + user.progressbars = null //We can simply nuke the list and stop worrying about updating other prog bars if the user itself is gone. + user = null + qdel(src) + + +///Removes the progress bar image from the user_client and nulls the variable, if it exists. +/datum/progressbar/proc/clean_user_client(datum/source) + SIGNAL_HANDLER + + if(!user_client) //Disconnected, already gone. + return + user_client.images -= bar + user_client = null + + +///Called by user's Login(), it transfers the progress bar image to the new client. +/datum/progressbar/proc/on_user_login(datum/source) + SIGNAL_HANDLER + + if(user_client) + if(user_client == user.client) //If this was not client handling I'd condemn this sanity check. But clients are fickle things. + return + clean_user_client() + if(!user.client) //Clients can vanish at any time, the bastards. + return + user_client = user.client + add_prog_bar_image_to_client() + + +///Adds a smoothly-appearing progress bar image to the player's screen. +/datum/progressbar/proc/add_prog_bar_image_to_client() + bar.pixel_z = 0 + bar.alpha = 0 + user_client.images += bar + animate(bar, pixel_z = ICON_SIZE_Y + offset_y + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) + + +///Updates the progress bar image visually. +/datum/progressbar/proc/update(progress) + progress = clamp(progress, 0, goal) + if(progress == last_progress) + return + last_progress = progress + bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" + + +///Called on progress end, be it successful or a failure. Wraps up things to delete the datum and bar. +/datum/progressbar/proc/end_progress() + if(last_progress != goal) + bar.icon_state = "[bar.icon_state]_fail" + + animate(bar, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME) + + QDEL_IN(src, PROGRESSBAR_ANIMATION_TIME) + +///Progress bars are very generic, and what hangs a ref to them depends heavily on the context in which they're used +///So let's make hunting harddels easier yeah? +/datum/progressbar/dump_harddel_info() + if(harddel_deets_dumped) + return + harddel_deets_dumped = TRUE + return "Owner's type: [location_type]" + +#undef PROGRESSBAR_ANIMATION_TIME #undef PROGRESSBAR_HEIGHT diff --git a/code/datums/proximity_monitor/proximity_monitor_ch.dm b/code/datums/proximity_monitor/proximity_monitor_ch.dm index 22b913d925..ea8d84f1da 100644 --- a/code/datums/proximity_monitor/proximity_monitor_ch.dm +++ b/code/datums/proximity_monitor/proximity_monitor_ch.dm @@ -23,17 +23,17 @@ if(new_host == host) return if(host) //No need to delete the connect range and containers comps. They'll be updated with the new tracked host. - UnregisterSignal(host, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) + UnregisterSignal(host, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) if(hasprox_receiver) - UnregisterSignal(hasprox_receiver, COMSIG_PARENT_QDELETING) + UnregisterSignal(hasprox_receiver, COMSIG_QDELETING) if(new_receiver) hasprox_receiver = new_receiver if(new_receiver != new_host) - RegisterSignal(new_receiver, COMSIG_PARENT_QDELETING, PROC_REF(on_host_or_receiver_del)) + RegisterSignal(new_receiver, COMSIG_QDELETING, PROC_REF(on_host_or_receiver_del)) else if(hasprox_receiver == host) //Default case hasprox_receiver = new_host host = new_host - RegisterSignal(new_host, COMSIG_PARENT_QDELETING, PROC_REF(on_host_or_receiver_del)) + RegisterSignal(new_host, COMSIG_QDELETING, PROC_REF(on_host_or_receiver_del)) var/static/list/containers_connections = list(COMSIG_MOVABLE_MOVED = PROC_REF(on_moved), COMSIG_MOVABLE_Z_CHANGED = PROC_REF(on_z_change)) AddComponent(/datum/component/connect_containers, host, containers_connections) RegisterSignal(host, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) diff --git a/code/datums/weakrefs.dm b/code/datums/weakrefs.dm index 27bd5d9433..dedc0d8eff 100644 --- a/code/datums/weakrefs.dm +++ b/code/datums/weakrefs.dm @@ -87,7 +87,7 @@ * adding it to an atom's contents or vis_contents, giving it a key (if it's a mob), attaching it to an atom (if it's an image), * or assigning it to a datum or list referenced somewhere other than a temporary value. * - * Unless you're resolving a weakref to a datum in a COMSIG_PARENT_QDELETING signal handler registered on that very same datum, + * Unless you're resolving a weakref to a datum in a COMSIG_QDELETING signal handler registered on that very same datum, * just use resolve instead. */ /datum/weakref/proc/hard_resolve() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index c306e0c7f7..aea7c7657c 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -48,7 +48,7 @@ render_target = ref(src) em_block = new(src, render_target) add_overlay(list(em_block), TRUE) - RegisterSignal(em_block, COMSIG_PARENT_QDELETING, PROC_REF(emblocker_gc)) + RegisterSignal(em_block, COMSIG_QDELETING, PROC_REF(emblocker_gc)) if(opacity) AddElement(/datum/element/light_blocking) if(icon_scale_x != DEFAULT_ICON_SCALE_X || icon_scale_y != DEFAULT_ICON_SCALE_Y || icon_rotation != DEFAULT_ICON_ROTATION) @@ -67,7 +67,7 @@ /atom/movable/Destroy() if(em_block) cut_overlay(em_block) - UnregisterSignal(em_block, COMSIG_PARENT_QDELETING) + UnregisterSignal(em_block, COMSIG_QDELETING) QDEL_NULL(em_block) . = ..() @@ -658,7 +658,7 @@ /atom/movable/proc/emblocker_gc(var/datum/source) SIGNAL_HANDLER - UnregisterSignal(source, COMSIG_PARENT_QDELETING) + UnregisterSignal(source, COMSIG_QDELETING) cut_overlay(source) if(em_block == source) em_block = null diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index b820b3862d..590cac122d 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -104,7 +104,7 @@ // Service begins, delay visible_message(span_bold("\The [src]") + " scans [user] thoroughly!") flick("kiosk_active", src) - if(!do_after(user, 5 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) || inoperable()) + if(!do_after(user, 5 SECONDS, src) || inoperable()) suspend() return diff --git a/code/game/mecha/equipment/tools/passenger.dm b/code/game/mecha/equipment/tools/passenger.dm index b03cfad6d3..1771207889 100644 --- a/code/game/mecha/equipment/tools/passenger.dm +++ b/code/game/mecha/equipment/tools/passenger.dm @@ -26,7 +26,7 @@ if (chassis) chassis.visible_message(span_notice("[user] starts to climb into [chassis].")) - if(do_after(user, 40, needhand=0)) + if(do_after(user, 40)) if(!src.occupant) user.forceMove(src) occupant = user diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a2618c07c2..fe6c2ff6de 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -176,7 +176,7 @@ CRASH("item add_item_action got a type or instance of something that wasn't an action.") LAZYADD(actions, action) - RegisterSignal(action, COMSIG_PARENT_QDELETING, PROC_REF(on_action_deleted)) + RegisterSignal(action, COMSIG_QDELETING, PROC_REF(on_action_deleted)) if(ismob(loc)) // We're being held or are equipped by someone while adding an action? // Then they should also probably be granted the action, given it's in a correct slot @@ -190,7 +190,7 @@ if(!action) return - UnregisterSignal(action, COMSIG_PARENT_QDELETING) + UnregisterSignal(action, COMSIG_QDELETING) LAZYREMOVE(actions, action) qdel(action) diff --git a/code/game/objects/items/devices/denecrotizer_vr.dm b/code/game/objects/items/devices/denecrotizer_vr.dm index 6eb27064f4..f6ffb8e854 100644 --- a/code/game/objects/items/devices/denecrotizer_vr.dm +++ b/code/game/objects/items/devices/denecrotizer_vr.dm @@ -155,7 +155,7 @@ return FALSE if(!target.mind) user.visible_message("[user] gently presses [src] to [target]...", runemessage = "presses [src] to [target]") - if(do_after(user, revive_time, exclusive = TASK_USER_EXCLUSIVE, target = target)) + if(do_after(user, revive_time, target = target)) target.faction = user.faction target.revivedby = user.name target.ghostjoin = 1 @@ -176,7 +176,7 @@ /obj/item/denecrotizer/proc/ghostjoin_rez(mob/living/simple_mob/target, mob/living/user) user.visible_message("[user] gently presses [src] to [target]...", runemessage = "presses [src] to [target]") - if(do_after(user, revive_time, exclusive = TASK_ALL_EXCLUSIVE, target = target)) + if(do_after(user, revive_time, target = target)) target.faction = user.faction target.revivedby = user.name target.revive() @@ -199,7 +199,7 @@ /obj/item/denecrotizer/proc/basic_rez(mob/living/simple_mob/target, mob/living/user) //so medical can have a way to bring back people's pets or whatever, does not change any settings about the mob or offer it to ghosts. user.visible_message("[user] presses [src] to [target]...", runemessage = "presses [src] to [target]") - if(do_after(user, revive_time, exclusive = TASK_ALL_EXCLUSIVE, target = target)) + if(do_after(user, revive_time, target = target)) target.revive() target.sight = initial(target.sight) target.see_in_dark = initial(target.see_in_dark) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index a880e8330b..bf7f174744 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -413,7 +413,7 @@ balloon_alert(user, "you can't apply a splint to the arm you're using!") return user.balloon_alert_visible("[user] starts to apply \the [src] to their [limb].", "applying \the [src] to your [limb].", "You hear something being wrapped.") - if(do_after(user, 50, M, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 50, M)) if(affecting.splinted) balloon_alert(user, "[M]'s [limb] is already splinted!") return diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index 86f0937b2d..8a0d57f541 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -17,7 +17,7 @@ if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs var/mob/living/silicon/robot/R = M if (R.getBruteLoss() || R.getFireLoss()) - if(do_after(user, 7 * toolspeed, R, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 7 * toolspeed, R)) R.adjustBruteLoss(-15) R.adjustFireLoss(-15) R.updatehealth() @@ -51,9 +51,9 @@ else if(can_use(1)) user.setClickCooldown(user.get_attack_speed(src)) if(S.open >= 2) - if(do_after(user, 5 * toolspeed, S, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 5 * toolspeed, S)) S.heal_damage(restoration_internal, restoration_internal, robo_repair = 1) - else if(do_after(user, 5 * toolspeed, S, exclusive = TASK_ALL_EXCLUSIVE)) + else if(do_after(user, 5 * toolspeed, S)) S.heal_damage(restoration_external,restoration_external, robo_repair =1) H.updatehealth() use(1) diff --git a/code/game/objects/items/weapons/capture_crystal.dm b/code/game/objects/items/weapons/capture_crystal.dm index 096a0d08a2..51d09432db 100644 --- a/code/game/objects/items/weapons/capture_crystal.dm +++ b/code/game/objects/items/weapons/capture_crystal.dm @@ -31,11 +31,11 @@ if(bound_mob in contents) unleash() to_chat(bound_mob, span_notice("You feel like yourself again. You are no longer under the influence of \the [src]'s command.")) - UnregisterSignal(bound_mob, COMSIG_PARENT_QDELETING) + UnregisterSignal(bound_mob, COMSIG_QDELETING) bound_mob.capture_caught = FALSE bound_mob = null if(owner) - UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + UnregisterSignal(owner, COMSIG_QDELETING) owner = null return ..() @@ -156,7 +156,7 @@ else M.visible_message("\The [src] flickers in \the [M]'s hand and emits a little tone.", "\The [src] flickers in your hand and emits a little tone.") playsound(src, 'sound/effects/capture-crystal-out.ogg', 75, 1, -1) - UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + UnregisterSignal(owner, COMSIG_QDELETING) owner = null //Let's make inviting ghosts be an option you can do instead of an automatic thing! @@ -251,8 +251,8 @@ //Make it so the crystal knows if its mob references get deleted to make sure things get cleaned up /obj/item/capture_crystal/proc/knowyoursignals(mob/living/M, mob/living/U) - RegisterSignal(M, COMSIG_PARENT_QDELETING, PROC_REF(mob_was_deleted), TRUE) - RegisterSignal(U, COMSIG_PARENT_QDELETING, PROC_REF(owner_was_deleted), TRUE) + RegisterSignal(M, COMSIG_QDELETING, PROC_REF(mob_was_deleted), TRUE) + RegisterSignal(U, COMSIG_QDELETING, PROC_REF(owner_was_deleted), TRUE) //The basic capture command does most of the registration work. /obj/item/capture_crystal/proc/capture(mob/living/M, mob/living/U) @@ -337,8 +337,8 @@ //The clean up procs! /obj/item/capture_crystal/proc/mob_was_deleted() SIGNAL_HANDLER - UnregisterSignal(bound_mob, COMSIG_PARENT_QDELETING) - UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + UnregisterSignal(bound_mob, COMSIG_QDELETING) + UnregisterSignal(owner, COMSIG_QDELETING) bound_mob.capture_caught = FALSE bound_mob = null owner = null @@ -348,7 +348,7 @@ /obj/item/capture_crystal/proc/owner_was_deleted() SIGNAL_HANDLER - UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + UnregisterSignal(owner, COMSIG_QDELETING) owner = null active = FALSE update_icon() diff --git a/code/game/objects/items/weapons/storage/pouches.dm b/code/game/objects/items/weapons/storage/pouches.dm index 45a1396309..49e58e7e12 100644 --- a/code/game/objects/items/weapons/storage/pouches.dm +++ b/code/game/objects/items/weapons/storage/pouches.dm @@ -23,7 +23,7 @@ if(user.get_active_hand() == src || user.get_inactive_hand() == src) return TRUE // Skip delay - if(insert_delay && !do_after(user, insert_delay, src, needhand = TRUE, exclusive = TASK_USER_EXCLUSIVE)) + if(insert_delay && !do_after(user, insert_delay, src)) return FALSE // Moved while there is a delay return TRUE //Now we're allowed to put the item in the pouch @@ -33,7 +33,7 @@ if(user.get_active_hand() == src || user.get_inactive_hand() == src) return TRUE // Skip delay - if(remove_delay && !do_after(user, remove_delay, src, needhand = TRUE, exclusive = TASK_USER_EXCLUSIVE)) + if(remove_delay && !do_after(user, remove_delay, src)) return FALSE // Moved while there is a delay if(W in src) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 1464fc43ef..d244e53763 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -121,7 +121,7 @@ /obj/effect/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/user) user.setClickCooldown(user.get_attack_speed()) visible_message(span_danger("[user] begins to tear at \the [src]!")) - if(do_after(user, escape_time, src, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) + if(do_after(user, escape_time, src, timed_action_flags = IGNORE_INCAPACITATED)) if(!has_buckled_mobs()) return visible_message(span_danger("[user] manages to tear \the [src] apart!")) diff --git a/code/game/objects/micro_structures.dm b/code/game/objects/micro_structures.dm index 6e769f1c30..5c9adeb874 100644 --- a/code/game/objects/micro_structures.dm +++ b/code/game/objects/micro_structures.dm @@ -145,7 +145,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) if(!choice) return to_chat(user,span_notice("You begin moving...")) - if(!do_after(user, 10 SECONDS, exclusive = TRUE)) + if(!do_after(user, 10 SECONDS)) return user.forceMove(choice) user.cancel_camera() @@ -179,7 +179,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) if(!can_enter(user)) user.visible_message(span_warning("\The [user] reaches into \the [src]. . ."),span_warning("You reach into \the [src]. . .")) - if(!do_after(user, 3 SECONDS, exclusive = TRUE)) + if(!do_after(user, 3 SECONDS)) user.visible_message(span_notice("\The [user] pulls their hand out of \the [src]."),span_warning("You pull your hand out of \the [src]")) return if(!src.contents.len) @@ -218,7 +218,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) return user.visible_message(span_notice("\The [user] begins climbing into \the [src]!")) - if(!do_after(user, 10 SECONDS, exclusive = TRUE)) + if(!do_after(user, 10 SECONDS)) to_chat(user, span_warning("You didn't go into \the [src]!")) return @@ -245,7 +245,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) var/mob/living/k = M k.visible_message(span_notice("\The [k] begins climbing into \the [src]!")) - if(!do_after(k, 3 SECONDS, exclusive = TRUE)) + if(!do_after(k, 3 SECONDS)) to_chat(k, span_warning("You didn't go into \the [src]!")) return @@ -341,7 +341,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) if(!choice) return to_chat(usr,span_notice("You begin moving...")) - if(!do_after(usr, 10 SECONDS, exclusive = TRUE)) + if(!do_after(usr, 10 SECONDS)) return if(QDELETED(src)) return @@ -379,7 +379,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) if(!(usr.mob_size <= MOB_TINY || usr.get_effective_size(TRUE) <= micro_accepted_scale)) usr.visible_message(span_warning("\The [usr] reaches into \the [src]. . ."),span_warning("You reach into \the [src]. . .")) - if(!do_after(usr, 3 SECONDS, exclusive = TRUE)) + if(!do_after(usr, 3 SECONDS)) usr.visible_message(span_notice("\The [usr] pulls their hand out of \the [src]."),span_warning("You pull your hand out of \the [src]")) return @@ -420,7 +420,7 @@ GLOBAL_LIST_EMPTY(micro_tunnels) return usr.visible_message(span_notice("\The [usr] begins climbing into \the [src]!")) - if(!do_after(usr, 10 SECONDS, exclusive = TRUE)) + if(!do_after(usr, 10 SECONDS)) to_chat(usr, span_warning("You didn't go into \the [src]!")) return diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 94b04e7111..b24664e859 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -177,7 +177,7 @@ playsound(src, WT.usesound, 50, 1) if(istext(glass)) user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") - if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * WT.toolspeed, src)) if(!src || !WT.isOn()) return to_chat(user, span_notice("You welded the [glass] plating off!")) var/M = text2path("/obj/item/stack/material/[glass]") @@ -185,14 +185,14 @@ glass = 0 else if(glass == 1) user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") - if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * WT.toolspeed, src)) if(!src || !WT.isOn()) return to_chat(user, span_notice("You welded the glass panel out!")) new /obj/item/stack/material/glass/reinforced(src.loc) glass = 0 else if(!anchored) user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") - if(do_after(user, 4 SECONDS * WT.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * WT.toolspeed, src)) if(!src || !WT.isOn()) return to_chat(user, span_notice("You dissasembled the airlock assembly!")) new /obj/item/stack/material/steel(src.loc, 4) @@ -208,7 +208,7 @@ else user.visible_message("[user] begins securing the airlock assembly to the floor.", "You starts securing the airlock assembly to the floor.") - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * W.toolspeed, src)) if(!src) return to_chat(user, span_notice("You [anchored? "un" : ""]secured the airlock assembly!")) anchored = !anchored @@ -219,7 +219,7 @@ to_chat(user, span_warning("You need one length of coil to wire the airlock assembly.")) return user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && state == 0 && anchored) + if(do_after(user, 4 SECONDS, src) && state == 0 && anchored) if (C.use(1)) src.state = 1 to_chat(user, span_notice("You wire the airlock.")) @@ -228,7 +228,7 @@ playsound(src, W.usesound, 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * W.toolspeed, src)) if(!src) return to_chat(user, span_notice("You cut the airlock wires.!")) new/obj/item/stack/cable_coil(src.loc, 1) @@ -238,7 +238,7 @@ playsound(src, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS, src)) if(!src) return user.drop_item() W.loc = src @@ -256,7 +256,7 @@ playsound(src, W.usesound, 100, 1) user.visible_message("\The [user] starts removing the electronics from the airlock assembly.", "You start removing the electronics from the airlock assembly.") - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * W.toolspeed, src)) if(!src) return to_chat(user, span_notice("You removed the airlock electronics!")) src.state = 1 @@ -271,7 +271,7 @@ if(material_name == MAT_RGLASS) playsound(src, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && !glass) + if(do_after(user, 4 SECONDS, src) && !glass) if (S.use(1)) to_chat(user, span_notice("You installed reinforced glass windows into the airlock assembly.")) glass = 1 @@ -283,7 +283,7 @@ if(S.get_amount() >= 2) playsound(src, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) && !glass) + if(do_after(user, 4 SECONDS, src) && !glass) if (S.use(2)) to_chat(user, span_notice("You installed [material_display_name(material_name)] plating into the airlock assembly.")) glass = material_name @@ -292,7 +292,7 @@ playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now finishing the airlock.")) - if(do_after(user, 4 SECONDS * W.toolspeed, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 4 SECONDS * W.toolspeed, src)) if(!src) return to_chat(user, span_notice("You finish the airlock!")) var/path diff --git a/code/game/objects/structures/droppod.dm b/code/game/objects/structures/droppod.dm index 4f831d4ab5..50a7f09c82 100644 --- a/code/game/objects/structures/droppod.dm +++ b/code/game/objects/structures/droppod.dm @@ -120,7 +120,7 @@ if(O.has_tool_quality(TOOL_WRENCH)) if(finished) to_chat(user, span_notice("You start breaking down \the [src].")) - if(do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 10 SECONDS, src)) new /obj/item/stack/material/plasteel(loc, 10) playsound(user, O.usesound, 50, 1) qdel(src) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 4693c50fe6..eb6aa12be5 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -152,20 +152,20 @@ if(anchored && !reinf_material) playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now disassembling the girder...")) - if(do_after(user,(35 + round(max_health/50)) * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user,(35 + round(max_health/50)) * W.toolspeed)) if(!src) return to_chat(user, span_notice("You dissasembled the girder!")) dismantle() else if(!anchored) playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now securing the girder...")) - if(do_after(user, 40 * W.toolspeed, src, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 40 * W.toolspeed, src)) to_chat(user, span_notice("You secured the girder!")) reset_girder() else if(istype(W, /obj/item/pickaxe/plasmacutter)) to_chat(user, span_notice("Now slicing apart the girder...")) - if(do_after(user,30 * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user,30 * W.toolspeed)) if(!src) return to_chat(user, span_notice("You slice apart the girder!")) dismantle() @@ -178,7 +178,7 @@ if(state == 2) playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now unsecuring support struts...")) - if(do_after(user,40 * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user,40 * W.toolspeed)) if(!src) return to_chat(user, span_notice("You unsecured the support struts!")) state = 1 @@ -190,7 +190,7 @@ else if(W.has_tool_quality(TOOL_WIRECUTTER) && state == 1) playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now removing support struts...")) - if(do_after(user,40 * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user,40 * W.toolspeed)) if(!src) return to_chat(user, span_notice("You removed the support struts!")) reinf_material.place_dismantled_product(get_turf(src)) @@ -200,7 +200,7 @@ else if(W.has_tool_quality(TOOL_CROWBAR) && state == 0 && anchored) playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now dislodging the girder...")) - if(do_after(user, 40 * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 40 * W.toolspeed)) if(!src) return to_chat(user, span_notice("You dislodged the girder!")) displace() @@ -251,7 +251,7 @@ to_chat(user, span_notice("You begin adding the plating...")) - if(!do_after(user,time_to_reinforce, exclusive = TASK_USER_EXCLUSIVE) || !S.use(amount_to_use)) + if(!do_after(user,time_to_reinforce) || !S.use(amount_to_use)) return TRUE //once we've gotten this far don't call parent attackby() if(anchored) @@ -285,7 +285,7 @@ return 0 to_chat(user, span_notice("Now reinforcing...")) - if (!do_after(user,40, exclusive = TASK_USER_EXCLUSIVE) || !S.use(1)) + if (!do_after(user,40) || !S.use(1)) return 1 //don't call parent attackby() past this point to_chat(user, span_notice("You added reinforcement!")) @@ -351,13 +351,13 @@ if(W.has_tool_quality(TOOL_WRENCH)) playsound(src, W.usesound, 100, 1) to_chat(user, span_notice("Now disassembling the girder...")) - if(do_after(user,40 * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user,40 * W.toolspeed)) to_chat(user, span_notice("You dissasembled the girder!")) dismantle() else if(istype(W, /obj/item/pickaxe/plasmacutter)) to_chat(user, span_notice("Now slicing apart the girder...")) - if(do_after(user,30 * W.toolspeed, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user,30 * W.toolspeed)) to_chat(user, span_notice("You slice apart the girder!")) dismantle() diff --git a/code/game/objects/structures/low_wall.dm b/code/game/objects/structures/low_wall.dm index e339a5fc0c..bdc9814b37 100644 --- a/code/game/objects/structures/low_wall.dm +++ b/code/game/objects/structures/low_wall.dm @@ -172,7 +172,7 @@ to_chat(user, span_warning("You need at least two rods to do this.")) return to_chat(user, span_notice("Assembling grille...")) - if(!do_after(user, 1 SECONDS, R, exclusive = TASK_ALL_EXCLUSIVE)) + if(!do_after(user, 1 SECONDS, R)) return if(!R.use(2)) return @@ -192,7 +192,7 @@ to_chat(user, span_warning("You need at least four sheets of glass to do this.")) return to_chat(user, span_notice("Assembling window...")) - if(!do_after(user, 4 SECONDS, G, exclusive = TASK_ALL_EXCLUSIVE)) + if(!do_after(user, 4 SECONDS, G)) return if(!G.use(4)) return diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 9e9546370d..23db53cfb4 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -147,7 +147,7 @@ user.visible_message(span_warning("[user] begins cutting through [src]."), span_warning("You begin cutting through [src].")) // This is slow because it's a potentially hostile action to just cut through places into space in the middle of the bar and such // Presumably also the structural floor is thick? - if(do_after(user, 10 SECONDS, src, TRUE, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 10 SECONDS, src, TRUE)) if(!can_remove_plating(user)) return // Someone slapped down some flooring or cables or something do_remove_plating(C, user, base_type) diff --git a/code/game/turfs/simulated/outdoors/survival_action_vr.dm b/code/game/turfs/simulated/outdoors/survival_action_vr.dm index 3e527ff13a..0e03fea59d 100644 --- a/code/game/turfs/simulated/outdoors/survival_action_vr.dm +++ b/code/game/turfs/simulated/outdoors/survival_action_vr.dm @@ -9,7 +9,7 @@ var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9") return ..() if(icon_state in has_rocks) user.visible_message("[user] loosens rocks from \the [src]...", "You loosen rocks from \the [src]...") - if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 5 SECONDS)) var/obj/item/stack/material/flint/R = new(get_turf(src), rand(1,4)) R.pixel_x = rand(-6,6) R.pixel_y = rand(-6,6) @@ -23,7 +23,7 @@ var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9") if(!choice||choice=="No") return user.visible_message("[user] starts piling up \the [src]...", "You start piling up \the [src]...") - if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 5 SECONDS)) new /obj/machinery/portable_atmospherics/hydroponics/soil(src) /turf/simulated/floor/outdoors @@ -34,7 +34,7 @@ var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9") to_chat(user, span_notice("The [name] isn't clear.")) return user.visible_message("[user] starts digging around in \the [src]...", "You start digging around in \the [src]...") - if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 5 SECONDS)) if(prob(rock_chance)) var/obj/item/stack/material/flint/R = new(get_turf(src), rand(1,4)) to_chat(user, span_notice("You found some [R]")) @@ -73,7 +73,7 @@ var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9") /obj/structure/flora/tree/attack_hand(mob/user) if(sticks) user.visible_message("[user] searches \the [src] for loose sticks...", "You search \the [src] for loose sticks...") - if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 5 SECONDS)) var/obj/item/stack/material/stick/S = new(get_turf(user), rand(1,3)) S.pixel_x = rand(-6,6) S.pixel_y = rand(-6,6) diff --git a/code/modules/admin/tag.dm b/code/modules/admin/tag.dm index 37a455327d..d253124d38 100644 --- a/code/modules/admin/tag.dm +++ b/code/modules/admin/tag.dm @@ -10,7 +10,7 @@ return LAZYADD(tagged_datums, target_datum) - RegisterSignal(target_datum, COMSIG_PARENT_QDELETING, PROC_REF(handle_tagged_del), override = TRUE) + RegisterSignal(target_datum, COMSIG_QDELETING, PROC_REF(handle_tagged_del), override = TRUE) to_chat(owner, span_notice("[target_datum] has been tagged.")) /// Get ahead of the curve with deleting diff --git a/code/modules/admin/view_variables/mark_datum.dm b/code/modules/admin/view_variables/mark_datum.dm index d519fedc41..4995c7b7b2 100644 --- a/code/modules/admin/view_variables/mark_datum.dm +++ b/code/modules/admin/view_variables/mark_datum.dm @@ -2,10 +2,10 @@ if(!holder) return if(holder.marked_datum) - holder.UnregisterSignal(holder.marked_datum, COMSIG_PARENT_QDELETING) + holder.UnregisterSignal(holder.marked_datum, COMSIG_QDELETING) vv_update_display(holder.marked_datum, "marked", "") holder.marked_datum = D - holder.RegisterSignal(holder.marked_datum, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/datum/admins, handle_marked_del)) + holder.RegisterSignal(holder.marked_datum, COMSIG_QDELETING, TYPE_PROC_REF(/datum/admins, handle_marked_del)) vv_update_display(D, "marked", VV_MSG_MARKED) ADMIN_VERB_ONLY_CONTEXT_MENU(mark_datum, R_HOLDER, "Mark Object", datum/target as mob|obj|turf|area in view()) @@ -13,5 +13,5 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(mark_datum, R_HOLDER, "Mark Object", datum/target a /datum/admins/proc/handle_marked_del(datum/source) SIGNAL_HANDLER - UnregisterSignal(marked_datum, COMSIG_PARENT_QDELETING) + UnregisterSignal(marked_datum, COMSIG_QDELETING) marked_datum = null diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index 67125f9244..592678462e 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -89,7 +89,7 @@ target = new_target - RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_target)) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(remove_target)) if(target != null) lose_target_time = 0 @@ -207,7 +207,7 @@ ai_log("lose_target() : Entering.", AI_LOG_TRACE) if(target) ai_log("lose_target() : Had a target, setting to null and LTT.", AI_LOG_DEBUG) - UnregisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_target)) + UnregisterSignal(target, COMSIG_QDELETING, PROC_REF(remove_target)) target = null lose_target_time = world.time @@ -224,7 +224,7 @@ SIGNAL_HANDLER ai_log("remove_target() : Entering.", AI_LOG_TRACE) if(target) - UnregisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_target)) + UnregisterSignal(target, COMSIG_QDELETING, PROC_REF(remove_target)) target = null lose_target_time = 0 diff --git a/code/modules/catalogue/cataloguer.dm b/code/modules/catalogue/cataloguer.dm index 79b477e82f..e25469ead3 100644 --- a/code/modules/catalogue/cataloguer.dm +++ b/code/modules/catalogue/cataloguer.dm @@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) // The delay, and test for if the scan succeeds or not. var/scan_start_time = world.time - if(do_after(user, scan_delay, target, ignore_movement = TRUE, max_distance = scan_range)) + if(do_after(user, scan_delay, target, timed_action_flags = IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE, max_distance = scan_range)) if(target.can_catalogue(user)) to_chat(user, span_notice("You successfully scan \the [target] with \the [src].")) playsound(src, 'sound/machines/ping.ogg', 50) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 3bdc95db51..78d506cae0 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -375,7 +375,7 @@ // Yes this is the same as what's found in qdel(). Yes it does need to be here // Get off my back - SEND_SIGNAL(src, COMSIG_PARENT_QDELETING, TRUE) + SEND_SIGNAL(src, COMSIG_QDELETING, TRUE) Destroy() //Clean up signals and timers. return ..() diff --git a/code/modules/client/stored_item.dm b/code/modules/client/stored_item.dm index 6d02be37d6..a71ead9163 100644 --- a/code/modules/client/stored_item.dm +++ b/code/modules/client/stored_item.dm @@ -96,7 +96,7 @@ busy_bank = FALSE icon_state = "item_bank" return - else if(!do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) || inoperable()) + else if(!do_after(user, 10 SECONDS, src) || inoperable()) busy_bank = FALSE icon_state = "item_bank" return @@ -145,7 +145,7 @@ return user.visible_message(span_notice("\The [user] begins storing \the [O] in \the [src]."),span_notice("You begin storing \the [O] in \the [src].")) icon_state = "item_bank_o" - if(!do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) || inoperable()) + if(!do_after(user, 10 SECONDS, src) || inoperable()) busy_bank = FALSE icon_state = "item_bank" return diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 6e1b889842..6610cd9f1e 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -346,7 +346,7 @@ if(!failed_to_seal && (M.back == src || M.belt == src) && piece == compare_piece) - if(seal_delay && !instant && !do_after(M,seal_delay,needhand=0)) + if(seal_delay && !instant && !do_after(M,seal_delay,timed_action_flags = IGNORE_SLOWDOWNS)) failed_to_seal = 1 piece.icon_state = "[suit_state][!seal_target ? "_sealed" : ""]" diff --git a/code/modules/entrepreneur/entrepreneur_items.dm b/code/modules/entrepreneur/entrepreneur_items.dm index 70dd320184..f2dfd654f2 100644 --- a/code/modules/entrepreneur/entrepreneur_items.dm +++ b/code/modules/entrepreneur/entrepreneur_items.dm @@ -294,7 +294,7 @@ if(M.nutrition <= 100) to_chat(user, span_notice("You are too hungry to exercise right now.")) return 0 - if(!do_after(user, 3 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, 3 SECONDS, src)) return 0 M.adjust_nutrition(-10) to_chat(user, span_notice("You successfully perform a [src] exercise!")) @@ -362,7 +362,7 @@ to_chat(user, span_notice("You need some sort of glass, bottle or cup to contact the spirit world.")) return 0 var/result = 0 - if(!do_after(user, 3 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, 3 SECONDS, src)) return 0 if(next_result) result = next_result diff --git a/code/modules/eventkit/generic_objects/generic_item.dm b/code/modules/eventkit/generic_objects/generic_item.dm index cd83e46c0e..f496c35b13 100644 --- a/code/modules/eventkit/generic_objects/generic_item.dm +++ b/code/modules/eventkit/generic_objects/generic_item.dm @@ -21,7 +21,7 @@ if(activatable_hand) if(!on) if(delay_time) - if(!do_after(user, delay_time, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, delay_time, src)) return 0 on = 1 if(icon_on) @@ -76,7 +76,7 @@ playsound(src, sound_activated, 50, 1) else if(togglable) if(delay_time) - if(!do_after(user, delay_time, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, delay_time, src)) return 0 on = 0 icon_state = icon_state_off diff --git a/code/modules/eventkit/generic_objects/generic_structure.dm b/code/modules/eventkit/generic_objects/generic_structure.dm index 02d3fa75be..123793c864 100644 --- a/code/modules/eventkit/generic_objects/generic_structure.dm +++ b/code/modules/eventkit/generic_objects/generic_structure.dm @@ -25,7 +25,7 @@ if(activatable_hand) if(!on) if(delay_time) - if(!do_after(user, delay_time, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, delay_time, src)) return 0 on = 1 icon_state = icon_state_on @@ -88,7 +88,7 @@ playsound(src, sound_activated, 50, 1) else if(togglable) if(delay_time) - if(!do_after(user, delay_time, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, delay_time, src)) return 0 on = 0 icon_state = icon_state_off diff --git a/code/modules/food/drinkingglass/extras.dm b/code/modules/food/drinkingglass/extras.dm index 1b9832a9e8..3a913af7c4 100644 --- a/code/modules/food/drinkingglass/extras.dm +++ b/code/modules/food/drinkingglass/extras.dm @@ -96,7 +96,7 @@ return user.visible_message(span_infoplain(span_bold("[user]") + " starts sipping on [victim] with [src]!"), span_info("You start sipping on [victim] with [src].")) - if(!do_after(user, 3 SECONDS, victim, exclusive = TASK_ALL_EXCLUSIVE)) + if(!do_after(user, 3 SECONDS, victim)) return user.visible_message(span_infoplain(span_bold("[user]") + " sips some of [victim] with [src]!"), span_info("You take a sip of [victim] with [src]. Yum!")) diff --git a/code/modules/food/food/superfoods.dm b/code/modules/food/food/superfoods.dm index d9025aa5bc..cc4b9fb761 100644 --- a/code/modules/food/food/superfoods.dm +++ b/code/modules/food/food/superfoods.dm @@ -310,7 +310,7 @@ /obj/structure/theonepizza/attackby(var/obj/item/W, var/mob/living/user) if(istype(W,/obj/item/material/knife)) user.visible_message(span_infoplain(span_bold("\The [user]") + " starts to slowly cut through The One Pizza."), span_notice("You start to slowly cut through The One Pizza.")) - if(do_after(user, slicetime, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, slicetime)) if(!src) return // We got disappeared already user.visible_message(span_infoplain(span_bold("\The [user]") + " successfully cuts The One Pizza."), span_notice("You successfully cut The One Pizza.")) diff --git a/code/modules/food/food/superfoods_ch.dm b/code/modules/food/food/superfoods_ch.dm index efb048fc28..6d297db481 100644 --- a/code/modules/food/food/superfoods_ch.dm +++ b/code/modules/food/food/superfoods_ch.dm @@ -553,7 +553,7 @@ /obj/structure/theonepizza/attackby(var/obj/item/W, var/mob/living/user) if(istype(W,/obj/item/material/knife)) user.visible_message(span_bold("\The [user]") + " starts to slowly cut through The One Pizza.", span_notice("You start to slowly cut through The One Pizza.")) - if(do_after(user, slicetime, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, slicetime)) if(!src) return // We got disappeared already user.visible_message(span_infoplain(span_bold("\The [user]") + " successfully cuts The One Pizza."), span_notice("You successfully cut The One Pizza.")) diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index 731d8ff75d..d3e719951c 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -16,7 +16,7 @@ if(!choice||choice=="No") return user.visible_message("[user] starts dispersing the [src]...", runemessage = "disperses the [src]") - if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(user, 5 SECONDS)) qdel(src) else to_chat(user, span_notice("There is something growing here.")) diff --git a/code/modules/lootpanel/contents.dm b/code/modules/lootpanel/contents.dm index 7121910354..c59431ae3d 100644 --- a/code/modules/lootpanel/contents.dm +++ b/code/modules/lootpanel/contents.dm @@ -1,6 +1,6 @@ /// Adds the item to contents and to_image (if needed) /datum/lootpanel/proc/add_to_index(datum/search_object/index) - RegisterSignal(index, COMSIG_PARENT_QDELETING, PROC_REF(on_searchable_deleted)) + RegisterSignal(index, COMSIG_QDELETING, PROC_REF(on_searchable_deleted)) if(isnull(index.icon)) to_image += index @@ -50,5 +50,5 @@ if(QDELETED(index)) continue - UnregisterSignal(index, COMSIG_PARENT_QDELETING) + UnregisterSignal(index, COMSIG_QDELETING) qdel(index) diff --git a/code/modules/lootpanel/search_object.dm b/code/modules/lootpanel/search_object.dm index 60249f12f0..d442268804 100644 --- a/code/modules/lootpanel/search_object.dm +++ b/code/modules/lootpanel/search_object.dm @@ -32,7 +32,7 @@ RegisterSignals(item, list( COMSIG_ITEM_PICKUP, COMSIG_MOVABLE_MOVED, - COMSIG_PARENT_QDELETING, + COMSIG_QDELETING, ), PROC_REF(on_item_moved)) // Icon generation conditions ////////////// diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 3d9e38da41..1497c85559 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -135,7 +135,11 @@ // It is in a seperate place to avoid an infinite loop situation with dragging mobs dragging each other. // Also its nice to have these things seperated. -/mob/living/carbon/human/proc/calculate_item_encumbrance() +//Return FALSE for no encumberance +/mob/proc/calculate_item_encumbrance() + return FALSE + +/mob/living/carbon/human/calculate_item_encumbrance() /// We check for all the items the wearer has that cause slowdown (positive or negative) /// We then multiply the postive ones by our species.item_slowdown_mod to slow us down more, while we leave negative ones untouched. /// Heavy things in your hands are affected by this change, UNLESS the thing in your hand speeds you up, in which case it doesn't. diff --git a/code/modules/mob/living/carbon/human/human_powers_vr.dm b/code/modules/mob/living/carbon/human/human_powers_vr.dm index ca37a328e8..c10ed8a6d6 100644 --- a/code/modules/mob/living/carbon/human/human_powers_vr.dm +++ b/code/modules/mob/living/carbon/human/human_powers_vr.dm @@ -176,7 +176,7 @@ var/score2 = (scale2 * strength2) var/competition = pick(score1;player1, score2;player2) - if(!do_after(player1, 50, player2, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(player1, 50, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(player1, 10, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(player1, 50, player2)) player2.visible_message(span_notice("The players cancelled their thumb war!")) return 0 if(!hand_games_check(player1,player2)) diff --git a/code/modules/mob/living/carbon/human/human_resist.dm b/code/modules/mob/living/carbon/human/human_resist.dm index 153a5d39ca..4b3bc3964f 100644 --- a/code/modules/mob/living/carbon/human/human_resist.dm +++ b/code/modules/mob/living/carbon/human/human_resist.dm @@ -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, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) + if(do_after(src, breakouttime, 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, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) // Same scaling as breaking cuffs, 5 seconds to 120 seconds, 20 seconds to 480 seconds. + 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(!wear_suit || buckled) return diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm index 800ccbbd0e..5a249303bd 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm @@ -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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, src)) visible_message(span_infoplain(span_bold("\The [src]") + " ceases shifting their form.")) return 0 diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm index 1cca104c57..f67e39b9b4 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm @@ -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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(M, 10 SECONDS, 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, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(M, 10 SECONDS, src)) to_chat(M, span_warning("You stop drawing energy.")) return LL.lleill_energy = min((LL.lleill_energy + 75),LL.lleill_energy_max) diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm index 0aa4afa791..176db45c6a 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(character, 40)) 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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(character, 40)) checking = FALSE for(var/obj/item/grab/G in character) if(G.affecting == victim && G.state >= GRAB_AGGRESSIVE) diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm index d75f995056..96d33cd9c6 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm @@ -442,7 +442,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,exclusive = TASK_ALL_EXCLUSIVE)) + if(force || do_after(src,20)) 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) @@ -556,7 +556,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,exclusive = TASK_ALL_EXCLUSIVE)) + if(force || do_after(blob,20)) if(buckled) buckled.unbuckle_mob() if(LAZYLEN(buckled_mobs)) diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_powers.dm index 7361b2788f..e232da3e22 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_powers.dm @@ -53,7 +53,7 @@ else blob = temporary_form active_regen = 1 - if(do_after(blob,50,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(blob,50)) 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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(protie, 400)) 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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(protie, 40)) 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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(protie, 40)) 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,exclusive = TASK_ALL_EXCLUSIVE)) + if(forced || do_after(protie,20)) if(!temporary_form) //If you're human, force you into blob form before rig'ing nano_blobform(forced) spawn(2) @@ -702,7 +702,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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(protie, 50, 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]!")) diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm index 77a846df2d..82adc95354 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm @@ -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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user,50,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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user,50,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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user,50,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,7 +274,7 @@ 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,exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user,50,src)) playsound(src, 'sound/machines/defib_charge.ogg', 50, 0) if(do_after(user,10,src)) playsound(src, 'sound/machines/defib_zap.ogg', 50, 1, -1) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm index e6fb3a89ba..64b6f1de6e 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm @@ -634,7 +634,7 @@ to_chat(src, span_warning("You can't do that in your current state.")) return - if(do_after(src, 25, exclusive = TASK_USER_EXCLUSIVE)) + if(do_after(src, 25)) var/obj/item/storage/vore_egg/bugcocoon/C = new(loc) forceMove(C) diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 102540207c..6f39910694 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -45,7 +45,7 @@ visible_message(span_danger("[src] is trying to break [I]!"), span_warning("You attempt to break your [I]. (This will take around 5 seconds and you need to stand still)")) - if(do_after(src, 5 SECONDS, target = src, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if(do_after(src, 5 SECONDS, target = src, timed_action_flags = IGNORE_INCAPACITATED)) if(!I || buckled) return visible_message(span_danger("[src] manages to break [I]!"), @@ -69,7 +69,7 @@ visible_message(span_danger("[src] attempts to remove [I]!"), span_warning("You attempt to remove [I]. (This will take around [displaytime] seconds and you need to stand still)")) - if(do_after(src, breakouttime, target = src, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) + if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_INCAPACITATED)) visible_message(span_danger("[src] manages to remove [I]!"), span_notice("You successfully remove [I].")) drop_from_inventory(I) @@ -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, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) + if(do_after(src, 2 MINUTES, timed_action_flags = IGNORE_INCAPACITATED)) if(!buckled) return visible_message(span_danger("[src] manages to unbuckle themself!"), diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm index bf5d66746c..5e4cdc08ae 100644 --- a/code/modules/mob/living/living_powers.dm +++ b/code/modules/mob/living/living_powers.dm @@ -117,7 +117,7 @@ return visible_message(span_warning("[src] begins chargin' their lazor!")) - if(!do_after(src, 5 SECONDS, chosen_target, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 5 SECONDS, chosen_target)) return if(chosen_target.z != src.z || get_dist(src,chosen_target) > 7) return diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm index 2442bd2c76..63a6deb6f8 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm @@ -228,7 +228,7 @@ //CHOMPAdd Start user.visible_message(span_filter_notice("[user] begins to lick \the [target.name] clean..."), span_notice("You begin to lick \the [target.name] clean...")) busy = 1 - if(do_after(user, 50, exclusive = TRUE)) + if(do_after(user, 50)) to_chat(user, span_notice("You clean \the [target.name].")) water.use_charge(5) var/obj/effect/decal/cleanable/C = locate() in target diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6b7fc82ace..d9d6529aaf 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -850,7 +850,7 @@ if(bolt) if(!bolt.malfunction) visible_message(span_danger("[src] is trying to break their [bolt]!"), span_warning("You attempt to break your [bolt]. (This will take around 90 seconds and you need to stand still)")) - if(do_after(src, 1.5 MINUTES, src, incapacitation_flags = INCAPACITATION_DISABLED)) + if(do_after(src, 1.5 MINUTES, src, timed_action_flags = IGNORE_INCAPACITATED)) visible_message(span_danger("[src] manages to break \the [bolt]!"), span_warning("You successfully break your [bolt].")) bolt.malfunction = MALFUNCTION_PERMANENT diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm index 3e425f168a..b210c63295 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm @@ -266,7 +266,7 @@ to_chat(src, span_notice("You begin to eat \the [E]...")) - if(!do_after(src, 20 SECONDS, E, exclusive = TRUE)) + if(!do_after(src, 20 SECONDS, 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, exclusive = TRUE)) + if(!do_after(src, 15 SECONDS)) 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, exclusive = TRUE)) + if(!do_after(src, 15 SECONDS)) to_chat(src, span_warning("You were interrupted.")) return @@ -1060,7 +1060,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, exclusive = TRUE)) + if(!do_after(user, 10 SECONDS, 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 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index 496fe554c1..c277d98216 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -563,7 +563,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? return ..() if(resting) user.visible_message(span_attack("\The [user] approaches \the [src]'s neck with \the [O]."),span_attack("You approach \the [src]'s neck with \the [O].")) - if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE, target = src)) + if(do_after(user, 5 SECONDS, target = src)) if(resting) death() return @@ -749,7 +749,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? sheartime *= 2 else return FALSE - if(do_after(user, sheartime, exclusive = TASK_USER_EXCLUSIVE, target = src)) + if(do_after(user, sheartime, target = src)) user.visible_message(span_notice("\The [user] shears \the [src] with \the [tool]."),span_notice("You shear \the [src] with \the [tool].")) amount_grown = rand(0,250) var/obj/item/stack/material/fur/F = new(get_turf(user), rand(10,15)) diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm index 04762b4e63..36a36dc735 100644 --- a/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm @@ -464,7 +464,7 @@ return visible_message("\The [src] begins significantly shifting their form.") - if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(src, 10 SECONDS, src)) visible_message("\The [src] ceases shifting their form.") return 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm index e0eb99fd4f..f03a057494 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm @@ -51,8 +51,8 @@ /mob/living/dominated_brain/proc/lets_register_our_signals() if(prey_body) - RegisterSignal(prey_body, COMSIG_PARENT_QDELETING, PROC_REF(prey_was_deleted), TRUE) - RegisterSignal(pred_body, COMSIG_PARENT_QDELETING, PROC_REF(pred_was_deleted), TRUE) + RegisterSignal(prey_body, COMSIG_QDELETING, PROC_REF(prey_was_deleted), TRUE) + RegisterSignal(pred_body, COMSIG_QDELETING, PROC_REF(pred_was_deleted), TRUE) /mob/living/dominated_brain/proc/lets_unregister_our_signals() prey_was_deleted() @@ -61,13 +61,13 @@ /mob/living/dominated_brain/proc/prey_was_deleted() SIGNAL_HANDLER if(prey_body) - UnregisterSignal(prey_body, COMSIG_PARENT_QDELETING) + UnregisterSignal(prey_body, COMSIG_QDELETING) prey_body = null /mob/living/dominated_brain/proc/pred_was_deleted() SIGNAL_HANDLER if(pred_body) - UnregisterSignal(pred_body, COMSIG_PARENT_QDELETING) + UnregisterSignal(pred_body, COMSIG_QDELETING) pred_body = null /mob/living/dominated_brain/Destroy() @@ -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, exclusive = TRUE)) + if(do_after(src, 10 SECONDS)) restore_control() else to_chat(src, span_notice("Your attempt to regain control has been interrupted...")) @@ -248,7 +248,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, exclusive = TRUE)) + if(!do_after(prey, 10 SECONDS)) to_chat(prey, span_notice("Your attempt to regain control has been interrupted...")) to_chat(pred, span_notice("The dominant sensation fades away...")) return @@ -343,7 +343,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, exclusive = TRUE)) + if(do_after(src, 10 SECONDS)) restore_control() else to_chat(src, span_notice("Your attempt to regain control has been interrupted...")) @@ -399,7 +399,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, exclusive = TRUE)) + if(!do_after(src, 10 SECONDS)) 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 @@ -450,7 +450,7 @@ 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(pred_body, span_warning("\The [src] resists your hold and attempts to return to their body!")) - if(do_after(src, 10 SECONDS, exclusive = TRUE)) + if(do_after(src, 10 SECONDS)) if(prey_body && prey_body.loc.loc == pred_body) prey_body.ckey = prey_ckey @@ -517,7 +517,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, exclusive = TRUE)) + if(!do_after(pred, 10 SECONDS)) to_chat(pred, span_notice("Your attempt to share control has been interrupted...")) to_chat(prey, span_notice("The dominant sensation fades away...")) return diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm index a7712063e8..d1270ba804 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm @@ -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, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) + if(do_after(user, escape_time, src, timed_action_flags = IGNORE_INCAPACITATED)) if(!has_buckled_mobs()) return to_chat(user, "You tug free of the tacky, rubbery strands!") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm index eea9b74fb5..4953e27074 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm @@ -251,7 +251,7 @@ return ..() if(M.a_intent == I_HELP) M.visible_message("[M] pets [src].", runemessage = "pets [src]") - if(do_after(M, 30 SECONDS, exclusive = TASK_USER_EXCLUSIVE, target = src)) + if(do_after(M, 30 SECONDS, target = src)) faction = M.faction revive() sight = initial(sight) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 24b8e9a80e..ee4c826ef2 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -232,7 +232,11 @@ var/in_enclosed_vehicle = 0 //For mechs and fighters ambiance. Can be used in other cases. - var/list/progressbars = null //VOREStation Edit + ///List of progress bars this mob is currently seeing for actions + var/list/progressbars = null //for stacking do_after bars + + ///For storing what do_after's someone has, key = string, value = amount of interactions of that type happening. + var/list/do_afters var/datum/focus //What receives our keyboard inputs. src by default diff --git a/code/modules/overmap/ships/ship_vr.dm b/code/modules/overmap/ships/ship_vr.dm index 0d41c4aec4..213faf4e34 100644 --- a/code/modules/overmap/ships/ship_vr.dm +++ b/code/modules/overmap/ships/ship_vr.dm @@ -19,7 +19,7 @@ var/obj/belly/bellychoice = tgui_input_list(L, "Which belly?","Select A Belly", L.vore_organs) if(bellychoice) L.visible_message(span_warning("[L] is trying to stuff \the [src] into [L.gender == MALE ? "his" : L.gender == FEMALE ? "her" : "their"] [bellychoice]!"),span_notice("You begin putting \the [src] into your [bellychoice]!")) - if(do_after(L, 5 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(L, 5 SECONDS, src)) forceMove(bellychoice) SSskybox.rebuild_skyboxes(map_z) L.visible_message(span_warning("[L] eats a spaceship! This is totally normal."),"You eat the the spaceship! Yum, metal.") diff --git a/code/modules/projectiles/guns/launcher/bows.dm b/code/modules/projectiles/guns/launcher/bows.dm index 63a8387bb3..648214c2c6 100644 --- a/code/modules/projectiles/guns/launcher/bows.dm +++ b/code/modules/projectiles/guns/launcher/bows.dm @@ -95,7 +95,7 @@ current_user = user user.visible_message(span_infoplain(span_bold("[user]") + " begins to draw back the string of [src]."),span_notice("You begin to draw back the string of [src].")) - if(do_after(user, 25, src, exclusive = TASK_ALL_EXCLUSIVE)) + if(do_after(user, 25, src)) drawn = TRUE user.visible_message(span_infoplain(span_bold("[user]") + "draws the string on [src] back fully!"), span_infoplain("You draw the string on [src] back fully!")) update_icon() diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 948bdab560..4270a786eb 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -54,9 +54,9 @@ Notes: return FALSE if (!isnull(last_target)) - UnregisterSignal(last_target, COMSIG_PARENT_QDELETING) + UnregisterSignal(last_target, COMSIG_QDELETING) - RegisterSignal(thing, COMSIG_PARENT_QDELETING, PROC_REF(on_target_qdel)) + RegisterSignal(thing, COMSIG_QDELETING, PROC_REF(on_target_qdel)) last_target = thing diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 71c812b0c4..8500e07461 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -1275,7 +1275,7 @@ to_chat(R, escape_attempt_prey_message) to_chat(owner, escape_attempt_owner_message) - if(do_after(R, escapetime, owner, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if(do_after(R, escapetime, owner, timed_action_flags = IGNORE_INCAPACITATED)) if((owner.stat || escapable)) //Can still escape? if(C) release_specific_contents(C) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index f60dba9ea8..0bff4cf8c7 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -931,7 +931,7 @@ playsound(src, 'sound/items/eatfood.ogg', rand(10,50), 1) var/T = (istype(M) ? M.hardness/40 : 1) SECONDS //1.5 seconds to eat a sheet of metal. 2.5 for durasteel and diamond & 1 by default (applies to some ores like raw carbon, slag, etc. to_chat(src, span_notice("You start crunching on [I] with your powerful jaws, attempting to tear it apart...")) - if(do_after(feeder, T, ignore_movement = TRUE, exclusive = TASK_ALL_EXCLUSIVE)) //Eat on the move, but not multiple things at once. + if(do_after(feeder, T, timed_action_flags = IGNORE_USER_LOC_CHANGE)) //Eat on the move, but not multiple things at once. if(feeder != src) to_chat(feeder, span_notice("You feed [I] to [src].")) log_admin("VORE: [feeder] fed [src] [I].") diff --git a/code/modules/vore/eating/silicon_vr.dm b/code/modules/vore/eating/silicon_vr.dm index 06dc9c2e0f..5b3174ff44 100644 --- a/code/modules/vore/eating/silicon_vr.dm +++ b/code/modules/vore/eating/silicon_vr.dm @@ -56,7 +56,7 @@ hologram.visible_message("[hologram] starts engulfing [prey] in hardlight holograms!") to_chat(src, span_vnotice("You begin engulfing [prey] in hardlight holograms.")) //Can't be part of the above, because the above is from the hologram. - if(do_after(user = eyeobj,delay = 50,target = prey, needhand = 0) && holo && hologram) //Didn't move and still projecting and effect exists and no other bellied people + if(do_after(user = eyeobj,delay = 50,target = prey) && holo && hologram) //Didn't move and still projecting and effect exists and no other bellied people feed_grabbed_to_self(src, prey) /mob/living/AIShiftClick(var/mob/user) //Shift-click as AI overridden on mobs to examine. diff --git a/code/modules/vore/eating/vore_procs.dm b/code/modules/vore/eating/vore_procs.dm index bf6fdab893..23977a4f07 100644 --- a/code/modules/vore/eating/vore_procs.dm +++ b/code/modules/vore/eating/vore_procs.dm @@ -57,7 +57,7 @@ //Timer and progress bar if(!user.client && prey.weakened > 0) // stop crwaling instantly break swallow attempt for mobvore prey.Stun(min(prey.weakened, 2)) // stop crawling instantly break swallow attempt for mobvore - if(!do_after(user, swallow_time, prey, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, swallow_time, prey, hidden = TRUE)) return FALSE // Prey escaped (or user disabled) before timer expired. // If we got this far, nom successful! Announce it and move the prey! diff --git a/icons/effects/progressbar.dmi b/icons/effects/progressbar.dmi index 99284060aa60676fcf3dc85db670633d6c262f5f..3eed14db704a76ab77d9ea02c39e290c85e428c1 100644 GIT binary patch delta 1218 zcmY+CdrVUY6vl7cL5Esc9E=L4NEQTqfIK!7VHIfy1q1{pM37!}V9|m+ioD9b^-&+2 z6T!}bQ0gNhIG{diI#O1uLJb{I@JZ~Tia@E-hg2-((ssp#EIa>vCtpr}`Oe7^eKzXg zbtW-B3b)K{82|t{N;D}608q9T1$>UN$)VP?6q{_R_VR-}AIfVu%^vRS-uCRWPMyst zkX&6HWF*BW1KTEtvu!=5JSB}m$|~Aln3K=QIh+Ror484g|Mk;@P0seOiVe;Y!axC~ zJpGSV&IMQaiDSXJn1iPTeXkVh#a_vH2)eVyyCFkN_KP)jjA*I~i-v#paJ5%bCw5<| zN+ZEtVuHwbD2Bu}u=U zXT?;nKNgt9^1T+f3Y7UIJJuG;IGCmeIM9XFayiZpT<4SQP#YslK{wSfi>y(Vvl`|v zW%cHv?xeh`dX;?K5xi1fnry-K004$WAw{H=HfTmP=ju0o!G67=n48d(r?c*Jk8}HW zuk=go(YA?7!CM|C62!GJ67MP&Z~v+2vfpU2W!`w5nL9Pw zcD507M{`i-?asL;GMTxzBGk-Et8m_!(bYK9YoBF?pha9LRmpQnL3CVNuH-}dt>y`VK;CWU-nb|FJpW&l}M*n zC23D!n4wl$UrCRFH(x>&!bFNKkY2rTAwcOWKVbJ%j6I~<7{-1#xrF&ISDPM&Bs-g_ z&ptlur;ug&C% z(Xd-rR2dOeul|=M+1LJpNtkgzkxs}y%b))E`bpKrQ;5A3FaxIdvwL)cuyF%8ZdIu+ zM(^>oqWDs~@^Kjp#5K2BrvmIX7^!EM*^>wIs6l1BJ?l)*$nVg2@AFsjv&vfqsG#RL znJ0^$r0VnY=2xDRt_(RMPlLr3vD^C~iM~{twQKJDdSSGHP~+B8SxnZv^N27qQQJfB z*FqdaLOKnW&*rS2!T*XIyCuS_{3Qa|NH!zX`{U?t1@5IamW(U}j7S39Itro4M!!O} ziGLUUn4f>6!TfdVfQ6u%d9*NNpsH7a;q}M=yx$qN|DhQnI!o}-$>}FwRWI&OA;**2 Iw}Z$20h7j38UO$Q delta 537 zcmV+!0_OeR3A+R(iBL{Q4GJ0x0000DNk~Le0001>0001>1Oos70D0kh9smFUDv>2F zf6v$=egFUf0d!JMQvg8b*k%9#0I+&gSad{Xb7OL8aCB*JZU6vyoR!nP3c@fH1>iY( ziqP)T{Pb^dkrwG-U!g=An+&y*1buyj9YyeL=Uy(~aydCW_2*$^-DRLp;kd~a1o7bz^^Y>}_|0xGp4!8nv z1>j1+m4K@NR{?H`ybW+Gz^wqc2HYBO8^CPcvkuXZ_fHy8H$=bs4s(5=rj> z009F@L_t(&f$i3@4T3-zhT(GqaRXez5o85NkOeGm0+Z{l7{G?slG=`;j2`*Hf6vn2 z5X}2@Z*n0QDELAE0094NRhYF$hhl3Aj}DuiDPO&puC({k)mw+n!Q=x+>00|JUB9*e z4c*_N`&R}40Do)&`>?V(mDf~^QTrqvwNKN1Sli&s2U1GfXX&JUp6)~M8?p}p0KkkE zun(insl29|r;Bu>eUWa)eVA_KJ>mJ`w##C%xD4ou(3In*Hkyq zzDal5w_(n;Hu&;^exQAq?zQjbZ*Isw1ONata{u#xY?E(|>!~Y!9%%cncY2`r4c*_N b?^k{R!U%s;+@^O+00000NkvXXu0mjfLiYQ- diff --git a/modular_chomp/code/datums/components/squeak.dm b/modular_chomp/code/datums/components/squeak.dm index 0665864f95..56f346a38d 100644 --- a/modular_chomp/code/datums/components/squeak.dm +++ b/modular_chomp/code/datums/components/squeak.dm @@ -141,7 +141,7 @@ SIGNAL_HANDLER holder = equipper //RegisterSignal(holder, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposing_react), override=TRUE) - RegisterSignal(holder, COMSIG_PARENT_QDELETING, PROC_REF(holder_deleted), override=TRUE) + RegisterSignal(holder, COMSIG_QDELETING, PROC_REF(holder_deleted), override=TRUE) //override for the preqdeleted is necessary because putting parent in hands sends the signal that this proc is registered towards, //so putting an object in hands and then equipping the item on a clothing slot (without dropping it first) //will always runtime without override = TRUE @@ -149,7 +149,7 @@ /datum/component/squeak/proc/on_drop(datum/source, mob/user) SIGNAL_HANDLER //UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING) - UnregisterSignal(user, COMSIG_PARENT_QDELETING) + UnregisterSignal(user, COMSIG_QDELETING) holder = null ///just gets rid of the reference to holder in the case that theyre qdeleted diff --git a/modular_chomp/code/game/machinery/buttons.dm b/modular_chomp/code/game/machinery/buttons.dm index 9c83143899..66282ebb31 100644 --- a/modular_chomp/code/game/machinery/buttons.dm +++ b/modular_chomp/code/game/machinery/buttons.dm @@ -24,7 +24,7 @@ mobspawned.init_vore() if(neutral == TRUE) mobspawned.faction = "neutral" - RegisterSignal(mobspawned, COMSIG_PARENT_QDELETING, PROC_REF(clean_mob)) + RegisterSignal(mobspawned, COMSIG_QDELETING, PROC_REF(clean_mob)) /obj/machinery/button/mob_spawner_button/proc/clean_mob() SIGNAL_HANDLER diff --git a/modular_chomp/code/modules/halloween/items.dm b/modular_chomp/code/modules/halloween/items.dm index a944a96430..d27b2a1095 100644 --- a/modular_chomp/code/modules/halloween/items.dm +++ b/modular_chomp/code/modules/halloween/items.dm @@ -206,7 +206,7 @@ costumes = typesof(/obj/item/storage/box/halloween/) /obj/structure/boxpile/attack_hand(mob/living/user) - if(!do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) + if(!do_after(user, 5 SECONDS)) return if(!user.ckey) return diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/species_shapeshift_ch.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/species_shapeshift_ch.dm index 999c9153de..3023fd3741 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/species_shapeshift_ch.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/species_shapeshift_ch.dm @@ -25,7 +25,7 @@ oocnotes = 1 to_chat(src, span_notify("You begin to reform. You will need to remain still.")) visible_message(span_notify("[src] rapidly contorts and shifts!"), span_danger("You begin to reform.")) - if (do_after(src, 40,exclusive = TASK_ALL_EXCLUSIVE)) + if (do_after(src, 4 SECONDS)) if (client?.prefs) client.prefs.vanity_copy_to(src, FALSE, flavour, oocnotes, FALSE) visible_message(span_notify("[src] adopts a new form!"), span_danger("You have reformed.")) diff --git a/vorestation.dme b/vorestation.dme index 5300d7193b..8219130d44 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -78,6 +78,7 @@ #include "code\__defines\database.dm" #include "code\__defines\diseases.dm" #include "code\__defines\dna.dm" +#include "code\__defines\do_afters.dm" #include "code\__defines\economy_misc.dm" #include "code\__defines\equipment_vendor.dm" #include "code\__defines\events.dm" @@ -524,6 +525,7 @@ #include "code\datums\category.dm" #include "code\datums\chat_message.dm" #include "code\datums\chat_payload.dm" +#include "code\datums\cogbar.dm" #include "code\datums\colormate.dm" #include "code\datums\datacore.dm" #include "code\datums\datum.dm"