Files

113 lines
4.5 KiB
Plaintext

//* This file is explicitly licensed under the MIT license. *//
//* Copyright (c) 2025 Citadel Station Developers *//
/mob/OnMouseDrop(atom/over, mob/user, proximity, params)
. = ..()
if(over != user)
return
. |= mouse_drop_strip_interaction(user)
/mob/on_attack_hand(datum/event_args/actor/clickchain/clickchain, clickchain_flags)
. = ..()
if(. & CLICKCHAIN_FLAGS_INTERACT_ABORT)
return
// todo: add clickchain flags to on attack hand and return flags properly..
if(clickchain.performer.can_clickchain_unarmed_interact_with_mob(clickchain, NONE, src))
. = handle_inbound_clickchain_unarmed_interaction(clickchain, NONE)
if(. & CLICKCHAIN_FLAGS_INTERACT_ABORT)
return
/**
* Called when about to **send** a clickchain interaction
*/
/mob/proc/can_clickchain_unarmed_interact_with_mob(datum/event_args/actor/clickchain/clickchain, clickchain_flags, mob/target, silent)
return TRUE
/**
* Called when receiving a clickchain interaction.
*
* * Called only when clickchain has proximity.
* * Called before shieldcalls, so make sure to handle those.
* * Routes to on_clickchain_x_interaction by default.
*
* @return clickchain_flags
*/
/mob/proc/handle_inbound_clickchain_unarmed_interaction(datum/event_args/actor/clickchain/clickchain, clickchain_flags)
switch(clickchain.using_intent)
if(INTENT_HELP)
return handle_inbound_clickchain_help_interaction(clickchain, clickchain_flags)
if(INTENT_DISARM)
return handle_inbound_clickchain_disarm_interaction(clickchain, clickchain_flags)
if(INTENT_GRAB)
return handle_inbound_clickchain_grab_interaction(clickchain, clickchain_flags)
if(INTENT_HARM)
return handle_inbound_clickchain_harm_interaction(clickchain, clickchain_flags)
/**
* Called when receiving a clickchain interaction.
*
* * This is called on the receiving (being attacked) side.
* * Called only when clickchain has proximity.
* * Called before shieldcalls, so make sure to handle those.
*
* @return clickchain flags
*/
/mob/proc/handle_inbound_clickchain_help_interaction(datum/event_args/actor/clickchain/clickchain, clickchain_flags)
. = clickchain_flags
var/intentful_hook_results = SEND_SIGNAL(clickchain.performer, COMSIG_MOB_MELEE_INTENTFUL_HOOK, clickchain, .)
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_SKIP)
. = CLICKCHAIN_DO_NOT_PROPAGATE
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_ACTION)
. |= CLICKCHAIN_DID_SOMETHING
/**
* Called when receiving a clickchain interaction.
*
* * This is called on the receiving (being attacked) side.
* * Called only when clickchain has proximity.
* * Called before shieldcalls, so make sure to handle those.
*
* @return clickchain flags
*/
/mob/proc/handle_inbound_clickchain_disarm_interaction(datum/event_args/actor/clickchain/clickchain, clickchain_flags)
. = clickchain_flags
var/intentful_hook_results = SEND_SIGNAL(clickchain.performer, COMSIG_MOB_MELEE_INTENTFUL_HOOK, clickchain, .)
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_SKIP)
. = CLICKCHAIN_DO_NOT_PROPAGATE
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_ACTION)
. |= CLICKCHAIN_DID_SOMETHING
/**
* Called when receiving a clickchain interaction.
*
* * This is called on the receiving (being attacked) side.
* * Called only when clickchain has proximity.
* * Called before shieldcalls, so make sure to handle those.
*
* @return clickchain flags
*/
/mob/proc/handle_inbound_clickchain_grab_interaction(datum/event_args/actor/clickchain/clickchain, clickchain_flags)
. = clickchain_flags
var/intentful_hook_results = SEND_SIGNAL(clickchain.performer, COMSIG_MOB_MELEE_INTENTFUL_HOOK, clickchain, .)
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_SKIP)
. = CLICKCHAIN_DO_NOT_PROPAGATE
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_ACTION)
. |= CLICKCHAIN_DID_SOMETHING
/**
* Called when receiving a clickchain interaction.
*
* * This is called on the receiving (being attacked) side.
* * Called only when clickchain has proximity.
* * Called before shieldcalls, so make sure to handle those.
*
* @return clickchain flags
*/
/mob/proc/handle_inbound_clickchain_harm_interaction(datum/event_args/actor/clickchain/clickchain, clickchain_flags)
. = clickchain_flags
var/intentful_hook_results = SEND_SIGNAL(clickchain.performer, COMSIG_MOB_MELEE_INTENTFUL_HOOK, clickchain, .)
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_SKIP)
. = CLICKCHAIN_DO_NOT_PROPAGATE
if(intentful_hook_results & RAISE_MOB_MELEE_INTENTFUL_ACTION)
. |= CLICKCHAIN_DID_SOMETHING