Fix up crates

All shipable crates are proper children
All crates support a manifest
Crates rely on parent code shared with closets when possible
This commit is contained in:
Bjorn Neergaard
2016-02-07 01:20:37 -06:00
parent ede93b63a6
commit ddab6823d3
22 changed files with 326 additions and 490 deletions
@@ -1,15 +1,11 @@
/obj/structure/closet/crate/bin
desc = "A trash bin, place your trash here for the janitor to collect."
name = "trash bin"
icon_crate = "largebins"
icon_state = "largebins"
anchored = 1
sound_effect_open = 'sound/effects/bin_open.ogg'
sound_effect_close = 'sound/effects/bin_close.ogg'
var/animation = "animate_largebins"
var/redlight = "largebinr"
var/greenlight = "largebing"
var/orangelight = "largebino"
open_sound = 'sound/effects/bin_open.ogg'
close_sound = 'sound/effects/bin_close.ogg'
anchored = TRUE
allow_mobs = TRUE
/obj/structure/closet/crate/bin/New()
..()
@@ -19,11 +15,11 @@
..()
overlays.Cut()
if(contents.len == 0)
overlays += greenlight
overlays += "largebing"
else if(contents.len >= storage_capacity)
overlays += redlight
overlays += "largebinr"
else
overlays += orangelight
overlays += "largebino"
/obj/structure/closet/crate/bin/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/storage/bag/trash))
@@ -54,23 +50,15 @@
user.visible_message("<span class='warning'>[user] stuffs [O] into[src].</span>", \
"<span class='notice'>You stuff [O] into [src].</span>", \
"<span class='italics'>You hear a loud metal bang.</span>")
insert(O, 1, !opened)
insert(O)
if(opened)
close()
/obj/structure/closet/crate/bin/open()
. = ..()
update_icon()
/obj/structure/closet/crate/bin/close()
. = ..()
update_icon()
/obj/structure/closet/crate/bin/proc/do_animate()
playsound(src.loc, sound_effect_open, 15, 1, -3)
flick(animation, src)
playsound(src.loc, open_sound, 15, 1, -3)
flick("animate_largebins", src)
spawn(13)
playsound(src.loc, sound_effect_close, 15, 1, -3)
playsound(src.loc, close_sound, 15, 1, -3)
update_icon()
/obj/structure/closet/crate/bin/insert(obj/item/I, include_mobs = 0, animate = 0)
@@ -14,6 +14,7 @@
var/large = 1
var/wall_mounted = 0 //never solid (You can always pass over it)
var/health = 100
var/breakout_time = 2
var/lastbang
var/can_weld_shut = 1
var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container
@@ -21,6 +22,7 @@
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/cutting_tool = /obj/item/weapon/weldingtool
var/open_sound = 'sound/machines/click.ogg'
var/close_sound = 'sound/machines/click.ogg'
var/cutting_sound = 'sound/items/Welder.ogg'
var/material_drop = /obj/item/stack/sheet/metal
@@ -63,11 +65,10 @@
/obj/structure/closet/examine(mob/user)
..()
if(secure)
if(broken || opened || !ishuman(user))
return //Monkeys don't get a message, nor does anyone if it's open or emagged
else
user << "<span class='notice'>Alt-click the locker to [locked ? "unlock" : "lock"] it.</span>"
if(broken)
user << "<span class='notice'>It appears to be broken.</span>"
else if(secure && !opened)
user << "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>"
/obj/structure/closet/alter_health()
return get_turf(src)
@@ -88,22 +89,17 @@
return 1
/obj/structure/closet/proc/dump_contents()
for(var/obj/O in src)
O.loc = loc
var/turf/T = get_turf(src)
for(var/atom/movable/AM in src)
AM.forceMove(T)
if(throwing) //you keep some momentum when getting out of a thrown closet
step(O, dir)
for(var/mob/M in src)
M.loc = loc
M.reset_perspective(null)
if(throwing)
step(M, dir)
step(AM, dir)
if(throwing)
throwing = 0
/obj/structure/closet/proc/take_contents()
for(var/atom/movable/AM in loc)
var/turf/T = get_turf(src)
for(var/atom/movable/AM in T)
if(insert(AM) == -1) // limit reached
break
@@ -118,7 +114,6 @@
return 1
/obj/structure/closet/proc/insert(atom/movable/AM)
if(contents.len >= storage_capacity)
return -1
@@ -132,7 +127,10 @@
mobs_stored++
if(mobs_stored >= mob_storage_capacity)
return 0
<<<<<<< ede93b63a61fbdfe3be0fe9569aa29b152e767bc
L.reset_perspective(src)
=======
>>>>>>> Fix up crates
L.stop_pulling()
else if(!istype(AM, /obj/item) && !istype(AM, /obj/effect/dummy/chameleon))
return 0
@@ -140,20 +138,18 @@
return 0
else if(AM.flags & NODROP)
return 0
AM.loc = src
AM.forceMove(src)
if(AM.pulledby)
AM.pulledby.stop_pulling()
return 1
/obj/structure/closet/proc/close()
if(!opened)
return 0
if(!can_close())
if(!opened || !can_close())
return 0
take_contents()
opened = 0
playsound(loc, open_sound, 15, 1, -3)
playsound(loc, close_sound, 15, 1, -3)
density = 1
update_icon()
return 1
@@ -161,7 +157,8 @@
/obj/structure/closet/proc/toggle()
if(opened)
return close()
return open()
else
return open()
/obj/structure/closet/ex_act(severity, target)
contents_explosion(severity, target)
@@ -170,13 +167,12 @@
qdel(src)
..()
/obj/structure/closet/bullet_act(obj/item/projectile/Proj)
/obj/structure/closet/bullet_act(obj/item/projectile/P)
..()
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
if(P.damage_type == BRUTE || P.damage_type == BURN)
health -= P.damage
if(health <= 0)
qdel(src)
return
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
@@ -188,7 +184,6 @@
if(prob(75))
qdel(src)
/obj/structure/closet/attackby(obj/item/weapon/W, mob/user, params)
if(user.loc == src)
return
@@ -313,31 +308,24 @@
if(AM.loc == src) return 0
return 1
/obj/structure/closet/container_resist()
var/mob/living/user = usr
var/breakout_time = 2 //2 minutes by default
if(istype(user.loc, /obj/structure/closet/critter) && !welded)
breakout_time = 0.75 //45 seconds if it's an unwelded critter crate
if( opened || (!welded && !locked && !istype(loc, /obj/mecha)) )
/obj/structure/closet/container_resist(mob/living/user)
if(opened || (!welded && !locked && !istype(loc, /obj/mecha)))
return //Door's open, not locked or welded or inside a mech, no point in resisting.
//okay, so the closet is either welded or locked... resist!!!
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
user << "<span class='notice'>You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)</span>"
for(var/mob/O in viewers(src))
O << "<span class='warning'>[src] begins to shake violently!</span>"
if(do_after(user,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds
user.visible_message("<span class='warning'>[src] begins to shake violently!</span>",
"<span class='notice'>You lean on the back of [src] and start pushing the door open.</span>")
if(do_after(user,(breakout_time * 60 * 10), target = src)) //minutes * 60seconds * 10deciseconds
if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded && !istype(loc, /obj/mecha)) )
return
//we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting
welded = 0 //applies to all lockers lockers
locked = 0 //applies to critter crates and secure lockers only
broken = 1 //applies to secure lockers only
user.visible_message("<span class='danger'>[user] successfully broke out of [src]!</span>", "<span class='notice'>You successfully break out of [src]!</span>")
if(istype( loc, /obj/structure/bigDelivery))
if(istype(loc, /obj/structure/bigDelivery))
var/obj/structure/bigDelivery/D = loc
qdel(D)
else if(istype( loc, /obj/mecha))
@@ -348,36 +336,28 @@
/obj/structure/closet/AltClick(mob/user)
..()
if(!user.canUseTopic(user) || broken)
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(broken)
user << "<span class='warning'>\The [src] is broken!</span>"
if(opened || !secure || !in_range(src, user))
return
else
togglelock(user)
/obj/structure/closet/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(secure && !broken)
if(prob(50/severity))
locked = !locked
update_icon()
if(prob(20/severity) && !opened)
if(!locked)
open()
else
req_access = list()
req_access += pick(get_all_accesses())
..()
/obj/structure/closet/proc/togglelock(mob/user)
if(secure)
if(secure && !broken)
if(allowed(user))
locked = !locked
add_fingerprint(user)
<<<<<<< ede93b63a61fbdfe3be0fe9569aa29b152e767bc
for(var/mob/O in viewers(user, 3))
O.show_message("<span class='notice'>[user] has [locked ? null : "un"]locked the locker.</span>", 1)
=======
visible_message("<span class='notice'>[user] [locked ? null : "un"]locks [src].</span>",
"<span class='notice'>You [locked ? null : "un"]locks [src].</span>")
>>>>>>> Fix up crates
update_icon()
else
user << "<span class='notice'>Access Denied</span>"
@@ -386,16 +366,31 @@
/obj/structure/closet/emag_act(mob/user)
if(secure && !broken)
user.visible_message("<span class='warning'>Sparks fly from [src]!</span>",
"<span class='warning'>You emag [src], breaking the lock!</span>",
"<span class='italics'>You hear a faint electrical spark.</span>")
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1)
broken = 1
locked = 0
desc += " It appears to be broken."
update_icon()
if(user)
visible_message("<span class='warning'>The [name] has been broken by [user] with an electromagnetic card!</span>", "<span class='italics'>You hear a faint electrical spark.</span>")
overlays += "sparking"
spawn(4) //overlays don't support flick so we have to cheat
update_icon()
<<<<<<< ede93b63a61fbdfe3be0fe9569aa29b152e767bc
/obj/structure/closet/get_remote_view_fullscreens(mob/user)
if(!(user.sight & (SEEOBJS|SEEMOBS)))
user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1)
=======
/obj/structure/closet/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(secure && !broken)
if(prob(50 / severity))
locked = !locked
update_icon()
if(prob(20 / severity) && !opened)
if(!locked)
open()
else
req_access = list()
req_access += pick(get_all_accesses())
..()
>>>>>>> Fix up crates
@@ -1,49 +1,98 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/structure/closet/crate
name = "crate"
desc = "A rectangular steel crate."
icon = 'icons/obj/crates.dmi'
var/icon_crate = "crate"
icon_state = "crate"
req_access = null
var/rigged = 0
var/sound_effect_open = 'sound/machines/click.ogg'
var/sound_effect_close = 'sound/machines/click.ogg'
var/allow_mobs = FALSE
var/obj/item/weapon/paper/manifest/manifest
/obj/structure/closet/crate/New()
..()
update_icon()
/obj/structure/closet/crate/update_icon()
icon_state = "[initial(icon_state)][opened ? "open" : ""]"
overlays.Cut()
if(opened)
icon_state = "[icon_crate]open"
else
icon_state = icon_crate
if(manifest)
overlays += "manifest"
/obj/structure/closet/crate/attack_hand(mob/user)
add_fingerprint(user)
if(manifest)
tear_manifest(user)
return
if(!toggle())
togglelock(user)
/obj/structure/closet/crate/attackby(obj/item/weapon/W, mob/user, params)
if(opened)
if(isrobot(user))
return
if(user.drop_item())
W.Move(loc)
else if(istype(W, /obj/item/stack/packageWrap))
return
else if(!place(user, W))
attack_hand(user)
/obj/structure/closet/crate/insert(atom/movable/AM)
if(contents.len >= storage_capacity)
return -1
if(istype(AM, /mob/living))
var/mob/living/L = AM
if(!allow_mobs || L.buckled || L.buckled_mob)
return
L.stop_pulling()
if(AM.flags & NODROP || AM.density || AM.anchored || AM.buckled_mob || istype(AM, /obj/structure/closet))
return
AM.forceMove(src)
if(AM.pulledby)
AM.pulledby.stop_pulling()
return 1
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
user << "<span class='notice'>You tear the manifest off of the crate.</span>"
playsound(src, 'sound/items/poster_ripped.ogg', 75, 1)
manifest.loc = loc
if(ishuman(user))
user.put_in_hands(manifest)
manifest = null
update_icon()
/obj/structure/closet/crate/internals
desc = "A internals crate."
name = "internals crate"
icon_crate = "o2crate"
icon_state = "o2crate"
/obj/structure/closet/crate/trashcart
desc = "A heavy, metal trashcart with wheels."
name = "trash cart"
icon_crate = "trashcart"
icon_state = "trashcart"
/obj/structure/closet/crate/medical
desc = "A medical crate."
name = "medical crate"
icon_crate = "medicalcrate"
icon_state = "medicalcrate"
/obj/structure/closet/crate/freezer
desc = "A freezer."
name = "freezer"
icon_state = "freezer"
/obj/structure/closet/crate/radiation
desc = "A crate with a radiation sign on it."
name = "radiation crate"
icon_state = "radiation"
/obj/structure/closet/crate/hydroponics
name = "hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon_state = "hydrocrate"
/obj/structure/closet/crate/rcd
desc = "A crate for the storage of an RCD."
name = "\improper RCD crate"
@@ -53,160 +102,3 @@
for(var/i in 1 to 4)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd(src)
/obj/structure/closet/crate/freezer
desc = "A freezer."
name = "freezer"
icon_crate = "freezer"
icon_state = "freezer"
var/target_temp = T0C - 40
var/cooling_power = 40
/obj/structure/closet/crate/freezer/return_air()
var/datum/gas_mixture/gas = (..())
if(!gas)
return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.copy_from(gas)
if(newgas.temperature <= target_temp)
return
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
return newgas
/obj/structure/closet/crate/radiation
desc = "A crate with a radiation sign on it."
name = "radioactive gear crate"
icon_crate = "radiation"
icon_state = "radiation"
/obj/structure/closet/crate/radiation/New()
..()
for(var/i in 1 to 4)
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
/obj/structure/closet/crate/hydroponics
name = "hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon_crate = "hydrocrate"
icon_state = "hydrocrate"
/obj/structure/closet/crate/hydroponics/prespawned
/obj/structure/closet/crate/hydroponics/prespawned/New()
..()
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
new /obj/item/weapon/cultivator(src)
/obj/structure/closet/crate/open()
playsound(src.loc, sound_effect_open, 15, 1, -3)
dump_contents()
src.opened = 1
update_icon()
return 1
/obj/structure/closet/crate/close()
playsound(src.loc, sound_effect_close, 15, 1, -3)
take_contents()
src.opened = 0
update_icon()
return 1
/obj/structure/closet/crate/insert(atom/movable/AM, include_mobs = 0)
if(contents.len >= storage_capacity)
return -1
if(include_mobs && isliving(AM))
var/mob/living/L = AM
if(L.buckled)
return 0
else if(isobj(AM))
if(AM.density || AM.anchored || istype(AM,/obj/structure/closet))
return 0
else
return 0
if(istype(AM, /obj/structure/bed)) //This is only necessary because of rollerbeds and swivel chairs.
var/obj/structure/bed/B = AM
if(B.buckled_mob)
return 0
AM.loc = src
return 1
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
user << "<span class='notice'>You tear the manifest off of the crate.</span>"
playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1)
manifest.loc = loc
if(ishuman(user))
user.put_in_hands(manifest)
manifest = null
overlays-="manifest"
/obj/structure/closet/crate/attack_hand(mob/user)
if(manifest)
tear_manifest(user)
return
if(opened)
close()
else
if(rigged && locate(/obj/item/device/electropack) in src)
if(isliving(user))
var/mob/living/L = user
if(L.electrocute_act(17, src))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
return
open()
return
/obj/structure/closet/crate/attack_paw(mob/user)
return attack_hand(user)
/obj/structure/closet/crate/attackby(obj/item/weapon/W, mob/user, params)
if(opened)
if(isrobot(user))
return
if(!user.drop_item()) //couldn't drop the item
user << "<span class='warning'>\The [W] is stuck to your hand, you cannot put it in \the [src]!</span>"
return
if(W)
W.loc = src.loc
else if(istype(W, /obj/item/stack/packageWrap))
return
else if(istype(W, /obj/item/stack/cable_coil))
if(rigged)
user << "<span class='warning'>[src] is already rigged!</span>"
return
var/obj/item/stack/cable_coil/C = W
if (C.use(5))
user << "<span class='notice'>You rig [src].</span>"
rigged = 1
else
user << "<span class='warning'>You need 5 lengths of cable to rig [src]!</span>"
return
else if(istype(W, /obj/item/device/electropack))
if(rigged)
if(!user.drop_item())
return
user << "<span class='notice'>You attach [W] to [src].</span>"
W.loc = src
return
else if(istype(W, /obj/item/weapon/wirecutters))
if(rigged)
user << "<span class='notice'>You cut away the wiring.</span>"
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
rigged = 0
return
else if(!place(user, W))
return attack_hand(user)
@@ -0,0 +1,45 @@
/obj/structure/closet/crate/critter
name = "critter crate"
desc = "A crate designed for safe transport of animals. Only openable from the the outside."
icon_state = "crittercrate"
allow_mobs = TRUE
breakout_time = 1
/obj/structure/closet/crate/critter/update_icon()
overlays.Cut()
if(opened)
overlays += "crittercrate_door_open"
else
overlays += "crittercrate_door"
if(manifest)
overlays += "manifest"
/obj/structure/closet/crate/critter/attack_hand(mob/user)
if(user in src)
user << "<span class='notice'>It won't budge!</span>"
else
..()
/obj/structure/closet/crate/critter/corgi/New()
..()
if(prob(50))
new /mob/living/simple_animal/pet/dog/corgi/Lisa(src)
else
new /mob/living/simple_animal/pet/dog/corgi(src)
/obj/structure/closet/crate/critter/cat/New()
..()
if(prob(50))
new /mob/living/simple_animal/pet/cat/Proc(src)
else
new /mob/living/simple_animal/pet/cat(src)
/obj/structure/closet/crate/critter/chick/New()
..()
for(var/i in 1 to rand(1, 3))
new /mob/living/simple_animal/chick(src)
/obj/structure/closet/crate/critter/butterfly/New()
..()
for(var/i in 1 to 50)
new /mob/living/simple_animal/butterfly(src)
@@ -0,0 +1,35 @@
/obj/structure/closet/crate/large
name = "large crate"
desc = "A hefty wooden crate."
icon_state = "largecrate"
density = 1
material_drop = /obj/item/stack/sheet/mineral/wood
/obj/structure/closet/crate/large/attack_hand(mob/user)
add_fingerprint(user)
if(manifest)
tear_manifest(user)
return
else
user << "<span class='warning'>You need a crowbar to pry this open!</span>"
return
/obj/structure/closet/crate/large/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/crowbar))
var/turf/T = get_turf(src)
if(manifest)
tear_manifest(user)
user.visible_message("[user] pries \the [src] open.", \
"<span class='notice'>You pry open \the [src].</span>", \
"<span class='italics'>You hear splitting wood.</span>")
playsound(src.loc, 'sound/weapons/slashmiss.ogg', 75, 1)
for(var/i in 1 to rand(2, 5))
new material_drop(src)
for(var/atom/movable/AM in contents)
AM.forceMove(T)
qdel(src)
else
..()
@@ -1,105 +1,36 @@
/obj/structure/closet/crate/secure
desc = "A secure crate."
name = "secure crate"
icon_crate = "securecrate"
icon_state = "securecrate"
var/redlight = "securecrater"
var/greenlight = "securecrateg"
var/sparks = "securecratesparks"
var/emag = "securecrateemag"
secure = 1
locked = 1
health = 1000
/obj/structure/closet/crate/secure/update_icon()
..()
if(broken)
overlays += "securecrateemag"
else if(locked)
overlays += "securecrater"
else
overlays += "securecrateg"
/obj/structure/closet/crate/secure/weapon
desc = "A secure weapons crate."
name = "weapons crate"
icon_crate = "weaponcrate"
icon_state = "weaponcrate"
/obj/structure/closet/crate/secure/plasma
desc = "A secure plasma crate."
name = "plasma crate"
icon_crate = "plasmacrate"
icon_state = "plasmacrate"
/obj/structure/closet/crate/secure/gear
desc = "A secure gear crate."
name = "gear crate"
icon_crate = "secgearcrate"
icon_state = "secgearcrate"
/obj/structure/closet/crate/secure/hydrosec
/obj/structure/closet/crate/secure/hydroponics
desc = "A crate with a lock on it, painted in the scheme of the station's botanists."
name = "secure hydroponics crate"
icon_crate = "hydrosecurecrate"
icon_state = "hydrosecurecrate"
/obj/structure/closet/crate/secure/update_icon()
..()
if(locked)
overlays += redlight
else if(broken)
overlays += emag
else
overlays += greenlight
/obj/structure/closet/crate/secure/attack_hand(mob/user)
if(manifest)
tear_manifest(user)
return
if(locked && !broken)
if (allowed(user))
user << "<span class='notice'>You unlock [src].</span>"
src.locked = 0
update_icon()
add_fingerprint(user)
return
else
user << "<span class='notice'>[src] is locked.</span>"
return
else
..()
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/card) && src.allowed(user) && !locked && !opened && !broken)
user << "<span class='notice'>You lock \the [src].</span>"
src.locked = 1
update_icon()
add_fingerprint(user)
return
return ..()
/obj/structure/closet/crate/secure/emag_act(mob/user)
if(locked && !broken)
src.locked = 0
src.broken = 1
update_icon()
overlays += sparks
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
playsound(src.loc, "sparks", 60, 1)
user << "<span class='notice'>You unlock \the [src].</span>"
add_fingerprint(user)
/obj/structure/closet/crate/secure/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(!broken && !opened && prob(50/severity))
if(!locked)
src.locked = 1
update_icon()
else
src.locked = 0
src.broken = 1
update_icon()
overlays += sparks
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
if(!opened && prob(20/severity))
if(!locked)
open()
else
src.req_access = list()
src.req_access += pick(get_all_accesses())
..()
@@ -1,53 +0,0 @@
/obj/structure/largecrate
name = "large crate"
desc = "A hefty wooden crate."
icon = 'icons/obj/crates.dmi'
icon_state = "densecrate"
density = 1
var/obj/item/weapon/paper/manifest/manifest
/obj/structure/largecrate/New()
..()
update_icon()
/obj/structure/largecrate/update_icon()
..()
overlays.Cut()
if(manifest)
overlays += "manifest"
/obj/structure/largecrate/attack_hand(mob/user)
if(manifest)
user << "<span class='notice'>You tear the manifest off of the crate.</span>"
playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1)
manifest.loc = loc
if(ishuman(user))
user.put_in_hands(manifest)
manifest = null
update_icon()
return
else
user << "<span class='warning'>You need a crowbar to pry this open!</span>"
return
/obj/structure/largecrate/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/crowbar))
if(manifest)
manifest.loc = loc
manifest = null
update_icon()
new /obj/item/stack/sheet/mineral/wood(src)
var/turf/T = get_turf(src)
for(var/atom/movable/AM in contents)
AM.loc = T
user.visible_message("[user] pries \the [src] open.", \
"<span class='notice'>You pry open \the [src].</span>", \
"<span class='italics'>You hear splitting wood.</span>")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
qdel(src)
else
return attack_hand(user)
/obj/structure/largecrate/mule
icon_state = "mulecrate"