Afterattack() Signal (#38606)

* adds signal and modifies each call of afterattack to call it's inherited proc

* uses new macro for sendsignal()

* map fuck

* skip precommithooks

* combine and negate 2 ifs
This commit is contained in:
Trevor Serpas
2018-07-07 01:00:25 -05:00
committed by Emmett Gaines
parent e2093f11f5
commit bee0b5b2c3
113 changed files with 167 additions and 129 deletions

View File

@@ -127,6 +127,7 @@
#define COMPONENT_NO_ATTACK_OBJ 1
#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params)
#define COMPONENT_NO_ATTACK 1
#define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params)
#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot)
#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user)
#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker)

View File

@@ -117,7 +117,7 @@
// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person.
// Click parameters is the params string from byond Click() code, see that documentation.
/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
return
SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters)
/obj/item/proc/get_clamped_volume()

View File

@@ -120,6 +120,7 @@
update_icon()
/obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this
. = ..()
if(!target || !user)
return

View File

@@ -23,7 +23,7 @@
/datum/wires/explosive/c4/explode()
var/obj/item/grenade/plastic/c4/P = holder
P.explode()
P.prime()
/datum/wires/explosive/pizza

View File

@@ -373,6 +373,7 @@ RLD
return FALSE
/obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!prox_check(proximity))
return
rcd_create(A, user)
@@ -479,6 +480,7 @@ RLD
has_ammobar = FALSE
/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user)
. = ..()
if(!range_check(A,user))
return
if(target_check(A,user))
@@ -549,6 +551,7 @@ RLD
/obj/item/construction/rld/afterattack(atom/A, mob/user)
. = ..()
if(!range_check(A,user))
return
var/turf/start = get_turf(src)

View File

@@ -62,6 +62,7 @@ RSF
// Change mode
/obj/item/rsf/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity)
return
if (!(istype(A, /obj/structure/table) || isfloorturf(A)))
@@ -159,6 +160,7 @@ RSF
matter++
/obj/item/cookiesynth/afterattack(atom/A, mob/user, proximity)
. = ..()
if(cooldown > world.time)
return
if(!proximity)

View File

@@ -11,6 +11,7 @@
deploy_bodybag(user, user.loc)
/obj/item/bodybag/afterattack(atom/target, mob/user, proximity)
. = ..()
if(proximity)
if(isopenturf(target))
deploy_bodybag(user, target)

View File

@@ -91,6 +91,7 @@
return
/obj/item/card/emag/afterattack(atom/target, mob/user, proximity)
. = ..()
var/atom/A = target
if(!proximity && prox_check)
return

View File

@@ -144,6 +144,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return ..()
/obj/item/clothing/mask/cigarette/afterattack(obj/item/reagent_containers/glass/glass, mob/user, proximity)
. = ..()
if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead)
return
if(istype(glass)) //you can dip cigarettes into beakers
@@ -681,6 +682,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
w_class = WEIGHT_CLASS_TINY
/obj/item/rollingpaper/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(istype(target, /obj/item/reagent_containers/food/snacks/grown))
@@ -696,8 +698,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
R.desc = "Dried [target.name] rolled up in a thin piece of paper."
else
to_chat(user, "<span class='warning'>You need to dry this first!</span>")
else
..()
///////////////
//VAPE NATION//

View File

@@ -57,6 +57,7 @@
return (TOXLOSS)
/obj/item/soap/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity || !check_allowed_items(target))
return
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.

View File

@@ -32,6 +32,7 @@
// Airlock remote works by sending NTNet packets to whatever it's pointed at.
/obj/item/door_remote/afterattack(atom/A, mob/user)
. = ..()
GET_COMPONENT_FROM(target_interface, /datum/component/ntnet_interface, A)
if(!target_interface)

View File

@@ -241,6 +241,7 @@
return jointext(out,"")
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params)
. = ..()
if(!proximity || !check_allowed_items(target))
return

View File

@@ -835,6 +835,7 @@ GLOBAL_LIST_EMPTY(PDAs)
user.show_message("<span class='notice'>No radiation detected.</span>")
/obj/item/pda/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
. = ..()
if(!proximity)
return
switch(scanmode)

View File

@@ -17,7 +17,7 @@
return BRUTELOSS
/obj/item/aicard/afterattack(atom/target, mob/user, proximity)
..()
. = ..()
if(!proximity || !target)
return
if(AI) //AI is on the card, implies user wants to upload it.

View File

