diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 38101fedab3..9ab05593915 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -228,7 +228,7 @@ spawn(0) src.interact(usr) else if (S.amount >= max_amount) - return 1 + return var/to_transfer as num if (user.get_inactive_hand()==src) to_transfer = 1 diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 0068304bbcf..5396cdd8940 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -84,7 +84,9 @@ desc = "You can use this to wrap items in." icon = 'icons/obj/items.dmi' icon_state = "wrap_paper" + flags = NOBLUDGEON amount = 25 + max_amount = 25 /obj/item/stack/wrapping_paper/attack_self(mob/user) user << "You need to use it on a package that has already been wrapped!" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index f47d382fe15..f404c37e711 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -50,6 +50,11 @@ user.update_inv_r_hand() qdel(src) +/obj/item/weapon/storage/box/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/stack/packageWrap)) + return 0 + ..() + /obj/item/weapon/storage/box/survival diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 23f5e34ec0a..34f8c622f6e 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -6,6 +6,7 @@ density = 1 mouse_drag_pointer = MOUSE_ACTIVE_POINTER var/obj/wrapped = null + var/giftwrapped = 0 var/sortTag = 0 @@ -41,12 +42,19 @@ user.visible_message("[user] labels [src] as [str].") name = "[name] ([str])" - else if(istype(W, /obj/item/stack/wrapping_paper)) - user.visible_message("[user] wraps the package in festive paper!") - if(istype(wrapped, /obj/structure/closet/crate)) - icon_state = "giftcrate" + else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped) + var/obj/item/stack/wrapping_paper/WP = W + if(WP.use(3)) + user.visible_message("[user] wraps the package in festive paper!") + giftwrapped = 1 + if(istype(wrapped, /obj/structure/closet/crate)) + icon_state = "giftcrate" + else + icon_state = "giftcloset" + if(WP.amount <= 0 && !WP.loc) //if we used our last wrapping paper, drop a cardboard tube + new /obj/item/weapon/c_tube( get_turf(user) ) else - icon_state = "giftcloset" + user << "You need more paper." /obj/item/smallDelivery @@ -55,11 +63,12 @@ icon = 'icons/obj/storage.dmi' icon_state = "deliverycrateSmall" var/obj/item/wrapped = null + var/giftwrapped = 0 var/sortTag = 0 /obj/item/smallDelivery/attack_self(mob/user as mob) - if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 + if(wrapped && wrapped.loc) //sometimes items can disappear. For example, bombs. --rastaf0 wrapped.loc = user.loc if(ishuman(user)) user.put_in_hands(wrapped) @@ -87,9 +96,17 @@ user.visible_message("[user] labels [src] as [str].") name = "[name] ([str])" - else if(istype(W, /obj/item/stack/wrapping_paper)) - icon_state = "giftcrate[wrapped.w_class]" - user.visible_message("[user] wraps the package in festive paper!") + else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped) + var/obj/item/stack/wrapping_paper/WP = W + if(WP.use(1)) + icon_state = "giftcrate[wrapped.w_class]" + giftwrapped = 1 + user.visible_message("[user] wraps the package in festive paper!") + if(WP.amount <= 0 && !WP.loc) //if we used our last wrapping paper, drop a cardboard tube + new /obj/item/weapon/c_tube( get_turf(user) ) + else + user << "You need more paper." + /obj/item/stack/packageWrap @@ -97,8 +114,8 @@ icon = 'icons/obj/items.dmi' icon_state = "deliveryPaper" flags = NOBLUDGEON - w_class = 3.0 amount = 25 + max_amount = 25 /obj/item/stack/packageWrap/afterattack(var/obj/target as obj, mob/user as mob, proximity) @@ -113,11 +130,11 @@ if(target in user) return - user.attack_log += text("\[[time_stamp()]\] Has used [name] on \ref[target]") + if(istype(target, /obj/item) && !(istype(target, /obj/item/weapon/storage) && !istype(target,/obj/item/weapon/storage/box))) var/obj/item/O = target - if(amount > 1) + if(use(1)) var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up! if(!istype(O.loc, /turf)) if(user.client) @@ -131,33 +148,37 @@ P.add_fingerprint(usr) O.add_fingerprint(usr) add_fingerprint(usr) - amount -= 1 + else + return else if(istype(target, /obj/structure/closet/crate)) var/obj/structure/closet/crate/O = target - if(amount > 3 && !O.opened) + if(use(3) && !O.opened) var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) P.icon_state = "deliverycrate" P.wrapped = O O.loc = P - amount -= 3 - else if(amount < 3) + else user << "You need more paper." + return else if(istype (target, /obj/structure/closet)) var/obj/structure/closet/O = target - if(amount > 3 && !O.opened) + if(use(3) && !O.opened) var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) P.wrapped = O O.welded = 1 O.loc = P - amount -= 3 - else if(amount < 3) + else user << "You need more paper." + return else user << "The object you are trying to wrap is unsuitable for the sorting machinery." - if(amount <= 0) - new /obj/item/weapon/c_tube( loc ) - qdel(src) return + + user.visible_message("[user] wraps [target].") + user.attack_log += text("\[[time_stamp()]\] Has used [name] on [target]") + + if(amount <= 0 && !src.loc) //if we used our last wrapping paper, drop a cardboard tube + new /obj/item/weapon/c_tube( get_turf(user) ) return diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 7c4e43a241c..c03fa5e244e 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