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:
phil235
2016-04-24 21:22:37 +02:00
132 changed files with 72880 additions and 1732 deletions
@@ -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>"
+1 -1
View File
@@ -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()