Files
Bubberstation/code/datums/elements/damage_threshold.dm
SkyratBot 4102ead7a6 [MIRROR] Fix "/datum/element/damage_threshold looks unharmed!" [MDB IGNORE] (#25825)
* 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>
2023-12-24 20:58:11 +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