Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /obj/item/clothing/suit/storage
- var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
- var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
- var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
- var/max_combined_w_class = 4 //The sum of the w_classes of all the items in this storage item.
- var/storage_slots = 2 //The number of storage slots in this container.
- var/obj/screen/storage/boxes = null
- var/obj/screen/close/closer = null
- /obj/item/clothing/suit/storage/proc/return_inv()
- var/list/L = list( )
- L += src.contents
- for(var/obj/item/weapon/storage/S in src)
- L += S.return_inv()
- for(var/obj/item/weapon/gift/G in src)
- L += G.gift
- if (istype(G.gift, /obj/item/weapon/storage))
- L += G.gift:return_inv()
- return L
- /obj/item/clothing/suit/storage/proc/show_to(mob/user as mob)
- user.client.screen -= src.boxes
- user.client.screen -= src.closer
- user.client.screen -= src.contents
- user.client.screen += src.boxes
- user.client.screen += src.closer
- user.client.screen += src.contents
- user.s_active = src
- return
- /obj/item/clothing/suit/storage/proc/hide_from(mob/user as mob)
- if(!user.client)
- return
- user.client.screen -= src.boxes
- user.client.screen -= src.closer
- user.client.screen -= src.contents
- return
- /obj/item/clothing/suit/storage/proc/close(mob/user as mob)
- src.hide_from(user)
- user.s_active = null
- return
- //This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right.
- //The numbers are calculated from the bottom-left The bottom-left slot being 1,1.
- /obj/item/clothing/suit/storage/proc/orient_objs(tx, ty, mx, my)
- var/cx = tx
- var/cy = ty
- src.boxes.screen_loc = text("[tx]:,[ty] to [mx],[my]")
- for(var/obj/O in src.contents)
- O.screen_loc = text("[cx],[cy]")
- O.layer = 20
- cx++
- if (cx > mx)
- cx = tx
- cy--
- src.closer.screen_loc = text("[mx+1],[my]")
- return
- //This proc draws out the inventory and places the items on it. It uses the standard position.
- /obj/item/clothing/suit/storage/proc/standard_orient_objs(var/rows,var/cols)
- var/cx = 4
- var/cy = 2+rows
- src.boxes.screen_loc = text("4:16,2:16 to [4+cols]:16,[2+rows]:16")
- for(var/obj/O in src.contents)
- O.screen_loc = text("[cx]:16,[cy]:16")
- O.layer = 20
- cx++
- if (cx > (4+cols))
- cx = 4
- cy--
- src.closer.screen_loc = text("[4+cols+1]:16,2:16")
- return
- //This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing.
- /obj/item/clothing/suit/storage/proc/orient2hud(mob/user as mob)
- //var/mob/living/carbon/human/H = user
- var/row_num = 0
- var/col_count = min(7,storage_slots) -1
- if (contents.len > 7)
- row_num = round((contents.len-1) / 7) // 7 is the maximum allowed width.
- src.standard_orient_objs(row_num,col_count)
- return
- //This proc is called when you want to place an item into the storage item.
- /obj/item/clothing/suit/storage/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/evidencebag) && src.loc != user)
- return
- ..()
- if(isrobot(user))
- user << "\blue You're a robot. No."
- return //Robots can't interact with storage items.
- if(src.loc == W)
- return //Means the item is already in the storage item
- if(contents.len >= storage_slots)
- user << "\red \The [src] is full, make some space."
- return //Storage item is full
- if(can_hold.len)
- var/ok = 0
- for(var/A in can_hold)
- if(istype(W, text2path(A) ))
- ok = 1
- break
- if(!ok)
- user << "\red \The [src] cannot hold \the [W]."
- return
- for(var/A in cant_hold) //Check for specific items which this container can't hold.
- if(istype(W, text2path(A) ))
- user << "\red \The [src] cannot hold \the [W]."
- return
- if (W.w_class > max_w_class)
- user << "\red \The [W] is too big for \the [src]"
- return
- var/sum_w_class = W.w_class
- for(var/obj/item/I in contents)
- sum_w_class += I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it.
- if(sum_w_class > max_combined_w_class)
- user << "\red \The [src] is full, make some space."
- return
- if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
- if(!istype(src, /obj/item/weapon/storage/backpack/holding)) //bohs should be able to hold backpacks again. The override for putting a boh in a boh is in backpack.dm.
- user << "\red \The [src] cannot hold \the [W] as it's a storage item of the same size."
- return //To prevent the stacking of the same sized items.
- user.u_equip(W)
- playsound(src.loc, "rustle", 50, 1, -5)
- W.loc = src
- if ((user.client && user.s_active != src))
- user.client.screen -= W
- src.orient2hud(user)
- W.dropped(user)
- add_fingerprint(user)
- show_to(user)
- /obj/item/weapon/storage/dropped(mob/user as mob)
- return
- /obj/item/clothing/suit/storage/MouseDrop(atom/over_object)
- if(ishuman(usr))
- var/mob/living/carbon/human/M = usr
- if (!( istype(over_object, /obj/screen) ))
- return ..()
- playsound(src.loc, "rustle", 50, 1, -5)
- if ((!( M.restrained() ) && !( M.stat ) && M.wear_suit == src))
- if (over_object.name == "r_hand")
- M.u_equip(src)
- M.put_in_r_hand(src)
- // if (!( M.r_hand ))
- // M.u_equip(src)
- // M.r_hand = src
- else if (over_object.name == "l_hand")
- M.u_equip(src)
- M.put_in_l_hand(src)
- // if (!( M.l_hand ))
- // M.u_equip(src)
- // M.l_hand = src
- M.update_inv_wear_suit()
- src.add_fingerprint(usr)
- return
- if( (over_object == usr && in_range(src, usr) || usr.contents.Find(src)) && usr.s_active)
- usr.s_active.close(usr)
- src.show_to(usr)
- return
- /obj/item/clothing/suit/storage/attack_paw(mob/user as mob)
- //playsound(src.loc, "rustle", 50, 1, -5) // what
- return src.attack_hand(user)
- /obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
- playsound(src.loc, "rustle", 50, 1, -5)
- src.orient2hud(user)
- if (src.loc == user)
- if (user.s_active)
- user.s_active.close(user)
- src.show_to(user)
- else
- ..()
- for(var/mob/M in range(1))
- if (M.s_active == src)
- src.close(M)
- src.add_fingerprint(user)
- return
- /obj/item/clothing/suit/storage/New()
- src.boxes = new /obj/screen/storage( )
- src.boxes.name = "storage"
- src.boxes.master = src
- src.boxes.icon_state = "block"
- src.boxes.screen_loc = "7,7 to 10,8"
- src.boxes.layer = 19
- src.closer = new /obj/screen/close( )
- src.closer.master = src
- src.closer.icon_state = "x"
- src.closer.layer = 20
- orient2hud()
- return
- /obj/item/clothing/suit/emp_act(severity)
- if(!istype(src.loc, /mob/living))
- for(var/obj/O in contents)
- O.emp_act(severity)
- ..()
- /obj/item/clothing/suit/hear_talk(mob/M, var/msg)
- for (var/atom/A in src)
- if(istype(A,/obj/))
- var/obj/O = A
- O.hear_talk(M, msg)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement