mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user