Gripper attackby fixes (#13571)

This cannot go wrong, can it?
This commit is contained in:
mikomyazaki
2022-04-20 22:15:15 +02:00
committed by GitHub
parent d8497aa4cb
commit e59589ec8a
184 changed files with 975 additions and 894 deletions
+4 -4
View File
@@ -20,7 +20,7 @@
if(I.iswelder())
var/obj/item/weldingtool/WT = I
if(!WT.isOn())
return
return TRUE
if(WT.remove_fuel(0,user))
user.visible_message("<b>[user]</b> starts slicing \the [src] apart.", SPAN_NOTICE("You start slicing \the [src] apart."))
playsound(src, 'sound/items/welder.ogg', 100, 1)
@@ -31,8 +31,8 @@
if(reinf_material)
reinf_material.place_sheet(get_turf(src))
qdel(src)
return
..()
return TRUE
return ..()
/obj/effect/overlay/thermite
name = "burning thermite"
@@ -43,4 +43,4 @@
layer = 5
/obj/effect/overlay/burnt_wall/steel/Initialize(mapload)
. = ..(mapload, "wall", MATERIAL_STEEL)
. = ..(mapload, "wall", MATERIAL_STEEL)
+10 -9
View File
@@ -180,29 +180,29 @@
var/obj/item/grab/G = I
if(G.state < GRAB_AGGRESSIVE)
to_chat(user, SPAN_WARNING("You need a stronger grip to do that!"))
return
return TRUE
G.affecting.forceMove(src.loc)
visible_message(SPAN_WARNING("[G.assailant] smashes [G.affecting] through the foamed metal wall."))
G.affecting.take_overall_damage(15)
qdel(I)
qdel(src)
return
return TRUE
else if(istype(I, /obj/item/stack/material))
var/obj/item/stack/material/S = I
if(S.get_amount() < 4)
to_chat(user, SPAN_NOTICE("There isn't enough material here to construct a wall."))
return
return TRUE
var/material/M = SSmaterials.get_material_by_name(S.default_type)
if(!istype(M))
return
return TRUE
if(M.integrity < 50)
to_chat(user, SPAN_NOTICE("This material is too soft for use in wall construction."))
return
return TRUE
user.visible_message("<b>[user]</b> starts slotting material into \the [src]...", SPAN_NOTICE("You start slotting material into \the [src], forming it into a wall..."))
if(!do_after(user, 10 SECONDS) || !S.use(4))
return
return TRUE
var/turf/Tsrc = get_turf(src)
var/original_type = Tsrc.type
Tsrc.ChangeTurf(/turf/simulated/wall)
@@ -211,18 +211,18 @@
T.set_material(M)
T.add_hiddenprint(usr)
qdel(src)
return
return TRUE
else if(istype(I, /obj/item/stack/tile/floor))
var/turf/T = get_turf(src)
if(T.type != /turf/space && !isopenturf(T)) // need to do a hard check here because transit turfs are also space turfs
to_chat(user, SPAN_WARNING("The tile below \the [src] isn't an open space, or space itself!"))
return
return TRUE
var/obj/item/stack/tile/floor/S = I
S.use(1)
T.ChangeTurf(/turf/simulated/floor/airless)
qdel(src)
return
return TRUE
user.do_attack_animation(src, I)
if(prob(I.force * 20 - metal * 25))
@@ -231,6 +231,7 @@
else
to_chat(user, SPAN_NOTICE("You hit the metal foam to no effect."))
shake_animation()
return TRUE
/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
if(air_group)
@@ -66,8 +66,8 @@
/obj/effect/decal/cleanable/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/gun/energy/rifle/cult))
return
..()
return TRUE
return ..()
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = get_random_colour(1)
@@ -135,7 +135,7 @@
else
to_chat(user, "<span class='notice'>You carefully remove the poster from the wall.</span>")
roll_and_drop(user.loc)
return
return TRUE
/obj/structure/sign/poster/attack_hand(mob/user as mob)
+2 -2
View File
@@ -43,8 +43,8 @@
/obj/effect/decal/remains/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/gun/energy/rifle/cult))
return
..()
return TRUE
return ..()
//Target turns to ash.
/obj/effect/decal/remains/proc/crumble()
@@ -46,4 +46,4 @@
to_chat(user, SPAN_WARNING("\The [src] is solidly attached, it doesn't budge!"))
/obj/effect/plastic_explosive/attackby(var/obj/item/I, var/mob/user)
parent.attackby(I, user)
return parent.attackby(I, user)
+3 -3
View File
@@ -44,7 +44,7 @@
if(istype(I, /obj/item/bluespace_neutralizer))
user.visible_message("<b>[user]</b> collapses \the [src] with \the [I].", SPAN_NOTICE("You collapse \the [src] with \the [I]."))
qdel(src)
return
return TRUE
return ..()
/obj/effect/portal/attack_hand(mob/user)
@@ -226,7 +226,7 @@
/obj/effect/portal/revenant/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/bluespace_neutralizer))
to_chat(user, SPAN_WARNING("You need to activate \the [I] and keep it near \the [src] to collapse it."))
return
return TRUE
return ..()
/obj/effect/portal/revenant/proc/reduce_health(var/amount = 1)
@@ -264,4 +264,4 @@
#undef COLOR_STAGE_THREE
#undef COLOR_STAGE_TWO
#undef COLOR_STAGE_ONE
#undef COLOR_STAGE_ZERO
#undef COLOR_STAGE_ZERO
+3 -1
View File
@@ -28,6 +28,7 @@
if(WT.remove_fuel(0, user))
damage = 15
playsound(loc, 'sound/items/welder.ogg', 100, 1)
return TRUE
else
user.do_attack_animation(src)
playsound(loc, W.hitsound, 50, 1, -1)
@@ -277,11 +278,12 @@
die()
/obj/effect/spider/spiderling/attackby(var/obj/item/W, var/mob/user)
..()
. = ..()
if(istype(W, /obj/item/newspaper))
var/obj/item/newspaper/N = W
if(N.rolled)
die()
return TRUE
/**
* Makes the organ spew out all of the spiderlings it has. It's triggered at the point
+2 -1
View File
@@ -289,6 +289,7 @@
else if(S.can_be_inserted(src))
S.handle_item_insertion(src)
return TRUE
//Called when the user alt-clicks on something with this item in their active hand
//this function is designed to be overridden by individual weapons
@@ -956,7 +957,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/proc/get_head_examine_text(var/mob/user)
return "on [user.get_pronoun("his")] head"
/obj/item/proc/should_equip() // when you press E with an empty hand, will this item be pulled from suit storage / back slot and put into your hand
return FALSE
+14 -11
View File
@@ -410,28 +410,29 @@
user.drop_from_inventory(W, src)
use_internal_tank = 1
START_PROCESSING(SSfast_process, src)
return
else
to_chat(user, "<span class='warning'>[src] already has a tank attached.</span>")
return TRUE
if(opened)
if(istype(W, /obj/item/grab))
var/obj/item/grab/G = W
MouseDrop_T(G.affecting, user)
return 0
return FALSE
if(!W.dropsafety())
return
return FALSE
user.drop_item()
return TRUE
else if(istype(W, /obj/item/handcuffs/cable))
if(zipped)
to_chat(user, "<span class='warning'>[src]'s zipper is already restrained.</span>")
return
return TRUE
user.visible_message(
"<span class='warning'>[user] begins putting cable restrains on zipper of [src].</span>",
"<span class='notice'>You begin putting cable restrains on zipper of [src].</span>"
)
playsound(loc, 'sound/weapons/cablecuff.ogg', 50, 1)
if (!do_after(user, 3 SECONDS, act_target = src, extra_checks = CALLBACK(src, .proc/is_closed)))
return
return TRUE
zipped = !zipped
update_icon()
user.visible_message(
@@ -441,18 +442,19 @@
qdel(W)
update_icon()
return TRUE
else if(W.iswirecutter())
if(!zipped)
to_chat(user, "<span class='warning'>[src] has no cables to cut.</span>")
attack_hand(user)
return
return TRUE
user.visible_message(
"<span class='warning'>[user] begins cutting cable restrains on zipper of [src].</span>",
"<span class='notice'>You begin cutting cable restrains on zipper of [src].</span>"
)
playsound(loc, 'sound/items/wirecutter.ogg', 50, 1)
if (!do_after(user, 3 SECONDS, act_target = src, extra_checks = CALLBACK(src, .proc/is_closed)))
return
return TRUE
zipped = !zipped
update_icon()
user.visible_message(
@@ -461,17 +463,18 @@
)
new/obj/item/handcuffs/cable(src.loc)
update_icon()
return TRUE
else if(istype(W, /obj/item/cell))
if(!isnull(cell))
to_chat(user, "<span class='warning'>[src] already has [cell] attached to it.</span>")
attack_hand(user)
return
return TRUE
user.visible_message(
"<span class='warning'>[user] is attaching [W] to [src].</span>",
"<span class='notice'>You are attaching [W] to [src].</span>"
)
if (!do_after(user, 2 SECONDS, act_target = src))
return
return TRUE
user.visible_message(
"<span class='warning'>[user] has attached [W] to [src].</span>",
"<span class='notice'>You attached [W] to [src].</span>"
@@ -479,9 +482,9 @@
cell = W
cooling = TRUE
user.drop_from_inventory(W, src)
return TRUE
else
attack_hand(user)
return
return attack_hand(user)
/obj/structure/closet/airbubble/store_mobs(var/stored_units)
contains_body = ..()
+2 -1
View File
@@ -8,10 +8,11 @@
flags = CONDUCT
/obj/item/frame/apc/attackby(obj/item/W as obj, mob/user as mob)
..()
if (W.iswrench())
new /obj/item/stack/material/steel( get_turf(src.loc), 2 )
qdel(src)
return TRUE
return ..()
/obj/item/frame/apc/try_build(turf/on_wall)
if (get_dist(on_wall,usr)>1)
+4 -3
View File
@@ -79,9 +79,9 @@
if (W.ispen())
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
if (user.get_active_hand() != W)
return
return TRUE
if (!in_range(src, user) && src.loc != user)
return
return TRUE
t = sanitizeSafe(t, MAX_NAME_LEN)
if (t)
src.name = "body bag - "
@@ -97,12 +97,13 @@
LAZYADD(overlays, image(icon, "bodybag_label"))
else
src.name = "body bag"
return
return TRUE
else if(W.iswirecutter())
to_chat(user, "You cut the tag off the bodybag.")
playsound(src.loc, 'sound/items/wirecutter.ogg', 50, 1)
src.name = "body bag"
LAZYREMOVE(overlays, image(icon, "bodybag_label"))
return TRUE
/obj/structure/closet/body_bag/store_mobs(var/stored_units)
contains_body = ..()
+10 -8
View File
@@ -17,7 +17,7 @@
I.DrawBox(color, drawX, drawY)
return I
/**
/**
* Interface for easy drawing of one pixel on an atom.
*/
/atom/proc/DrawPixelOn(color, drawX, drawY)
@@ -46,7 +46,7 @@
name = "23px by 23px canvas"
icon_state = "23x23"
/**
/**
* One pixel increments.
*/
/obj/item/canvas/attackby(obj/item/I, mob/user, params)
@@ -56,8 +56,8 @@
if(do_after(user, 40 / I.toolspeed))
user.visible_message("<b>[user]</b> [anchored ? "loosens" : "tightens"] \the [src].", SPAN_NOTICE("You [anchored ? "loosen" : "tighten"] \the [src]."), SPAN_NOTICE("You hear a ratchet."))
anchored = !anchored
return
return TRUE
// Click info.
var/list/click_params = params2list(params)
var/pixX = text2num(click_params["icon-x"])
@@ -65,7 +65,7 @@
// Should always be true, otherwise you didn't click the object, but let's check because SS13~
if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
return
return TRUE
// Cleaning one pixel with a soap or rag.
if(istype(I, /obj/item/soap) || istype(I, /obj/item/reagent_containers/glass/rag))
@@ -75,21 +75,23 @@
var/icon/Ico = clean_canvas()
if(!Ico)
qdel(masterpiece)
return
return TRUE
var/theOriginalPix = Ico.GetPixel(pixX,pixY)
if(thePix != theOriginalPix) // Clour changed.
DrawPixelOn(theOriginalPix,pixX,pixY)
qdel(masterpiece)
return TRUE
// Drawing one pixel with a crayon.
else if(istype(I, /obj/item/pen/crayon))
var/obj/item/pen/crayon/C = I
DrawPixelOn(C.shadeColour, pixX, pixY)
return TRUE
else
return ..()
/**
/**
* Clean the whole canvas.
*/
/obj/item/canvas/attack_self(mob/user)
@@ -136,4 +138,4 @@
/obj/item/canvas/proc/clean_canvas()
var/icon/I = icon(initial(icon), initial(icon_state))
. = I
. = I
+1
View File
@@ -113,6 +113,7 @@
if(reagents.total_volume <= 0)
user.visible_message("<span class='notice'>[user] finished their crayon!</span>", "<span class='warning'>You ate your crayon!</span>")
qdel(src)
return TRUE
else
..(user, target_zone)
+2 -1
View File
@@ -33,8 +33,9 @@
if(W.isscrewdriver())
in_hack_mode = !in_hack_mode
playsound(src.loc, 'sound/items/screwdriver.ogg', 50, TRUE)
return TRUE
else
..()
return ..()
/obj/item/device/multitool/hacktool/resolve_attackby(atom/A, mob/user)
sanity_check()
@@ -51,15 +51,14 @@
to_chat(user, "<span class='notice'>You install a [diode.name] in [src].</span>")
else
to_chat(user, "<span class='notice'>[src] already has a laser diode.</span>")
return TRUE
else if(W.isscrewdriver())
if(diode)
to_chat(user, "<span class='notice'>You remove the [diode.name] from the [src].</span>")
diode.forceMove(get_turf(user))
diode = null
return
..()
return
return TRUE
/obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params)
if(flag) //we're placing the object on a table or in backpack
@@ -67,7 +67,7 @@
load_interval = 10
max_uses = 30
uses = 0 //Starts empty
/obj/item/device/lightreplacer/New()
failmsg = "The [name]'s refill light blinks red."
..()
@@ -90,7 +90,7 @@
to_chat(user, SPAN_NOTICE("You insert five pieces of glass into the [src]. You have [uses] light\s remaining."))
else
to_chat(user, SPAN_WARNING("You need 5 sheets of glass to replace lights."))
return
return TRUE
if(istype(W, /obj/item/light))
var/obj/item/light/L = W
@@ -102,18 +102,18 @@
qdel(L)
else
to_chat(user, SPAN_WARNING("You need a working light."))
return
return TRUE
if(istype(W, /obj/item/device/lightreplacer))
var/obj/item/device/lightreplacer/LR = W
if(LR.uses == LR.max_uses)
to_chat(user, SPAN_WARNING("\The [LR] is already full!"))
return
return TRUE
var/use_difference = min(LR.max_uses - LR.uses, uses)
AddUses(-use_difference)
LR.AddUses(use_difference)
to_chat(user, SPAN_NOTICE("You transfer the lights from \the [src] to \the [LR]."))
return
return TRUE
/obj/item/device/lightreplacer/afterattack(var/atom/target, var/mob/living/user, proximity, params)
@@ -116,7 +116,7 @@
/obj/item/device/magnetic_lock/attackby(var/obj/item/I, var/mob/user)
if (status == STATUS_BROKEN)
to_chat(user, "<span class='danger'>[src] is broken beyond repair!</span>")
return
return TRUE
if (istype(I, /obj/item/card/id))
if (!constructionstate && !hacked)
@@ -134,7 +134,7 @@
return
else
to_chat(user, "<span class='danger'>You cannot swipe your [I] through [src] with it partially dismantled!</span>")
return
return TRUE
if (istype(I, /obj/item) && user.a_intent == "harm")
if (I.force >= 18)
@@ -142,14 +142,13 @@
takedamage(I.force)
playsound(loc, "sound/weapons/genhit[rand(1,3)].ogg", I.force*3, 1)
addtimer(CALLBACK(GLOBAL_PROC, /proc/playsound, loc, "sound/effects/sparks[rand(1,4)].ogg", 30, 1), 3, TIMER_CLIENT_TIME)
return
else
user.visible_message("<span class='danger'>[user] hits [src] with [I] but fails to damage it.</span>", "<span class='warning'>You hit [src] with [I], [I.force >= 10 ? "and it almost makes a dent!" : "but it appears to have no visible effect."]</span>")
playsound(loc, "sound/weapons/genhit.ogg", I.force*2.5, 1)
return
return TRUE
if(invincible)
return
return TRUE
switch (constructionstate)
if (0)
if (istype(I, /obj/item/card/emag))
@@ -161,7 +160,7 @@
if (target)
detach()
update_icon()
return
return TRUE
if (I.iswelder())
var/obj/item/weldingtool/WT = I
@@ -178,7 +177,7 @@
else
cut_overlay("overlay_welding")
update_icon()
return
return TRUE
if (I.iscrowbar())
if (!locked)
@@ -186,30 +185,30 @@
setconstructionstate(1)
else
to_chat(user, SPAN_NOTICE("You try to pry the cover off [src] but it doesn't budge."))
return
return TRUE
if (1)
if (istype(I, /obj/item/cell))
if (powercell)
to_chat(user, SPAN_NOTICE("There's already a powercell in \the [src]."))
return
return TRUE
if (I.iscrowbar())
to_chat(user, SPAN_NOTICE("You wedge the cover back in place."))
setconstructionstate(0)
return
return TRUE
if (2)
if (I.isscrewdriver())
to_chat(user, SPAN_NOTICE("You unscrew and remove the wiring cover from \the [src]."))
playsound(loc, I.usesound, 50, 1)
setconstructionstate(3)
return
return TRUE
if (I.iscrowbar())
to_chat(user, SPAN_NOTICE("You wedge the cover back in place."))
setconstructionstate(0)
return
return TRUE
if (istype(I, /obj/item/cell))
if (!powercell)
@@ -217,26 +216,26 @@
user.drop_from_inventory(I,src)
powercell = I
setconstructionstate(1)
return
return TRUE
if (3)
if (I.iswirecutter())
to_chat(user, SPAN_NOTICE("You cut the wires connecting the [src]'s magnets to their internal powersupply, [target ? "making the device fall off [target] and rendering it unusable." : "rendering the device unusable."]"))
playsound(loc, 'sound/items/wirecutter.ogg', 50, 1)
setconstructionstate(4)
return
return TRUE
if (I.isscrewdriver())
to_chat(user, SPAN_NOTICE("You replace and screw tight the wiring cover from \the [src]."))
playsound(loc, I.usesound, 50, 1)
setconstructionstate(2)
return
return TRUE
if (4)
if (I.iswirecutter())
to_chat(user, SPAN_NOTICE("You repair the wires connecting the [src]'s magnets to their internal powersupply"))
setconstructionstate(3)
return
return TRUE
/obj/item/device/magnetic_lock/process()
if(!processpower)
+5 -5
View File
@@ -48,11 +48,11 @@
/obj/item/device/paicard/attackby(obj/item/C, mob/user)
if(istype(C, /obj/item/card/id))
scan_ID(C, user)
return
return TRUE
else if(istype(C, /obj/item/device/encryptionkey))
if(length(installed_encryptionkeys) > 2)
to_chat(user, SPAN_WARNING("\The [src] already has the full number of possible encryption keys installed!"))
return
return TRUE
var/obj/item/device/encryptionkey/EK = C
var/added_channels = FALSE
for(var/thing in (EK.channels | EK.additional_channels))
@@ -68,7 +68,7 @@
to_chat(pai, SPAN_NOTICE("You now have access to these radio channels: [english_list(radio.channels)]."))
else
to_chat(user, SPAN_WARNING("\The [src] would not gain any new channels from \the [EK]."))
return
return TRUE
else if(C.isscrewdriver())
if(!length(installed_encryptionkeys))
to_chat(user, SPAN_WARNING("There are no installed encryption keys to remove!"))
@@ -79,11 +79,11 @@
EK.forceMove(get_turf(src))
installed_encryptionkeys -= EK
recalculateChannels()
return
return TRUE
else if(istype(C, /obj/item/stack/nanopaste))
if(!pai)
to_chat(user, SPAN_WARNING("You cannot repair a pAI device if there's no active pAI personality installed."))
return
return TRUE
pai.attackby(C, user)
/obj/item/device/paicard/proc/recalculateChannels()
+3 -5
View File
@@ -39,15 +39,13 @@
attached = locate() in T
if(!attached)
to_chat(user, "<span class='warning'>No exposed cable here to attach to.</span>")
return
else
anchored = 1
mode = 1
visible_message("<span class='notice'>\The [user] attaches \the [src] to the cable!</span>")
return
else
to_chat(user, "<span class='warning'>\The [src] must be placed over an exposed cable to attach to it.</span>")
return
return TRUE
else
if (mode == 2)
STOP_PROCESSING(SSprocessing, src)
@@ -59,9 +57,9 @@
icon_state = "powersink0"
item_state = "powersink0"
return
return TRUE
else
..()
return ..()
/obj/item/device/powersink/attack_ai()
return
@@ -134,6 +134,7 @@ var/list/active_radio_jammers = list()
assembly_holder.detached()
user.put_in_hands(cell)
qdel(src)
return TRUE
/obj/item/device/radiojammer/improvised/toggle(mob/user)
if(!active)
@@ -156,4 +157,4 @@ var/list/active_radio_jammers = list()
else
active_radio_jammers -= src
icon_state = initial(icon_state)
STOP_PROCESSING(SSprocessing, src)
STOP_PROCESSING(SSprocessing, src)
+3 -1
View File
@@ -44,8 +44,9 @@
if(istype(W, /obj/item/device/spy_monitor))
var/obj/item/device/spy_monitor/SM = W
SM.pair(src, user)
return TRUE
else
..()
return ..()
/obj/item/device/spy_bug/hear_talk(mob/M, var/msg, verb, datum/language/speaking)
radio.hear_talk(M, msg, speaking)
@@ -90,6 +91,7 @@
/obj/item/device/spy_monitor/attackby(obj/W as obj, mob/living/user as mob)
if(istype(W, /obj/item/device/spy_bug))
pair(W, user)
return TRUE
else
return ..()
+3 -3
View File
@@ -31,11 +31,11 @@
C.pixel_y = 0
C.pixel_z = 0
user.visible_message("<b>[user]</b> puts \the [C] on \the [src].", SPAN_NOTICE("You place \the [C] on \the [src]."))
return
return TRUE
if(I.iswrench())
to_chat(user, SPAN_NOTICE("You dismantle \the [src]."))
dismantle()
return
return TRUE
return ..()
/*
@@ -45,4 +45,4 @@
if(painting && Adjacent(painting)) // Only move if it's near us.
painting.forceMove(get_turf(src))
else
painting = null
painting = null
+3 -2
View File
@@ -116,7 +116,7 @@
if(contains == JAR_NOTHING)
contains = JAR_MONEY
if(contains != JAR_MONEY)
return
return TRUE
user.visible_message(SPAN_NOTICE("<b>[user]</b> puts [S.worth] credit\s into \the [src]."))
user.drop_from_inventory(S,src)
update_icon()
@@ -132,7 +132,7 @@
update_icon()
else
to_chat(user, SPAN_WARNING("\The [name] is full!"))
return
return TRUE
if(istype(A, /obj/item/holder))
var/obj/item/holder/H = A
if(H.w_class <= ITEMSIZE_SMALL)
@@ -141,6 +141,7 @@
scoop(H, user)
else
scoop_fail(H, user)
return TRUE
/obj/item/glass_jar/update_icon() // Also updates name and desc
underlays.Cut()
+3 -3
View File
@@ -63,14 +63,14 @@
update_icon()
else
to_chat(user, SPAN_WARNING("Access denied."))
return
return TRUE
if(istype(I, /obj/item/paper) && allowed(user))
var/obj/item/paper/P = I
to_chat(user, SPAN_NOTICE("You scan \the [I.name] into \the [name]."))
menu_text = P.info
menu_text = replacetext(menu_text, "color=black>", "color=white>")
update_icon()
return
return TRUE
return ..()
/obj/item/holomenu/examine(mob/user, distance)
@@ -122,4 +122,4 @@
else
to_chat(user, SPAN_WARNING("Access denied."))
return
return ..()
return ..()
+2 -1
View File
@@ -71,6 +71,7 @@
ball = O
to_chat(user, SPAN_NOTICE("You place \the [O] in \the [src]"))
update_icon()
return TRUE
/obj/item/knittingneedles/attack_self(mob/user as mob)
if(!ball) //if there is no yarn ball, nothing happens
@@ -164,4 +165,4 @@
new /obj/item/yarn/blue(src)
new /obj/item/yarn/green(src)
new /obj/item/yarn/purple(src)
new /obj/item/yarn/yellow(src)
new /obj/item/yarn/yellow(src)
+2 -2
View File
@@ -45,7 +45,7 @@
if(istype(H))
species_restricted = list(H.species.get_bodytype())
kit.use(1,user)
return 1
return TRUE
return ..()
/obj/item/clothing/suit/space/void/attackby(var/obj/item/O, var/mob/user)
@@ -64,5 +64,5 @@
if(istype(H))
species_restricted = list(H.species.get_bodytype())
kit.use(1,user)
return 1
return TRUE
return ..()
+3 -3
View File
@@ -21,7 +21,7 @@
if(W.iswelder())
if(hp == initial(hp))
to_chat(user, SPAN_NOTICE("\The [src] is fully repaired."))
return
return TRUE
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
cut_overlays()
@@ -29,7 +29,7 @@
icon = initial(icon)
hp = initial(hp)
to_chat(user, SPAN_NOTICE("You slice off \the [src]'s uneven chunks of steel and scorch marks."))
return
return TRUE
/obj/item/target/attack_hand(var/mob/user)
// taking pinned targets off!
@@ -137,4 +137,4 @@
LAZYADD(Target.bullet_holes, src)
#undef DECAL_SCORCH
#undef DECAL_BULLET
#undef DECAL_BULLET
+1 -6
View File
@@ -65,12 +65,7 @@
/obj/effect/temp_visual/constellation/attackby(obj/item/W as obj, mob/user as mob)
visible_message("<span class='notice'>\The [src] vanishes!</span>")
qdel(src)
return
/obj/effect/temp_visual/constellation/attackby(obj/item/W as obj, mob/user as mob)
visible_message("<span class='notice'>\The [src] vanishes!</span>")
qdel(src)
return
return TRUE
/obj/effect/temp_visual/constellation/attack_hand(mob/user as mob)
if(user.a_intent == I_HURT)
+2 -1
View File
@@ -42,6 +42,7 @@
var/atom/movable/attached_atom = attached.resolve()
if(attached_atom)
attached_atom.attackby(I, user) // don't allow people to make sticker armor
return TRUE
/obj/item/sticker/afterattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
if(!proximity_flag)
@@ -89,4 +90,4 @@
var/obj/item/sticker/S = locate() in src
if(S)
S.remove_sticker(usr)
S.remove_sticker(usr)
+4 -3
View File
@@ -76,8 +76,8 @@
src.desc = "A translucent balloon with some form of liquid sloshing around in it."
to_chat(user, "<span class='notice'>You fill the balloon with the contents of [O].</span>")
O.reagents.trans_to_obj(src, 10)
src.update_icon()
return
src.update_icon()
return TRUE
/obj/item/toy/waterballoon/throw_impact(atom/hit_atom)
if(src.reagents.total_volume >= 1)
@@ -177,6 +177,7 @@
/obj/item/toy/balloon/attackby(obj/item/W as obj, mob/user as mob)
if(W.can_puncture())
burst()
return TRUE
/obj/item/toy/balloon/latex
desc = "Leaves a starchy taste in your mouth after blowing into it."
@@ -1256,4 +1257,4 @@
/obj/item/chess_piece/queen/black
name = "black queen"
icon_state = "black_queen"
icon_state = "black_queen"
+2 -1
View File
@@ -216,6 +216,7 @@
qdel(W)
has_chopsticks = TRUE
update_icon()
return TRUE
/obj/item/trash/ricetub/update_icon()
if(has_chopsticks)
@@ -240,4 +241,4 @@
/obj/item/trash/phoroncandy
name = "\improper phoron rock candy stick"
icon_state = "rock_candy"
icon_state = "rock_candy"
+7 -7
View File
@@ -76,7 +76,7 @@
playsound(src.loc, 'sound/weapons/laser_reload1.ogg', 50, FALSE)
to_chat(user, SPAN_NOTICE("The RFD now holds [stored_matter]/30 matter-units."))
update_icon()
return
return TRUE
if(W.isscrewdriver()) // Turning it into a crossbow
crafting = !crafting
@@ -85,7 +85,7 @@
else
to_chat(user, SPAN_NOTICE("The RFD can now be modified."))
src.add_fingerprint(user)
return
return TRUE
if(crafting)
var/obj/item/crossbow // the thing we're gonna add, check what it is below
@@ -93,16 +93,16 @@
var/obj/item/crossbowframe/F = W
if(F.buildstate != 5)
to_chat(user, SPAN_WARNING("You need to fully assemble the crossbow frame first!"))
return
return TRUE
crossbow = F
else if(istype(W, /obj/item/gun/launcher/crossbow) && !istype(W, /obj/item/gun/launcher/crossbow/RFD))
var/obj/item/gun/launcher/crossbow/C = W
if(C.bolt)
to_chat(user, SPAN_WARNING("You need to remove \the [C.bolt] from \the [C] before you can attach it to \the [src]."))
return
return TRUE
if(C.cell)
to_chat(user, SPAN_WARNING("You need to remove \the [C.cell] from \the [C] before you can attach it to \the [src]."))
return
return TRUE
crossbow = C
if(crossbow)
@@ -113,8 +113,8 @@
user.drop_from_inventory(src)
qdel(src)
user.put_in_hands(CB)
return
..()
return TRUE
return ..()
/obj/item/rfd/proc/useResource(var/amount, var/mob/user)
@@ -320,7 +320,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/obj/item/melee/energy/sword/S = W
if(S.active)
light(SPAN_WARNING("[user] swings their [W], barely missing themselves. They light their [name] in the process."))
return
return TRUE
/obj/item/clothing/mask/smokable/cigarette/catch_fire()
if(!lit)
@@ -988,7 +988,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/obj/item/clothing/mask/smokable/cigarette/rolled/CR = I
return CR.attackby(src, user)
. = ..()
//tobacco sold seperately if you're too snobby to grow it yourself.
/obj/item/reagent_containers/food/snacks/grown/dried_tobacco
@@ -28,10 +28,12 @@
if(I.isscrewdriver())
open_panel = !open_panel
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
return TRUE
else if(I.iswirecutter() || I.ismultitool() || istype(I, /obj/item/device/assembly/signaler ))
wires.Interact(user)
return TRUE
else
..()
return ..()
/obj/item/plastique/attack_self(mob/user as mob)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
@@ -32,7 +32,7 @@
playsound(E.loc, 'sound/items/stimpack.ogg', 50, 1)
else
to_chat(user,"<span class='notice'>\The [E] is full!</span>")
return
return TRUE
. = ..()
@@ -51,7 +51,7 @@
if(W.isscrewdriver() && !is_open_container())
to_chat(user,"<span class='notice'>Using \the [W], you unsecure the extinguisher refill cartridge's lid.</span>") // it locks shut after being secured
flags |= OPENCONTAINER
return
return TRUE
. = ..()
/obj/item/reagent_containers/extinguisher_refill/examine(var/mob/user) //Copied from inhalers.
@@ -157,7 +157,7 @@
playsound(ER.loc, 'sound/items/stimpack.ogg', 50, 1)
else
to_chat(user,"<span class='notice'>\The [src] is full!</span>")
return
return TRUE
. = ..()
+11 -11
View File
@@ -106,7 +106,7 @@
/obj/item/flamethrower/attackby(obj/item/W, mob/user)
if(use_check_and_message(user))
return
return TRUE
if(W.iswrench() && !secured)//Taking this apart
var/turf/T = get_turf(src)
@@ -121,26 +121,26 @@
gas_tank = null
new /obj/item/stack/rods(T)
qdel(src)
return
return TRUE
else if(W.isscrewdriver() && igniter && !lit)
secured = !secured
to_chat(user, SPAN_NOTICE("[igniter] is now [secured ? "secured" : "unsecured"]!"))
update_icon()
return
return TRUE
else if(isigniter(W))
var/obj/item/device/assembly/igniter/I = W
if(I.secured)
to_chat(user, SPAN_WARNING("\The [I] is not ready to attach yet! Use a screwdriver on it first."))
return
return TRUE
if(igniter)
to_chat(user, SPAN_WARNING("\The [src] already has an igniter installed."))
return
return TRUE
user.drop_from_inventory(I, src)
igniter = I
update_icon()
return
return TRUE
else if(istype(W, /obj/item/tank/phoron) || istype(W, /obj/item/tank/hydrogen))
if(gas_tank)
@@ -149,18 +149,18 @@
user.drop_from_inventory(W, src)
gas_tank = W
update_icon()
return
return TRUE
else if(istype(W, /obj/item/device/analyzer))
var/obj/item/device/analyzer/A = W
A.analyze_gases(src, user)
return
return TRUE
else if(W.isFlameSource()) // you can light it with external input, even without an igniter
attempt_lighting(user, TRUE)
update_icon()
return
..()
return TRUE
return ..()
/obj/item/flamethrower/attack_self(mob/user)
@@ -267,4 +267,4 @@
igniter.secured = FALSE
secured = TRUE
gas_tank = new /obj/item/tank/phoron(src)
return ..()
return ..()
+2 -2
View File
@@ -54,8 +54,8 @@
/obj/effect/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/mop) || istype(I, /obj/item/soap))
return
..()
return FALSE
return ..()
/obj/item/mop/update_icon()
icon_state = "[initial(icon_state)][reagents.total_volume > 1 ? "_wet" : null]"
@@ -209,7 +209,7 @@ var/list/tape_roll_applications = list()
return ..()
/obj/item/tape/attackby(obj/item/W, mob/user)
breaktape(W, user)
return breaktape(W, user)
/obj/item/tape/attack_hand(mob/user)
if(user.a_intent == I_HELP)
@@ -253,3 +253,4 @@ var/list/tape_roll_applications = list()
cur = get_step(cur,dir[i])
qdel(src)
return TRUE
+2 -2
View File
@@ -38,8 +38,8 @@
var/obj/item/key/K = I
key_data = K.key_data
update_icon()
return
..()
return TRUE
return ..()
/obj/item/soap/update_icon()
overlays.Cut()
@@ -40,7 +40,7 @@
/obj/item/storage/bible/attackby(obj/item/W as obj, mob/user as mob)
if(src.use_sound)
playsound(src.loc, src.use_sound, 50, 1, -5)
..()
return ..()
/obj/item/storage/bible/proc/Set_Religion(mob/user)
if(use_check(user))
@@ -84,7 +84,7 @@
/obj/item/watertank/attackby(obj/item/W, mob/user, params)
if(W == noz)
remove_noz()
return 1
return TRUE
else
return ..()
+14 -13
View File
@@ -336,17 +336,17 @@
if(W.isscrewdriver())
if(isrobot(loc))
to_chat(user, SPAN_ALERT("You cannot modify your own welder!"))
return
return TRUE
if(welding)
to_chat(user, SPAN_DANGER("Stop welding first!"))
return
return TRUE
status = !status
if(status)
to_chat(user, SPAN_NOTICE("You secure the welder."))
else
to_chat(user, SPAN_NOTICE("The welder can now be attached and modified."))
add_fingerprint(user)
return
return TRUE
if(!status && (istype(W, /obj/item/stack/rods)))
var/obj/item/stack/rods/R = W
@@ -355,10 +355,9 @@
user.drop_from_inventory(src)
var/obj/item/flamethrower/F = new /obj/item/flamethrower(get_turf(src), src)
user.put_in_hands(F)
return
return TRUE
..()
return
return ..()
/obj/item/weldingtool/process()
if(welding)
@@ -607,26 +606,26 @@
if(istype(I, /obj/item/eyeshield))
if(eyeshield)
to_chat(user, SPAN_WARNING("\The [src] already has an eye shield installed!"))
return
return TRUE
user.drop_from_inventory(I, src)
to_chat(user, SPAN_NOTICE("You install \the [I] into \the [src]."))
eyeshield = I
add_overlay("eyeshield_attached", TRUE)
return
return TRUE
if(istype(I, /obj/item/overcapacitor))
if(overcap)
to_chat(user, SPAN_WARNING("\The [src] already has an overcapacitor installed!"))
return
return TRUE
user.drop_from_inventory(I, src)
to_chat(user, SPAN_NOTICE("You install \the [I] into \the [src]."))
overcap = I
add_overlay("overcap_attached", TRUE)
toolspeed *= 2
return
return TRUE
if(I.isscrewdriver())
if(!eyeshield && !overcap)
to_chat(user, SPAN_WARNING("\The [src] doesn't have any accessories to remove!"))
return
return TRUE
var/list/accessories = list()
if(eyeshield)
var/image/radial_button = image(icon = src.icon, icon_state = "eyeshield")
@@ -644,11 +643,11 @@
overcap = null
toolspeed *= 0.5
if(!remove_accessory)
return
return TRUE
user.put_in_hands(remove_accessory)
to_chat(user, SPAN_NOTICE("You remove \the [remove_accessory] into \the [src]."))
cut_overlay("[remove_accessory.icon_state]_attached", TRUE)
return
return TRUE
return ..()
//Make sure the experimental tool only stops processing when its turned off AND full
@@ -916,12 +915,14 @@
/obj/item/steelwool/attackby(obj/item/W, mob/user)
if(W.isFlameSource())
ignite(W, user)
return TRUE
else if(istype(W, /obj/item/cell))
var/obj/item/cell/S = W
if(S.charge)
ignite(W, user)
else
to_chat(user, SPAN_WARNING("The cell isn't charged!"))
return TRUE
/obj/item/steelwool/fire_act()
ignite()
+3 -3
View File
@@ -183,15 +183,15 @@ LINEN BINS
to_chat(user, SPAN_NOTICE("You poke eyeholes in \the [src]!"))
new /obj/item/bedsheet/costume(get_turf(src))
qdel(src)
return
return TRUE
else if(is_sharp(I))
user.visible_message(SPAN_NOTICE("\The [user] begins cutting up \the [src] with \the [I]."), SPAN_NOTICE("You begin cutting up \the [src] with \the [I]."))
if(do_after(user, 50 / I.toolspeed))
to_chat(user, SPAN_NOTICE("You cut \the [src] into pieces!"))
new /obj/item/stack/material/cloth(get_turf(src), rand(2, 5))
qdel(src)
return
..()
return TRUE
return ..()
/obj/item/bedsheet/grey
icon_state = "sheetgrey"
+1
View File
@@ -979,4 +979,5 @@
new /obj/effect/decal/cleanable/ash(src.loc)
qdel(src)
return TRUE
@@ -575,8 +575,7 @@
to_chat(user, SPAN_NOTICE("You collect the roller bed."))
src.forceMove(RH)
RH.held = src
return
..()
return TRUE
/obj/item/roller/proc/deploy_roller(mob/user, atom/location)
var/obj/structure/bed/roller/R = new origin_type(location)