mirror of
https://github.com/Skyrat-SS13/Skyrat-tg.git
synced 2026-08-23 12:59:21 +01:00
* Blocks (most instances of) screen elements from entering base atom `/Click` (#82236) ## About The Pull Request Fixes #76495 This PR prevents (most) screen elements from running base `/atom/proc/Click` and `/mob/proc/ClickOn()` when clickend. (The only exception I found to it was the cursor catcher for scopes.) Why? Most, if not everything in `ClickOn` is considered "in world" interacting. It abides by `incapacitated`, runs `faceAtom`, etc. This means, currently, you can "interact" with screen elements using in world elements. For example, TK-ing / pointing a gun at your mood face. Right now this affects very little, but there is a large potential for errors. All you have to do is forget a sanity check in `afterattack` and suddenly you have an item that can affect your screen objects. The only example I found was the `/item/godstaff`, which can color some of your screen elements. But there may be more. Like guns. Note: Many, many screen elements ALREADY do not fall down into atom click. They simply don't call parent. Which is totally fine. I am just ensuring ALL* screen elements do not fall down into atom click. ## Changelog 🆑 Melbert fix: Blocks mobs from trying to "physically" interact with some of their hud elements, such as using Telekinesis or point a gun at your mood meter. /🆑 * Blocks (most instances of) screen elements from entering base atom `/Click` --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
67 lines
2.7 KiB
Plaintext
67 lines
2.7 KiB
Plaintext
///Status effect applied when casting a fishing rod at someone, provided the attached fishing hook allows it.
|
|
/datum/status_effect/grouped/hooked
|
|
id = "hooked"
|
|
duration = -1
|
|
tick_interval = -1
|
|
status_type = STATUS_EFFECT_MULTIPLE
|
|
alert_type = /atom/movable/screen/alert/status_effect/hooked
|
|
|
|
/datum/status_effect/grouped/hooked/proc/try_unhook()
|
|
return do_after(owner, 2 SECONDS, timed_action_flags = IGNORE_USER_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(still_exists)), interaction_key = DOAFTER_SOURCE_REMOVING_HOOK)
|
|
|
|
/datum/status_effect/grouped/hooked/proc/still_exists()
|
|
return !QDELETED(src)
|
|
|
|
/datum/status_effect/grouped/hooked/on_creation(mob/living/new_owner, datum/beam/fishing_line/source)
|
|
. = ..()
|
|
if(!.) //merged with an existing effect
|
|
return
|
|
RegisterSignal(source, COMSIG_QDELETING, PROC_REF(on_fishing_line_deleted))
|
|
|
|
/datum/status_effect/grouped/hooked/merge_with_existing(datum/status_effect/grouped/hooked/existing, datum/beam/fishing_line/source)
|
|
existing.RegisterSignal(source, COMSIG_QDELETING, PROC_REF(on_fishing_line_deleted))
|
|
|
|
/datum/status_effect/grouped/hooked/proc/on_fishing_line_deleted(datum/source)
|
|
SIGNAL_HANDLER
|
|
owner.remove_status_effect(type, source)
|
|
|
|
/atom/movable/screen/alert/status_effect/hooked
|
|
name = "Snagged By Hook"
|
|
desc = "You're being caught like a fish by some asshat! Click to safely remove the hook or move away far enough to snap it off."
|
|
icon_state = "hooked"
|
|
|
|
/atom/movable/screen/alert/status_effect/hooked/Click()
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
if(!owner.can_resist())
|
|
return
|
|
owner.balloon_alert(owner, "removing hook...")
|
|
var/datum/status_effect/grouped/hooked/effect = owner.has_status_effect(attached_effect.type)
|
|
if(!effect.try_unhook())
|
|
return
|
|
owner.balloon_alert(owner, "hook removed")
|
|
var/datum/beam/fishing_line/rand_source = pick(effect.sources)
|
|
qdel(rand_source)
|
|
|
|
///Version used by the jawed fishing hook, which also applies slowdown
|
|
/datum/status_effect/grouped/hooked/jaws
|
|
id = "hooked_jaws"
|
|
alert_type = /atom/movable/screen/alert/status_effect/hooked/jaws
|
|
|
|
/datum/status_effect/grouped/hooked/jaws/on_apply()
|
|
. = ..()
|
|
owner.add_movespeed_modifier(/datum/movespeed_modifier/hook_jawed)
|
|
|
|
/datum/status_effect/grouped/hooked/jaws/on_remove()
|
|
. = ..()
|
|
owner.remove_movespeed_modifier(/datum/movespeed_modifier/hook_jawed)
|
|
|
|
/datum/status_effect/grouped/hooked/jaws/try_unhook()
|
|
return do_after(owner, 10 SECONDS, extra_checks = CALLBACK(src, PROC_REF(still_exists)), interaction_key = DOAFTER_SOURCE_REMOVING_HOOK)
|
|
|
|
/atom/movable/screen/alert/status_effect/hooked/jaws
|
|
name = "Snagged By Jaws"
|
|
desc = "You've been snagged by some sort of beartrap-slash-fishing-hook-gizmo! Click to safely remove the hook or move away far enough to snap it off."
|
|
icon_state = "hooked_jaws"
|