@@ -36,6 +36,7 @@
to_chat(user, "<span class='warning'>You can't use [src] while inside something!</span>")
/obj/item/chameleon/afterattack(atom/target, mob/user , proximity)
. = ..()
if(!proximity)
return
if(!check_sprite(target))

View File

@@ -47,6 +47,7 @@
return TRUE //The actual circuit magic itself is done on a per-object basis
/obj/item/electroadaptive_pseudocircuit/afterattack(atom/target, mob/living/user, proximity)
. = ..()
if(!proximity)
return
if(!is_type_in_typecache(target, recycleable_circuits))

View File

@@ -168,6 +168,7 @@
var/holo_cooldown = 0
/obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(!proximity_flag)
if(holo_cooldown > world.time)
to_chat(user, "<span class='warning'>[src] is not ready yet!</span>")
@@ -177,7 +178,6 @@
new /obj/effect/temp_visual/medical_holosign(T,user) //produce a holographic glow
holo_cooldown = world.time + 100
return
..()
/obj/effect/temp_visual/medical_holosign
name = "medical holosign"
@@ -380,6 +380,7 @@
return
/obj/item/flashlight/emp/afterattack(atom/movable/A, mob/user, proximity)
. = ..()
if(!proximity)
return

View File

@@ -17,6 +17,7 @@
var/field_distance_limit = 7
/obj/item/forcefield/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(!check_allowed_items(target, 1))
return
if(istype(target, /obj/structure/projected_forcefield))

View File

@@ -132,6 +132,7 @@
to_chat(user, "<span class='notice'>[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].</span>")
/obj/item/geiger_counter/afterattack(atom/target, mob/user)
. = ..()
if(user.a_intent == INTENT_HELP)
if(!(obj_flags & EMAGGED))
user.visible_message("<span class='notice'>[user] scans [target] with [src].</span>", "<span class='notice'>You scan [target]'s radiation levels with [src]...</span>")
@@ -141,7 +142,6 @@
target.rad_act(radiation_count)
radiation_count = 0
return TRUE
return ..()
/obj/item/geiger_counter/proc/scan(atom/A, mob/user)
var/rad_strength = 0

View File

@@ -57,6 +57,7 @@
return ..()
/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
laser_act(target, user, params)
/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params)

View File

@@ -239,6 +239,7 @@
return 0
/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity)
. = ..()
if(!proximity)
return
if(!isturf(T))

View File

@@ -9,6 +9,7 @@
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
/obj/item/pipe_painter/afterattack(atom/A, mob/user, proximity_flag)
. = ..()
//Make sure we only paint adjacent items
if(!proximity_flag)
return

View File

@@ -120,6 +120,7 @@
return 0
/obj/item/extinguisher/afterattack(atom/target, mob/user , flag)
. = ..()
// Make it so the extinguisher doesn't spray yourself when you click your inventory items
if (target.loc == user)
return
@@ -201,9 +202,6 @@
break
sleep(2)
else
return ..()
/obj/item/extinguisher/AltClick(mob/user)
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return

View File

@@ -66,6 +66,7 @@
return
/obj/item/flamethrower/afterattack(atom/target, mob/user, flag)
. = ..()
if(flag)
return // too close
if(ishuman(user))

View File

@@ -99,6 +99,7 @@
to_chat(user, "Timer set for [det_time] seconds.")
/obj/item/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
. = ..()
aim_dir = get_dir(user,AM)
if(!flag)
return
@@ -171,7 +172,6 @@
name = "C4"
desc = "Used to put holes in specific areas without too much extra hole. A saboteur's favorite."
gender = PLURAL
var/timer = 10
var/open_panel = 0
can_attach_mob = TRUE
@@ -192,7 +192,7 @@
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_VERBOSEJMP(src)]")
log_game("[key_name(user)] suicided with [name] at [AREACOORD(user)]")
sleep(10)
explode(get_turf(user))
prime()
user.gib(1, 1)
/obj/item/grenade/plastic/c4/attackby(obj/item/I, mob/user, params)
@@ -204,41 +204,7 @@
else
return ..()
/obj/item/grenade/plastic/c4/attack_self(mob/user)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
if(user.get_active_held_item() == src)
newtime = CLAMP(newtime, 10, 60000)
timer = newtime
to_chat(user, "Timer set for [timer] seconds.")
/obj/item/grenade/plastic/c4/afterattack(atom/movable/AM, mob/user, flag)
if (!flag)
return
if(ismob(AM) && !can_attach_mob)
return
if(loc == AM)
return
if(SEND_SIGNAL(AM, COMSIG_CONTAINS_STORAGE) && !SEND_SIGNAL(AM, COMSIG_IS_STORAGE_LOCKED))
return
to_chat(user, "<span class='notice'>You start planting the bomb...</span>")
if(do_after(user, 30, target = AM))
if(!user.temporarilyRemoveItemFromInventory(src))
return
src.target = AM
moveToNullspace()
var/message = "[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [timer] second fuse"
GLOB.bombers += message
message_admins(message,0,1)
log_game("[key_name(user)] planted [name] on [target.name] at [AREACOORD(target)] with [timer] second fuse")
target.add_overlay(plastic_overlay, TRUE)
to_chat(user, "<span class='notice'>You plant the bomb. Timer counting down from [timer].</span>")
addtimer(CALLBACK(src, .proc/explode), timer * 10)
/obj/item/grenade/plastic/c4/proc/explode()
/obj/item/grenade/plastic/c4/prime()
if(QDELETED(src))
return
var/turf/location

