Files
Bubberstation/code/datums/elements/damage_threshold.dm
Mothblocks e90e8fdb3c Fix "/datum/element/damage_threshold looks unharmed!" (#80546)
Fixed a bug that would give you the chat message
2023-12-24 20:44:44 +00:00

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