mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 07:27:57 +01:00
- In preparation of fixing issue 585, which extends far further than just the things listed there, as well as to standardize the many incarnations of satchel-type code (pill boxes, mining satchels, hydroponics satchels, etc.) I have added some functions to storage type items:
New variables: var/use_to_pickup = if 1, the storage item also works like satchels, which means you can use it on something else to pick it up. var/display_contents_with_number = if 1, the items in the storage item are grouped by type with the number of items being displayed. See the screenshot. var/allow_quick_empty = if 1 on creation, it adds a verb that allows you to empty the item with one click var/allow_quick_gather = if 1 on creation, it adds a verb which allows you to switch between pick-up methods. one-per-click or all-on-tile. Same as satchels worked. use_to_pickup must be 1 for any of that to matter. var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile New procs: /obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) - Returns 0 or 1, depending on whether the item W can be inserted /obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj) - Inserts the item into the storage item and calls all the procs it needs to. Doesn't check whether the item can fit tho, tha'ts what can_be_inserted() is for. /obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) - Removes item W from the storage object and sets it's loc to new_location or get_turf(src) if one is not provided. /obj/item/proc/on_exit_storage(obj/item/weapon/storage/S as obj) - Called after the object has been removed from the storage item S. The object's loc is already set to the new one. /obj/item/proc/on_enter_storage(obj/item/weapon/storage/S as obj) - Called after the object has been inserted into the storage item S. The object's loc is already set to S. I made satchels work on this new code. The rest will be added to it soon. See the screenshot. Screenshot: http://www.kamletos.si/new%20satchels.png This is yet another big change and it is very possible that bugs will come from it. Please report them to me or on the tracker. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4451 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -15,6 +15,14 @@
|
||||
/obj/item/proc/pickup(mob/user)
|
||||
return
|
||||
|
||||
// called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
|
||||
/obj/item/proc/on_exit_storage(obj/item/weapon/storage/S as obj)
|
||||
return
|
||||
|
||||
// called when this item is added into a storage item, which is passed on as S. The loc variable is already set to the storage item.
|
||||
/obj/item/proc/on_enter_storage(obj/item/weapon/storage/S as obj)
|
||||
return
|
||||
|
||||
// called after an item is placed in an equipment slot
|
||||
// user is mob that equipped it
|
||||
// slot uses the slot_X defines found in setup.dm
|
||||
@@ -91,17 +99,8 @@
|
||||
/obj/item/attack_hand(mob/user as mob)
|
||||
if (!user) return
|
||||
if (istype(src.loc, /obj/item/weapon/storage))
|
||||
for(var/mob/M in range(1, src.loc))
|
||||
if (M.s_active == src.loc)
|
||||
if (M.client)
|
||||
M.client.screen -= src
|
||||
if(istype(src.loc, /obj/item/weapon/storage/backpack/santabag))
|
||||
if(src.loc.contents.len < 5)
|
||||
src.loc.icon_state = "giftbag0"
|
||||
else if(src.loc.contents.len >= 5 && src.loc.contents.len < 15)
|
||||
src.loc.icon_state = "giftbag1"
|
||||
else if(src.loc.contents.len >= 15)
|
||||
src.loc.icon_state = "giftbag2"
|
||||
var/obj/item/weapon/storage/S = src.loc
|
||||
S.remove_from_storage(src)
|
||||
|
||||
src.throwing = 0
|
||||
if (src.loc == user)
|
||||
@@ -155,6 +154,22 @@
|
||||
return
|
||||
|
||||
/obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if(istype(W,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
if(S.use_to_pickup)
|
||||
if(!S.can_be_inserted(src))
|
||||
return
|
||||
if(S.collection_mode) //Mode is set to collect all items on a tile and we clicked on a valid one.
|
||||
if(isturf(src.loc))
|
||||
for(var/obj/item/I in src.loc)
|
||||
if(I != src) //We'll do the one we clicked on last.
|
||||
if(!S.can_be_inserted(src))
|
||||
continue
|
||||
S.handle_item_insertion(I)
|
||||
S.handle_item_insertion(src)
|
||||
|
||||
|
||||
return
|
||||
|
||||
/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
|
||||
|
||||
Reference in New Issue
Block a user