mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 03:55:11 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into AttackbyDestruction
Conflicts: code/game/objects/structures/crates_lockers/closets.dm
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
var/horizontal = FALSE
|
||||
var/allow_objects = FALSE
|
||||
var/allow_dense = FALSE
|
||||
var/dense_when_open = FALSE //if it's dense when open or not
|
||||
var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container
|
||||
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
|
||||
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.
|
||||
@@ -81,15 +82,27 @@
|
||||
return 1
|
||||
return !density
|
||||
|
||||
/obj/structure/closet/proc/can_open()
|
||||
/obj/structure/closet/proc/can_open(mob/living/user)
|
||||
if(welded || locked)
|
||||
return 0
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/mob/living/L in T)
|
||||
if(L.anchored || horizontal && L.mob_size > MOB_SIZE_TINY && L.density)
|
||||
if(user)
|
||||
user << "<span class='danger'>There's something large on top of [src], preventing it from opening.</span>" //you... think? there's something standing on it ffs
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/proc/can_close()
|
||||
for(var/obj/structure/closet/closet in get_turf(src))
|
||||
/obj/structure/closet/proc/can_close(mob/living/user)
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/obj/structure/closet/closet in T)
|
||||
if(closet != src && !closet.wall_mounted)
|
||||
return 0
|
||||
for(var/mob/living/L in T)
|
||||
if(L.anchored || horizontal && L.mob_size > MOB_SIZE_TINY && L.density)
|
||||
if(user)
|
||||
user << "<span class='danger'>There's something too large in [src], preventing it from closing.</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/proc/dump_contents()
|
||||
@@ -107,12 +120,14 @@
|
||||
if(insert(AM) == -1) // limit reached
|
||||
break
|
||||
|
||||
/obj/structure/closet/proc/open()
|
||||
if(opened || !can_open())
|
||||
/obj/structure/closet/proc/open(mob/living/user)
|
||||
if(opened || !can_open(user))
|
||||
return
|
||||
playsound(loc, open_sound, 15, 1, -3)
|
||||
opened = 1
|
||||
density = 0
|
||||
if(!dense_when_open)
|
||||
density = 0
|
||||
climb_time *= 0.5 //it's faster to climb onto an open thing
|
||||
dump_contents()
|
||||
update_icon()
|
||||
return 1
|
||||
@@ -126,10 +141,10 @@
|
||||
if(!isliving(AM)) //let's not put ghosts or camera mobs inside closets...
|
||||
return
|
||||
var/mob/living/L = AM
|
||||
if(L.buckled || L.incorporeal_move || L.buckled_mobs.len)
|
||||
if(L.anchored || L.buckled || L.incorporeal_move || L.buckled_mobs.len)
|
||||
return
|
||||
if(L.mob_size > MOB_SIZE_TINY) // Tiny mobs are treated as items.
|
||||
if(horizontal && !L.lying)
|
||||
if(horizontal && L.density)
|
||||
return
|
||||
if(L.mob_size > max_mob_size)
|
||||
return
|
||||
@@ -154,21 +169,22 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/proc/close()
|
||||
if(!opened || !can_close())
|
||||
/obj/structure/closet/proc/close(mob/living/user)
|
||||
if(!opened || !can_close(user))
|
||||
return 0
|
||||
take_contents()
|
||||
playsound(loc, close_sound, 15, 1, -3)
|
||||
climb_time = initial(climb_time)
|
||||
opened = 0
|
||||
density = 1
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/proc/toggle()
|
||||
/obj/structure/closet/proc/toggle(mob/living/user)
|
||||
if(opened)
|
||||
return close()
|
||||
return close(user)
|
||||
else
|
||||
return open()
|
||||
return open(user)
|
||||
|
||||
/obj/structure/closet/ex_act(severity, target)
|
||||
contents_explosion(severity, target)
|
||||
@@ -217,7 +233,7 @@
|
||||
qdel(src)
|
||||
return 0
|
||||
else if(user.drop_item())
|
||||
W.Move(loc)
|
||||
W.forceMove(loc)
|
||||
return 1
|
||||
else if(istype(W, /obj/item/weapon/weldingtool) && can_weld_shut)
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
@@ -247,26 +263,29 @@
|
||||
return
|
||||
if(!Adjacent(user) || !user.Adjacent(O))
|
||||
return
|
||||
if(user == O) //try to climb onto it
|
||||
return ..()
|
||||
if(!opened || istype(O, /obj/structure/closet))
|
||||
return
|
||||
if(user == O)
|
||||
return
|
||||
|
||||
|
||||
var/list/targets = list(O, src)
|
||||
add_fingerprint(user)
|
||||
user.visible_message("<span class='warning'>[user] tries to stuff [O] into [src].</span>", \
|
||||
"<span class='warning'>You try to stuff [O] into [src].</span>", \
|
||||
var/mob/living/L = O
|
||||
var/actuallyismob = istype(L)
|
||||
user.visible_message("<span class='warning'>[user] [actuallyismob ? "tries to ":""]stuff [O] into [src].</span>", \
|
||||
"<span class='warning'>You [actuallyismob ? "try to ":""]stuff [O] into [src].</span>", \
|
||||
"<span class='italics'>You hear clanging.</span>")
|
||||
if(do_after_mob(user, targets, 40))
|
||||
user.visible_message("<span class='notice'>[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>")
|
||||
var/mob/living/L = O
|
||||
if(istype(L) && !issilicon(L))
|
||||
L.Weaken(2)
|
||||
O.loc = src.loc
|
||||
close()
|
||||
if(actuallyismob)
|
||||
if(do_after_mob(user, targets, 40))
|
||||
user.visible_message("<span class='notice'>[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>")
|
||||
if(!issilicon(L))
|
||||
L.Weaken(2)
|
||||
O.forceMove(get_turf(src))
|
||||
close()
|
||||
else
|
||||
O.forceMove(get_turf(src))
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/relaymove(mob/user)
|
||||
@@ -282,14 +301,18 @@
|
||||
M.show_message("<FONT size=[max(0, 5 - get_dist(src, M))]>BANG, bang!</FONT>", 2)
|
||||
|
||||
/obj/structure/closet/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
..()
|
||||
if(user.lying && get_dist(src, user) > 0)
|
||||
return
|
||||
|
||||
if(!toggle())
|
||||
if(!toggle(user))
|
||||
togglelock(user)
|
||||
return
|
||||
|
||||
/obj/structure/closet/attack_alien(mob/living/user)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
// tk grab then use on self
|
||||
/obj/structure/closet/attack_self_tk(mob/user)
|
||||
return attack_hand(user)
|
||||
@@ -312,7 +335,8 @@
|
||||
// should be independently resolved, but this is also an interesting twist.
|
||||
/obj/structure/closet/Exit(atom/movable/AM)
|
||||
open()
|
||||
if(AM.loc == src) return 0
|
||||
if(AM.loc == src)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/container_resist(mob/living/user)
|
||||
|
||||
@@ -22,3 +22,4 @@
|
||||
new /obj/item/device/assembly/flash/handheld(src)
|
||||
new /obj/item/device/laser_pointer(src)
|
||||
new /obj/item/weapon/door_remote/research_director(src)
|
||||
new /obj/item/weapon/storage/box/firingpins(src)
|
||||
|
||||
@@ -8,12 +8,26 @@
|
||||
horizontal = TRUE
|
||||
allow_objects = TRUE
|
||||
allow_dense = TRUE
|
||||
dense_when_open = TRUE
|
||||
climbable = TRUE
|
||||
climb_time = 10 //real fast, because let's be honest stepping into or onto a crate is easy
|
||||
climb_stun = 0 //climbing onto crates isn't hard, guys
|
||||
var/obj/item/weapon/paper/manifest/manifest
|
||||
|
||||
/obj/structure/closet/crate/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/closet/crate/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(!istype(mover, /obj/structure/closet))
|
||||
var/obj/structure/closet/crate/locatedcrate = locate(/obj/structure/closet/crate) in get_turf(mover)
|
||||
if(locatedcrate) //you can walk on it like tables, if you're not in an open crate trying to move to a closed crate
|
||||
if(opened) //if we're open, allow entering regardless of located crate openness
|
||||
return 1
|
||||
if(!locatedcrate.opened) //otherwise, if the located crate is closed, allow entering
|
||||
return 1
|
||||
return !density
|
||||
|
||||
/obj/structure/closet/crate/update_icon()
|
||||
icon_state = "[initial(icon_state)][opened ? "open" : ""]"
|
||||
|
||||
@@ -22,12 +36,10 @@
|
||||
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/proc/tear_manifest(mob/user)
|
||||
user << "<span class='notice'>You tear the manifest off of the crate.</span>"
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/extinguisher_cabinet/AltClick(mob/living/user)
|
||||
if(user.incapacitated() || !Adjacent(user))
|
||||
if(user.incapacitated() || !Adjacent(user) || !istype(user))
|
||||
return
|
||||
opened = !opened
|
||||
update_icon()
|
||||
|
||||
Reference in New Issue
Block a user