diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index ef71a9c7000..c3d1a8e7a32 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -288,7 +288,7 @@ return 0 if(affecting) - if(!isturf(assailant.loc) || ( !isturf(affecting.loc) || assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1) ) + if(!isturf(assailant.loc) || ( !isturf(affecting.loc) || assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1) || assailant.z != affecting.z ) qdel(src) return 0 diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 5a0f53fa558..0e300b195da 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -54,9 +54,17 @@ var/obj/structure/ladder/target_ladder = getTargetLadder(M) if(!target_ladder) return + + var/obj/item/weapon/grab/G = M.l_hand + if (!istype(G)) + G = M.r_hand + if(!M.Move(get_turf(src))) to_chat(M, "You fail to reach \the [src].") return + + if (istype(G)) + G.affecting.forceMove(get_turf(src)) var/direction = target_ladder == target_up ? "up" : "down" @@ -66,7 +74,7 @@ target_ladder.audible_message("You hear something coming [direction] \the [src]") - if(do_after(M, climb_time)) + if(do_after(M, istype(G) ? (climb_time*2) : climb_time)) climbLadder(M, target_ladder) /obj/structure/ladder/attack_ghost(var/mob/M) @@ -126,6 +134,11 @@ if(!A.CanPass(M, M.loc, 1.5, 0)) to_chat(M, "\The [A] is blocking \the [src].") return FALSE + var/obj/item/weapon/grab/G = M.l_hand + if (!istype(G)) + G = M.r_hand + if (istype(G)) + G.affecting.forceMove(T) return M.Move(T) /obj/structure/ladder/CanPass(obj/mover, turf/source, height, airflow)