Merge remote-tracking branch 'ParadiseSS13/master' into depot_loot_fix

This commit is contained in:
Kyep
2020-03-07 23:25:20 -08:00
514 changed files with 14823 additions and 6822 deletions
@@ -14,9 +14,7 @@
var/locked = FALSE
var/wall_mounted = 0 //never solid (You can always pass over it)
var/lastbang
var/cutting_tool = /obj/item/weldingtool
var/sound = 'sound/machines/click.ogg'
var/cutting_sound
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
var/material_drop = /obj/item/stack/sheet/metal
var/material_drop_amount = 2
@@ -220,22 +218,6 @@
MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
if(istype(W,/obj/item/tk_grab))
return FALSE
if(istype(W, cutting_tool))
if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
return
to_chat(user, "<span class='notice'>You begin cutting \the [src] apart...</span>")
playsound(loc, cutting_sound ? cutting_sound : WT.usesound, 40, 1)
if(do_after(user, 40 * WT.toolspeed, 1, target = src))
if(!opened || !WT.isOn())
return
playsound(loc, cutting_sound ? cutting_sound : WT.usesound, 50, 1)
visible_message("<span class='notice'>[user] slices apart \the [src].</span>",
"<span class='notice'>You cut \the [src] apart with \the [WT].</span>",
"<span class='italics'>You hear welding.</span>")
deconstruct(TRUE)
return
if(isrobot(user))
return
if(!user.drop_item()) //couldn't drop the item
@@ -245,25 +227,36 @@
W.forceMove(loc)
else if(istype(W, /obj/item/stack/packageWrap))
return
else if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(src == user.loc)
to_chat(user, "<span class='notice'>You can not [welded?"unweld":"weld"] the locker from inside.</span>")
return
if(!WT.remove_fuel(0, user))
to_chat(user, "<span class='notice'>You need more welding fuel to complete this task.</span>")
return
if(!do_after_once(user, 15, target = src))
return
welded = !welded
update_icon()
for(var/mob/M in viewers(src))
M.show_message("<span class='warning'>[src] has been [welded?"welded shut":"unwelded"] by [user.name].</span>", 3, "You hear welding.", 2)
else if(user.a_intent != INTENT_HARM)
attack_hand(user)
else
return ..()
/obj/structure/closet/welder_act(mob/user, obj/item/I)
. = TRUE
if(!opened && user.loc == src)
to_chat(user, "<span class='warning'>You can't weld [src] from inside!</span>")
return
if(!I.tool_use_check(user, 0))
return
if(opened)
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume))
WELDER_SLICING_SUCCESS_MESSAGE
deconstruct(TRUE)
return
else
var/adjective = welded ? "open" : "shut"
user.visible_message("<span class='notice'>[user] begins welding [src] [adjective]...</span>", "<span class='notice'>You begin welding [src] [adjective]...</span>", "<span class='warning'>You hear welding.</span>")
if(I.use_tool(src, user, 15, volume = I.tool_volume))
if(opened)
to_chat(user, "<span class='notice'>Keep [src] shut while doing that!</span>")
return
user.visible_message("<span class='notice'>[user] welds [src] [adjective]!</span>", "<span class='notice'>You weld [src] [adjective]!</span>")
welded = !welded
update_icon()
return
/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/user)
..()
if(istype(O, /obj/screen)) //fix for HUD elements making their way into the world -Pete
@@ -11,7 +11,6 @@
sound = 'sound/effects/rustle2.ogg'
material_drop = /obj/item/stack/sheet/cardboard
var/amt = 4
cutting_sound = 'sound/items/poster_ripped.ogg'
var/move_delay = 0
var/egged = 0
@@ -58,11 +57,11 @@
I.alpha = 0
animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING)
/obj/structure/closet/cardboard/welder_act()
return
/obj/structure/closet/cardboard/attackby(obj/item/W as obj, mob/user as mob, params)
if(src.opened)
if(istype(W, /obj/item/weldingtool))
return
if(istype(W, /obj/item/wirecutters))
var/obj/item/wirecutters/WC = W
new /obj/item/stack/sheet/cardboard(src.loc, amt)
@@ -196,4 +196,7 @@
return
/obj/structure/closet/fireaxecabinet/close()
return
return
/obj/structure/closet/fireaxecabinet/welder_act(mob/user, obj/item/I) //A bastion of sanity in a sea of madness
return
@@ -92,6 +92,9 @@
shatter(M)
..()
/obj/structure/closet/statue/welder_act()
return
/obj/structure/closet/statue/MouseDrop_T()
return
@@ -104,6 +104,7 @@
icon_opened = "toolclosetopen"
/obj/structure/closet/toolcloset/New()
..()
if(prob(40))
new /obj/item/clothing/suit/storage/hazardvest(src)
if(prob(70))
@@ -185,6 +185,9 @@
dump_contents()
..()
/obj/structure/closet/crate/welder_act()
return
/obj/structure/closet/crate/attack_hand(mob/user)
if(manifest)
to_chat(user, "<span class='notice'>You tear the manifest off of the crate.</span>")
@@ -439,35 +442,11 @@
icon_closed = "largebin"
anchored = TRUE
/obj/structure/closet/crate/can/attackby(obj/item/W, mob/living/user, params)
if(iswrench(W))
add_fingerprint(user)
user.changeNext_move(CLICK_CD_MELEE)
if(anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] starts loosening [src]'s floor casters.", \
"<span class='notice'>You start loosening [src]'s floor casters...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!loc || !anchored)
return
user.visible_message("[user] loosened [src]'s floor casters.", \
"<span class='notice'>You loosen [src]'s floor casters.</span>")
anchored = FALSE
else
if(!isfloorturf(loc))
user.visible_message("<span class='warning'>A floor must be present to secure [src]!</span>")
return
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] start securing [src]'s floor casters...", \
"<span class='notice'>You start securing [src]'s floor casters...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!loc || anchored)
return
user.visible_message("[user] has secured [src]'s floor casters.", \
"<span class='notice'>You have secured [src]'s floor casters.</span>")
anchored = TRUE
else
return ..()
/obj/structure/closet/crate/can/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
default_unfasten_wrench(user, I, 40)
/obj/structure/closet/crate/radiation
desc = "A crate with a radiation sign on it."
+29 -27
View File
@@ -41,34 +41,36 @@
/obj/structure/curtain/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/toy/crayon))
color = input(user, "Choose Color") as color
else if(isscrewdriver(W))
if(anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] unscrews [src] from the floor.</span>", "<span class='notice'>You start to unscrew [src] from the floor...</span>", "You hear rustling noises.")
if(do_after(user, 50 * W.toolspeed, target = src))
if(!anchored)
return
anchored = FALSE
to_chat(user, "<span class='notice'>You unscrew [src] from the floor.</span>")
else
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] screws [src] to the floor.</span>", "<span class='notice'>You start to screw [src] to the floor...</span>", "You hear rustling noises.")
if(do_after(user, 50 * W.toolspeed, target = src))
if(anchored)
return
anchored = TRUE
to_chat(user, "<span class='notice'>You screw [src] to the floor.</span>")
else if(istype(W, /obj/item/wirecutters))
if(!anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] cuts apart [src].</span>", "<span class='notice'>You start to cut apart [src].</span>", "You hear cutting.")
if(do_after(user, 50 * W.toolspeed, target = src))
if(anchored)
return
to_chat(user, "<span class='notice'>You cut apart [src].</span>")
deconstruct()
return
return ..()
/obj/structure/curtain/screwdriver_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_start_check(user, 0))
return
if(anchored)
user.visible_message("<span class='warning'>[user] unscrews [src] from the floor.</span>", "<span class='notice'>You start to unscrew [src] from the floor...</span>", "You hear rustling noises.")
if(I.use_tool(src, user, 50, volume = I.tool_volume) && anchored)
anchored = FALSE
to_chat(user, "<span class='notice'>You unscrew [src] from the floor.</span>")
else
return ..()
user.visible_message("<span class='warning'>[user] screws [src] to the floor.</span>", "<span class='notice'>You start to screw [src] to the floor...</span>", "You hear rustling noises.")
if(I.use_tool(src, user, 50, volume = I.tool_volume) && !anchored)
anchored = TRUE
to_chat(user, "<span class='notice'>You screw [src] to the floor.</span>")
/obj/structure/curtain/wirecutter_act(mob/user, obj/item/I)
if(anchored)
return
. = TRUE
if(!I.tool_start_check(user, 0))
return
WIRECUTTER_ATTEMPT_DISMANTLE_MESSAGE
if(I.use_tool(src, user, 50, volume = I.tool_volume))
WIRECUTTER_DISMANTLE_SUCCESS_MESSAGE
deconstruct()
/obj/structure/curtain/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/cloth(loc, 2)
+14 -13
View File
@@ -37,21 +37,22 @@
if(obj_integrity <= 0 && istype(depotarea))
overload(TRUE)
/obj/structure/fusionreactor/attackby(obj/item/I, mob/user, params)
if(iswrench(I))
playsound(loc, I.usesound, 50, 1)
to_chat(user, "<span class='notice'>The [src] is too well secured to the floor.</span>")
return
if(isscrewdriver(I))
to_chat(user, "<span class='notice'>You try to screwdriver open [src], but accidentally release some radiation!</span>")
if(prob(50))
empulse(src, 4, 10)
else
for(var/mob/living/M in range(10, loc))
M.apply_effect(rand(5, 25), IRRADIATE)
/obj/structure/fusionreactor/screwdriver_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
to_chat(user, "<span class='danger'>You try to screwdriver open [src], but accidentally release some radiation!</span>")
if(prob(50))
empulse(src, 4, 10)
else
return ..()
for(var/mob/living/M in range(10, loc))
M.apply_effect(rand(5, 25), IRRADIATE)
/obj/structure/fusionreactor/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
to_chat(user, "<span class='notice'>The [src] is too well secured to the floor.</span>")
/obj/structure/fusionreactor/proc/overload(containment_failure = FALSE, skip_qdel = FALSE)
if(has_overloaded)
+35 -34
View File
@@ -105,31 +105,6 @@
toggle_lock(user)
else
to_chat(user, "<span class='warning'>Access denied.</span>")
else if(iswelder(I) && user.a_intent == INTENT_HELP && !broken)
var/obj/item/weldingtool/WT = I
if(obj_integrity < max_integrity && WT.remove_fuel(5, user))
to_chat(user, "<span class='notice'>You begin repairing [src].</span>")
playsound(loc, WT.usesound, 40, 1)
if(do_after(user, 40 * WT.toolspeed, target = src))
obj_integrity = max_integrity
playsound(loc, 'sound/items/welder2.ogg', 50, 1)
update_icon()
to_chat(user, "<span class='notice'>You repair [src].</span>")
else
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
else if(!alert && iscrowbar(I) && openable) //Only applies to the lab cage and player made display cases
if(broken)
if(showpiece)
to_chat(user, "<span class='notice'>Remove the displayed object first.</span>")
else
to_chat(user, "<span class='notice'>You remove the destroyed case</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] [src].</span>")
if(do_after(user, 20 * I.toolspeed, target = src))
to_chat(user, "<span class='notice'>You [open ? "close":"open"] [src].</span>")
toggle_lock(user)
else if(open && !showpiece)
if(user.drop_item())
I.forceMove(src)
@@ -150,6 +125,30 @@
else
return ..()
/obj/structure/displaycase/crowbar_act(mob/user, obj/item/I) //Only applies to the lab cage and player made display cases
if(alert || !openable)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(broken)
if(showpiece)
to_chat(user, "<span class='notice'>Remove the displayed object first.</span>")
if(I.use_tool(src, user, 0, volume = I.tool_volume))
to_chat(user, "<span class='notice'>You remove the destroyed case</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] [src].</span>")
if(!I.use_tool(src, user, 20, volume = I.tool_volume))
return
to_chat(user, "<span class='notice'>You [open ? "close":"open"] [src].</span>")
toggle_lock(user)
obj/structure/displaycase/welder_act(mob/user, obj/item/I)
. = TRUE
if(default_welder_repair(user, I))
broken = FALSE
/obj/structure/displaycase/proc/toggle_lock(mob/user)
open = !open
update_icon()
@@ -180,15 +179,7 @@
var/obj/item/airlock_electronics/electronics
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
if(iswrench(I)) //The player can only deconstruct the wooden frame
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 30 * I.toolspeed, target = src))
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
new /obj/item/stack/sheet/wood(get_turf(src), 5)
qdel(src)
else if(istype(I, /obj/item/airlock_electronics))
if(istype(I, /obj/item/airlock_electronics))
to_chat(user, "<span class='notice'>You start installing the electronics into [src]...</span>")
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 30, target = src))
@@ -217,6 +208,16 @@
else
return ..()
/obj/structure/displaycase_chassis/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(!I.use_tool(src, user, 30, volume = I.tool_volume))
return
TOOL_DISMANTLE_SUCCESS_MESSAGE
new /obj/item/stack/sheet/wood(get_turf(src), 5)
qdel(src)
//The lab cage and captains display case do not spawn with electronics, which is why req_access is needed.
/obj/structure/displaycase/captain
+124 -111
View File
@@ -63,58 +63,6 @@
created_name = t
return
else if(iswelder(W) && (mineral || glass || !anchored ))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
playsound(loc, WT.usesound, 50, 1)
if(mineral)
var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]")
user.visible_message("[user] welds the [mineral] plating off the airlock assembly.", "You start to weld the [mineral] plating off the airlock assembly...")
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You weld the [mineral] plating off.</span>")
new mineral_path(loc, 2)
var/obj/structure/door_assembly/PA = new previous_assembly(loc)
transfer_assembly_vars(src, PA)
else if(glass)
user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly...")
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You weld the glass panel out.</span>")
if(heat_proof_finished)
new /obj/item/stack/sheet/rglass(get_turf(src))
heat_proof_finished = FALSE
else
new /obj/item/stack/sheet/glass(get_turf(src))
glass = FALSE
else if(!anchored)
user.visible_message("<span class='warning'>[user] disassembles the airlock assembly.</span>", \
"You start to disassemble the airlock assembly...")
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You disassemble the airlock assembly.</span>")
deconstruct(TRUE)
else
to_chat(user, "<span class='notice'>You need more welding fuel.</span>")
return
else if(iswrench(W) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES)
playsound(loc, W.usesound, 100, 1)
if(anchored)
user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor...")
else
user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src)
return
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure the airlock assembly.</span>")
anchored = !anchored
else if(iscoil(W) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES && anchored)
var/obj/item/stack/cable_coil/coil = W
if(coil.get_amount() < 1)
@@ -128,17 +76,6 @@
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
to_chat(user, "<span class='notice'>You wire the airlock assembly.</span>")
else if(iswirecutter(W) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
return
to_chat(user, "<span class='notice'>You cut the wires from the airlock assembly.</span>")
new/obj/item/stack/cable_coil(get_turf(user), 1)
state = AIRLOCK_ASSEMBLY_NEEDS_WIRES
else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && W.icon_state != "door_electronics_smoked")
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...")
@@ -153,24 +90,6 @@
name = "near finished airlock assembly"
electronics = W
else if(iscrowbar(W) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
return
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
name = "wired airlock assembly"
var/obj/item/airlock_electronics/ae
if(!electronics)
ae = new/obj/item/airlock_electronics(loc)
else
ae = electronics
electronics = null
ae.forceMove(loc)
else if(istype(W, /obj/item/stack/sheet) && (!glass || !mineral))
var/obj/item/stack/sheet/S = W
if(S)
@@ -210,41 +129,135 @@
to_chat(user, "<span class='warning'>You cannot add [S] to [src]!</span>")
else
to_chat(user, "<span class='warning'>You cannot add [S] to [src]!</span>")
else if(isscrewdriver(W) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] finishes the airlock.", \
"<span class='notice'>You start finishing the airlock...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(loc && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
to_chat(user, "<span class='notice'>You finish the airlock.</span>")
var/obj/machinery/door/airlock/door
if(glass)
door = new glass_type(loc)
else
door = new airlock_type(loc)
door.setDir(dir)
door.electronics = electronics
door.unres_sides = electronics.unres_sides
door.heat_proof = heat_proof_finished
if(electronics.one_access)
door.req_access = null
door.req_one_access = electronics.conf_access
else
door.req_access = electronics.conf_access
if(created_name)
door.name = created_name
else
door.name = base_name
door.previous_airlock = previous_assembly
electronics.forceMove(door)
qdel(src)
else
return ..()
update_name()
update_icon()
/obj/structure/door_assembly/crowbar_act(mob/user, obj/item/I)
if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
user.visible_message("[user] is removing the electronics from the airlock assembly...", "You start to remove electronics from the airlock assembly...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
return
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
name = "wired airlock assembly"
var/obj/item/airlock_electronics/ae
if(!electronics)
ae = new/obj/item/airlock_electronics(loc)
else
ae = electronics
electronics = null
ae.forceMove(loc)
update_icon()
update_name()
/obj/structure/door_assembly/screwdriver_act(mob/user, obj/item/I)
if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
user.visible_message("[user] is finishing the airlock...", \
"<span class='notice'>You start finishing the airlock...</span>")
. = TRUE
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
return
to_chat(user, "<span class='notice'>You finish the airlock.</span>")
var/obj/machinery/door/airlock/door
if(glass)
door = new glass_type(loc)
else
door = new airlock_type(loc)
door.setDir(dir)
door.electronics = electronics
door.unres_sides = electronics.unres_sides
door.heat_proof = heat_proof_finished
if(electronics.one_access)
door.req_access = null
door.req_one_access = electronics.conf_access
else
door.req_access = electronics.conf_access
if(created_name)
door.name = created_name
else
door.name = base_name
door.previous_airlock = previous_assembly
electronics.forceMove(door)
qdel(src)
update_icon()
/obj/structure/door_assembly/wirecutter_act(mob/user, obj/item/I)
if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
user.visible_message("[user] is cutting the wires from the airlock assembly...", "You start to cut the wires from airlock assembly...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
return
to_chat(user, "<span class='notice'>You cut the wires from the airlock assembly.</span>")
new/obj/item/stack/cable_coil(get_turf(user), 1)
state = AIRLOCK_ASSEMBLY_NEEDS_WIRES
update_icon()
/obj/structure/door_assembly/wrench_act(mob/user, obj/item/I)
if(state != AIRLOCK_ASSEMBLY_NEEDS_WIRES)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(anchored)
user.visible_message("[user] is unsecuring the airlock assembly from the floor...", "You start to unsecure the airlock assembly from the floor...")
else
user.visible_message("[user] is securing the airlock assembly to the floor...", "You start to secure the airlock assembly to the floor...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != AIRLOCK_ASSEMBLY_NEEDS_WIRES)
return
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure the airlock assembly.</span>")
anchored = !anchored
/obj/structure/door_assembly/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(mineral)
var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]")
visible_message("<span class='notice'>[user] welds the [mineral] plating off [src].</span>",\
"<span class='notice'>You start to weld the [mineral] plating off [src]...</span>",\
"<span class='warning'>You hear welding.</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume))
return
to_chat(user, "<span class='notice'>You weld the [mineral] plating off.</span>")
new mineral_path(loc, 2)
var/obj/structure/door_assembly/PA = new previous_assembly(loc)
transfer_assembly_vars(src, PA)
else if(glass)
visible_message("<span class='notice'>[user] welds the glass panel out of [src].</span>",\
"<span class='notice'>You start to weld the glass panel out of the [src]...</span>",\
"<span class='warning'>You hear welding.</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume))
return
to_chat(user, "<span class='notice'>You weld the glass panel out.</span>")
if(heat_proof_finished)
new /obj/item/stack/sheet/rglass(get_turf(src))
heat_proof_finished = FALSE
else
new /obj/item/stack/sheet/glass(get_turf(src))
glass = FALSE
else if(!anchored)
visible_message("<span class='warning'>[user] disassembles [src].</span>", \
"<span class='notice'>You start to disassemble [src]...</span>",\
"<span class='warning'>You hear welding.</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume))
return
to_chat(user, "<span class='notice'>You disassemble the airlock assembly.</span>")
deconstruct(TRUE)
update_icon()
/obj/structure/door_assembly/update_icon()
overlays.Cut()
if(!glass)
+21 -33
View File
@@ -53,41 +53,29 @@
add_fingerprint(H)
H.update_body()
/obj/structure/dresser/attackby(obj/item/W, mob/living/user, params)
add_fingerprint(user)
user.changeNext_move(CLICK_CD_MELEE)
if(iswrench(W))
if(anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] is loosening [src]'s bolts.", \
"<span class='notice'>You are loosening [src]'s bolts...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!loc || !anchored)
return
user.visible_message("[user] loosened [src]'s bolts!", \
"<span class='notice'>You loosen [src]'s bolts!</span>")
anchored = 0
else
if(!isfloorturf(loc))
user.visible_message("<span class='warning'>A floor must be present to secure [src]!</span>")
return
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] is securing [src]'s bolts...", \
"<span class='notice'>You are securing [src]'s bolts...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!loc || anchored)
return
user.visible_message("[user] has secured [src]'s bolts.", \
"<span class='notice'>You have secured [src]'s bolts.</span>")
anchored = 1
/obj/structure/dresser/crowbar_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_start_check(user, 0))
return
if(iscrowbar(W) && !anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] is attempting to dismantle [src].", "<span class='notice'>You begin to dismantle [src]...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
deconstruct()
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(I.use_tool(src, user, 50, volume = I.tool_volume))
TOOL_DISMANTLE_SUCCESS_MESSAGE
/obj/structure/dresser/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
return ..()
if(anchored)
WRENCH_UNANCHOR_MESSAGE
anchored = FALSE
else
if(!isfloorturf(loc))
user.visible_message("<span class='warning'>A floor must be present to secure [src]!</span>")
return
WRENCH_ANCHOR_MESSAGE
anchored = TRUE
/obj/structure/dresser/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/wood(drop_location(), 30)
+14 -19
View File
@@ -77,25 +77,6 @@
playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3)
opened = !opened
update_icon()
else if(istype(O, /obj/item/weldingtool))
if(has_extinguisher)
to_chat(user, "<span class='warning'>You need to remove the extinguisher before deconstructing the cabinet!</span>")
return
if(!opened)
to_chat(user, "<span class='warning'>Open the cabinet before cutting it apart!</span>")
return
var/obj/item/weldingtool/WT = O
if(!WT.remove_fuel(0, user))
return
to_chat(user, "<span class='notice'>You begin cutting [src] apart...</span>")
playsound(loc, WT.usesound, 40, 1)
if(do_after(user, 40 * WT.toolspeed, 1, target = src))
if(!src ||!opened || !WT.isOn()) // !src to prevent it being duped
return
visible_message("<span class='notice'>[user] slices apart [src].</span>",
"<span class='notice'>You cut [src] apart with [WT].</span>",
"<span class='italics'>You hear welding.</span>")
deconstruct(TRUE)
else if(user.a_intent != INTENT_HARM)
playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3)
opened = !opened
@@ -103,6 +84,20 @@
else
return ..()
/obj/structure/extinguisher_cabinet/welder_act(mob/user, obj/item/I)
if(has_extinguisher)
to_chat(user, "<span class='warning'>You need to remove the extinguisher before deconstructing [src]!</span>")
return
if(!opened)
to_chat(user, "<span class='warning'>Open the cabinet before cutting it apart!</span>")
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume))
WELDER_SLICING_SUCCESS_MESSAGE
deconstruct(TRUE)
/obj/structure/extinguisher_cabinet/attack_hand(mob/user)
if(isrobot(user) || isalien(user))
+8 -4
View File
@@ -119,16 +119,20 @@
return
user.visible_message("<span class='notice'>[user] tightens some bolts on the wall.</span>", "<span class='warning'>You tighten the bolts on the wall.</span>")
ChangeToWall()
if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0,user))
dismantle(user, TRUE)
else
to_chat(user, "<span class='warning'>You can't reach, close it first!</span>")
if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/pickaxe/drill/diamonddrill) || istype(W, /obj/item/pickaxe/drill/jackhammer) || istype(W, /obj/item/melee/energy/blade))
dismantle(user, TRUE)
/obj/structure/falsewall/welder_act(mob/user, obj/item/I)
if(!density)
return
. = TRUE
if(!I.use_tool(src, user, volume = I.tool_volume))
return
dismantle(user, TRUE)
/obj/structure/falsewall/proc/dismantle(mob/user, disassembled = TRUE)
user.visible_message("<span class='notice'>[user] dismantles the false wall.</span>", "<span class='warning'>You dismantle the false wall.</span>")
playsound(src, 'sound/items/welder.ogg', 100, TRUE)
+99 -95
View File
@@ -9,6 +9,7 @@
max_integrity = 200
var/can_displace = TRUE //If the girder can be moved around by crowbarring it
var/metalUsed = 2 //used to determine amount returned in deconstruction
var/metal_type = /obj/item/stack/sheet/metal
/obj/structure/girder/examine(mob/user)
. = ..()
@@ -27,7 +28,7 @@
/obj/structure/girder/proc/refundMetal(metalAmount) //refunds metal used in construction when deconstructed
for(var/i=0;i < metalAmount;i++)
new /obj/item/stack/sheet/metal(get_turf(src))
new metal_type(get_turf(src))
/obj/structure/girder/temperature_expose(datum/gas_mixture/air, exposed_temperature)
..()
@@ -37,62 +38,7 @@
/obj/structure/girder/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
if(isscrewdriver(W))
if(state == GIRDER_DISPLACED)
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] disassembles the girder.</span>", \
"<span class='notice'>You start to disassemble the girder...</span>", "You hear clanking and banging noises.")
if(do_after(user, 40*W.toolspeed, target = src))
if(state != GIRDER_DISPLACED)
return
state = GIRDER_DISASSEMBLED
to_chat(user, "<span class='notice'>You disassemble the girder.</span>")
var/obj/item/stack/sheet/metal/M = new(loc, 2)
M.add_fingerprint(user)
qdel(src)
else if(state == GIRDER_REINF)
playsound(loc, W.usesound, 100, 1)
to_chat(user, "<span class='notice'>You start unsecuring support struts...</span>")
if(do_after(user, 40*W.toolspeed, target = src))
if(state != GIRDER_REINF)
return
to_chat(user, "<span class='notice'>You unsecure the support struts.</span>")
state = GIRDER_REINF_STRUTS
else if(state == GIRDER_REINF_STRUTS)
playsound(loc, W.usesound, 100, 1)
to_chat(user, "<span class='notice'>You start securing support struts...</span>")
if(do_after(user, 40*W.toolspeed, target = src))
if(state != GIRDER_REINF_STRUTS)
return
to_chat(user, "<span class='notice'>You secure the support struts.</span>")
state = GIRDER_REINF
else if(iswrench(W))
if(state == GIRDER_NORMAL)
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] disassembles the girder.</span>", \
"<span class='notice'>You start to disassemble the girder...</span>", "You hear clanking and banging noises.")
if(do_after(user, 40*W.toolspeed, target = src))
if(state != GIRDER_NORMAL)
return
state = GIRDER_DISASSEMBLED
to_chat(user, "<span class='notice'>You disassemble the girder.</span>")
var/obj/item/stack/sheet/metal/M = new(loc, 2)
M.add_fingerprint(user)
qdel(src)
else if(state == GIRDER_DISPLACED)
if(!isfloorturf(loc))
to_chat(user, "<span class='warning'>A floor must be present to secure the girder!</span>")
return
playsound(loc, W.usesound, 100, 1)
to_chat(user, "<span class='notice'>You start securing the girder...</span>")
if(do_after(user, 40*W.toolspeed, target = src))
to_chat(user, "<span class='notice'>You secure the girder.</span>")
var/obj/structure/girder/G = new(loc)
transfer_fingerprints_to(G)
qdel(src)
else if(istype(W, /obj/item/gun/energy/plasmacutter))
if(istype(W, /obj/item/gun/energy/plasmacutter))
to_chat(user, "<span class='notice'>You start slicing apart the girder...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src)
@@ -113,28 +59,6 @@
refundMetal(metalUsed)
qdel(src)
else if(iswirecutter(W) && state == GIRDER_REINF_STRUTS)
playsound(loc, W.usesound, 100, 1)
to_chat(user, "<span class='notice'>You start removing the inner grille...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src)
return
to_chat(user, "<span class='notice'>You remove the inner grille.</span>")
new /obj/item/stack/sheet/plasteel(get_turf(src))
var/obj/structure/girder/G = new (loc)
transfer_fingerprints_to(G)
qdel(src)
else if(iscrowbar(W))
if(state == GIRDER_NORMAL && can_displace)
playsound(loc, W.usesound, 100, 1)
to_chat(user, "<span class='notice'>You start dislodging the girder...</span>")
if(do_after(user, 40*W.toolspeed, target = src))
to_chat(user, "<span class='notice'>You dislodge the girder.</span>")
var/obj/structure/girder/displaced/D = new (loc)
transfer_fingerprints_to(D)
qdel(src)
else if(istype(W, /obj/item/stack))
if(iswallturf(loc))
to_chat(user, "<span class='warning'>There is already a wall present!</span>")
@@ -342,6 +266,101 @@
else
return ..()
/obj/structure/girder/crowbar_act(mob/user, obj/item/I)
if(!can_displace || state != GIRDER_NORMAL)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
to_chat(user, "<span class='notice'>You start dislodging the girder...</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_NORMAL)
return
to_chat(user, "<span class='notice'>You dislodge the girder.</span>")
var/obj/structure/girder/displaced/D = new (loc)
transfer_fingerprints_to(D)
qdel(src)
/obj/structure/girder/screwdriver_act(mob/user, obj/item/I)
if(state != GIRDER_DISPLACED && state != GIRDER_REINF && state != GIRDER_REINF_STRUTS)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
switch(state)
if(GIRDER_DISPLACED)
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_DISPLACED)
return
state = GIRDER_DISASSEMBLED
TOOL_DISMANTLE_SUCCESS_MESSAGE
var/obj/item/stack/sheet/metal/M = new(loc, 2)
M.add_fingerprint(user)
qdel(src)
if(GIRDER_REINF)
to_chat(user, "<span class='notice'>You start unsecuring support struts...</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_REINF)
return
to_chat(user, "<span class='notice'>You unsecure the support struts.</span>")
state = GIRDER_REINF_STRUTS
if(GIRDER_REINF_STRUTS)
to_chat(user, "<span class='notice'>You start securing support struts...</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_REINF_STRUTS)
return
to_chat(user, "<span class='notice'>You secure the support struts.</span>")
state = GIRDER_REINF
/obj/structure/girder/wirecutter_act(mob/user, obj/item/I)
if(state != GIRDER_REINF_STRUTS)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
to_chat(user, "<span class='notice'>You start removing the inner grille...</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_REINF_STRUTS)
return
to_chat(user, "<span class='notice'>You remove the inner grille.</span>")
new /obj/item/stack/sheet/plasteel(get_turf(src))
var/obj/structure/girder/G = new (loc)
transfer_fingerprints_to(G)
qdel(src)
/obj/structure/girder/wrench_act(mob/user, obj/item/I)
if(state != GIRDER_NORMAL && state != GIRDER_DISPLACED)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(state == GIRDER_NORMAL)
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_NORMAL)
return
state = GIRDER_DISASSEMBLED
TOOL_DISMANTLE_SUCCESS_MESSAGE
var/obj/item/stack/sheet/metal/M = new(loc, 2)
M.add_fingerprint(user)
qdel(src)
else
if(!isfloorturf(loc))
to_chat(user, "<span class='warning'>A floor must be present to secure the girder!</span>")
return
to_chat(user, "<span class='notice'>You start securing the girder...</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != GIRDER_DISPLACED)
return
to_chat(user, "<span class='notice'>You secure the girder.</span>")
var/obj/structure/girder/G = new(loc)
transfer_fingerprints_to(G)
qdel(src)
/obj/structure/girder/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume))
WELDER_SLICING_SUCCESS_MESSAGE
refundMetal(metalUsed)
qdel(src)
/obj/structure/girder/CanPass(atom/movable/mover, turf/target, height=0)
if(height==0)
return 1
@@ -392,6 +411,7 @@
icon_state = "cultgirder"
can_displace = FALSE
metalUsed = 1
metal_type = /obj/item/stack/sheet/runed_metal
/obj/structure/girder/cult/New()
. = ..()
@@ -407,21 +427,6 @@
user.visible_message("<span class='warning'>[user] strikes [src] with [W]!</span>", "<span class='notice'>You demolish [src].</span>")
refundMetal(metalUsed)
qdel(src)
else if(iswelder(W))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0,user))
playsound(loc, W.usesound, 50, 1)
to_chat(user, "<span class='notice'>You start slicing apart the girder...</span>")
if(do_after(user, 40*W.toolspeed, target = src))
if(!WT.isOn())
return
to_chat(user, "<span class='notice'>You slice apart the girder.</span>")
var/obj/item/stack/sheet/runed_metal/R = new(get_turf(src))
R.amount = 1
transfer_fingerprints_to(R)
qdel(src)
else if(istype(W, /obj/item/gun/energy/plasmacutter))
to_chat(user, "<span class='notice'>You start slicing apart the girder...</span>")
if(do_after(user, 40* W.toolspeed, target = src))
@@ -431,7 +436,6 @@
R.amount = 1
transfer_fingerprints_to(R)
qdel(src)
else if(istype(W, /obj/item/pickaxe/drill/jackhammer))
var/obj/item/pickaxe/drill/jackhammer/D = W
to_chat(user, "<span class='notice'>Your jackhammer smashes through the girder!</span>")
+22 -13
View File
@@ -69,7 +69,7 @@
/obj/structure/grille/attack_animal(mob/user)
. = ..()
if(!shock(user, 70))
if(. && !QDELETED(src) && !shock(user, 70))
take_damage(rand(5,10), BRUTE, "melee", 1)
/obj/structure/grille/hulk_damage()
@@ -118,18 +118,7 @@
/obj/structure/grille/attackby(obj/item/W, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
add_fingerprint(user)
if(iswirecutter(W))
if(!shock(user, 100))
playsound(loc, W.usesound, 100, 1)
deconstruct()
else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored))
if(!shock(user, 90))
playsound(src, W.usesound, 100, 1)
anchored = !anchored
user.visible_message("<span class='notice'>[user] [anchored ? "fastens" : "unfastens"] [src].</span>", \
"<span class='notice'>You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.</span>")
return
else if(istype(W, /obj/item/stack/rods) && broken)
if(istype(W, /obj/item/stack/rods) && broken)
var/obj/item/stack/rods/R = W
if(!shock(user, 90))
user.visible_message("<span class='notice'>[user] rebuilds the broken grille.</span>", \
@@ -148,6 +137,26 @@
else if(istype(W, /obj/item/shard) || !shock(user, 70))
return ..()
/obj/structure/grille/wirecutter_act(mob/user, obj/item/I)
. = TRUE
if(shock(user, 100))
return
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
deconstruct()
/obj/structure/grille/screwdriver_act(mob/user, obj/item/I)
if(!(istype(loc, /turf/simulated) || anchored))
return
. = TRUE
if(shock(user, 90))
return
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
anchored = !anchored
user.visible_message("<span class='notice'>[user] [anchored ? "fastens" : "unfastens"] [src].</span>", \
"<span class='notice'>You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.</span>")
/obj/structure/grille/proc/build_window(obj/item/stack/sheet/S, mob/user)
var/dir_to_set = NORTH
if(!istype(S) || !user)
+36 -43
View File
@@ -175,52 +175,45 @@
else
to_chat(user, "<span class='warning'>You need to raise the blade in order to sharpen it!</span>")
return
if(iswrench(W))
if(current_action)
return
current_action = GUILLOTINE_ACTION_WRENCH
if(do_after(user, GUILLOTINE_WRENCH_DELAY, target = src))
current_action = 0
if(has_buckled_mobs())
to_chat(user, "<span class='warning'>Can't unfasten, someone's strapped in!</span>")
return
if(current_action)
return
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [src].</span>")
anchored = !anchored
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
dir = SOUTH
return TRUE
else
current_action = 0
if(iswelder(W))
var/obj/item/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
return
to_chat(user, "<span class='notice'>You begin cutting [src] apart...</span>")
playsound(loc, WT.usesound, 40, 1)
if(do_after(user, 150 * WT.toolspeed, 1, target = src))
if(!WT.isOn())
return
playsound(loc, WT.usesound, 50, 1)
visible_message("<span class='notice'>[user] slices apart [src].</span>",
"<span class='notice'>You cut [src] apart with [WT].</span>",
"<span class='italics'>You hear welding.</span>")
var/turf/T = get_turf(src)
if(blade_sharpness == GUILLOTINE_BLADE_MAX_SHARP)
new /obj/item/stack/sheet/plasteel(T, 3)
else
new /obj/item/stack/sheet/plasteel(T, 2) //prevents reconstructing to sharpen the guillotine without additional plasteel
new /obj/item/stack/sheet/wood(T, 20)
new /obj/item/stack/cable_coil(T, 10)
qdel(src)
return
else
return ..()
/obj/structure/guillotine/wrench_act(mob/user, obj/item/I)
if(current_action)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
current_action = GUILLOTINE_ACTION_WRENCH
if(!I.use_tool(src, user, GUILLOTINE_WRENCH_DELAY, volume = I.tool_volume))
current_action = 0
return
if(has_buckled_mobs())
to_chat(user, "<span class='warning'>Can't unfasten, someone's strapped in!</span>")
return
current_action = 0
to_chat(user, "<span class='notice'>You [anchored ? "un" : ""]secure [src].</span>")
anchored = !anchored
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
dir = SOUTH
/obj/structure/guillotine/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume))
WELDER_SLICING_SUCCESS_MESSAGE
var/turf/T = get_turf(src)
if(blade_sharpness == GUILLOTINE_BLADE_MAX_SHARP)
new /obj/item/stack/sheet/plasteel(T, 3)
else
new /obj/item/stack/sheet/plasteel(T, 2) //prevents reconstructing to sharpen the guillotine without additional plasteel
new /obj/item/stack/sheet/wood(T, 20)
new /obj/item/stack/cable_coil(T, 10)
qdel(src)
/obj/structure/guillotine/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
if(!anchored)
to_chat(usr, "<span class='warning'>The [src] needs to be wrenched to the floor!</span>")
+13 -12
View File
@@ -45,19 +45,20 @@
desc = "Oh no, seven years of bad luck!"
broken = TRUE
/obj/structure/mirror/attackby(obj/item/I, mob/living/user, params)
if(isscrewdriver(I))
user.visible_message("<span class='notice'>[user] begins to unfasten [src].</span>", "<span class='notice'>You begin to unfasten [src].</span>")
if(do_after(user, 30 * I.toolspeed, target = src))
if(broken)
user.visible_message("<span class='notice'>[user] drops the broken shards to the floor.</span>", "<span class='notice'>You drop the broken shards on the floor.</span>")
new /obj/item/shard(get_turf(user))
else
user.visible_message("<span class='notice'>[user] carefully places [src] on the floor.</span>", "<span class='notice'>You carefully place [src] on the floor.</span>")
new /obj/item/mounted/mirror(get_turf(user))
qdel(src)
/obj/structure/mirror/screwdriver_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
return ..()
user.visible_message("<span class='notice'>[user] begins to unfasten [src].</span>", "<span class='notice'>You begin to unfasten [src].</span>")
if(!I.use_tool(src, user, 30, volume = I.tool_volume))
return
if(broken)
user.visible_message("<span class='notice'>[user] drops the broken shards to the floor.</span>", "<span class='notice'>You drop the broken shards on the floor.</span>")
new /obj/item/shard(get_turf(user))
else
user.visible_message("<span class='notice'>[user] carefully places [src] on the floor.</span>", "<span class='notice'>You carefully place [src] on the floor.</span>")
new /obj/item/mounted/mirror(get_turf(user))
qdel(src)
/obj/structure/mirror/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
+30 -28
View File
@@ -88,12 +88,12 @@
if(!playing || shouldStopPlaying(user)) //If the instrument is playing, or special case
playing = 0
return
if(lentext(note) == 0)
if(length(note) == 0)
continue
var/cur_note = text2ascii(note) - 96
if(cur_note < 1 || cur_note > 7)
continue
for(var/i=2 to lentext(note))
for(var/i=2 to length(note))
var/ni = copytext(note,i,i+1)
if(!text2num(ni))
if(ni == "#" || ni == "b" || ni == "n")
@@ -159,11 +159,11 @@
if(!in_range(instrumentObj, usr))
return
if(lentext(t) >= 12000)
if(length(t) >= 12000)
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
if(cont == "no")
break
while(lentext(t) > 12000)
while(length(t) > 12000)
//split into lines
spawn()
@@ -180,7 +180,7 @@
lines.Cut(201)
var/linenum = 1
for(var/l in lines)
if(lentext(l) > 200)
if(length(l) > 200)
to_chat(usr, "Line [linenum] too long!")
lines.Remove(l)
else
@@ -223,7 +223,7 @@
return
if(lines.len > 200)
return
if(lentext(newline) > 200)
if(length(newline) > 200)
newline = copytext(newline, 1, 200)
lines.Insert(num, newline)
@@ -241,7 +241,7 @@
var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
if(!content || !in_range(instrumentObj, usr))
return
if(lentext(content) > 200)
if(length(content) > 200)
content = copytext(content, 1, 200)
if(num > lines.len || num < 1)
return
@@ -315,25 +315,27 @@
/obj/structure/piano/Topic(href, href_list)
song.Topic(href, href_list)
/obj/structure/piano/attackby(obj/item/O as obj, mob/user as mob, params)
if(iswrench(O))
if(!anchored && !isinspace())
playsound(src.loc, O.usesound, 50, 1)
to_chat(user, "<span class='notice'> You begin to tighten \the [src] to the floor...</span>")
if(do_after(user, 20 * O.toolspeed, target = src))
user.visible_message( \
"[user] tightens \the [src]'s casters.", \
"<span class='notice'> You have tightened \the [src]'s casters. Now it can be played again.</span>", \
"You hear ratchet.")
anchored = 1
else if(anchored)
playsound(src.loc, O.usesound, 50, 1)
to_chat(user, "<span class='notice'> You begin to loosen \the [src]'s casters...</span>")
if(do_after(user, 40 * O.toolspeed, target = src))
user.visible_message( \
"[user] loosens \the [src]'s casters.", \
"<span class='notice'> You have loosened \the [src]. Now it can be pulled somewhere else.</span>", \
"You hear ratchet.")
anchored = 0
/obj/structure/piano/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(!anchored && !isinspace())
WRENCH_ANCHOR_MESSAGE
if(!I.use_tool(src, user, 20, volume = I.tool_volume))
return
user.visible_message( \
"[user] tightens [src]'s casters.", \
"<span class='notice'> You have tightened [src]'s casters. Now it can be played again.</span>", \
"You hear ratchet.")
anchored = TRUE
else if(anchored)
to_chat(user, "<span class='notice'> You begin to loosen [src]'s casters...</span>")
if(!I.use_tool(src, user, 40, volume = I.tool_volume))
return
user.visible_message( \
"[user] loosens [src]'s casters.", \
"<span class='notice'> You have loosened [src]. Now it can be pulled somewhere else.</span>", \
"You hear ratchet.")
anchored = FALSE
else
return ..()
to_chat(user, "<span class='warning'>[src] needs to be bolted to the floor!</span>")
+1 -6
View File
@@ -78,10 +78,5 @@
if(href_list["read"])
var/obj/item/paper/P = locate(href_list["read"])
if((P && P.loc == src))
if(!( istype(usr, /mob/living/carbon/human) ))
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY><TT>[stars(P.info)]</TT></BODY></HTML>", "window=[P.name]")
onclose(usr, "[P.name]")
else
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY><TT>[P.info]</TT></BODY></HTML>", "window=[P.name]")
onclose(usr, "[P.name]")
P.show_content(usr)
return
+31 -37
View File
@@ -17,43 +17,37 @@
if(PLASTIC_FLAPS_DETACHED)
. += "<span class='notice'>[src] are no longer <i>screwed</i> to the floor, and the flaps can be <b>sliced</b> apart.</span>"
/obj/structure/plasticflaps/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
if(isscrewdriver(W))
if(state == PLASTIC_FLAPS_NORMAL)
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] unscrews [src] from the floor.</span>", "<span class='notice'>You start to unscrew [src] from the floor...</span>", "You hear rustling noises.")
if(do_after(user, 180*W.toolspeed, target = src))
if(state != PLASTIC_FLAPS_NORMAL)
return
state = PLASTIC_FLAPS_DETACHED
anchored = FALSE
to_chat(user, "<span class='notice'>You unscrew [src] from the floor.</span>")
else if(state == PLASTIC_FLAPS_DETACHED)
playsound(loc, W.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] screws [src] to the floor.</span>", "<span class='notice'>You start to screw [src] to the floor...</span>", "You hear rustling noises.")
if(do_after(user, 40*W.toolspeed, target = src))
if(state != PLASTIC_FLAPS_DETACHED)
return
state = PLASTIC_FLAPS_NORMAL
anchored = TRUE
to_chat(user, "<span class='notice'>You screw [src] to the floor.</span>")
else if(iswelder(W))
if(state == PLASTIC_FLAPS_DETACHED)
var/obj/item/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
return
playsound(loc, WT.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] slices apart [src].</span>", "<span class='notice'>You start to slice apart [src].</span>", "You hear welding.")
if(do_after(user, 120*WT.toolspeed, target = src))
if(state != PLASTIC_FLAPS_DETACHED)
return
to_chat(user, "<span class='notice'>You slice apart [src].</span>")
var/obj/item/stack/sheet/plastic/five/P = new(loc)
P.add_fingerprint(user)
qdel(src)
else
return ..()
/obj/structure/plasticflaps/screwdriver_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(state == PLASTIC_FLAPS_NORMAL)
user.visible_message("<span class='warning'>[user] starts unscrewing [src] from the floor...</span>", "<span class='notice'>You start to unscrew [src] from the floor...</span>", "You hear rustling noises.")
if(!I.use_tool(src, user, 180, volume = I.tool_volume) || state != PLASTIC_FLAPS_NORMAL)
return
state = PLASTIC_FLAPS_DETACHED
anchored = FALSE
to_chat(user, "<span class='notice'>You unscrew [src] from the floor.</span>")
else if(state == PLASTIC_FLAPS_DETACHED)
user.visible_message("<span class='warning'>[user] starts screwing [src] to the floor.</span>", "<span class='notice'>You start to screw [src] to the floor...</span>", "You hear rustling noises.")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != PLASTIC_FLAPS_DETACHED)
return
state = PLASTIC_FLAPS_NORMAL
anchored = TRUE
to_chat(user, "<span class='notice'>You screw [src] to the floor.</span>")
/obj/structure/plasticflaps/welder_act(mob/user, obj/item/I)
if(state != PLASTIC_FLAPS_DETACHED)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 120, volume = I.tool_volume))
WELDER_SLICING_SUCCESS_MESSAGE
var/obj/item/stack/sheet/plastic/five/P = new(drop_location())
P.add_fingerprint(user)
qdel(src)
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
+37 -38
View File
@@ -12,9 +12,9 @@
/obj/structure/reflector/bullet_act(obj/item/projectile/P)
var/turf/reflector_turf = get_turf(src)
var/turf/reflect_turf
var/new_dir = get_reflection(dir, P.dir)
if(!istype(P, /obj/item/projectile/beam))
return ..()
var/new_dir = get_reflection(dir, P.dir)
if(new_dir)
reflect_turf = get_step(reflect_turf, new_dir)
else
@@ -30,48 +30,15 @@
P.current = reflector_turf
P.yo = reflect_turf.y - reflector_turf.y
P.xo = reflect_turf.x - reflector_turf.x
P.ignore_source_check = TRUE //If shot by a laser, will now hit the mob that fired it
var/reflect_angle = dir2angle(new_dir)
P.setAngle(reflect_angle)
new_dir = 0
return -1
/obj/structure/reflector/attackby(obj/item/W, mob/user, params)
if(iswrench(W))
if(anchored)
to_chat(user, "Unweld [src] first!")
return
playsound(user, 'sound/items/Ratchet.ogg', 50, 1)
to_chat(user, "You begin to dismantle [src].")
if(do_after(user, 80, target = src))
playsound(user, 'sound/items/Ratchet.ogg', 50, 1)
to_chat(user, "You dismantle [src].")
new /obj/item/stack/sheet/metal(src.loc, 5)
qdel(src)
return
if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(!anchored)
if(WT.remove_fuel(0,user))
playsound(user, 'sound/items/Welder2.ogg', 50, 1)
user.visible_message("[user.name] starts to weld [src.name] to the floor.", \
"<span class='notice'>You start to weld [src] to the floor...</span>", \
"<span class='italics'>You hear welding.</span>")
if(do_after(user,20, target = src))
if(!src || !WT.isOn())
return
anchored = 1
to_chat(user, "<span class='notice'>You weld [src] to the floor.</span>")
else
if(WT.remove_fuel(0,user))
playsound(user, 'sound/items/Welder2.ogg', 50, 1)
user.visible_message("[user] starts to cut [src] free from the floor.", \
"<span class='notice'>You start to cut [src] free from the floor...</span>", \
"<span class='italics'>You hear welding.</span>")
if(do_after(user,20, target = src))
if(!src || !WT.isOn())
return
anchored = 0
to_chat(user, "<span class='notice'>You cut [src] free from the floor.</span>")
return
//Finishing the frame
if(istype(W,/obj/item/stack/sheet))
if(finished)
@@ -101,6 +68,38 @@
return
return ..()
/obj/structure/reflector/wrench_act(mob/user, obj/item/I)
. = TRUE
if(anchored)
to_chat(user, "Unweld [src] first!")
return
if(!I.tool_use_check(user, 0))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(!I.use_tool(src, user, 80, volume = I.tool_volume))
return
playsound(user, 'sound/items/Ratchet.ogg', 50, 1)
TOOL_DISMANTLE_SUCCESS_MESSAGE
new /obj/item/stack/sheet/metal(src.loc, 5)
qdel(src)
/obj/structure/reflector/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(anchored)
WELDER_ATTEMPT_FLOOR_SLICE_MESSAGE
if(!I.use_tool(src, user, 20, volume = I.tool_volume))
return
WELDER_FLOOR_SLICE_SUCCESS_MESSAGE
anchored = FALSE
else
WELDER_ATTEMPT_FLOOR_WELD_MESSAGE
if(!I.use_tool(src, user, 20, volume = I.tool_volume))
return
WELDER_FLOOR_WELD_SUCCESS_MESSAGE
anchored = TRUE
/obj/structure/reflector/proc/get_reflection(srcdir,pdir)
return 0
+16 -13
View File
@@ -17,19 +17,22 @@
if(BURN)
playsound(loc, 'sound/items/welder.ogg', 80, TRUE)
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction
if(istype(tool, /obj/item/screwdriver) && !istype(src, /obj/structure/sign/double))
to_chat(user, "You unfasten the sign with your [tool].")
var/obj/item/sign/S = new(src.loc)
S.name = name
S.desc = desc
S.icon_state = icon_state
//var/icon/I = icon('icons/obj/decals.dmi', icon_state)
//S.icon = I.Scale(24, 24)
S.sign_state = icon_state
qdel(src)
else
return ..()
/obj/structure/sign/screwdriver_act(mob/user, obj/item/I)
if(istype(src, /obj/structure/sign/double))
return
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
to_chat(user, "You unfasten the sign with [I].")
var/obj/item/sign/S = new(src.loc)
S.name = name
S.desc = desc
S.icon_state = icon_state
//var/icon/I = icon('icons/obj/decals.dmi', icon_state)
//S.icon = I.Scale(24, 24)
S.sign_state = icon_state
qdel(src)
/obj/item/sign
name = "sign"
+25 -15
View File
@@ -25,23 +25,21 @@
"<span class='notice'>You slice apart the [name].</span>")
deconstruct(TRUE)
return
else if(iswelder(W))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
playsound(loc, W.usesound, 40, 1)
user.visible_message("[user] is slicing apart the [name].", \
"<span class='notice'>You are slicing apart the [name]...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!loc)
return
playsound(loc, W.usesound, 50, 1)
user.visible_message("[user] slices apart the [name].", \
"<span class='notice'>You slice apart the [name]!</span>")
deconstruct(TRUE)
return
return ..()
/obj/structure/statue/welder_act(mob/user, obj/item/I)
if(anchored)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume))
WELDER_SLICING_SUCCESS_MESSAGE
deconstruct(TRUE)
/obj/structure/statue/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
add_fingerprint(user)
@@ -139,6 +137,18 @@
return
return ..()
/obj/structure/statue/plasma/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, volume = I.tool_volume))
return
user.visible_message("<span class='danger'>[user] sets [src] on fire!</span>",\
"<span class='danger'>[src] disintegrates into a cloud of plasma!</span>",\
"<span class='warning'>You hear a 'whoompf' and a roar.</span>")
message_admins("[key_name_admin(user)] ignited a plasma statue at [COORD(loc)]")
log_game("[key_name(user)] ignited plasma a statue at [COORD(loc)]")
investigate_log("[key_name(user)] ignited a plasma statue at [COORD(loc)]", "atmos")
ignite(2500)
/obj/structure/statue/plasma/proc/PlasmaBurn()
atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 160)
deconstruct(FALSE)
@@ -8,6 +8,7 @@
max_integrity = 120
var/image/nest_overlay
comfort = 0
flags = NODECONSTRUCT
/obj/structure/bed/nest/New()
nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=MOB_LAYER - 0.2)
@@ -40,12 +40,14 @@
/obj/structure/bed/proc/handle_rotation()
return
/obj/structure/bed/attackby(obj/item/W, mob/user, params)
if(iswrench(W) && !(flags & NODECONSTRUCT))
playsound(loc, W.usesound, 50, TRUE)
deconstruct(TRUE)
else
return ..()
/obj/structure/bed/wrench_act(mob/user, obj/item/I)
. = TRUE
if(flags & NODECONSTRUCT)
to_chat(user, "<span class='warning'>You can't figure out how to deconstruct [src]!</span>")
return
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
deconstruct(TRUE)
/obj/structure/bed/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
@@ -54,12 +54,17 @@
SK.master = E
qdel(src)
return
if(iswrench(W) && !(flags & NODECONSTRUCT))
playsound(loc, W.usesound, 50, 1)
deconstruct(TRUE)
return
return ..()
/obj/structure/chair/wrench_act(mob/user, obj/item/I)
. = TRUE
if(flags & NODECONSTRUCT)
to_chat(user, "<span class='warning'>Try as you might, you can't figure out how to deconstruct [src].</span>")
return
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
deconstruct(TRUE)
/obj/structure/chair/deconstruct()
// If we have materials, and don't have the NOCONSTRUCT flag
if(buildstacktype && (!(flags & NODECONSTRUCT)))
+12 -7
View File
@@ -22,13 +22,7 @@
var/framestackamount = 2
/obj/structure/table_frame/attackby(obj/item/I, mob/user, params)
if(iswrench(I))
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
playsound(loc, I.usesound, 50, 1)
if(do_after(user, 30*I.toolspeed, target = src))
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
deconstruct(TRUE)
else if(istype(I, /obj/item/stack/sheet/plasteel))
if(istype(I, /obj/item/stack/sheet/plasteel))
var/obj/item/stack/sheet/plasteel/P = I
if(P.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one plasteel sheet to do this!</span>")
@@ -71,6 +65,17 @@
else
return ..()
/obj/structure/table_frame/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(I.use_tool(src, user, 30, volume = I.tool_volume))
TOOL_DISMANTLE_SUCCESS_MESSAGE
for(var/i = 1, i <= framestackamount, i++)
new framestack(get_turf(src))
qdel(src)
/obj/structure/table_frame/proc/make_new_table(table_type) //makes sure the new table made retains what we had as a frame
var/obj/structure/table/T = new table_type(loc)
T.frame = type
+50 -46
View File
@@ -212,21 +212,6 @@
if(istype(I, /obj/item/grab))
tablepush(I, user)
return
if(!(flags & NODECONSTRUCT))
if(isscrewdriver(I) && deconstruction_ready)
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
playsound(loc, I.usesound, 50, 1)
if(do_after(user, 20*I.toolspeed, target = src))
deconstruct(TRUE)
return
if(iswrench(I) && deconstruction_ready)
to_chat(user, "<span class='notice'>You start deconstructing [src]...</span>")
playsound(loc, I.usesound, 50, 1)
if(do_after(user, 40*I.toolspeed, target = src))
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
deconstruct(TRUE, 1)
return
if(isrobot(user))
return
@@ -245,6 +230,33 @@
else
return ..()
/obj/structure/table/screwdriver_act(mob/user, obj/item/I)
if(flags & NODECONSTRUCT)
return
if(!deconstruction_ready)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(I.use_tool(src, user, 20, volume = I.tool_volume) && deconstruction_ready)
deconstruct(TRUE)
TOOL_DISMANTLE_SUCCESS_MESSAGE
/obj/structure/table/wrench_act(mob/user, obj/item/I)
if(flags & NODECONSTRUCT)
return
if(!deconstruction_ready)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume) && deconstruction_ready)
deconstruct(TRUE, 1)
TOOL_DISMANTLE_SUCCESS_MESSAGE
/obj/structure/table/deconstruct(disassembled = TRUE, wrench_disassembly = 0)
if(!(flags & NODECONSTRUCT))
var/turf/T = get_turf(src)
@@ -524,27 +536,14 @@
else
return ..()
/obj/structure/table/reinforced/attackby(obj/item/W, mob/user, params)
if(iswelder(W))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
playsound(loc, W.usesound, 50, 1)
if(deconstruction_ready)
to_chat(user, "<span class='notice'>You start strengthening the reinforced table...</span>")
if (do_after(user, 50*W.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You strengthen the table.</span>")
deconstruction_ready = FALSE
else
to_chat(user, "<span class='notice'>You start weakening the reinforced table...</span>")
if (do_after(user, 50*W.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You weaken the table.</span>")
deconstruction_ready = TRUE
else
return ..()
/obj/structure/table/reinforced/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
to_chat(user, "<span class='notice'>You start [deconstruction_ready ? "strengthening" : "weakening"] the reinforced table...</span>")
if(I.use_tool(src, user, 50, volume = I.tool_volume))
to_chat(user, "<span class='notice'>You [deconstruction_ready ? "strengthen" : "weaken"] the table.</span>")
deconstruction_ready = !deconstruction_ready
/obj/structure/table/reinforced/brass
name = "brass table"
@@ -682,10 +681,6 @@
step(O, get_dir(O, src))
/obj/structure/rack/attackby(obj/item/W, mob/user, params)
if(iswrench(W) && !(flags & NODECONSTRUCT) && user.a_intent != INTENT_HELP)
playsound(loc, W.usesound, 50, 1)
deconstruct(TRUE)
return
if(isrobot(user))
return
if(user.a_intent == INTENT_HARM)
@@ -695,6 +690,15 @@
W.Move(loc)
return
/obj/structure/rack/wrench_act(mob/user, obj/item/I)
. = TRUE
if(flags & NODECONSTRUCT)
to_chat(user, "<span class='warning'>Try as you might, you can't figure out how to deconstruct this.</span>")
return
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
deconstruct(TRUE)
/obj/structure/rack/attack_hand(mob/living/user)
if(user.IsWeakened() || user.resting || user.lying)
return
@@ -750,12 +754,12 @@
materials = list(MAT_METAL=2000)
var/building = FALSE
/obj/item/rack_parts/attackby(obj/item/W, mob/user, params)
if(iswrench(W))
new /obj/item/stack/sheet/metal(user.loc)
qdel(src)
else
return ..()
/obj/item/rack_parts/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
new /obj/item/stack/sheet/metal(user.loc)
qdel(src)
/obj/item/rack_parts/attack_self(mob/user)
if(building)
+152 -150
View File
@@ -63,54 +63,6 @@
layer = FLY_LAYER
/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params)
if(iswrench(I))
var/choices = list()
if(cistern)
choices += "Stash"
if(anchored)
choices += "Disconnect"
else
choices += "Connect"
choices += "Rotate"
var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices
if(!Adjacent(user) || !response) //moved away or cancelled
return
switch(response)
if("Stash")
stash_goods(I, user)
if("Disconnect")
user.visible_message("<span class='notice'>[user] starts disconnecting [src].</span>", "<span class='notice'>You begin disconnecting [src]...</span>")
if(do_after(user, 40 * I.toolspeed, target = src))
if(!loc || !anchored)
return
user.visible_message("<span class='notice'>[user] disconnects [src]!</span>", "<span class='notice'>You disconnect [src]!</span>")
anchored = 0
update_icon()
if("Connect")
user.visible_message("<span class='notice'>[user] starts connecting [src].</span>", "<span class='notice'>You begin connecting [src]...</span>")
if(do_after(user, 40 * I.toolspeed, target = src))
if(!loc || anchored)
return
user.visible_message("<span class='notice'>[user] connects [src]!</span>", "<span class='notice'>You connect [src]!</span>")
anchored = 1
update_icon()
if("Rotate")
var/list/dir_choices = list("North" = NORTH, "East" = EAST, "South" = SOUTH, "West" = WEST)
var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in dir_choices
dir = dir_choices[selected]
update_icon() //is this necessary? probably not
return
if(istype(I, /obj/item/crowbar))
to_chat(user, "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...</span>")
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
if(do_after(user, 30 * I.toolspeed, target = src))
user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "<span class='notice'>You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!</span>", "<span class='italics'>You hear grinding porcelain.</span>")
cistern = !cistern
update_icon()
return
if(istype(I, /obj/item/reagent_containers))
if(!open)
return
@@ -158,6 +110,58 @@
stash_goods(I, user)
return
/obj/structure/toilet/crowbar_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
to_chat(user, "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...</span>")
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
if(I.use_tool(src, user, 30, volume = I.tool_volume))
user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "<span class='notice'>You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!</span>", "<span class='italics'>You hear grinding porcelain.</span>")
cistern = !cistern
update_icon()
return
/obj/structure/toilet/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
var/choices = list()
if(cistern)
choices += "Stash"
if(anchored)
choices += "Disconnect"
else
choices += "Connect"
choices += "Rotate"
var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices
if(!Adjacent(user) || !response) //moved away or cancelled
return
switch(response)
if("Stash")
stash_goods(I, user)
if("Disconnect")
user.visible_message("<span class='notice'>[user] starts disconnecting [src].</span>", "<span class='notice'>You begin disconnecting [src]...</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(!loc || !anchored)
return
user.visible_message("<span class='notice'>[user] disconnects [src]!</span>", "<span class='notice'>You disconnect [src]!</span>")
anchored = 0
if("Connect")
user.visible_message("<span class='notice'>[user] starts connecting [src].</span>", "<span class='notice'>You begin connecting [src]...</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(!loc || anchored)
return
user.visible_message("<span class='notice'>[user] connects [src]!</span>", "<span class='notice'>You connect [src]!</span>")
anchored = 1
if("Rotate")
var/list/dir_choices = list("North" = NORTH, "East" = EAST, "South" = SOUTH, "West" = WEST)
var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in dir_choices
dir = dir_choices[selected]
update_icon() //is this necessary? probably not
/obj/structure/toilet/proc/stash_goods(obj/item/I, mob/user)
if(!I)
return
@@ -196,27 +200,6 @@
/obj/structure/urinal/attackby(obj/item/I, mob/user, params)
if(iswrench(I))
if(anchored)
user.visible_message("<span class='notice'>[user] begins disconnecting [src]...</span>", "<span class='notice'>You begin to disconnect [src]...</span>")
if(do_after(user, 40 * I.toolspeed, target = src))
if(!loc || !anchored)
return
user.visible_message("<span class='notice'>[user] disconnects [src]!</span>", "<span class='notice'>You disconnect [src]!</span>")
anchored = 0
pixel_x = 0
pixel_y = 0
else
user.visible_message("<span class='notice'>[user] begins connecting [src]...</span>", "<span class='notice'>You begin to connect [src]...</span>")
if(do_after(user, 40 * I.toolspeed, target = src))
if(!loc || anchored)
return
user.visible_message("<span class='notice'>[user] connects [src]!</span>", "<span class='notice'>You connect [src]!</span>")
anchored = 1
pixel_x = 0
pixel_y = 32
return
if(istype(I, /obj/item/grab))
var/obj/item/grab/G = I
if(!G.confirm())
@@ -234,7 +217,28 @@
else
to_chat(user, "<span class='warning'>You need a tighter grip!</span>")
/obj/structure/urinal/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(anchored)
user.visible_message("<span class='notice'>[user] begins disconnecting [src]...</span>", "<span class='notice'>You begin to disconnect [src]...</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(!loc || !anchored)
return
user.visible_message("<span class='notice'>[user] disconnects [src]!</span>", "<span class='notice'>You disconnect [src]!</span>")
anchored = 0
pixel_x = 0
pixel_y = 0
else
user.visible_message("<span class='notice'>[user] begins connecting [src]...</span>", "<span class='notice'>You begin to connect [src]...</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(!loc || anchored)
return
user.visible_message("<span class='notice'>[user] connects [src]!</span>", "<span class='notice'>You connect [src]!</span>")
anchored = 1
pixel_x = 0
pixel_y = 32
/obj/machinery/shower
name = "shower"
@@ -298,41 +302,41 @@
/obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob, params)
if(I.type == /obj/item/analyzer)
to_chat(user, "<span class='notice'>The water temperature seems to be [watertemp].</span>")
if(iswrench(I))
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with the [I].</span>")
if(do_after(user, 50 * I.toolspeed, target = src))
switch(watertemp)
if("normal")
watertemp = "freezing"
if("freezing")
watertemp = "boiling"
if("boiling")
watertemp = "normal"
user.visible_message("<span class='notice'>[user] adjusts the shower with the [I].</span>", "<span class='notice'>You adjust the shower with the [I].</span>")
update_icon() //letsa update whenever we change the temperature, since the mist might need to change
if(iswelder(I))
if(on)
to_chat(user, "<span class='warning'>Turn [src] off before you attempt to cut it loose.</span>")
return
var/obj/item/weldingtool/WT = I
if(WT.isOn())
user.visible_message("<span class='notice'>[user] begins to cut [src] loose.</span>", "<span class='notice'>You begin to cut [src] loose.</span>")
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.remove_fuel(0, user))
return
if(on) //in case someone turned it back on while you were working, make sure we shut that all down
on = 0
if(mymist)
qdel(mymist)
ismist = 0
user.visible_message("<span class='notice'>[user] cuts [src] loose!</span>", "<span class='notice'>You cut [src] loose!</span>")
var/obj/item/mounted/shower/S = new /obj/item/mounted/shower(get_turf(user))
transfer_prints_to(S, TRUE)
qdel(src)
else
to_chat(user, "<span class='warning'>[WT] must be on for this task.</span>")
if(on)
I.water_act(100, convertHeat(), src)
return ..()
/obj/machinery/shower/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with the [I].</span>")
if(I.use_tool(src, user, 50, volume = I.tool_volume))
switch(watertemp)
if("normal")
watertemp = "freezing"
if("freezing")
watertemp = "boiling"
if("boiling")
watertemp = "normal"
user.visible_message("<span class='notice'>[user] adjusts the shower with the [I].</span>", "<span class='notice'>You adjust [src] to [watertemp].</span>")
update_icon() //letsa update whenever we change the temperature, since the mist might need to change
/obj/machinery/shower/welder_act(mob/user, obj/item/I)
. = TRUE
if(on)
to_chat(user, "<span class='warning'>Turn [src] off before you attempt to cut it loose.</span>")
return
if(!I.tool_use_check(user, 0))
return
visible_message("<span class='notice'>[user] begins slicing [src] free...</span>", "<span class='notice'>You begin slicing [src] free...</span>", "<span class='warning'>You hear welding.</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(mymist)
qdel(mymist)
user.visible_message("<span class='notice'>[user] cuts [src] loose!</span>", "<span class='notice'>You cut [src] loose!</span>")
var/obj/item/mounted/shower/S = new /obj/item/mounted/shower(get_turf(user))
transfer_prints_to(S, TRUE)
qdel(src)
/obj/machinery/shower/update_icon() //this makes the shower mist up or clear mist (depending on water temperature)
overlays.Cut() //once it's been on for a while, in addition to handling the water overlay.
@@ -577,53 +581,6 @@
if(!(istype(O)))
return
if(iswrench(O))
var/obj/item/wrench/W = O
var/choices = list()
if(anchored)
choices += "Wash"
if(can_move)
choices += "Disconnect"
else
choices += "Connect"
if(can_rotate)
choices += "Rotate"
var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices
if(!Adjacent(user) || !response) //moved away or cancelled
return
switch(response)
if("Wash")
busy = 1
var/wateract = 0
wateract = (W.wash(user, src))
busy = 0
if(wateract)
W.water_act(20, COLD_WATER_TEMPERATURE, src)
if("Disconnect")
user.visible_message("<span class='notice'>[user] starts disconnecting [src].</span>", "<span class='notice'>You begin disconnecting [src]...</span>")
if(do_after(user, 40 * O.toolspeed, target = src))
if(!loc || !anchored)
return
user.visible_message("<span class='notice'>[user] disconnects [src]!</span>", "<span class='notice'>You disconnect [src]!</span>")
anchored = 0
update_icon()
if("Connect")
user.visible_message("<span class='notice'>[user] starts connecting [src].</span>", "<span class='notice'>You begin connecting [src]...</span>")
if(do_after(user, 40 * O.toolspeed, target = src))
if(!loc || anchored)
return
user.visible_message("<span class='notice'>[user] connects [src]!</span>", "<span class='notice'>You connect [src]!</span>")
anchored = 1
update_icon()
if("Rotate")
var/list/dir_choices = list("North" = NORTH, "East" = EAST, "South" = SOUTH, "West" = WEST)
var/selected = input(user, "Select a direction for the connector.", "Connector Direction") in dir_choices
dir = dir_choices[selected]
update_icon() //is this necessary? probably not
return
if(!anchored)
to_chat(user, "<span class='warning'>[src] isn't connected, wrench it into position first!</span>")
return
@@ -635,6 +592,51 @@
if(wateract)
O.water_act(20, COLD_WATER_TEMPERATURE, src)
/obj/structure/sink/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
return
var/choices = list()
if(anchored)
choices += "Wash"
if(can_move)
choices += "Disconnect"
else
choices += "Connect"
if(can_rotate)
choices += "Rotate"
var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices
if(!Adjacent(user) || !response) //moved away or cancelled
return
switch(response)
if("Wash")
busy = 1
var/wateract = 0
wateract = (I.wash(user, src))
busy = 0
if(wateract)
I.water_act(20, COLD_WATER_TEMPERATURE, src)
if("Disconnect")
user.visible_message("<span class='notice'>[user] starts disconnecting [src].</span>", "<span class='notice'>You begin disconnecting [src]...</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(!loc || !anchored)
return
user.visible_message("<span class='notice'>[user] disconnects [src]!</span>", "<span class='notice'>You disconnect [src]!</span>")
anchored = FALSE
if("Connect")
user.visible_message("<span class='notice'>[user] starts connecting [src].</span>", "<span class='notice'>You begin connecting [src]...</span>")
if(I.use_tool(src, user, 40, volume = I.tool_volume))
if(!loc || anchored)
return
user.visible_message("<span class='notice'>[user] connects [src]!</span>", "<span class='notice'>You connect [src]!</span>")
anchored = TRUE
if("Rotate")
var/list/dir_choices = list("North" = NORTH, "East" = EAST, "South" = SOUTH, "West" = WEST)
var/selected = input(user, "Select a direction for the connector.", "Connector Direction") in dir_choices
dir = dir_choices[selected]
update_icon() //is this necessary? probably not
/obj/structure/sink/update_icon()
..()
layer = OBJ_LAYER
+144 -149
View File
@@ -1,4 +1,4 @@
/* Windoor (window door) assembly -Nodrak
/* Windoor (window door) assembly -Nodrak //I hope you step on a plug
* Step 1: Create a windoor out of rglass
* Step 2: Add plasteel to the assembly to make a secure windoor (Optional)
* Step 3: Rotate or Flip the assembly to face and open the way you want
@@ -84,70 +84,13 @@ obj/structure/windoor_assembly/Destroy()
else
return 1
/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, params)
//I really should have spread this out across more states but thin little windoors are hard to sprite.
add_fingerprint(user)
switch(state)
if("01")
if(iswelder(W) && !anchored)
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0,user))
user.visible_message("<span class='warning'>[user] disassembles the windoor assembly.</span>", "<span class='notice'>You start to disassemble the windoor assembly...</span>")
playsound(loc, 'sound/items/welder2.ogg', 50, 1)
if(do_after(user, 40 * WT.toolspeed, target = src))
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You disassemble the windoor assembly.</span>")
var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5)
RG.add_fingerprint(user)
if(secure)
var/obj/item/stack/rods/R = new (get_turf(src), 4)
R.add_fingerprint(user)
qdel(src)
return
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
if(iswrench(W) && !anchored)
for(var/obj/machinery/door/window/WD in loc)
if(WD.dir == dir)
to_chat(user, "<span class='warning'>There is already a windoor in that location!</span>")
return
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src || anchored)
return
for(var/obj/machinery/door/window/WD in loc)
if(WD.dir == dir)
to_chat(user, "<span class='warning'>There is already a windoor in that location!</span>")
return
to_chat(user, "<span class='notice'>You secure the windoor assembly.</span>")
anchored = TRUE
if(secure)
name = "secure anchored windoor assembly"
else
name = "anchored windoor assembly"
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
else if(iswrench(W) && anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] unsecures the windoor assembly from the floor.", "You start to unsecure the windoor assembly from the floor...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src || !anchored)
return
to_chat(user, "<span class='notice'>You unsecure the windoor assembly.</span>")
anchored = FALSE
if(secure)
name = "secure windoor assembly"
else
name = "windoor assembly"
//Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete.
else if(istype(W, /obj/item/stack/sheet/plasteel) && !secure)
if(istype(W, /obj/item/stack/sheet/plasteel) && !secure)
var/obj/item/stack/sheet/plasteel/P = W
if(P.get_amount() < 2)
to_chat(user, "<span class='warning'>You need more plasteel to do this!</span>")
@@ -187,26 +130,8 @@ obj/structure/windoor_assembly/Destroy()
return ..()
if("02")
//Removing wire from the assembly. Step 5 undone.
if(iswirecutter(W))
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src || state != "02")
return
to_chat(user, "<span class='notice'>You cut the windoor wires.</span>")
new/obj/item/stack/cable_coil(get_turf(user), 1)
state = "01"
if(secure)
name = "secure anchored windoor assembly"
else
name = "anchored windoor assembly"
//Adding airlock electronics for access. Step 6 complete.
else if(istype(W, /obj/item/airlock_electronics))
if(istype(W, /obj/item/airlock_electronics))
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...")
user.drop_item()
@@ -222,24 +147,6 @@ obj/structure/windoor_assembly/Destroy()
else
W.forceMove(loc)
//Screwdriver to remove airlock electronics. Step 6 undone.
else if(isscrewdriver(W))
if(!electronics)
return
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(!src || !electronics)
return
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
name = "wired windoor assembly"
var/obj/item/airlock_electronics/ae
ae = electronics
electronics = null
ae.forceMove(loc)
else if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN)
if(!t)
@@ -248,65 +155,153 @@ obj/structure/windoor_assembly/Destroy()
return
created_name = t
return
//Crowbar to complete the assembly, Step 7 complete.
else if(iscrowbar(W))
if(!electronics)
to_chat(usr, "<span class='warning'>The assembly is missing electronics!</span>")
return
usr << browse(null, "window=windoor_access")
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame...")
if(do_after(user, 40 * W.toolspeed, target = src))
if(loc && electronics)
for(var/obj/machinery/door/window/WD in loc)
if(WD.dir == dir)
return
density = TRUE //Shouldn't matter but just incase
to_chat(user, "<span class='notice'>You finish the windoor.</span>")
var/obj/machinery/door/window/windoor
if(secure)
windoor = new /obj/machinery/door/window/brigdoor(src.loc)
if(facing == "l")
windoor.icon_state = "leftsecureopen"
windoor.base_state = "leftsecure"
else
windoor.icon_state = "rightsecureopen"
windoor.base_state = "rightsecure"
else
windoor = new /obj/machinery/door/window(loc)
if(facing == "l")
windoor.icon_state = "leftopen"
windoor.base_state = "left"
else
windoor.icon_state = "rightopen"
windoor.base_state = "right"
windoor.setDir(dir)
windoor.density = FALSE
if(electronics.one_access)
windoor.req_one_access = electronics.conf_access
else
windoor.req_access = electronics.conf_access
windoor.electronics = src.electronics
electronics.forceMove(windoor)
electronics = null
if(created_name)
windoor.name = created_name
qdel(src)
windoor.close()
else
return ..()
//Update to reflect changes(if applicable)
update_icon()
/obj/structure/windoor_assembly/crowbar_act(mob/user, obj/item/I) //Crowbar to complete the assembly, Step 7 complete.
if(state != "02")
return
. = TRUE
if(!electronics)
to_chat(user, "<span class='warning'>[src] is missing electronics!</span>")
return
if(!I.tool_use_check(user, 0))
return
user << browse(null, "window=windoor_access")
user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume))
return
if(loc && electronics)
for(var/obj/machinery/door/window/WD in loc)
if(WD.dir == dir)
return
density = TRUE //Shouldn't matter but just incase
to_chat(user, "<span class='notice'>You finish the windoor.</span>")
var/obj/machinery/door/window/windoor
if(secure)
windoor = new /obj/machinery/door/window/brigdoor(src.loc)
if(facing == "l")
windoor.icon_state = "leftsecureopen"
windoor.base_state = "leftsecure"
else
windoor.icon_state = "rightsecureopen"
windoor.base_state = "rightsecure"
else
windoor = new /obj/machinery/door/window(loc)
if(facing == "l")
windoor.icon_state = "leftopen"
windoor.base_state = "left"
else
windoor.icon_state = "rightopen"
windoor.base_state = "right"
windoor.setDir(dir)
windoor.density = FALSE
if(electronics.one_access)
windoor.req_one_access = electronics.conf_access
else
windoor.req_access = electronics.conf_access
windoor.electronics = src.electronics
electronics.forceMove(windoor)
electronics = null
if(created_name)
windoor.name = created_name
qdel(src)
windoor.close()
/obj/structure/windoor_assembly/screwdriver_act(mob/user, obj/item/I)
if(state != "02" || electronics)
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || electronics)
return
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
name = "wired windoor assembly"
var/obj/item/airlock_electronics/ae
ae = electronics
electronics = null
ae.forceMove(loc)
/obj/structure/windoor_assembly/wirecutter_act(mob/user, obj/item/I)
if(state != "02")
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || state != "02")
return
to_chat(user, "<span class='notice'>You cut the windoor wires.</span>")
new/obj/item/stack/cable_coil(get_turf(user), 1)
state = "01"
if(secure)
name = "secure anchored windoor assembly"
else
name = "anchored windoor assembly"
update_icon()
/obj/structure/windoor_assembly/wrench_act(mob/user, obj/item/I)
if(state != "01")
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
if(!anchored) //Wrenching an unsecure assembly anchors it in place. Step 4 complete
for(var/obj/machinery/door/window/WD in loc)
if(WD.dir == dir)
to_chat(user, "<span class='warning'>There is already a windoor in that location!</span>")
return
user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || anchored || state != "01")
return
for(var/obj/machinery/door/window/WD in loc)
if(WD.dir == dir)
to_chat(user, "<span class='warning'>There is already a windoor in that location!</span>")
return
to_chat(user, "<span class='notice'>You secure the windoor assembly.</span>")
anchored = TRUE
if(secure)
name = "secure anchored windoor assembly"
else
name = "anchored windoor assembly"
else //Unwrenching an unsecure assembly un-anchors it. Step 4 undone
user.visible_message("[user] unsecures the windoor assembly from the floor.", "You start to unsecure the windoor assembly from the floor...")
if(!I.use_tool(src, user, 40, volume = I.tool_volume) || !anchored || state != "01")
return
to_chat(user, "<span class='notice'>You unsecure the windoor assembly.</span>")
anchored = FALSE
if(secure)
name = "secure windoor assembly"
else
name = "windoor assembly"
update_icon()
/obj/structure/windoor_assembly/welder_act(mob/user, obj/item/I)
if(state != "01")
return
. = TRUE
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume) && state == "01")
WELDER_FLOOR_SLICE_SUCCESS_MESSAGE
var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5)
RG.add_fingerprint(user)
if(secure)
var/obj/item/stack/rods/R = new (get_turf(src), 4)
R.add_fingerprint(user)
qdel(src)
//Rotates the windoor assembly clockwise
/obj/structure/windoor_assembly/verb/revrotate()
+79 -59
View File
@@ -212,22 +212,6 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
return 1 //skip the afterattack
add_fingerprint(user)
if(iswelder(I) && user.a_intent == INTENT_HELP)
var/obj/item/weldingtool/WT = I
if(obj_integrity < max_integrity)
if(WT.remove_fuel(0,user))
to_chat(user, "<span class='notice'>You begin repairing [src]...</span>")
playsound(src, WT.usesound, 40, 1)
if(do_after(user, 40*I.toolspeed, target = src))
obj_integrity = max_integrity
playsound(src, 'sound/items/welder2.ogg', 50, 1)
update_nearby_icons()
to_chat(user, "<span class='notice'>You repair [src].</span>")
else
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
if(istype(I, /obj/item/grab) && get_dist(src, user) < 2)
var/obj/item/grab/G = I
if(isliving(G.affecting))
@@ -256,51 +240,87 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
M.apply_damage(30)
take_damage(75)
return
if(!(flags & NODECONSTRUCT))
if(isscrewdriver(I))
playsound(src, I.usesound, 75, 1)
if(reinf)
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
else if(state == WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
anchored = !anchored
update_nearby_icons()
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
else //if we're not reinforced, we don't need to check or update state
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
anchored = !anchored
air_update_turf(TRUE)
update_nearby_icons()
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
return
else if(iscrowbar(I) && reinf && (state == WINDOW_OUT_OF_FRAME || state == WINDOW_IN_FRAME))
to_chat(user, "<span class='notice'>You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...</span>")
playsound(src, I.usesound, 75, 1)
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
state = (state == WINDOW_OUT_OF_FRAME ? WINDOW_IN_FRAME : WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You pry the window [state == WINDOW_IN_FRAME ? "into":"out of"] the frame.</span>")
return
else if(iswrench(I) && !anchored)
playsound(src, I.usesound, 75, 1)
to_chat(user, "<span class='notice'> You begin to disassemble [src]...</span>")
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount)
G.add_fingerprint(user)
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
to_chat(user, "<span class='notice'>You successfully disassemble [src].</span>")
qdel(src)
return
return ..()
/obj/structure/window/crowbar_act(mob/user, obj/item/I)
if(!reinf)
return
if(state != WINDOW_OUT_OF_FRAME && state != WINDOW_IN_FRAME)
return
if(flags & NODECONSTRUCT)
return
. = TRUE
if(!can_be_reached(user))
return
to_chat(user, "<span class='notice'>You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
state = (state == WINDOW_OUT_OF_FRAME ? WINDOW_IN_FRAME : WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You pry the window [state == WINDOW_IN_FRAME ? "into":"out of"] the frame.</span>")
/obj/structure/window/screwdriver_act(mob/user, obj/item/I)
if(flags & NODECONSTRUCT)
return
. = TRUE
if(!can_be_reached(user))
return
if(reinf)
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME)
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
else if(state == WINDOW_OUT_OF_FRAME)
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
anchored = !anchored
update_nearby_icons()
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
else //if we're not reinforced, we don't need to check or update state
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
return
anchored = !anchored
air_update_turf(TRUE)
update_nearby_icons()
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
/obj/structure/window/wrench_act(mob/user, obj/item/I)
if(flags & NODECONSTRUCT)
return
if(anchored)
return
. = TRUE
if(!can_be_reached(user))
return
TOOL_ATTEMPT_DISMANTLE_MESSAGE
if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
return
var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount)
G.add_fingerprint(user)
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
to_chat(user, "<span class='notice'>You successfully disassemble [src].</span>")
qdel(src)
/obj/structure/window/welder_act(mob/user, obj/item/I)
if(user.a_intent != INTENT_HELP)
return
. = TRUE
if(!can_be_reached(user))
return
if(obj_integrity >= max_integrity)
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
if(!I.tool_use_check(user, 0))
return
WELDER_ATTEMPT_REPAIR_MESSAGE
if(I.use_tool(src, user, 40, volume = I.tool_volume))
obj_integrity = max_integrity
WELDER_REPAIR_SUCCESS_MESSAGE
/obj/structure/window/proc/check_state(checked_state)
if(state == checked_state)
return TRUE