diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 4c1546be5fd..2be63cc078b 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -839,6 +839,18 @@ . = ..() AddElement(/datum/element/climbable) AddElement(/datum/element/elevation, pixel_shift = 12) + register_context() + +/obj/structure/rack/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + return NONE + + if(!(obj_flags & NO_DECONSTRUCTION)) + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + + return NONE /obj/structure/rack/examine(mob/user) . = ..() @@ -851,25 +863,19 @@ if(istype(mover) && (mover.pass_flags & PASSTABLE)) return TRUE -/obj/structure/rack/MouseDrop_T(obj/O, mob/user) - . = ..() - if ((!( isitem(O) ) || user.get_active_held_item() != O)) - return - if(!user.dropItemToGround(O)) - return - if(O.loc != src.loc) - step(O, get_dir(O, src)) +/obj/structure/rack/wrench_act_secondary(mob/living/user, obj/item/tool) + if(obj_flags & NO_DECONSTRUCTION) + return NONE + tool.play_tool_sound(src) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS -/obj/structure/rack/attackby(obj/item/W, mob/living/user, params) - var/list/modifiers = params2list(params) - if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) - W.play_tool_sound(src) - deconstruct(TRUE) - return - if(user.combat_mode) - return ..() - if(user.transferItemToLoc(W, drop_location())) - return 1 +/obj/structure/rack/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + . = ..() + if(. || tool.item_flags & ABSTRACT) + return . + if(user.transferItemToLoc(tool, drop_location(), silent = FALSE)) + return ITEM_INTERACT_SUCCESS /obj/structure/rack/attack_paw(mob/living/user, list/modifiers) attack_hand(user, modifiers) @@ -878,7 +884,7 @@ . = ..() if(.) return - if(user.body_position == LYING_DOWN || user.usable_legs < 2) + if(!user.combat_mode || user.body_position == LYING_DOWN || user.usable_legs < 2) return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) @@ -921,12 +927,36 @@ custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) var/building = FALSE -/obj/item/rack_parts/attackby(obj/item/W, mob/user, params) - if (W.tool_behaviour == TOOL_WRENCH) - new /obj/item/stack/sheet/iron(user.loc) - qdel(src) - else - . = ..() +/obj/item/rack_parts/Initialize(mapload) + . = ..() + register_context() + +/obj/item/rack_parts/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + return NONE + + if(held_item == src) + context[SCREENTIP_CONTEXT_LMB] = "Construct Rack" + return CONTEXTUAL_SCREENTIP_SET + + if(!(obj_flags & NO_DECONSTRUCTION)) + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + +/obj/item/rack_parts/wrench_act(mob/living/user, obj/item/tool) + if(obj_flags & NO_DECONSTRUCTION) + return NONE + tool.play_tool_sound(src) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/item/rack_parts/deconstruct(disassembled = TRUE) + if(!(obj_flags & NO_DECONSTRUCTION)) + new /obj/item/stack/sheet/iron(drop_location()) + return ..() /obj/item/rack_parts/attack_self(mob/user) if(building)