mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-20 18:47:20 +01:00
Standardization of the object tree and some modified functionality. Moved a lot of storage/*_kit and similar boxes to storage/box/* ; most of these can now be found in boxes.dm. First aid kits remain a separate item type. Replacement Light boxes pick up lights (for example broken ones) when used on them Moved weapon/secstorage to storage/secure Moved plant bags, ore satchel, trash bag, and sheet snatcher to storage/bag, in bags.dm Fixed reagent_containers and snacks to pass through attackby() so the use_to_pickup code works. This affects plant bags, trash bags, and pill bottles. Dice packs are now pill bottles, and all pill bottles can pick up dice. Added error handling to uplink/generate_menu() so that one mistyped string doesn't bork the whole syndie uplink menu, since strings cannot be type-checked at compile time. Cigarette packs and crayon boxes are now storage/fancy, however they retain existing update_icon() code. Added a comment to storage.dm so that future people know where to look for use_to_pickup and allow_quick_gather code. Updated all maps. I've tried to test this thoroughly but I wouldn't be surprised if there were a few lingering issues. Try not to panic if you encounter any. Full (i think) list of changed paths: /obj/item/weapon/storage/flashbang_kit > /obj/item/weapon/storage/box/flashbangs /obj/item/weapon/storage/body_bag_box > /obj/item/weapon/storage/box/bodybags /obj/item/weapon/storage/chemimp_kit > /obj/item/weapon/storage/box/chemimp /obj/item/weapon/storage/trackimp_kit > /obj/item/weapon/storage/box/trackimp /obj/item/weapon/storage/seccart_kit > /obj/item/weapon/storage/box/seccarts /obj/item/weapon/storage/handcuff_kit > /obj/item/weapon/storage/box/handcuffs /obj/item/weapon/cigpacket > /obj/item/weapon/storage/fancy/cigarettes /obj/item/weapon/storage/mousetraps > /obj/item/weapon/storage/box/mousetraps /obj/item/weapon/storage/PDAbox > /obj/item/weapon/storage/box/PDAs /obj/item/weapon/storage/id_kit > /obj/item/weapon/storage/box/ids /obj/item/weapon/storage/lightbox/mixed > /obj/item/weapon/storage/box/lights/mixed /obj/item/weapon/storage/donkpocket_kit > /obj/item/weapon/storage/box/donkpockets /obj/item/weapon/storage/beakerbox > /obj/item/weapon/storage/box/beakers /obj/item/weapon/storage/syringes > /obj/item/weapon/storage/box/syringes /obj/item/weapon/storage/gl_kit > /obj/item/weapon/storage/box/rxglasses /obj/item/weapon/storage/diskbox > /obj/item/weapon/storage/box/disks /obj/item/weapon/storage/stma_kit > /obj/item/weapon/storage/box/masks /obj/item/weapon/storage/lglo_kit > /obj/item/weapon/storage/box/gloves /obj/item/weapon/storage/lightbox/bulbs > /obj/item/weapon/storage/box/lights/bulbs /obj/item/weapon/plantbag > /obj/item/weapon/storage/bag/plants /obj/item/weapon/storage/satchel > /obj/item/weapon/storage/bag/ore /obj/item/weapon/trashbag > /obj/item/weapon/storage/bag/trash git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5494 316c924e-a436-60f5-8080-3fe189b3f50e
223 lines
6.9 KiB
Plaintext
223 lines
6.9 KiB
Plaintext
/*
|
|
* These absorb the functionality of the plant bag, ore satchel, etc.
|
|
* They use the use_to_pickup, quick_gather, and quick_empty functions
|
|
* that were already defined in weapon/storage, but which had been
|
|
* re-implemented in other classes.
|
|
*
|
|
* Contains:
|
|
* Trash Bag
|
|
* Mining Satchel
|
|
* Plant Bag
|
|
* Sheet Snatcher
|
|
*
|
|
* -Sayu
|
|
*/
|
|
|
|
// Generic non-item
|
|
/obj/item/weapon/storage/bag
|
|
allow_quick_gather = 1
|
|
allow_quick_empty = 1
|
|
display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients
|
|
use_to_pickup = 1
|
|
slot_flags = SLOT_BELT
|
|
flags = FPRINT | TABLEPASS
|
|
|
|
// -----------------------------
|
|
// Trash bag
|
|
// -----------------------------
|
|
/obj/item/weapon/storage/bag/trash
|
|
name = "trash bag"
|
|
desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"
|
|
icon = 'icons/obj/trash.dmi'
|
|
icon_state = "trashbag0"
|
|
item_state = "trashbag"
|
|
|
|
w_class = 4
|
|
max_w_class = 2
|
|
storage_slots = 21
|
|
can_hold = list() // any
|
|
cant_hold = list("/obj/item/weapon/disk/nuclear")
|
|
|
|
|
|
/obj/item/weapon/storage/bag/trash/update_icon()
|
|
if(contents.len == 0)
|
|
icon_state = "trashbag0"
|
|
else if(contents.len < 12)
|
|
icon_state = "trashbag1"
|
|
else if(contents.len < 21)
|
|
icon_state = "trashbag2"
|
|
else icon_state = "trashbag3"
|
|
|
|
// -----------------------------
|
|
// Mining Satchel
|
|
// -----------------------------
|
|
|
|
/obj/item/weapon/storage/bag/ore
|
|
name = "Mining Satchel"
|
|
desc = "This little bugger can be used to store and transport ores."
|
|
icon = 'icons/obj/mining.dmi'
|
|
icon_state = "satchel"
|
|
slot_flags = SLOT_BELT | SLOT_POCKET
|
|
w_class = 3
|
|
storage_slots = 50
|
|
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
|
|
max_w_class = 3
|
|
can_hold = list("/obj/item/weapon/ore")
|
|
|
|
|
|
// -----------------------------
|
|
// Plant bag
|
|
// -----------------------------
|
|
|
|
/obj/item/weapon/storage/bag/plants
|
|
icon = 'icons/obj/hydroponics.dmi'
|
|
icon_state = "plantbag"
|
|
name = "Plant Bag"
|
|
storage_slots = 50; //the number of plant pieces it can carry.
|
|
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
|
|
max_w_class = 3
|
|
w_class = 1
|
|
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown")
|
|
|
|
|
|
// -----------------------------
|
|
// Sheet Snatcher
|
|
// -----------------------------
|
|
// Because it stacks stacks, this doesn't operate normally.
|
|
// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu
|
|
|
|
/obj/item/weapon/storage/bag/sheetsnatcher
|
|
icon = 'icons/obj/mining.dmi'
|
|
icon_state = "sheetsnatcher"
|
|
name = "Sheet Snatcher"
|
|
desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet."
|
|
|
|
var/capacity = 300; //the number of sheets it can carry.
|
|
w_class = 3
|
|
|
|
allow_quick_empty = 1 // this function is superceded
|
|
New()
|
|
..()
|
|
//verbs -= /obj/item/weapon/storage/verb/quick_empty
|
|
//verbs += /obj/item/weapon/storage/bag/sheetsnatcher/quick_empty
|
|
|
|
can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
|
if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood))
|
|
if(!stop_messages)
|
|
usr << "The snatcher does not accept [W]."
|
|
return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
|
|
var/current = 0
|
|
for(var/obj/item/stack/sheet/S in contents)
|
|
current += S.amount
|
|
if(capacity == current)//If it's full, you're done
|
|
if(!stop_messages)
|
|
usr << "\red The snatcher is full."
|
|
return 0
|
|
return 1
|
|
|
|
|
|
// Modified handle_item_insertion. Would prefer not to, but...
|
|
handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
|
|
var/obj/item/stack/sheet/S = W
|
|
if(!istype(S)) return 0
|
|
|
|
var/amount
|
|
var/inserted = 0
|
|
var/current = 0
|
|
for(var/obj/item/stack/sheet/S2 in contents)
|
|
current += S2.amount
|
|
if(capacity < current + S.amount)//If the stack will fill it up
|
|
amount = capacity - current
|
|
else
|
|
amount = S.amount
|
|
|
|
for(var/obj/item/stack/sheet/sheet in contents)
|
|
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
|
|
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
|
|
S.amount -= amount
|
|
inserted = 1
|
|
break
|
|
|
|
if(!inserted || !S.amount)
|
|
usr.u_equip(S)
|
|
usr.update_icons() //update our overlays
|
|
if (usr.client && usr.s_active != src)
|
|
usr.client.screen -= S
|
|
S.dropped(usr)
|
|
if(!S.amount)
|
|
del S
|
|
else
|
|
S.loc = src
|
|
|
|
orient2hud(usr)
|
|
if(usr.s_active)
|
|
usr.s_active.show_to(usr)
|
|
update_icon()
|
|
return 1
|
|
|
|
|
|
// Sets up numbered display to show the stack size of each stored mineral
|
|
// NOTE: numbered display is turned off currently because it's broken
|
|
orient2hud(mob/user as mob)
|
|
var/adjusted_contents = contents.len
|
|
|
|
//Numbered contents display
|
|
var/list/datum/numbered_display/numbered_contents
|
|
if(display_contents_with_number)
|
|
numbered_contents = list()
|
|
adjusted_contents = 0
|
|
for(var/obj/item/stack/sheet/I in contents)
|
|
adjusted_contents++
|
|
var/datum/numbered_display/D = new/datum/numbered_display(I)
|
|
D.number = I.amount
|
|
numbered_contents.Add( D )
|
|
|
|
var/row_num = 0
|
|
var/col_count = min(7,storage_slots) -1
|
|
if (adjusted_contents > 7)
|
|
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
|
|
src.standard_orient_objs(row_num, col_count, numbered_contents)
|
|
return
|
|
|
|
|
|
// Modified quick_empty verb drops appropriate sized stacks
|
|
quick_empty()
|
|
var/location = get_turf(src)
|
|
for(var/obj/item/stack/sheet/S in contents)
|
|
while(S.amount)
|
|
var/obj/item/stack/sheet/N = new S.type(location)
|
|
var/stacksize = min(S.amount,N.max_amount)
|
|
N.amount = stacksize
|
|
S.amount -= stacksize
|
|
if(!S.amount)
|
|
del S // todo: there's probably something missing here
|
|
orient2hud(usr)
|
|
if(usr.s_active)
|
|
usr.s_active.show_to(usr)
|
|
update_icon()
|
|
|
|
// Instead of removing
|
|
remove_from_storage(obj/item/W as obj, atom/new_location)
|
|
var/obj/item/stack/sheet/S = W
|
|
if(!istype(S)) return 0
|
|
|
|
//I would prefer to drop a new stack, but the item/attack_hand code
|
|
// that calls this can't recieve a different object than you clicked on.
|
|
//Therefore, make a new stack internally that has the remainder.
|
|
// -Sayu
|
|
|
|
if(S.amount > S.max_amount)
|
|
var/obj/item/stack/sheet/temp = new S.type(src)
|
|
temp.amount = S.amount - S.max_amount
|
|
S.amount = S.max_amount
|
|
|
|
return ..(S,new_location)
|
|
|
|
// -----------------------------
|
|
// Sheet Snatcher (Cyborg)
|
|
// -----------------------------
|
|
|
|
/obj/item/weapon/storage/bag/sheetsnatcher/borg
|
|
name = "Sheet Snatcher 9000"
|
|
desc = ""
|
|
capacity = 500//Borgs get more because >specialization |