diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0760863943f..0dbd1dd272c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -140,7 +140,7 @@ if(D.data["donor"] == src) B = D break - var/datum/reagent/nutriment/F = locate() in vessel.reagent_list + var/datum/reagent/nutriment/F = locate() in reagents.reagent_list if(F != null) if(F.volume >= 1) // nutriment speeds it up quite a bit diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm new file mode 100644 index 00000000000..4b66af1f7d5 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -0,0 +1,122 @@ +// A special tray for the service droid. Allow droid to pick up and drop items as if they were using the tray normally +// Click on table to unload, click on item to load. Otherwise works identically to a tray. +// Unlike the base item "tray", robotrays ONLY pick up food, drinks and condiments. + +/obj/item/weapon/tray/robotray + name = "RoboTray" + desc = "An autoloading tray specialized for carrying refreshments." + +/obj/item/weapon/tray/robotray/afterattack(atom/target, mob/user as mob) + if ( !target ) + return + // pick up items, mostly copied from base tray pickup proc + // see code\game\objects\items\weapons\kitchen.dm line 241 + if ( istype(target,/obj/item)) + if ( !isturf(target.loc) ) // Don't load up stuff if it's inside a container or mob! + return + var turf/pickup = target.loc + + var addedSomething = 0 + + for(var/obj/item/weapon/reagent_containers/food/I in pickup) + + + if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) + var/add = 0 + if(I.w_class == 1.0) + add = 1 + else if(I.w_class == 2.0) + add = 3 + else + add = 5 + if(calc_carry() + add >= max_carry) + break + + I.loc = src + carrying.Add(I) + overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer) + addedSomething = 1 + if ( addedSomething ) + user.visible_message("\blue [user] load some items onto their service tray.") + + return + + // Unloads the tray, copied from base item's proc dropped() and altered + // see code\game\objects\items\weapons\kitchen.dm line 263 + + if ( isturf(target) || istype(target,/obj/structure/table) ) + var foundtable = istype(target,/obj/structure/table/) + if ( !foundtable ) //it must be a turf! + for(var/obj/structure/table/T in target) + foundtable = 1 + break + + var turf/dropspot + if ( !foundtable ) // don't unload things onto walls or other silly places. + dropspot = user.loc + else if ( isturf(target) ) // they clicked on a turf with a table in it + dropspot = target + else // they clicked on a table + dropspot = target.loc + + + overlays = null + + var droppedSomething = 0 + + for(var/obj/item/I in carrying) + I.loc = dropspot + carrying.Remove(I) + droppedSomething = 1 + if(!foundtable && isturf(dropspot)) + // if no table, presume that the person just shittily dropped the tray on the ground and made a mess everywhere! + spawn() + for(var/i = 1, i <= rand(1,2), i++) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + if ( droppedSomething ) + if ( foundtable ) + user.visible_message("\blue [user] unloads their service tray.") + else + user.visible_message("\blue [user] drops all the items on their tray.") + + return ..() + + + + +// A special pen for service droids. Can be toggled to switch between normal writting mode, and paper rename mode +// Allows service droids to rename paper items. + +/obj/item/weapon/pen/robopen + desc = "A black ink printing attachment with a paper naming mode." + name = "Printing Pen" + var/mode = 1 + +/obj/item/weapon/pen/robopen/attack_self(mob/user as mob) + playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) + if (mode == 1) + mode = 2 + user << "Changed printing mode to 'Rename Paper'" + return + if (mode == 2) + mode = 1 + user << "Changed printing mode to 'Write Paper'" + +// Copied over from paper's rename verb +// see code\modules\paperwork\paper.dm line 62 + +/obj/item/weapon/pen/robopen/proc/RenamePaper(mob/user as mob,obj/paper as obj) + if ( !user || !paper ) + return + var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text + if ( !user || !paper ) + return + + n_name = copytext(n_name, 1, 32) + if(( get_dist(user,paper) <= 1 && user.stat == 0)) + paper.name = "paper[(n_name ? text("- '[n_name]'") : null)]" + add_fingerprint(user) + return + diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index c7a956bd0db..36904df4999 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -170,7 +170,7 @@ ..() src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src) src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) - src.modules += new /obj/item/weapon/pen(src) + src.modules += new /obj/item/weapon/pen/robopen(src) var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) M.matter = 30 @@ -182,7 +182,7 @@ L.light_on = 1 src.modules += L - src.modules += new /obj/item/weapon/tray(src) + src.modules += new /obj/item/weapon/tray/robotray(src) src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c007425c9b8..ccaf59f8d29 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -264,7 +264,10 @@ clown = 1 if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) - user << browse("