View File

@@ -19,6 +19,7 @@
var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once
/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag)
. = ..()
if(flag)
if(!check_allowed_items(target, 1))
return

View File

@@ -503,6 +503,7 @@
hitsound = 'sound/weapons/blade1.ogg'
/obj/item/nullrod/pride_hammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
. = ..()
if(!proximity)
return
if(prob(30) && ishuman(A))

View File

@@ -91,8 +91,9 @@
to_chat(user, "<span class='userdanger'>You have a really bad feeling about [src]!</span>")
/obj/item/hot_potato/afterattack(atom/target, mob/user, adjacent, params)
. = ..()
if(!adjacent || !ismob(target))
return ..()
return
force_onto(target, user)
/obj/item/hot_potato/proc/force_onto(mob/living/victim, mob/user)

View File

@@ -281,11 +281,11 @@
consume_turf(T)
/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
. = ..()
if(user && target == user)
user.dropItemToGround(src)
if(proximity_flag)
consume_everything(target)
..()
/obj/item/melee/supermatter_sword/throw_impact(target)
..()
@@ -355,11 +355,11 @@
hitsound = 'sound/weapons/chainhit.ogg'
/obj/item/melee/curator_whip/afterattack(target, mob/user, proximity_flag)
. = ..()
if(ishuman(target) && proximity_flag)
var/mob/living/carbon/human/H = target
H.drop_all_held_items()
H.visible_message("<span class='danger'>[user] disarms [H]!</span>", "<span class='userdanger'>[user] disarmed you!</span>")
..()
/obj/item/melee/roastingstick
name = "advanced roasting stick"
@@ -441,6 +441,7 @@
update_icon()
/obj/item/melee/roastingstick/afterattack(atom/target, mob/user, proximity)
. = ..()
if (!on)
return
if (is_type_in_typecache(target, ovens))

View File

@@ -35,6 +35,7 @@
/obj/item/mop/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity)
return

View File

@@ -79,6 +79,7 @@
/obj/item/paint/afterattack(turf/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(paintleft <= 0)
@@ -96,6 +97,7 @@
icon_state = "paint_neutral"
/obj/item/paint/paint_remover/afterattack(turf/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(istype(target) && target.color != initial(target.color))

View File

@@ -126,6 +126,7 @@
return TRUE
/obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
if(flag && user.a_intent == INTENT_HARM) //melee attack
return
if(!istype(user))

View File

@@ -288,6 +288,7 @@
/obj/item/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(staffcooldown + staffwait > world.time)
return
user.visible_message("[user] chants deeply and waves [user.p_their()] staff!")

View File

@@ -10,6 +10,7 @@
/obj/item/malf_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user)
. = ..()
if(!istype(AI))
return
if(AI.malf_picker)
@@ -30,6 +31,7 @@
icon_state = "datadisk3"
/obj/item/surveillance_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user)
. = ..()
if(!istype(AI))
return
if(AI.eyeobj)

View File

@@ -172,6 +172,7 @@
update_icon()
/obj/item/borg/charger/afterattack(obj/item/target, mob/living/silicon/robot/user, proximity_flag)
. = ..()
if(!proximity_flag || !iscyborg(user))
return
if(mode == "draw")
@@ -448,6 +449,7 @@
check_amount()
/obj/item/borg/lollipop/afterattack(atom/target, mob/living/user, proximity, click_params)
. = ..()
check_amount()
if(iscyborg(user))
var/mob/living/silicon/robot/R = user

View File

@@ -57,6 +57,7 @@
return
/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
. = ..()
if(!proximity)
return
if(wielded)

View File

