mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-17 11:05:16 +01:00
Re-refactors batons / Refactors attack chain force modifiers (#90809)
Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). 🆑 Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /🆑
This commit is contained in:
@@ -149,7 +149,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, list/modifiers)
|
||||
/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(tool.tool_behaviour == TOOL_MULTITOOL)
|
||||
active = !active
|
||||
to_chat(user, span_notice("You [active? "activate" : "deactivate"] \the [src]'s transmitters."))
|
||||
@@ -179,7 +179,7 @@
|
||||
balloon_alert(user, "connected neural network")
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, list/modifiers)
|
||||
/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(remote_ai)
|
||||
to_chat(remote_ai, span_danger("CORE TAMPERING DETECTED!"))
|
||||
if(!anchored)
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
/obj/structure/alien/resin/Initialize(mapload)
|
||||
. = ..()
|
||||
air_update_turf(TRUE, TRUE)
|
||||
ADD_TRAIT(src, TRAIT_INVERTED_DEMOLITION, INNATE_TRAIT)
|
||||
|
||||
/obj/structure/alien/resin/Destroy()
|
||||
air_update_turf(TRUE, FALSE)
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
. += mutable_appearance(icon, "brakes_down")
|
||||
. += emissive_appearance(icon, "brakes_down", src, alpha = src.alpha)
|
||||
|
||||
/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(item, /obj/item/emergency_bed/silicon))
|
||||
var/obj/item/emergency_bed/silicon/silicon_bed = item
|
||||
if(silicon_bed.loaded)
|
||||
@@ -220,7 +220,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere
|
||||
|
||||
/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, list/modifiers)
|
||||
/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(item, /obj/item/emergency_bed/silicon))
|
||||
var/obj/item/emergency_bed/silicon/silicon_bed = item
|
||||
if(silicon_bed.loaded)
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
W.setDir(dir)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/chair/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/chair/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(W, /obj/item/assembly/shock_kit) && !HAS_TRAIT(src, TRAIT_ELECTRIFIED_BUCKLE))
|
||||
electrify_self(W, user)
|
||||
return
|
||||
@@ -421,7 +421,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/chair/afterattack(atom/target, mob/user, list/modifiers)
|
||||
/obj/item/chair/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!ishuman(target))
|
||||
return
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
QDEL_NULL(burning_loop)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(used_item, /obj/item/stack/rods) && !can_buckle && !grill)
|
||||
var/obj/item/stack/rods/rods = used_item
|
||||
var/choice = tgui_alert(user, "What would you like to construct?", "Bonfire", list("Stake","Grill"))
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
default_unfasten_wrench(user, tool)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/cannon/attackby(obj/item/used_item, mob/user, list/modifiers)
|
||||
/obj/structure/cannon/attackby(obj/item/used_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(charge_ignited)
|
||||
balloon_alert(user, "it's gonna fire!")
|
||||
return
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
///Covers Reloading and lighting of the gun
|
||||
/obj/structure/mounted_gun/attackby(obj/item/ammo_casing/used_item, mob/user, list/modifiers)
|
||||
/obj/structure/mounted_gun/attackby(obj/item/ammo_casing/used_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
var/ignition_message = used_item.ignition_effect(src, user) // Checks if item used can ignite stuff.
|
||||
if(istype(used_item, ammo_type))
|
||||
if(fully_loaded_gun)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
eyeobj = new /mob/eye/camera/remote/base_construction(spawn_spot, src)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
//If we have an internal RCD, we can refill it by slapping the console with some materials
|
||||
if(internal_rcd && (istype(W, /obj/item/rcd_ammo) || istype(W, /obj/item/stack/sheet)))
|
||||
internal_rcd.attackby(W, user, modifiers)
|
||||
|
||||
@@ -646,7 +646,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
|
||||
req_access = accesses
|
||||
req_one_access = null
|
||||
|
||||
/obj/structure/closet/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/closet/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(user in src)
|
||||
return
|
||||
if(src.tool_interact(W,user))
|
||||
@@ -1257,13 +1257,17 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
|
||||
GLOB.roundstart_station_closets += src
|
||||
|
||||
///Spears deal bonus damages to lockers
|
||||
/obj/structure/closet/attacked_by(obj/item/attacking_item, mob/living/user)
|
||||
/obj/structure/closet/secure_closet/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(attacking_item, /obj/item/spear))
|
||||
take_damage(attacking_item.force * 2, attacking_item.damtype, MELEE, 1, get_dir(src, user))
|
||||
user.visible_message(span_danger("[user] stabs with precision [src]'s electronics with [attacking_item]!"),
|
||||
span_danger("You stab with precision [src]'s electronics with [attacking_item]!"), null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, src, "attacked", attacking_item)
|
||||
return
|
||||
HIDE_ATTACK_MESSAGES(attack_modifiers)
|
||||
MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 2)
|
||||
user.visible_message(
|
||||
span_danger("[user] stabs with precision [src]'s electronics with [attacking_item]!"),
|
||||
span_danger("You stab with precision [src]'s electronics with [attacking_item]!"),
|
||||
null,
|
||||
COMBAT_MESSAGE_RANGE,
|
||||
)
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/hitby(atom/movable/hit_by, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
QDEL_NULL(foldedbag_instance)
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/body_bag/attackby(obj/item/interact_tool, mob/user, list/modifiers)
|
||||
/obj/structure/closet/body_bag/attackby(obj/item/interact_tool, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if (IS_WRITING_UTENSIL(interact_tool))
|
||||
if(!user.can_write(interact_tool))
|
||||
return
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
. = ..()
|
||||
. += span_notice("<b>Right-click</b> with a Security-level ID to reset [src]'s registered ID.")
|
||||
|
||||
/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, list/modifiers)
|
||||
/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!secure || !istype(user_id))
|
||||
return ..()
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
name = initial(name)
|
||||
update_appearance()
|
||||
|
||||
/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, list/modifiers)
|
||||
/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!secure || !istype(used_id))
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
return
|
||||
. += base_icon_state + "_some"
|
||||
|
||||
/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(W, /obj/item/storage/bag/trash) && !opened)
|
||||
var/obj/item/storage/bag/trash/T = W
|
||||
to_chat(user, span_notice("You fill the bag."))
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
else
|
||||
to_chat(user, span_warning("You need a crowbar to pry this open!"))
|
||||
|
||||
/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, list/modifiers)
|
||||
/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(W.tool_behaviour == TOOL_CROWBAR)
|
||||
if(manifest)
|
||||
tear_manifest(user)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
qdel(src)
|
||||
|
||||
///ensures that the syndicrate can only be unlocked by opening it with a syndicrate_key
|
||||
/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!istype(item, /obj/item/syndicrate_key) || created_items)
|
||||
return ..()
|
||||
created_items = TRUE
|
||||
@@ -67,7 +67,7 @@
|
||||
)
|
||||
update_appearance()
|
||||
|
||||
/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, list/modifiers)
|
||||
/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/item/syndicrate_key
|
||||
|
||||
@@ -249,14 +249,14 @@
|
||||
/obj/item/gun_control/CanItemAutoclick()
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun_control/attack_atom(obj/O, mob/living/user, list/modifiers)
|
||||
/obj/item/gun_control/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
O.attacked_by(src, user)
|
||||
O.attacked_by(src, user, modifiers)
|
||||
|
||||
/obj/item/gun_control/attack(mob/living/M, mob/living/user)
|
||||
/obj/item/gun_control/attack(mob/living/M, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
M.lastattacker = user.real_name
|
||||
M.lastattackerckey = user.ckey
|
||||
M.attacked_by(src, user)
|
||||
M.attacked_by(src, user, modifiers)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/gun_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
||||
|
||||
@@ -40,7 +40,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/detectiveboard, 32)
|
||||
|
||||
/// Attaching evidences: photo and papers
|
||||
|
||||
/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(item, /obj/item/paper) || istype(item, /obj/item/photo))
|
||||
if(!cases.len)
|
||||
to_chat(user, "There are no cases!")
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
. += "[initial(icon_state)]_closed"
|
||||
return
|
||||
|
||||
/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(attacking_item.GetID() && !broken)
|
||||
if(allowed(user))
|
||||
to_chat(user, span_notice("You [open ? "close":"open"] [src]."))
|
||||
@@ -272,7 +272,7 @@
|
||||
qdel(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(attacking_item, /obj/item/electronics/airlock))
|
||||
balloon_alert(user, "installing electronics...")
|
||||
if(do_after(user, 3 SECONDS, target = src) && user.transferItemToLoc(attacking_item, src))
|
||||
@@ -359,7 +359,7 @@
|
||||
holographic_showpiece = TRUE
|
||||
update_appearance()
|
||||
|
||||
/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(attacking_item, /obj/item/key/displaycase))
|
||||
toggle_historian_mode(user)
|
||||
return
|
||||
@@ -609,7 +609,7 @@
|
||||
return TRUE
|
||||
. = TRUE
|
||||
|
||||
/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(isidcard(attacking_item))
|
||||
//Card Registration
|
||||
var/obj/item/card/id/potential_acc = attacking_item
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
if(created_name)
|
||||
. += span_notice("There is a small <i>paper</i> placard on the assembly, written on it is '[created_name]'.")
|
||||
|
||||
/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, list/modifiers)
|
||||
/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(IS_WRITING_UTENSIL(W) && !user.combat_mode)
|
||||
var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, max_length = MAX_NAME_LEN)
|
||||
if(!t)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/dresser/attackby(obj/item/I, mob/user, list/modifiers)
|
||||
/obj/structure/dresser/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(I.tool_behaviour == TOOL_WRENCH)
|
||||
to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src]."))
|
||||
if(I.use_tool(src, user, 20, volume=50))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
export_to_component = color_atom_overlay(export_to_component)
|
||||
AddComponent(/datum/component/electrified_buckle, (SHOCK_REQUIREMENT_ITEM | SHOCK_REQUIREMENT_LIVE_CABLE | SHOCK_REQUIREMENT_SIGNAL_RECEIVED_TOGGLE), stored_kit, list(export_to_component))
|
||||
|
||||
/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(W.tool_behaviour == TOOL_WRENCH)
|
||||
var/obj/structure/chair/C = new /obj/structure/chair(loc)
|
||||
W.play_tool_sound(src)
|
||||
|
||||
@@ -65,7 +65,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29)
|
||||
stored_extinguisher = null
|
||||
update_appearance(UPDATE_ICON)
|
||||
|
||||
/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(used_item.tool_behaviour == TOOL_WRENCH && !stored_extinguisher)
|
||||
user.balloon_alert(user, "deconstructing cabinet...")
|
||||
used_item.play_tool_sound(src)
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
return
|
||||
|
||||
/obj/structure/falsewall/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/falsewall/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!opening)
|
||||
return ..()
|
||||
to_chat(user, span_warning("You must wait until the door has stopped moving!"))
|
||||
@@ -202,7 +202,7 @@
|
||||
. = ..()
|
||||
RegisterSignal(src, COMSIG_ATOM_PROPAGATE_RAD_PULSE, PROC_REF(radiate))
|
||||
|
||||
/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
radiate()
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
|
||||
QDEL_NULL(held_item)
|
||||
return ..()
|
||||
|
||||
/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(iscyborg(user) || attacking_item.tool_behaviour == TOOL_MULTITOOL)
|
||||
toggle_lock(user)
|
||||
else if(attacking_item.tool_behaviour == TOOL_WELDER && !user.combat_mode && !broken)
|
||||
|
||||
@@ -52,9 +52,7 @@
|
||||
/// Flags for the flora to determine what kind of sound to play when it gets hit
|
||||
var/flora_flags = NONE
|
||||
|
||||
//BUBBER EDIT START - MOVED TO MODULAR
|
||||
/*
|
||||
/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(user.combat_mode)
|
||||
return ..()
|
||||
if(flags_1 & HOLOGRAM_1)
|
||||
@@ -95,8 +93,6 @@
|
||||
|
||||
if(harvest(user))
|
||||
after_harvest(user)
|
||||
*/
|
||||
//BUBBER EDIT END
|
||||
|
||||
/obj/structure/flora/attack_hand(mob/user, list/modifiers)
|
||||
. = ..()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
///If true, the structure can be deconstructed into a metal sheet with a wrench.
|
||||
var/deconstructible = TRUE
|
||||
|
||||
/obj/structure/fluff/attackby(obj/item/I, mob/living/user, list/modifiers)
|
||||
/obj/structure/fluff/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(I.tool_behaviour == TOOL_WRENCH && deconstructible)
|
||||
user.visible_message(span_notice("[user] starts disassembling [src]..."), span_notice("You start disassembling [src]..."))
|
||||
I.play_tool_sound(src)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
if(GIRDER_TRAM)
|
||||
. += span_notice("[src] is designed for tram usage. Deconstructed with a screwdriver!")
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/construction, SKILL_SPEED_MODIFIER) //SKYRAT EDIT
|
||||
var/platingmodifier = 1
|
||||
if(HAS_TRAIT(user, TRAIT_QUICK_BUILD))
|
||||
@@ -456,7 +456,7 @@
|
||||
smoothing_groups = null
|
||||
canSmoothWith = null
|
||||
|
||||
/obj/structure/girder/cult/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/girder/cult/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
add_fingerprint(user)
|
||||
if(W.tool_behaviour == TOOL_WELDER)
|
||||
if(!W.tool_start_check(user, amount=1))
|
||||
@@ -531,7 +531,7 @@
|
||||
smoothing_groups = null
|
||||
canSmoothWith = null
|
||||
|
||||
/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, list/modifiers)
|
||||
/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
add_fingerprint(user)
|
||||
if(W.tool_behaviour == TOOL_WELDER)
|
||||
if(!W.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED))
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
span_notice("You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/grille/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/grille/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(istype(W, /obj/item/stack/rods) && broken && do_after(user, 1 SECONDS, target = src))
|
||||
if(shock(user, 90))
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
blade_status = GUILLOTINE_BLADE_DROPPED
|
||||
icon_state = "guillotine"
|
||||
|
||||
/obj/structure/guillotine/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/guillotine/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if (istype(W, /obj/item/sharpener))
|
||||
add_fingerprint(user)
|
||||
if (blade_status == GUILLOTINE_BLADE_SHARPENING)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
. += new /mutable_appearance(gun_overlay)
|
||||
. += "[icon_state]_[open ? "open" : "door"]"
|
||||
|
||||
/obj/structure/guncase/attackby(obj/item/I, mob/living/user, list/modifiers)
|
||||
/obj/structure/guncase/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(iscyborg(user) || isalien(user))
|
||||
return
|
||||
if(istype(I, gun_category) && open)
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
|
||||
return .
|
||||
|
||||
/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, list/modifiers)
|
||||
/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(weapon, /obj/item/reagent_containers))
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
return FALSE // skip attack animation when refilling cart
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, list/modifiers)
|
||||
/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(weapon, /obj/item/mop))
|
||||
if(weapon.reagents.total_volume >= weapon.reagents.maximum_volume)
|
||||
balloon_alert(user, "already soaked!")
|
||||
@@ -182,7 +182,7 @@
|
||||
|
||||
return . || NONE
|
||||
|
||||
/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(attacking_item, /obj/item/mop))
|
||||
if(mymop)
|
||||
balloon_alert(user, "already has \a [mymop]!")
|
||||
@@ -248,7 +248,7 @@
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, list/modifiers)
|
||||
/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
default_unfasten_wrench(user, tool)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
add_fingerprint(user)
|
||||
if(!istype(attacking_item, /obj/item/stack/rods))
|
||||
return ..()
|
||||
|
||||
@@ -378,11 +378,11 @@
|
||||
use(user, going_up = FALSE)
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/structure/ladder/attackby(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/ladder/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
use(user)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
|
||||
return
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
/obj/structure/lattice/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C, mob/user, list/modifiers)
|
||||
/obj/structure/lattice/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(resistance_flags & INDESTRUCTIBLE)
|
||||
return
|
||||
if(C.tool_behaviour == TOOL_WIRECUTTER)
|
||||
@@ -174,7 +174,7 @@
|
||||
/obj/structure/lattice/lava/deconstruction_hints(mob/user)
|
||||
return span_notice("The rods look like they could be <b>cut</b>, but the <i>heat treatment will shatter off</i>. There's space for a <i>tile</i>.")
|
||||
|
||||
/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(!ismetaltile(attacking_item))
|
||||
return
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
RegisterSignal(reagents, COMSIG_REAGENTS_HOLDER_UPDATED, PROC_REF(start_chemming))
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/structure/geyser/attackby(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/geyser/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!istype(item, /obj/item/mining_scanner) && !istype(item, /obj/item/t_scanner/adv_mining_scanner))
|
||||
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
|
||||
return ..() //this runs the plunger code
|
||||
@@ -143,7 +143,7 @@
|
||||
///What layer we set it to
|
||||
var/target_layer = DUCT_LAYER_DEFAULT
|
||||
|
||||
/obj/item/plunger/attack_atom(obj/O, mob/living/user, list/modifiers)
|
||||
/obj/item/plunger/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(layer_mode)
|
||||
SEND_SIGNAL(O, COMSIG_MOVABLE_CHANGE_DUCT_LAYER, O, target_layer)
|
||||
return ..()
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
SSore_generation.processed_vents -= src
|
||||
return ..()
|
||||
|
||||
/obj/structure/ore_vent/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/ore_vent/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(.)
|
||||
return TRUE
|
||||
|
||||
@@ -87,7 +87,7 @@ at the cost of risking a vicious bite.**/
|
||||
return
|
||||
to_chat(user, span_warning("You find nothing of value..."))
|
||||
|
||||
/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, list/modifiers)
|
||||
/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(iscyborg(user) || isalien(user) || !CanReachInside(user))
|
||||
return ..()
|
||||
add_fingerprint(user)
|
||||
@@ -131,7 +131,7 @@ at the cost of risking a vicious bite.**/
|
||||
/// Stage of the pants making process
|
||||
var/status = ALTAR_INACTIVE
|
||||
|
||||
/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(attacking_item, /obj/item/melee/cultblade/dagger) && IS_CULTIST(user) && status)
|
||||
to_chat(user, span_notice("[src] is creating something, you can't move it!"))
|
||||
return
|
||||
|
||||
@@ -276,14 +276,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28)
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
return .
|
||||
|
||||
/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user)
|
||||
if(broken || !istype(user) || !I.force)
|
||||
return ..()
|
||||
|
||||
/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(broken) // breaking a mirror truly gets you bad luck!
|
||||
to_chat(user, span_warning("A chill runs down your spine as [src] shatters..."))
|
||||
user.AddComponent(/datum/component/omen, incidents_left = 7)
|
||||
if(broken || !.) // breaking a mirror truly gets you bad luck!
|
||||
return
|
||||
to_chat(user, span_warning("A chill runs down your spine as [src] shatters..."))
|
||||
user.AddComponent(/datum/component/omen, incidents_left = 7)
|
||||
|
||||
/obj/structure/mirror/bullet_act(obj/projectile/proj)
|
||||
if(broken || !isliving(proj.firer) || !proj.damage)
|
||||
|
||||
@@ -559,7 +559,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
|
||||
to_chat(user, span_warning("That's not connected to anything!"))
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/tray/attackby(obj/P, mob/user, list/modifiers)
|
||||
/obj/structure/tray/attackby(obj/P, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!istype(P, /obj/item/riding_offhand))
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/noticeboard, 32)
|
||||
find_and_hang_on_wall()
|
||||
|
||||
//attaching papers!!
|
||||
/obj/structure/noticeboard/attackby(obj/item/O, mob/user, list/modifiers)
|
||||
/obj/structure/noticeboard/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo))
|
||||
if(!allowed(user))
|
||||
to_chat(user, span_warning("You are not authorized to add notices!"))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
///structure to contain ores
|
||||
/obj/structure/ore_container
|
||||
|
||||
/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers)
|
||||
/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(ore, /obj/item/stack/ore) && !user.combat_mode)
|
||||
ore.forceMove(src)
|
||||
return
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
atom_integrity = max_integrity
|
||||
return TRUE
|
||||
|
||||
/obj/structure/plaque/attackby(obj/item/I, mob/user, list/modifiers)
|
||||
/obj/structure/plaque/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(I, /obj/item/pen/fountain))
|
||||
if(engraved)
|
||||
to_chat(user, span_warning("This plaque has already been engraved."))
|
||||
@@ -153,7 +153,7 @@
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/plaque/attackby(obj/item/I, mob/user, list/modifiers) //Same as part of the above, except for the item in hand instead of the structure.
|
||||
/obj/item/plaque/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) //Same as part of the above, except for the item in hand instead of the structure.
|
||||
if(istype(I, /obj/item/pen/fountain))
|
||||
if(engraved)
|
||||
to_chat(user, span_warning("This plaque has already been engraved."))
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
else
|
||||
. += span_notice("The railing is <i>unbolted</i> from the floor and can be deconstructed with <b>wirecutters</b>.")
|
||||
|
||||
/obj/structure/railing/attackby(obj/item/I, mob/living/user, list/modifiers)
|
||||
/obj/structure/railing/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
..()
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/reflector/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/reflector/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(admin)
|
||||
return
|
||||
//Finishing the frame
|
||||
|
||||
@@ -62,7 +62,7 @@ FLOOR SAFES
|
||||
icon_state = "[initial(icon_state)][open ? null : "_locked"]"
|
||||
return ..()
|
||||
|
||||
/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(open)
|
||||
. = TRUE //no afterattack
|
||||
if(attacking_item.w_class + space <= maxspace)
|
||||
|
||||
@@ -136,7 +136,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
|
||||
to_chat(user, span_notice("The water temperature seems to be [current_temperature]."))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers)
|
||||
/obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(tool, /obj/item/stock_parts/water_recycler))
|
||||
if(has_water_reclaimer)
|
||||
to_chat(user, span_warning("There is already has a water recycler installed."))
|
||||
@@ -386,7 +386,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
|
||||
. = ..()
|
||||
AddComponent(/datum/component/simple_rotation)
|
||||
|
||||
/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, list/modifiers)
|
||||
/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(tool, /obj/item/stock_parts/water_recycler))
|
||||
qdel(tool)
|
||||
var/obj/machinery/shower/shower = new(loc, REVERSE_DIR(dir), TRUE)
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
atom_integrity = max_integrity
|
||||
return TRUE
|
||||
|
||||
/obj/structure/sign/attackby(obj/item/I, mob/user, list/modifiers)
|
||||
/obj/structure/sign/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(is_editable && IS_WRITING_UTENSIL(I))
|
||||
if(!length(GLOB.editable_sign_types))
|
||||
CRASH("GLOB.editable_sign_types failed to populate")
|
||||
@@ -191,7 +191,7 @@
|
||||
context[SCREENTIP_CONTEXT_LMB] = "Change design"
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
|
||||
/obj/item/sign/attackby(obj/item/I, mob/user, list/modifiers)
|
||||
/obj/item/sign/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(is_editable && IS_WRITING_UTENSIL(I))
|
||||
if(!length(GLOB.editable_sign_types))
|
||||
CRASH("GLOB.editable_sign_types failed to populate")
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
else
|
||||
. += span_notice("It looks like you could probably scan and tag it with a <b>[scanner_descriptor]</b>.")
|
||||
|
||||
/obj/structure/spawner/attackby(obj/item/item, mob/user, list/modifiers)
|
||||
/obj/structure/spawner/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(.)
|
||||
return TRUE
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
/obj/structure/stairs_frame/atom_deconstruct(disassembled = TRUE)
|
||||
new frame_stack(get_turf(src), frame_stack_amount)
|
||||
|
||||
/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, list/modifiers)
|
||||
/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!isstack(attacked_by))
|
||||
return ..()
|
||||
if(!anchored)
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
default_unfasten_wrench(user, tool)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, list/modifiers)
|
||||
/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
var/full
|
||||
if(istype(I, /obj/item/tank/internals/plasma))
|
||||
if(plasmatanks < TANK_DISPENSER_CAPACITY)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
. += "It is empty."
|
||||
. += span_notice("It is held together by some <b>screws</b>.")
|
||||
|
||||
/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, list/modifiers)
|
||||
/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(user.combat_mode)
|
||||
return ..()
|
||||
if(W.tool_behaviour == TOOL_WRENCH)
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
to_chat(user, span_boldwarning("The [emag_card] falls into the toilet. You fish it back out. Looks like you broke the toilet."))
|
||||
return TRUE
|
||||
|
||||
/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(attacking_item, /obj/item/card/emag))
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -360,7 +360,7 @@
|
||||
///Number of hits made since the Lap button (alt-click) was last pushed
|
||||
var/lap_hits = 0
|
||||
|
||||
/obj/item/training_toolbox/pre_attack(atom/target, mob/living/user, list/modifiers)
|
||||
/obj/item/training_toolbox/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(.)
|
||||
return .
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
break
|
||||
|
||||
|
||||
/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(W.tool_behaviour == TOOL_CROWBAR)
|
||||
for(var/obj/structure/transit_tube_pod/P in loc)
|
||||
P.deconstruct(FALSE, user)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(current_size >= STAGE_FIVE)
|
||||
deconstruct(FALSE)
|
||||
|
||||
/obj/structure/transit_tube/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/transit_tube/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(W.tool_behaviour == TOOL_WRENCH)
|
||||
if(tube_construction)
|
||||
for(var/obj/structure/transit_tube_pod/pod in src.loc)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
icon_state = contents.len ? occupied_icon_state : initial(icon_state)
|
||||
return ..()
|
||||
|
||||
/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, list/modifiers)
|
||||
/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
if(!moving)
|
||||
I.play_tool_sound(src)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/list/voted //List of ID's that already voted.
|
||||
COOLDOWN_DECLARE(vote_print_cooldown)
|
||||
|
||||
/obj/structure/votebox/attackby(obj/item/I, mob/living/user, list/modifiers)
|
||||
/obj/structure/votebox/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(I,/obj/item/card/id))
|
||||
if(!owner)
|
||||
register_owner(I,user)
|
||||
|
||||
@@ -105,7 +105,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14))
|
||||
user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \
|
||||
span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."))
|
||||
|
||||
/obj/structure/sink/attackby(obj/item/O, mob/living/user, list/modifiers)
|
||||
/obj/structure/sink/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(busy)
|
||||
to_chat(user, span_warning("Someone's already washing here!"))
|
||||
return
|
||||
@@ -278,7 +278,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16))
|
||||
. = ..()
|
||||
AddComponent(/datum/component/simple_rotation)
|
||||
|
||||
/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, list/modifiers)
|
||||
/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(tool, /obj/item/stock_parts/water_recycler))
|
||||
qdel(tool)
|
||||
var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), TRUE)
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
for(var/datum/material/M as anything in custom_materials)
|
||||
new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1))
|
||||
|
||||
/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
add_fingerprint(user)
|
||||
if(cover_open && istype(attacking_item, /obj/item/fish))
|
||||
if(fishes >= 3)
|
||||
|
||||
@@ -51,7 +51,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(exposed)
|
||||
if(hidden_item)
|
||||
to_chat(user, span_warning("There is already something in the drain enclosure!"))
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."),
|
||||
)
|
||||
|
||||
/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, list/modifiers)
|
||||
/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(busy)
|
||||
to_chat(user, span_warning("Someone's already washing here!"))
|
||||
return
|
||||
@@ -138,7 +138,7 @@
|
||||
. = ..()
|
||||
icon_state = base_icon_state
|
||||
|
||||
/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, list/modifiers)
|
||||
/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
icon_state = "[base_icon_state]-splash"
|
||||
. = ..()
|
||||
icon_state = base_icon_state
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
leaving.Bump(src)
|
||||
return COMPONENT_ATOM_BLOCK_EXIT
|
||||
|
||||
/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
//I really should have spread this out across more states but thin little windoors are hard to sprite.
|
||||
add_fingerprint(user)
|
||||
switch(state)
|
||||
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/window/attackby(obj/item/I, mob/living/user, list/modifiers)
|
||||
/obj/structure/window/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(!can_be_reached(user))
|
||||
return TRUE //skip the afterattack
|
||||
|
||||
@@ -513,7 +513,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0)
|
||||
return list("delay" = 3 SECONDS, "cost" = 15)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, list/modifiers)
|
||||
/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(resistance_flags & INDESTRUCTIBLE)
|
||||
balloon_alert(user, "too resilient!")
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
Reference in New Issue
Block a user