diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fe9bf5ef4a..15e1d83a7d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -868,12 +868,17 @@ .["Toggle Purrbation"] = "?_src_=vars;[HrefToken()];purrbation=[REF(src)]" /mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user) - if((target != pulling) || (grab_state < GRAB_AGGRESSIVE) || (user != target) || !isliving(user) || stat || user.stat)//Get consent first :^) - . = ..() - return - buckle_mob(target, TRUE, TRUE) + //If they dragged themselves and we're currently aggressively grabbing them try to piggyback + if(user == target && can_piggyback(target) && pulling == target && grab_state >= GRAB_AGGRESSIVE && stat == CONSCIOUS) + buckle_mob(target,TRUE,TRUE) . = ..() +//Can C try to piggyback at all. +/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/C) + if(istype(C) && C.stat == CONSCIOUS) + return TRUE + return FALSE + /mob/living/carbon/human/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) if(!force)//humans are only meant to be ridden through piggybacking and special cases return @@ -882,24 +887,28 @@ return var/datum/component/riding/human/riding_datum = LoadComponent(/datum/component/riding/human) riding_datum.ride_check_rider_incapacitated = TRUE - riding_datum.ride_check_ridden_incapacitated = TRUE riding_datum.ride_check_rider_restrained = TRUE riding_datum.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4))) if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS)) return - visible_message("[M] starts to climb onto [src]...") - if(do_after(M, 15, target = src)) - if(iscarbon(M)) - if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE)) - M.visible_message("[M] can't hang onto [src]!") - return - if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!! - M.visible_message("[M] can't climb onto [src]!") - return - . = ..(M, force, check_loc) - stop_pulling() + if(can_piggyback(M)) + riding_datum.ride_check_ridden_incapacitated = TRUE + visible_message("[M] starts to climb onto [src]...") + if(do_after(M, 15, target = src)) + if(can_piggyback(M)) + if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE)) + M.visible_message("[M] can't hang onto [src]!") + return + if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!! + M.visible_message("[M] can't climb onto [src]!") + return + . = ..(M, force, check_loc) + stop_pulling() + else + visible_message("[M] fails to climb onto [src]!") else - visible_message("[M] fails to climb onto [src]!") + . = ..(M,force,check_loc) + stop_pulling() /mob/living/carbon/human/species var/race = null