@@ -268,6 +268,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
pixel_y = rand(-5, 5)
/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
. = ..()
if(!proximity || !(src in user))
return
if(isturf(A))

View File

@@ -21,6 +21,7 @@
return ..()
/obj/item/stack/telecrystal/afterattack(obj/item/I, mob/user, proximity)
. = ..()
if(istype(I, /obj/item/cartridge/virus/frame))
var/obj/item/cartridge/virus/frame/cart = I
if(!cart.charges)
@@ -29,8 +30,6 @@
cart.telecrystals += amount
use(amount)
to_chat(user, "<span class='notice'>You slot [src] into [cart]. The next time it's used, it will also give telecrystals.</span>")
else
return ..()
/obj/item/stack/telecrystal/five
amount = 5

View File

@@ -61,6 +61,7 @@
return 0
/obj/item/stack/packageWrap/afterattack(obj/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(!istype(target))

View File

@@ -153,6 +153,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
playsound(src.loc, "punch", 25, 1, -1)
/obj/item/storage/book/bible/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity)
return
if(isfloorturf(A))

View File

@@ -12,6 +12,7 @@
return list()
/obj/item/taster/afterattack(atom/O, mob/user, proximity)
. = ..()
if(!proximity)
return

View File

@@ -229,6 +229,7 @@
icon_state = "supermatter_tongs"
/obj/item/hemostat/supermatter/afterattack(atom/O, mob/user, proximity)
. = ..()
if(!sliver)
return
if(ismovableatom(O) && O != sliver)

View File

@@ -120,6 +120,7 @@
/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity)
. = ..()
if(!proximity)
return
if(!status && O.is_refillable())

View File

@@ -51,6 +51,7 @@
return
/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user, proximity)
. = ..()
if(!proximity)
return
if (istype(A, /obj/structure/reagent_dispensers))
@@ -176,6 +177,7 @@
return ..()
/obj/item/toy/gun/afterattack(atom/target as mob|obj|turf|area, mob/user, flag)
. = ..()
if (flag)
return
if (!user.IsAdvancedToolUser())
@@ -1033,6 +1035,7 @@
throwforce = 12 //pelt your enemies to death with lumps of snow
/obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user)
. = ..()
if(user.dropItemToGround(src))
throw_at(target, throw_range, throw_speed)
@@ -1052,6 +1055,7 @@
w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets
/obj/item/toy/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user)
. = ..()
if(user.dropItemToGround(src))
throw_at(target, throw_range, throw_speed)

View File

@@ -247,6 +247,7 @@
return (BRUTELOSS)
/obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity)
return
if(wielded) //destroys windows and grilles in one hit
@@ -505,6 +506,7 @@
icon_state = "spearglass[wielded]"
/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
. = ..()
if(!proximity)
return
if(isopenturf(AM)) //So you can actually melee with it
@@ -635,7 +637,7 @@
attack_verb = list("gored")
/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
..()
. = ..()
if(!proximity)
return
user.faction |= "greytide([REF(user)])"
@@ -716,6 +718,7 @@
..()
/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity || !wielded)
return
if(iswallturf(target))
@@ -725,7 +728,6 @@
W.break_wall()
W.ScrapeAway()
return
..()
//HF blade

View File

@@ -579,6 +579,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag)
if(is_type_in_typecache(target, strong_against))
new /obj/effect/decal/cleanable/insectguts(target.drop_location())

View File

@@ -127,6 +127,7 @@
deploy_roller(user, user.loc)
/obj/item/roller/afterattack(obj/target, mob/user , proximity)
. = ..()
if(!proximity)
return
if(isopenturf(target))

View File

@@ -307,7 +307,7 @@
return 0
/obj/item/chair/afterattack(atom/target, mob/living/carbon/user, proximity)
..()
. = ..()
if(!proximity)
return
if(prob(break_chance))

View File

@@ -208,7 +208,7 @@
add_fingerprint(user)
/obj/item/gun_control/afterattack(atom/targeted_atom, mob/user, flag, params)
..()
. = ..()
var/obj/machinery/manned_turret/E = user.buckled
E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, params)
E.direction_track(user, targeted_atom)

View File

