From dda0a9055dcf09cbf3411b59ddb5e9d4dc53d5ee Mon Sep 17 00:00:00 2001 From: TheFurryFeline <38586851+TheFurryFeline@users.noreply.github.com> Date: Thu, 2 May 2019 22:13:02 -0400 Subject: [PATCH] Buckling Bug Fixes Prevents unintended self-dragging to pipes and other chairs. --- code/game/objects/buckling.dm | 36 ++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 998b213ff4..78e3504f6e 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -49,22 +49,12 @@ unbuckle_all_mobs() return ..() - +//TFF 2/5/19: Polaris port for buckling-related bugs - chair-related buckling disabled /atom/movable/proc/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) - if(!buckled_mobs) - buckled_mobs = list() - - if(!istype(M)) - return FALSE - if(check_loc && M.loc != loc) return FALSE - if((!can_buckle && !forced) || M.buckled || M.pinned.len || (buckled_mobs.len >= max_buckled_mobs) || (buckle_require_restraints && !M.restrained())) - return FALSE - - if(has_buckled_mobs() && buckled_mobs.len >= max_buckled_mobs) //Handles trying to buckle yourself to the chair when someone is on it - to_chat(M, "\The [src] can't buckle anymore people.") + if(!can_buckle_check(M, forced)) return FALSE M.buckled = src @@ -130,6 +120,9 @@ if(M in buckled_mobs) to_chat(user, "\The [M] is already buckled to \the [src].") return FALSE + //TFF 2/5/19: Polaris port for buckling-related bugs - check for whether someone's buckled + if(!can_buckle_check(M, forced)) + return FALSE add_fingerprint(user) // unbuckle_mob() @@ -184,6 +177,23 @@ L.set_dir(dir) return TRUE +//TFF 2/5/19: Polaris port for buckling-related bugs - check for whether someone's buckled +/atom/movable/proc/can_buckle_check(mob/living/M, forced = FALSE) + if(!buckled_mobs) + buckled_mobs = list() + + if(!istype(M)) + return FALSE + + if((!can_buckle && !forced) || M.buckled || M.pinned.len || (buckled_mobs.len >= max_buckled_mobs) || (buckle_require_restraints && !M.restrained())) + return FALSE + + if(has_buckled_mobs() && buckled_mobs.len >= max_buckled_mobs) //Handles trying to buckle yourself to the chair when someone is on it + to_chat(M, "\The [src] can't buckle anymore people.") + return FALSE + + return TRUE + /atom/movable/Move(atom/newloc, direct = 0) . = ..() if(. && has_buckled_mobs() && !handle_buckled_mob_movement(newloc, direct)) //movement failed due to buckled mob(s) @@ -193,4 +203,4 @@ riding_datum.handle_vehicle_layer() riding_datum.handle_vehicle_offsets() //VOREStation Add End - \ No newline at end of file +