diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm
index 00359c05236..f1227222a42 100644
--- a/code/game/objects/items/RSF.dm
+++ b/code/game/objects/items/RSF.dm
@@ -85,8 +85,8 @@
if(!currently_dispensing)
return ITEM_INTERACT_COMPLETE
- if(!istype(target, /obj/structure/table) && !isfloorturf(target))
- to_chat(user, "The RSF can only create service items on tables or floors!")
+ if(!istype(target, /obj/structure/table) && !isfloorturf(target) && !ishuman(target))
+ to_chat(user, "The RSF can only create service items on tables, floors, or people's hands!")
return ITEM_INTERACT_COMPLETE
if(isrobot(user))
@@ -97,8 +97,25 @@
return ITEM_INTERACT_COMPLETE
var/turf/T = get_turf(target)
- new currently_dispensing(T)
- playsound(loc, 'sound/machines/click.ogg', 10, TRUE)
+ if(!ishuman(target))
+ new currently_dispensing(T)
+ playsound(loc, 'sound/machines/click.ogg', 10, TRUE)
+ return ITEM_INTERACT_COMPLETE
+
+ if(do_after_once(user, DEFAULT_ITEM_PUTON_DELAY, target = target))
+ var/mob/living/carbon/human/esteemed_individual = target
+ var/dispensed_item = new currently_dispensing(T)
+ if(esteemed_individual.put_in_hands(dispensed_item))
+ target.visible_message(
+ "[user] hands [target] \a [dispensed_item].",
+ "[user] hands you \a [dispensed_item]."
+ )
+ else
+ target.visible_message(
+ "[user] tries to hand [target] \a [dispensed_item], but it tumbles down onto the floor!",
+ "[user] tries to hand you \a [dispensed_item], but it tumbles down onto the floor!"
+ )
+ playsound(loc, 'sound/machines/click.ogg', 10, TRUE)
return ITEM_INTERACT_COMPLETE
/obj/item/rsf/proc/get_radial_contents()