@@ -103,6 +103,7 @@
var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf
/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity)
. = ..()
if(isturf(target) && proximity)
var/turf/T = target
user.visible_message("<span class='notice'>[user] fastens [src] to [T].</span>", \
@@ -111,8 +112,6 @@
var/obj/structure/sign/S = new sign_path(T)
S.setDir(dir)
qdel(src)
else
return ..()
/obj/item/sign_backing/Move(atom/new_loc, direct = 0)
// pulling, throwing, or conveying a sign backing does not rotate it

View File

@@ -190,6 +190,7 @@
/obj/item/abductor/gizmo/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
if(flag)
return
if(!ScientistCheck(user))
@@ -251,6 +252,7 @@
radio_off(M, user)
/obj/item/abductor/silencer/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
if(flag)
return
if(!AbductorCheck(user))
@@ -303,6 +305,7 @@
to_chat(user, "<span class='notice'>You switch the device to [mode==MIND_DEVICE_MESSAGE? "TRANSMISSION": "COMMAND"] MODE</span>")
/obj/item/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
if(!ScientistCheck(user))
return

View File

@@ -159,6 +159,7 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharpness = IS_SHARP
var/can_drop = FALSE
var/fake = FALSE
/obj/item/melee/arm_blade/Initialize(mapload,silent,synthetic)
. = ..()
@@ -169,6 +170,7 @@
AddComponent(/datum/component/butchering, 60, 80)
/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(istype(target, /obj/structure/table))

View File

@@ -119,9 +119,7 @@
/obj/item/melee/arm_blade/false
desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless."
force = 5 //Basically as strong as a punch
/obj/item/melee/arm_blade/false/afterattack(atom/target, mob/user, proximity)
return
fake = TRUE
/obj/effect/proc_holder/changeling/sting/false_armblade/can_sting(mob/user, mob/target)
if(!..())

View File

@@ -383,6 +383,7 @@
M.lastattackerckey = user.ckey
/obj/item/melee/blood_magic/afterattack(atom/target, mob/living/carbon/user, proximity)
. = ..()
if(invocation)
user.whisper(invocation, language = /datum/language/common)
if(health_cost)

View File

@@ -804,6 +804,7 @@
/obj/item/blood_beam/afterattack(atom/A, mob/living/user, flag, params)
. = ..()
if(firing || charging)
return
var/C = user.client

View File

@@ -17,6 +17,7 @@
to_chat(user, "<span class='notice'>[src] is not currently linked to a cargo console.</span>")
/obj/item/export_scanner/afterattack(obj/O, mob/user, proximity)
. = ..()
if(!istype(O) || !proximity)
return

View File

@@ -219,7 +219,7 @@
icon_state = "electricity2"
/obj/item/wizard_armour_charge/afterattack(obj/item/clothing/suit/space/hardsuit/shielded/wizard/W, mob/user)
..()
. = ..()
if(!istype(W))
to_chat(user, "<span class='warning'>The rune can only be used on battlemage armour!</span>")
return

View File

@@ -9,6 +9,7 @@
w_class = WEIGHT_CLASS_TINY
/obj/item/evidencebag/afterattack(obj/item/I, mob/user,proximity)
. = ..()
if(!proximity || loc == I)
return
evidencebagEquip(I, user)

View File

@@ -24,6 +24,7 @@
return (OXYLOSS)
/obj/item/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity)
. = ..()
if(!proximity)
return
if(iscarbon(A) && A.reagents && reagents.total_volume)

View File

@@ -59,6 +59,7 @@
scanning = 0
/obj/item/detective_scanner/afterattack(atom/A, mob/user, params)
. = ..()
scan(A, user)
return FALSE

View File

@@ -34,6 +34,7 @@
var/one_use = TRUE
/obj/item/upgradescroll/afterattack(obj/item/target, mob/user , proximity)
. = ..()
if(!proximity || !istype(target))
return

View File

@@ -56,6 +56,7 @@
return 1
/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity)
. = ..()
if(!proximity)
return
@@ -93,8 +94,6 @@
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'>You fill [src] with [trans] units of the contents of [target].</span>")
else
/obj/item/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params)
var/hotness = I.is_hot()
if(hotness && reagents)

View File

@@ -115,6 +115,7 @@
..()
/obj/item/reagent_containers/food/drinks/drinkingglass/afterattack(obj/target, mob/user, proximity)
. = ..()
if((!proximity) || !check_allowed_items(target,target_self=1))
return
@@ -124,5 +125,4 @@
reagents.reaction(target, TOUCH)
reagents.clear_reagents()
return
..()

View File

@@ -58,6 +58,7 @@
return 1
/obj/item/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity)
. = ..()
if(!proximity)
return
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
@@ -146,6 +147,7 @@
return (TOXLOSS)
/obj/item/reagent_containers/food/condiment/saltshaker/afterattack(obj/target, mob/living/user, proximity)
. = ..()
if(!proximity)
return
if(isturf(target))
@@ -156,7 +158,6 @@
reagents.remove_reagent("sodiumchloride", 2)
new/obj/effect/decal/cleanable/salt(target)
return
..()
/obj/item/reagent_containers/food/condiment/peppermill
name = "pepper mill"
@@ -241,6 +242,7 @@
return
/obj/item/reagent_containers/food/condiment/pack/afterattack(obj/target, mob/user , proximity)
. = ..()
if(!proximity)
return

