From c1f1b6365d9675590b9bb104659fed80bdb500af Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Sun, 19 Dec 2010 13:50:15 +0000 Subject: [PATCH] Now disassembling of bed/chair will release bucked person. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@671 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj.dm | 2 + code/game/objects/stool.dm | 121 +++++++++++++++++-------------------- 2 files changed, 57 insertions(+), 66 deletions(-) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index e1fba55948d..a60dc0a9ad6 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -636,12 +636,14 @@ name = "bed" icon_state = "bed" anchored = 1.0 + var/list/buckled_mobs = list( ) /obj/stool/chair name = "chair" icon_state = "chair" var/status = 0.0 anchored = 1.0 + var/list/buckled_mobs = list( ) /obj/stool/chair/e_chair name = "electrified chair" diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm index 9379fc942ed..f2963585303 100644 --- a/code/game/objects/stool.dm +++ b/code/game/objects/stool.dm @@ -57,49 +57,72 @@ return /obj/stool/bed/Del() - for(var/mob/M in src.loc) + for(var/mob/M in src.buckled_mobs) if (M.buckled == src) - M.buckled = null M.lying = 0 - M.anchored = 0 + unbuckle_all() ..() return -/obj/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob) +/obj/stool/proc/unbuckle_all() + for(var/mob/M in src:buckled_mobs) + if (M.buckled == src) + M.buckled = null + M.anchored = 0 + +/obj/stool/proc/manual_unbuckle_all(mob/user as mob) + var/N = 0; + for(var/mob/M in src:buckled_mobs) + if (M.buckled == src) + if (M != user) + M.visible_message(\ + "\blue [M.name] was unbuckled by [user.name]!",\ + "You unbuckled from [src] by [user.name].",\ + "You hear metal clanking") + else + M.visible_message(\ + "\blue [M.name] was unbuckled himself!",\ + "You unbuckle yourself from [src].",\ + "You hear metal clanking") +// world << "[M] is no longer buckled to [src]" + M.anchored = 0 + M.buckled = null + N++ + return N + +/obj/stool/proc/buckle_mob(mob/M as mob, mob/user as mob) if (!ticker) user << "You can't buckle anyone in before the game starts." if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat)) return if (M == usr) - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] buckles in!", M) + M.visible_message(\ + "\blue [M.name] buckles in!",\ + "You buckle yourself to [src].",\ + "You hear metal clanking") else - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] is buckled in by [].", M, user) - M.lying = 1 + M.visible_message(\ + "\blue [M.name] is buckled in to [src] by [user.name]!",\ + "You buckled in to [src] by [user.name].",\ + "You hear metal clanking") M.anchored = 1 M.buckled = src M.loc = src.loc + src:buckled_mobs += M src.add_fingerprint(user) return - + +/obj/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob) + buckle_mob(M, user) + M.lying = 1 + return + /obj/stool/bed/attack_hand(mob/user as mob) - for(var/mob/M in src.loc) - if (M.buckled) - if (M != user) - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] is unbuckled by [].", M, user) - else - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] unbuckles.", M) -// world << "[M] is no longer buckled to [src]" - M.anchored = 0 - M.buckled = null - src.add_fingerprint(user) + for(var/mob/M in src.buckled_mobs) + if (M.buckled == src) + M.lying = 0 + if (manual_unbuckle_all(user)) + src.add_fingerprint(user) return /obj/stool/chair/e_chair/New() @@ -176,9 +199,7 @@ return /obj/stool/chair/ex_act(severity) - for(var/mob/M in src.loc) - if(M.buckled == src) - M.buckled = null + unbuckle_all() switch(severity) if(1.0) del(src) @@ -195,9 +216,7 @@ /obj/stool/chair/blob_act() if(prob(75)) - for(var/mob/M in src.loc) - if(M.buckled == src) - M.buckled = null + unbuckle_all() del(src) /obj/stool/chair/New() @@ -208,9 +227,7 @@ return /obj/stool/chair/Del() - for(var/mob/M in src.loc) - if (M.buckled == src) - M.buckled = null + unbuckle_all() ..() return @@ -226,41 +243,13 @@ return /obj/stool/chair/MouseDrop_T(mob/M as mob, mob/user as mob) - if (!ticker) - user << "You can't buckle anyone in before the game starts." - return - if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat)) - return - if (M == usr) - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] buckles in!", user) - else - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] is buckled in by []!", M, user) - M.anchored = 1 - M.buckled = src - M.loc = src.loc - src.add_fingerprint(user) + buckle_mob(M, user) return /obj/stool/chair/attack_paw(mob/user as mob) return src.attack_hand(user) /obj/stool/chair/attack_hand(mob/user as mob) - for(var/mob/M in src.loc) - if (M.buckled) - if (M != user) - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] is unbuckled by [].", M, user) - else - for(var/mob/O in viewers(user, null)) - if ((O.client && !( O.blinded ))) - O << text("\blue [] unbuckles.", M) -// world << "[M] is no longer buckled to [src]" - M.anchored = 0 - M.buckled = null - src.add_fingerprint(user) + if (manual_unbuckle_all(user)) + src.add_fingerprint(user) return