mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-24 00:21:52 +00:00
* Fix "/datum/element/damage_threshold looks unharmed!" (#80546) Fixed a bug that would give you the chat message * Fix "/datum/element/damage_threshold looks unharmed!" --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
52 lines
1.5 KiB
Plaintext
52 lines
1.5 KiB
Plaintext
/// Applied to living mobs.
|
|
/// Adds a force threshold for which attacks will be blocked entirely.
|
|
/// IE, if they are hit with an attack that deals less than X damage, the attack does nothing.
|
|
/datum/element/damage_threshold
|
|
element_flags = ELEMENT_BESPOKE
|
|
argument_hash_start_idx = 2
|
|
/// Incoming attacks beneath this threshold, inclusive, will be blocked entirely
|
|
var/force_threshold = -1
|
|
|
|
/datum/element/damage_threshold/Attach(datum/target, threshold)
|
|
. = ..()
|
|
if(!isliving(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
if(!isnum(threshold) || threshold <= 0)
|
|
return ELEMENT_INCOMPATIBLE
|
|
|
|
RegisterSignal(target, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block))
|
|
force_threshold = threshold
|
|
|
|
/datum/element/damage_threshold/Detach(datum/source, ...)
|
|
. = ..()
|
|
UnregisterSignal(source, COMSIG_LIVING_CHECK_BLOCK)
|
|
|
|
/datum/element/damage_threshold/proc/check_block(
|
|
mob/living/source,
|
|
atom/hitby,
|
|
damage,
|
|
attack_text,
|
|
attack_type,
|
|
armour_penetration,
|
|
damage_type,
|
|
attack_flag,
|
|
)
|
|
SIGNAL_HANDLER
|
|
|
|
if(damage <= 0) // Already handled
|
|
return NONE
|
|
|
|
if(damage <= force_threshold)
|
|
var/obj/item/item_hitting = hitby
|
|
var/tap_vol = istype(item_hitting) ? item_hitting.get_clamped_volume() : 50
|
|
source.visible_message(
|
|
span_warning("[source] looks unharmed!"),
|
|
span_warning("[attack_text] deals no damage to you!"),
|
|
span_hear("You hear a thud."),
|
|
COMBAT_MESSAGE_RANGE,
|
|
)
|
|
playsound(source, 'sound/weapons/tap.ogg', tap_vol, TRUE, -1)
|
|
return SUCCESSFUL_BLOCK
|
|
|
|
return NONE
|