View File

@@ -120,11 +120,6 @@
return 0
/obj/item/reagent_containers/food/snacks/afterattack(obj/target, mob/user , proximity)
return
/obj/item/reagent_containers/food/snacks/examine(mob/user)
..()
if(bitecount == 0)

View File

@@ -199,6 +199,7 @@
log_game("[key_name(user)] set [key_name(M)] on fire with [src] at [AREACOORD(user)]")
/obj/item/grown/novaflower/afterattack(atom/A as mob|obj, mob/user,proximity)
. = ..()
if(!proximity)
return
if(force > 0)

View File

@@ -67,6 +67,7 @@
return TRUE
/obj/item/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity)
. = ..()
if(!proximity)
return
if(force > 0)

View File

@@ -7,6 +7,7 @@
w_class = WEIGHT_CLASS_SMALL
/obj/item/integrated_electronics/analyzer/afterattack(var/atom/A, var/mob/living/user)
. = ..()
if(istype(A, /obj/item/electronic_assembly))
var/saved = "[A.name] analyzed! On circuit printers with cloning enabled, you may use the code below to clone the circuit:<br><br><code>[SScircuit.save_electronic_assembly(A)]</code>"
if(saved)
@@ -14,5 +15,3 @@
user << browse(saved, "window=circuit_scan;size=500x600;border=1;can_resize=1;can_close=1;can_minimize=1")
else
to_chat(user, "<span class='warning'>[A] is not complete enough to be encoded!</span>")
else
..()

View File

@@ -420,6 +420,7 @@
/obj/item/electronic_assembly/afterattack(atom/target, mob/user, proximity)
. = ..()
for(var/obj/item/integrated_circuit/input/S in assembly_components)
if(S.sense(target,user,proximity))
visible_message("<span class='notice'> [user] waves [src] around [target].</span>")

View File

@@ -38,14 +38,13 @@
to_chat(user, "<span class='notice'>You set \the [src]'s memory to absolutely nothing.</span>")
/obj/item/integrated_electronics/debugger/afterattack(atom/target, mob/living/user, proximity)
. = ..()
if(accepting_refs && proximity)
data_to_write = WEAKREF(target)
visible_message("<span class='notice'>[user] slides \a [src]'s over \the [target].</span>")
to_chat(user, "<span class='notice'>You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \
now off.</span>")
accepting_refs = FALSE
else
return ..()
/obj/item/integrated_electronics/debugger/proc/write_data(var/datum/integrated_io/io, mob/user)
if(io.io_type == DATA_CHANNEL)

View File

@@ -129,6 +129,7 @@
to_chat(user, "<span class='notice'>You set \the [src]'s memory to absolutely nothing.</span>")
/obj/item/integrated_circuit/memory/constant/afterattack(atom/target, mob/living/user, proximity)
. = ..()
if(accepting_refs && proximity)
var/datum/integrated_io/O = outputs[1]
O.data = WEAKREF(target)

View File

@@ -19,6 +19,7 @@
to_chat(user, "It has [remaining_uses] uses left.")
/obj/item/soapstone/afterattack(atom/target, mob/user, proximity)
. = ..()
var/turf/T = get_turf(target)
if(!proximity)
return

View File

@@ -72,6 +72,7 @@
C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
/obj/item/twohanded/required/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
. = ..()
if(!proximity_flag && charged)//Mark a target, or mine a tile.
var/turf/proj_turf = user.loc
if(!isturf(proj_turf))

View File

@@ -16,6 +16,7 @@
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
/obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(!loaded)
return
if(isliving(target) && proximity_flag)

View File

@@ -7,6 +7,7 @@
w_class = WEIGHT_CLASS_TINY
/obj/item/hivelordstabilizer/afterattack(obj/item/organ/M, mob/user)
. = ..()
var/obj/item/organ/regenerative_core/C = M
if(!istype(C, /obj/item/organ/regenerative_core))
to_chat(user, "<span class='warning'>The stabilizer only works on certain types of monster organs, generally regenerative in nature.</span>")
@@ -66,6 +67,7 @@
ui_action_click()
/obj/item/organ/regenerative_core/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag && ishuman(target))
var/mob/living/carbon/human/H = target
if(inert)
@@ -83,7 +85,6 @@
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self"))
H.revive(full_heal = 1)
qdel(src)
..()
/obj/item/organ/regenerative_core/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
. = ..()

View File

@@ -38,6 +38,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
to_chat(user, "You link the extraction pack to the beacon system.")
/obj/item/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user, flag, params)
. = ..()
if(!beacon)
to_chat(user, "[src] is not linked to a beacon, and cannot be used.")
return

View File

@@ -899,7 +899,7 @@
var/static/list/banned_turfs = typecacheof(list(/turf/open/space/transit, /turf/closed))
/obj/item/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
..()
. = ..()
if(timer > world.time)
return
@@ -1097,7 +1097,7 @@
qdel(user)
/obj/item/hierophant_club/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
..()
. = ..()
var/turf/T = get_turf(target)
if(!T || timer > world.time)
return

View File

@@ -259,6 +259,7 @@
icon_state = "data"
/obj/item/card/mining_access_card/afterattack(atom/movable/AM, mob/user, proximity)
. = ..()
if(istype(AM, /obj/item/card/id) && proximity)
var/obj/item/card/id/I = AM
I.access |= ACCESS_MINING
@@ -267,7 +268,6 @@
I.access |= ACCESS_CARGO
to_chat(user, "You upgrade [I] with mining access.")
qdel(src)
..()
/obj/item/storage/backpack/duffelbag/mining_conscript
name = "mining conscription kit"

View File

@@ -270,6 +270,7 @@
icon = 'icons/obj/module.dmi'
/obj/item/mine_bot_upgrade/afterattack(mob/living/simple_animal/hostile/mining_drone/M, mob/user, proximity)
. = ..()
if(!istype(M) || !proximity)
return
upgrade_bot(M, user)

View File

@@ -180,6 +180,7 @@
AddComponent(/datum/component/butchering, 80, 70)
/obj/item/light_eater/afterattack(atom/movable/AM, mob/user, proximity)
. = ..()
if(!proximity)
return
if(isopenturf(AM)) //So you can actually melee with it

View File

@@ -81,6 +81,7 @@
icon_state = "bear_armor_upgrade"
/obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(istype(target, /mob/living/simple_animal/hostile/bear) && proximity_flag)
var/mob/living/simple_animal/hostile/bear/A = target
if(A.armored)

View File

@@ -127,6 +127,7 @@
var/list/banned_mobs
/obj/item/fugu_gland/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag && isanimal(target))
var/mob/living/simple_animal/A = target
if(A.buffed || (A.type in banned_mobs) || A.stat)

View File

@@ -33,6 +33,7 @@
to_chat(user, "<span class='notice'>You [dash_toggled ? "enable" : "disable"] the dash function on [src].</span>")
/obj/item/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(dash_toggled)
jaunt.Teleport(user, target)
if(proximity_flag && (isobj(target) || issilicon(target)))

View File

@@ -36,6 +36,7 @@
return OXYLOSS
/obj/item/hand_labeler/afterattack(atom/A, mob/user,proximity)
. = ..()
if(!proximity)
return
if(!mode) //if it's off, give up.
@@ -89,7 +90,7 @@
name = "cyborg-hand labeler"
/obj/item/hand_labeler/borg/afterattack(atom/A, mob/user, proximity)
..(A, user, proximity)
. = ..(A, user, proximity)
if(!iscyborg(user))
return

View File

@@ -123,6 +123,7 @@
. = ..()
/obj/item/pen/afterattack(obj/O, mob/living/user, proximity)
. = ..()
//Changing Name/Description of items. Only works if they have the 'unique_rename' flag set
if(isobj(O) && proximity && (O.obj_flags & UNIQUE_RENAME))
var/penchoice = input(user, "What would you like to edit?", "Rename or change description?") as null|anything in list("Rename","Change description")

View File

@@ -459,6 +459,7 @@
viewpichelper(Ainfo)
/obj/item/camera/afterattack(atom/target, mob/user, flag)
. = ..()
if(!on || !pictures_left || !isturf(target.loc))
return
if (disk)

View File

@@ -405,7 +405,7 @@
var/delay = 0
/obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams)
..()
. = ..()
var/obj/machinery/power/emitter/E = user.buckled
E.setDir(get_dir(E,targeted_atom))
user.setDir(E.dir)

View File

@@ -130,6 +130,7 @@
O.emp_act(severity)
/obj/item/gun/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
if(firing_burst)
return
if(flag) //It's adjacent, is the user, or is on the user's person

View File

@@ -104,7 +104,7 @@
update_icon()
/obj/item/gun/ballistic/automatic/c20r/afterattack()
..()
. = ..()
empty_alarm()
return
@@ -167,7 +167,7 @@
if(select == 2)
underbarrel.afterattack(target, user, flag, params)
else
..()
. = ..()
return
/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/A, mob/user, params)
if(istype(A, /obj/item/ammo_casing))
@@ -264,7 +264,7 @@
icon_state = "bulldog[chambered ? "" : "-e"]"
/obj/item/gun/ballistic/automatic/shotgun/bulldog/afterattack()
..()
. = ..()
empty_alarm()
return
@@ -317,7 +317,7 @@
if(cover_open)
to_chat(user, "<span class='warning'>[src]'s cover is open! Close it before firing!</span>")
else
..()
. = ..()
update_icon()
//ATTACK HAND IGNORING PARENT RETURN VALUE

View File

@@ -141,7 +141,7 @@
/obj/item/gun/ballistic/minigun/afterattack(atom/target, mob/living/user, flag, params)
if(!ammo_pack || ammo_pack.loc != user)
to_chat(user, "You need the backpack power source to fire the gun!")
..()
. = ..()
/obj/item/gun/ballistic/minigun/dropped(mob/living/user)
ammo_pack.attach_gun(user)

View File

@@ -191,6 +191,7 @@
..()
/obj/item/gun/ballistic/revolver/russian/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
if(flag)
if(!(target in user.contents) && ismob(target))
if(user.a_intent == INTENT_HARM) // Flogging action

View File

@@ -31,7 +31,7 @@
return
else
no_den_usage = 0
..()
. = ..()
/obj/item/gun/magic/can_shoot()
return charges

View File

@@ -43,7 +43,7 @@
no_den_usage = 0
zap_self(user)
else
..()
. = ..()
update_icon()

View File

@@ -28,16 +28,10 @@
else
to_chat(usr, "<span class='danger'>The grenade launcher cannot hold more grenades.</span>")
/obj/item/gun/grenadelauncher/afterattack(obj/target, mob/user , flag)
if(target == user)
return
/obj/item/gun/grenadelauncher/can_shoot()
return grenades.len
if(grenades.len)
fire_grenade(target,user)
else
to_chat(user, "<span class='danger'>The grenade launcher is empty.</span>")
/obj/item/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user)
/obj/item/gun/grenadelauncher/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
user.visible_message("<span class='danger'>[user] fired a grenade!</span>", \
"<span class='danger'>You fire the grenade launcher!</span>")
var/obj/item/grenade/F = grenades[1] //Now with less copypasta!

View File

@@ -19,6 +19,7 @@
gun = newloc
/obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag)
if(istype(target, /obj/item/gun))
var/obj/item/gun/G = target
@@ -156,7 +157,7 @@
var/unique_enzymes = null
/obj/item/firing_pin/dna/afterattack(atom/target, mob/user, proximity_flag)
..()
. = ..()
if(proximity_flag && iscarbon(target))
var/mob/living/carbon/M = target
if(M.dna && M.dna.unique_enzymes)

View File

@@ -45,9 +45,6 @@
if(user.a_intent == INTENT_HARM)
return ..()
/obj/item/reagent_containers/afterattack(obj/target, mob/user , flag)
return
/obj/item/reagent_containers/proc/canconsume(mob/eater, mob/user)
if(!iscarbon(eater))
return 0

View File

@@ -197,6 +197,7 @@ Borg Shaker
RG.add_reagent(reagent_ids[valueofi], 5)
/obj/item/reagent_containers/borghypo/borgshaker/afterattack(obj/target, mob/user, proximity)
. = ..()
if(!proximity)
return

View File

@@ -9,6 +9,7 @@
container_type = TRANSPARENT
/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity)
. = ..()
if(!proximity)
return
if(!target.reagents)

View File

@@ -53,6 +53,7 @@
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
/obj/item/reagent_containers/glass/afterattack(obj/target, mob/user, proximity)
. = ..()
if((!proximity) || !check_allowed_items(target,target_self=1))
return

View File

@@ -9,9 +9,7 @@
apply_type = PATCH
apply_method = "apply"
self_delay = 30 // three seconds
/obj/item/reagent_containers/pill/patch/afterattack(obj/target, mob/user , proximity)
return // thanks inheritance again
dissolvable = FALSE
/obj/item/reagent_containers/pill/patch/attack(mob/living/L, mob/user)
if(ishuman(L))

Some files were not shown because too many files have changed in this diff Show More