diff --git a/code/__defines/supply.dm b/code/__defines/supply.dm new file mode 100644 index 00000000000..81b32d703d0 --- /dev/null +++ b/code/__defines/supply.dm @@ -0,0 +1,19 @@ +// Supply shuttle status defines +#define SUP_SHUTTLE_ERROR -1 // Error state +#define SUP_SHUTTLE_DOCKED 0 +#define SUP_SHUTTLE_UNDOCKED 1 +#define SUP_SHUTTLE_DOCKING 2 +#define SUP_SHUTTLE_UNDOCKING 3 +#define SUP_SHUTTLE_TRANSIT 4 +#define SUP_SHUTTLE_AWAY 5 + +// Supply computer access levels +#define SUP_SEND_SHUTTLE 0x1 // Send the shuttle back and forth +#define SUP_ACCEPT_ORDERS 0x2 // Accept orders +#define SUP_CONTRABAND 0x4 // Able to order contraband supply packs + +// Supply_order status values +#define SUP_ORDER_REQUESTED "Requested" +#define SUP_ORDER_APPROVED "Approved" +#define SUP_ORDER_DENIED "Denied" +#define SUP_ORDER_SHIPPED "Shipped" \ No newline at end of file diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm index 5b3e4f6f2b1..139f0923d15 100644 --- a/code/controllers/Processes/supply.dm +++ b/code/controllers/Processes/supply.dm @@ -8,15 +8,22 @@ //Computers are in /code/game/machinery/computer/supply.dm /datum/supply_order - var/ordernum - var/datum/supply_packs/object = null - var/orderedby = null - var/comment = null + var/ordernum // Unfabricatable index + var/index // Fabricatable index + var/datum/supply_pack/object = null + var/cost // Cost of the supply pack (Fabricatable) (Changes not reflected when purchasing supply packs, this is cosmetic only) + var/name // Name of the supply pack datum (Fabricatable) + var/ordered_by = null // Who requested the order + var/comment = null // What reason was given for the order + var/approved_by = null // Who approved the order + var/ordered_at // Date and time the order was requested at + var/approved_at // Date and time the order was approved at + var/status // [Requested, Accepted, Denied, Shipped] /datum/exported_crate var/name var/value - + var/list/contents var/datum/controller/supply/supply_controller = new() @@ -25,25 +32,30 @@ var/datum/controller/supply/supply_controller = new() var/points = 50 var/points_per_process = 1.5 var/points_per_slip = 2 - var/points_per_platinum = 5 // 5 points per sheet - var/points_per_phoron = 5 var/points_per_money = 0.02 // 1 point for $50 //control var/ordernum - var/list/shoppinglist = list() - var/list/requestlist = list() - var/list/supply_packs = list() - var/list/exported_crates = list() + var/list/shoppinglist = list() // Approved orders + var/list/supply_pack = list() // All supply packs + var/list/exported_crates = list() // Crates sent from the station + var/list/order_history = list() // History of orders, showing edits made by users + var/list/adm_order_history = list() // Complete history of all orders, for admin use + var/list/adm_export_history = list() // Complete history of all crates sent back on the shuttle, for admin use //shuttle movement var/movetime = 1200 var/datum/shuttle/ferry/supply/shuttle + var/list/material_points_conversion = list( // Any materials not named in this list are worth 0 points + "phoron" = 5, + "platinum" = 5 + ) + /datum/controller/supply/New() ordernum = rand(1,9000) - for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) - var/datum/supply_packs/P = new typepath() - supply_packs[P.name] = P + for(var/typepath in subtypesof(/datum/supply_pack)) + var/datum/supply_pack/P = new typepath() + supply_pack[P.name] = P /datum/controller/process/supply/setup() name = "supply controller" @@ -80,23 +92,17 @@ var/datum/controller/supply/supply_controller = new() callHook("sell_shuttle", list(area_shuttle)); - var/phoron_count = 0 - var/plat_count = 0 - var/money_count = 0 - - exported_crates = list() - for(var/atom/movable/MA in area_shuttle) if(MA.anchored) continue + var/datum/exported_crate/EC = new /datum/exported_crate() + EC.name = "\proper[MA.name]" + EC.value = 0 + EC.contents = list() + // Must be in a crate! if(istype(MA,/obj/structure/closet/crate)) - var/oldpoints = points - var/oldphoron = phoron_count - var/oldplatinum = plat_count - var/oldmoney = money_count - var/obj/structure/closet/crate/CR = MA callHook("sell_crate", list(CR, area_shuttle)) @@ -104,44 +110,64 @@ var/datum/controller/supply/supply_controller = new() var/find_slip = 1 for(var/atom/A in CR) + EC.contents[++EC.contents.len] = list( + "object" = "\proper[A.name]", + "value" = 0, + "quantity" = 1 + ) + // Sell manifests if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) var/obj/item/weapon/paper/manifest/slip = A if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense points += points_per_slip + EC.contents[EC.contents.len]["value"] = points_per_slip find_slip = 0 continue // Sell phoron and platinum if(istype(A, /obj/item/stack)) var/obj/item/stack/P = A - switch(P.get_material_name()) - if("phoron") - phoron_count += P.get_amount() - if("platinum") - plat_count += P.get_amount() + if(material_points_conversion[P.get_material_name()]) + EC.contents[EC.contents.len]["value"] = P.get_amount() * material_points_conversion[P.get_material_name()] + EC.contents[EC.contents.len]["quantity"] = P.get_amount() + EC.value += EC.contents[EC.contents.len]["value"] + //Sell spacebucks if(istype(A, /obj/item/weapon/spacecash)) var/obj/item/weapon/spacecash/cashmoney = A - money_count += cashmoney.worth + EC.contents[EC.contents.len]["value"] = cashmoney.worth * points_per_money + EC.contents[EC.contents.len]["quantity"] = cashmoney.worth + EC.value += EC.contents[EC.contents.len]["value"] - var/datum/exported_crate/EC = new /datum/exported_crate() - EC.name = CR.name - EC.value = points - oldpoints - EC.value += (phoron_count - oldphoron) * points_per_phoron - EC.value += (plat_count - oldplatinum) * points_per_platinum - EC.value += (money_count - oldmoney) * points_per_money - exported_crates += EC + + + // Make a log of it, but it wasn't shipped properly, and so isn't worth anything + else + EC.contents = list( + "error" = "Error: Product was improperly packaged. Payment rendered null under terms of agreement." + ) + + exported_crates += EC + points += EC.value + + // Duplicate the receipt for the admin-side log + var/datum/exported_crate/adm = new() + adm.name = EC.name + adm.value = EC.value + adm.contents = deepCopyList(EC.contents) + adm_export_history += adm qdel(MA) - points += phoron_count * points_per_phoron - points += plat_count * points_per_platinum - points += money_count * points_per_money - //Buying /datum/controller/supply/proc/buy() + var/list/shoppinglist = list() + for(var/datum/supply_order/SO in order_history) + if(SO.status == SUP_ORDER_APPROVED) + shoppinglist += SO + if(!shoppinglist.len) return @@ -165,17 +191,16 @@ var/datum/controller/supply/supply_controller = new() continue clear_turfs += T - for(var/S in shoppinglist) + for(var/datum/supply_order/SO in shoppinglist) if(!clear_turfs.len) break var/i = rand(1,clear_turfs.len) var/turf/pickedloc = clear_turfs[i] clear_turfs.Cut(i,i+1) - shoppinglist -= S - var/datum/supply_order/SO = S - var/datum/supply_packs/SP = SO.object + SO.status = SUP_ORDER_SHIPPED + var/datum/supply_pack/SP = SO.object var/obj/A = new SP.containertype(pickedloc) A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" @@ -202,8 +227,8 @@ var/datum/controller/supply/supply_controller = new() log_debug("Supply pack with invalid access restriction [SP.access] encountered!") var/list/contains - if(istype(SP,/datum/supply_packs/randomised)) - var/datum/supply_packs/randomised/SPR = SP + if(istype(SP,/datum/supply_pack/randomised)) + var/datum/supply_pack/randomised/SPR = SP contains = list() if(SPR.contains.len) for(var/j=1,j<=SPR.num_contained,j++) @@ -227,3 +252,141 @@ var/datum/controller/supply/supply_controller = new() slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" return + +// Will attempt to purchase the specified order, returning TRUE on success, FALSE on failure +/datum/controller/supply/proc/approve_order(var/datum/supply_order/O, var/mob/user) + // Not enough points to purchase the crate + if(supply_controller.points <= O.object.cost) + return FALSE + + // Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history + var/datum/supply_order/adm_order + for(var/datum/supply_order/temp in adm_order_history) + if(temp.ordernum == O.ordernum) + adm_order = temp + break + + var/idname = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + else if(issilicon(user)) + idname = user.real_name + + // Update order status + O.status = SUP_ORDER_APPROVED + O.approved_by = idname + O.approved_at = stationdate2text() + " - " + stationtime2text() + // Update admin-side mirror + adm_order.status = SUP_ORDER_APPROVED + adm_order.approved_by = idname + adm_order.approved_at = stationdate2text() + " - " + stationtime2text() + + // Deduct cost + supply_controller.points -= O.object.cost + return TRUE + +// Will deny the specified order. Only useful if the order is currently requested, but available at any status +/datum/controller/supply/proc/deny_order(var/datum/supply_order/O, var/mob/user) + // Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history + var/datum/supply_order/adm_order + for(var/datum/supply_order/temp in adm_order_history) + if(temp.ordernum == O.ordernum) + adm_order = temp + break + + var/idname = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + else if(issilicon(user)) + idname = user.real_name + + // Update order status + O.status = SUP_ORDER_DENIED + O.approved_by = idname + O.approved_at = stationdate2text() + " - " + stationtime2text() + // Update admin-side mirror + adm_order.status = SUP_ORDER_DENIED + adm_order.approved_by = idname + adm_order.approved_at = stationdate2text() + " - " + stationtime2text() + return + +// Will deny all requested orders +/datum/controller/supply/proc/deny_all_pending(var/mob/user) + for(var/datum/supply_order/O in order_history) + if(O.status == SUP_ORDER_REQUESTED) + deny_order(O, user) + +// Will delete the specified order from the user-side list +/datum/controller/supply/proc/delete_order(var/datum/supply_order/O, var/mob/user) + // Making sure they know what they're doing + if(alert(user, "Are you sure you want to delete this record? If it has been approved, cargo points will NOT be refunded!", "Delete Record","No","Yes") == "Yes") + if(alert(user, "Are you really sure? There is no way to recover the order once deleted.", "Delete Record", "No", "Yes") == "Yes") + log_admin("[key_name(user)] has deleted supply order \ref[O] [O] from the user-side order history.") + supply_controller.order_history -= O + return + +// Will generate a new, requested order, for the given supply pack type +/datum/controller/supply/proc/create_order(var/datum/supply_pack/S, var/mob/user, var/reason) + var/datum/supply_order/new_order = new() + var/datum/supply_order/adm_order = new() // Admin-recorded order must be a separate copy in memory, or user-made edits will corrupt it + + var/idname = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + else if(issilicon(user)) + idname = user.real_name + + new_order.ordernum = ++ordernum // Ordernum is used to track the order between the playerside list of orders and the adminside list + new_order.index = new_order.ordernum // Index can be fabricated, or falsified. Ordernum is a permanent marker used to track the order + new_order.object = S + new_order.name = S.name + new_order.cost = S.cost + new_order.ordered_by = idname + new_order.comment = reason + new_order.ordered_at = stationdate2text() + " - " + stationtime2text() + new_order.status = SUP_ORDER_REQUESTED + + adm_order.ordernum = new_order.ordernum + adm_order.index = new_order.index + adm_order.object = new_order.object + adm_order.name = new_order.name + adm_order.cost = new_order.cost + adm_order.ordered_by = new_order.ordered_by + adm_order.comment = new_order.comment + adm_order.ordered_at = new_order.ordered_at + adm_order.status = new_order.status + + order_history += new_order + adm_order_history += adm_order + +// Will delete the specified export receipt from the user-side list +/datum/controller/supply/proc/delete_export(var/datum/exported_crate/E, var/mob/user) + // Making sure they know what they're doing + if(alert(user, "Are you sure you want to delete this record?", "Delete Record","No","Yes") == "Yes") + if(alert(user, "Are you really sure? There is no way to recover the receipt once deleted.", "Delete Record", "No", "Yes") == "Yes") + log_admin("[key_name(user)] has deleted export receipt \ref[E] [E] from the user-side export history.") + supply_controller.exported_crates -= E + return + +// Will add an item entry to the specified export receipt on the user-side list +/datum/controller/supply/proc/add_export_item(var/datum/exported_crate/E, var/mob/user) + var/new_name = input(user, "Name", "Please enter the name of the item.") as null|text + if(!new_name) + return + + var/new_quantity = input(user, "Name", "Please enter the quantity of the item.") as null|num + if(!new_quantity) + return + + var/new_value = input(user, "Name", "Please enter the value of the item.") as null|num + if(!new_value) + return + + E.contents[++E.contents.len] = list( + "object" = new_name, + "quantity" = new_quantity, + "value" = new_value + ) diff --git a/code/datums/supplypacks/atmospherics.dm b/code/datums/supplypacks/atmospherics.dm index ee53af377c9..cf102f129db 100644 --- a/code/datums/supplypacks/atmospherics.dm +++ b/code/datums/supplypacks/atmospherics.dm @@ -4,45 +4,45 @@ */ -/datum/supply_packs/atmos +/datum/supply_pack/atmos group = "Atmospherics" -/datum/supply_packs/atmos/inflatable +/datum/supply_pack/atmos/inflatable name = "Inflatable barriers" contains = list(/obj/item/weapon/storage/briefcase/inflatable = 3) cost = 20 containertype = /obj/structure/closet/crate/engineering containername = "Inflatable Barrier Crate" -/datum/supply_packs/atmos/canister_empty +/datum/supply_pack/atmos/canister_empty name = "Empty gas canister" cost = 7 containername = "Empty gas canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister) -/datum/supply_packs/atmos/canister_air +/datum/supply_pack/atmos/canister_air name = "Air canister" cost = 10 containername = "Air canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister/air) -/datum/supply_packs/atmos/canister_oxygen +/datum/supply_pack/atmos/canister_oxygen name = "Oxygen canister" cost = 15 containername = "Oxygen canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) -/datum/supply_packs/atmos/canister_nitrogen +/datum/supply_pack/atmos/canister_nitrogen name = "Nitrogen canister" cost = 10 containername = "Nitrogen canister crate" containertype = /obj/structure/largecrate contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) -/datum/supply_packs/atmos/canister_phoron +/datum/supply_pack/atmos/canister_phoron name = "Phoron gas canister" cost = 60 containername = "Phoron gas canister crate" @@ -50,7 +50,7 @@ access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/phoron) -/datum/supply_packs/atmos/canister_sleeping_agent +/datum/supply_pack/atmos/canister_sleeping_agent name = "N2O gas canister" cost = 15 containername = "N2O gas canister crate" @@ -58,7 +58,7 @@ access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent) -/datum/supply_packs/atmos/canister_carbon_dioxide +/datum/supply_pack/atmos/canister_carbon_dioxide name = "Carbon dioxide gas canister" cost = 15 containername = "CO2 canister crate" @@ -66,7 +66,7 @@ access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) -/datum/supply_packs/atmos/air_dispenser +/datum/supply_pack/atmos/air_dispenser contains = list(/obj/machinery/pipedispenser/orderable) name = "Pipe Dispenser" cost = 25 @@ -74,7 +74,7 @@ containername = "Pipe Dispenser Crate" access = access_atmospherics -/datum/supply_packs/atmos/disposals_dispenser +/datum/supply_pack/atmos/disposals_dispenser contains = list(/obj/machinery/pipedispenser/disposal/orderable) name = "Disposals Pipe Dispenser" cost = 25 @@ -82,7 +82,7 @@ containername = "Disposal Dispenser Crate" access = access_atmospherics -/datum/supply_packs/atmos/internals +/datum/supply_pack/atmos/internals name = "Internals crate" contains = list( /obj/item/clothing/mask/gas = 3, @@ -92,7 +92,7 @@ containertype = /obj/structure/closet/crate/internals containername = "Internals crate" -/datum/supply_packs/atmos/evacuation +/datum/supply_pack/atmos/evacuation name = "Emergency equipment" contains = list( /obj/item/weapon/storage/toolbox/emergency = 2, diff --git a/code/datums/supplypacks/contraband.dm b/code/datums/supplypacks/contraband.dm index d0ca2467597..c910381a09f 100644 --- a/code/datums/supplypacks/contraband.dm +++ b/code/datums/supplypacks/contraband.dm @@ -4,7 +4,7 @@ */ -/datum/supply_packs/randomised/contraband +/datum/supply_pack/randomised/contraband num_contained = 5 contains = list( /obj/item/seeds/bloodtomatoseed, @@ -20,7 +20,7 @@ contraband = 1 group = "Supplies" -/datum/supply_packs/security/specialops +/datum/supply_pack/security/specialops name = "Special Ops supplies" contains = list( /obj/item/weapon/storage/box/emps, @@ -32,7 +32,7 @@ containername = "Special Ops crate" contraband = 1 -/datum/supply_packs/supply/moghes +/datum/supply_pack/supply/moghes name = "Moghes imports" contains = list( /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew = 2, @@ -43,7 +43,7 @@ containername = "Moghes imports crate" contraband = 1 -/datum/supply_packs/munitions/bolt_rifles_militia +/datum/supply_pack/munitions/bolt_rifles_militia name = "Weapon - Surplus militia rifles" contains = list( /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 3, @@ -54,7 +54,7 @@ containertype = /obj/structure/closet/crate/secure/weapon containername = "Ballistic weapons crate" -/datum/supply_packs/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things +/datum/supply_pack/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things name = "ERR_NULL_ENTRY" //null crate! also dream maker is hell, num_contained = 1 contains = list( diff --git a/code/datums/supplypacks/costumes.dm b/code/datums/supplypacks/costumes.dm index 1ea6aa1bd2f..879d5accd0c 100644 --- a/code/datums/supplypacks/costumes.dm +++ b/code/datums/supplypacks/costumes.dm @@ -4,13 +4,13 @@ */ -/datum/supply_packs/costumes +/datum/supply_pack/costumes group = "Costumes" -/datum/supply_packs/randomised/costumes +/datum/supply_pack/randomised/costumes group = "Costumes" -/datum/supply_packs/costumes/wizard +/datum/supply_pack/costumes/wizard name = "Wizard costume" contains = list( /obj/item/weapon/staff, @@ -22,7 +22,7 @@ containertype = /obj/structure/closet/crate containername = "Wizard costume crate" -/datum/supply_packs/randomised/costumes/hats +/datum/supply_pack/randomised/costumes/hats num_contained = 4 contains = list( /obj/item/clothing/head/collectable/chef, @@ -51,7 +51,7 @@ containertype = /obj/structure/closet/crate containername = "Collectable hats crate! Brought to you by Bass.inc!" -/datum/supply_packs/randomised/costumes/costume +/datum/supply_pack/randomised/costumes/costume num_contained = 3 contains = list( /obj/item/clothing/suit/pirate, @@ -87,7 +87,7 @@ containertype = /obj/structure/closet/crate containername = "Actor Costumes" -/datum/supply_packs/costumes/formal_wear +/datum/supply_pack/costumes/formal_wear contains = list( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that, @@ -109,7 +109,7 @@ containertype = /obj/structure/closet containername = "Formalwear for the best occasions." -datum/supply_packs/costumes/witch +datum/supply_pack/costumes/witch name = "Witch costume" containername = "Witch costume" containertype = /obj/structure/closet @@ -121,7 +121,7 @@ datum/supply_packs/costumes/witch /obj/item/weapon/staff/broom ) -/datum/supply_packs/randomised/costumes/costume_hats +/datum/supply_pack/randomised/costumes/costume_hats name = "Costume hats" containername = "Actor hats crate" containertype = /obj/structure/closet/crate @@ -146,7 +146,7 @@ datum/supply_packs/costumes/witch /obj/item/clothing/head/ushanka ) -/datum/supply_packs/randomised/costumes/dresses +/datum/supply_pack/randomised/costumes/dresses name = "Womens formal dress locker" containername = "Pretty dress locker" containertype = /obj/structure/closet diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index efa5c454f2e..e3b9a148cce 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -4,66 +4,66 @@ */ -/datum/supply_packs/eng +/datum/supply_pack/eng group = "Engineering" -/datum/supply_packs/eng/lightbulbs +/datum/supply_pack/eng/lightbulbs name = "Replacement lights" contains = list(/obj/item/weapon/storage/box/lights/mixed = 3) cost = 10 containertype = /obj/structure/closet/crate containername = "Replacement lights" -/datum/supply_packs/eng/smescoil +/datum/supply_pack/eng/smescoil name = "Superconducting Magnetic Coil" contains = list(/obj/item/weapon/smes_coil) cost = 75 containertype = /obj/structure/closet/crate/engineering containername = "Superconducting Magnetic Coil crate" -/datum/supply_packs/eng/shield_capacitor +/datum/supply_pack/eng/shield_capacitor name = "Shield Capacitor" contains = list(/obj/machinery/shield_capacitor) cost = 20 containertype = /obj/structure/closet/crate/engineering containername = "shield capacitor crate" -/datum/supply_packs/eng/shield_capacitor/advanced +/datum/supply_pack/eng/shield_capacitor/advanced name = "Advanced Shield Capacitor" contains = list(/obj/machinery/shield_capacitor/advanced) cost = 30 containertype = /obj/structure/closet/crate/engineering containername = "advanced shield capacitor crate" -/datum/supply_packs/eng/bubble_shield +/datum/supply_pack/eng/bubble_shield name = "Bubble Shield Generator" contains = list(/obj/machinery/shield_gen) cost = 40 containertype = /obj/structure/closet/crate/engineering containername = "shield bubble generator crate" -/datum/supply_packs/eng/bubble_shield/advanced +/datum/supply_pack/eng/bubble_shield/advanced name = "Advanced Bubble Shield Generator" contains = list(/obj/machinery/shield_gen/advanced) cost = 60 containertype = /obj/structure/closet/crate/engineering containername = "advanced bubble shield generator crate" -/datum/supply_packs/eng/hull_shield +/datum/supply_pack/eng/hull_shield name = "Hull Shield Generator" contains = list(/obj/machinery/shield_gen/external) cost = 80 containertype = /obj/structure/closet/crate/engineering containername = "shield hull generator crate" -/datum/supply_packs/eng/hull_shield/advanced +/datum/supply_pack/eng/hull_shield/advanced name = "Advanced Hull Shield Generator" contains = list(/obj/machinery/shield_gen/external/advanced) cost = 120 containertype = /obj/structure/closet/crate/engineering containername = "advanced hull shield generator crate" -/datum/supply_packs/eng/electrical +/datum/supply_pack/eng/electrical name = "Electrical maintenance crate" contains = list( /obj/item/weapon/storage/toolbox/electrical = 2, @@ -75,7 +75,7 @@ containertype = /obj/structure/closet/crate/engineering/electrical containername = "Electrical maintenance crate" -/datum/supply_packs/eng/e_welders +/datum/supply_pack/eng/e_welders name = "Electric welder crate" contains = list( /obj/item/weapon/weldingtool/electric = 3 @@ -84,7 +84,7 @@ containertype = /obj/structure/closet/crate/engineering/electrical containername = "Electric welder crate" -/datum/supply_packs/eng/mechanical +/datum/supply_pack/eng/mechanical name = "Mechanical maintenance crate" contains = list( /obj/item/weapon/storage/belt/utility/full = 3, @@ -96,14 +96,14 @@ containertype = /obj/structure/closet/crate/engineering containername = "Mechanical maintenance crate" -/datum/supply_packs/eng/fueltank +/datum/supply_pack/eng/fueltank name = "Fuel tank crate" contains = list(/obj/structure/reagent_dispensers/fueltank) cost = 10 containertype = /obj/structure/largecrate containername = "fuel tank crate" -/datum/supply_packs/eng/solar +/datum/supply_pack/eng/solar name = "Solar Pack crate" contains = list( /obj/item/solar_assembly = 21, @@ -115,7 +115,7 @@ containertype = /obj/structure/closet/crate/engineering containername = "Solar pack crate" -/datum/supply_packs/eng/engine +/datum/supply_pack/eng/engine name = "Emitter crate" contains = list(/obj/machinery/power/emitter = 2) cost = 10 @@ -123,27 +123,27 @@ containername = "Emitter crate" access = access_ce -/datum/supply_packs/eng/engine/field_gen +/datum/supply_pack/eng/engine/field_gen name = "Field Generator crate" contains = list(/obj/machinery/field_generator = 2) containertype = /obj/structure/closet/crate/secure/engineering containername = "Field Generator crate" access = access_ce -/datum/supply_packs/eng/engine/sing_gen +/datum/supply_pack/eng/engine/sing_gen name = "Singularity Generator crate" contains = list(/obj/machinery/the_singularitygen) containertype = /obj/structure/closet/crate/secure/engineering containername = "Singularity Generator crate" access = access_ce -/datum/supply_packs/eng/engine/collector +/datum/supply_pack/eng/engine/collector name = "Collector crate" contains = list(/obj/machinery/power/rad_collector = 3) containertype = /obj/structure/closet/crate/secure/engineering containername = "Collector crate" -/datum/supply_packs/eng/engine/PA +/datum/supply_pack/eng/engine/PA name = "Particle Accelerator crate" cost = 40 contains = list( @@ -159,7 +159,7 @@ containername = "Particle Accelerator crate" access = access_ce -/datum/supply_packs/eng/shield_gen +/datum/supply_pack/eng/shield_gen contains = list(/obj/item/weapon/circuitboard/shield_gen) name = "Bubble shield generator circuitry" cost = 30 @@ -167,7 +167,7 @@ containername = "bubble shield generator circuitry crate" access = access_ce -/datum/supply_packs/eng/shield_gen_ex +/datum/supply_pack/eng/shield_gen_ex contains = list(/obj/item/weapon/circuitboard/shield_gen_ex) name = "Hull shield generator circuitry" cost = 30 @@ -175,7 +175,7 @@ containername = "hull shield generator circuitry crate" access = access_ce -/datum/supply_packs/eng/shield_cap +/datum/supply_pack/eng/shield_cap contains = list(/obj/item/weapon/circuitboard/shield_cap) name = "Bubble shield capacitor circuitry" cost = 30 @@ -183,7 +183,7 @@ containername = "shield capacitor circuitry crate" access = access_ce -/datum/supply_packs/eng/smbig +/datum/supply_pack/eng/smbig name = "Supermatter Core" contains = list(/obj/machinery/power/supermatter) cost = 150 @@ -191,7 +191,7 @@ containername = "Supermatter crate (CAUTION)" access = access_ce -/datum/supply_packs/eng/teg +/datum/supply_pack/eng/teg contains = list(/obj/machinery/power/generator) name = "Mark I Thermoelectric Generator" cost = 40 @@ -199,7 +199,7 @@ containername = "Mk1 TEG crate" access = access_engine -/datum/supply_packs/eng/circulator +/datum/supply_pack/eng/circulator contains = list(/obj/machinery/atmospherics/binary/circulator) name = "Binary atmospheric circulator" cost = 20 @@ -207,7 +207,7 @@ containername = "Atmospheric circulator crate" access = access_engine -/datum/supply_packs/eng/radsuit +/datum/supply_pack/eng/radsuit contains = list( /obj/item/clothing/suit/radiation = 3, /obj/item/clothing/head/radiation = 3 @@ -217,7 +217,7 @@ containertype = /obj/structure/closet/radiation containername = "Radiation suit locker" -/datum/supply_packs/eng/pacman_parts +/datum/supply_pack/eng/pacman_parts name = "P.A.C.M.A.N. portable generator parts" cost = 25 containername = "P.A.C.M.A.N. Portable Generator Construction Kit" @@ -230,7 +230,7 @@ /obj/item/weapon/circuitboard/pacman ) -/datum/supply_packs/eng/super_pacman_parts +/datum/supply_pack/eng/super_pacman_parts name = "Super P.A.C.M.A.N. portable generator parts" cost = 35 containername = "Super P.A.C.M.A.N. portable generator construction kit" @@ -243,7 +243,7 @@ /obj/item/weapon/circuitboard/pacman/super ) -/datum/supply_packs/eng/fusion_core +/datum/supply_pack/eng/fusion_core name = "R-UST Mk. 8 Tokamak fusion core crate" cost = 50 containername = "R-UST Mk. 8 Tokamak Fusion Core crate" @@ -255,7 +255,7 @@ /obj/item/weapon/circuitboard/fusion_core ) -/datum/supply_packs/eng/fusion_fuel_injector +/datum/supply_pack/eng/fusion_fuel_injector name = "R-UST Mk. 8 fuel injector crate" cost = 30 containername = "R-UST Mk. 8 fuel injector crate" @@ -267,7 +267,7 @@ /obj/item/weapon/circuitboard/fusion_injector ) -/datum/supply_packs/eng/gyrotron +/datum/supply_pack/eng/gyrotron name = "Gyrotron crate" cost = 15 containername = "Gyrotron Crate" @@ -278,14 +278,14 @@ /obj/item/weapon/circuitboard/gyrotron ) -/datum/supply_packs/eng/fusion_fuel_compressor +/datum/supply_pack/eng/fusion_fuel_compressor name = "Fusion Fuel Compressor circuitry crate" cost = 10 containername = "Fusion Fuel Compressor circuitry crate" containertype = /obj/structure/closet/crate/engineering contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor) -/datum/supply_packs/eng/tritium +/datum/supply_pack/eng/tritium name = "Tritium crate" cost = 75 containername = "Tritium crate" diff --git a/code/datums/supplypacks/hospitality.dm b/code/datums/supplypacks/hospitality.dm index f3de751f234..5d663d05db0 100644 --- a/code/datums/supplypacks/hospitality.dm +++ b/code/datums/supplypacks/hospitality.dm @@ -4,10 +4,10 @@ */ -/datum/supply_packs/hospitality +/datum/supply_pack/hospitality group = "Hospitality" -/datum/supply_packs/hospitality/party +/datum/supply_pack/hospitality/party name = "Party equipment" contains = list( /obj/item/weapon/storage/box/mixedglasses = 2, @@ -26,7 +26,7 @@ containertype = /obj/structure/closet/crate containername = "Party equipment" -/datum/supply_packs/hospitality/barsupplies +/datum/supply_pack/hospitality/barsupplies name = "Bar supplies" contains = list( /obj/item/weapon/storage/box/glasses/cocktail, @@ -46,10 +46,10 @@ containertype = /obj/structure/closet/crate containername = "crate of bar supplies" -/datum/supply_packs/randomised/hospitality/ +/datum/supply_pack/randomised/hospitality/ group = "Hospitality" -/datum/supply_packs/randomised/hospitality/pizza +/datum/supply_pack/randomised/hospitality/pizza num_contained = 5 contains = list( /obj/item/pizzabox/margherita, @@ -62,7 +62,7 @@ containertype = /obj/structure/closet/crate/freezer containername = "Pizza crate" -/datum/supply_packs/hospitality/gifts +/datum/supply_pack/hospitality/gifts name = "Gift crate" contains = list( /obj/item/toy/bouquet = 3, diff --git a/code/datums/supplypacks/hydroponics.dm b/code/datums/supplypacks/hydroponics.dm index af9f513a95a..9ee6a805325 100644 --- a/code/datums/supplypacks/hydroponics.dm +++ b/code/datums/supplypacks/hydroponics.dm @@ -4,45 +4,45 @@ */ -/datum/supply_packs/hydro +/datum/supply_pack/hydro group = "Hydroponics" -/datum/supply_packs/hydro/monkey +/datum/supply_pack/hydro/monkey name = "Monkey crate" contains = list (/obj/item/weapon/storage/box/monkeycubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Monkey crate" -/datum/supply_packs/hydro/farwa +/datum/supply_pack/hydro/farwa name = "Farwa crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Farwa crate" -/datum/supply_packs/hydro/neara +/datum/supply_pack/hydro/neara name = "Neaera crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Neaera crate" -/datum/supply_packs/hydro/stok +/datum/supply_pack/hydro/stok name = "Stok crate" contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes) cost = 20 containertype = /obj/structure/closet/crate/freezer containername = "Stok crate" -/datum/supply_packs/hydro/lisa +/datum/supply_pack/hydro/lisa name = "Corgi Crate" contains = list() cost = 50 containertype = /obj/structure/largecrate/animal/corgi containername = "Corgi Crate" -/datum/supply_packs/hydro/hydroponics +/datum/supply_pack/hydro/hydroponics name = "Hydroponics Supply Crate" contains = list( /obj/item/weapon/reagent_containers/spray/plantbgone = 4, @@ -60,28 +60,28 @@ containername = "Hydroponics crate" access = access_hydroponics -/datum/supply_packs/hydro/cow +/datum/supply_pack/hydro/cow name = "Cow crate" cost = 25 containertype = /obj/structure/largecrate/animal/cow containername = "Cow crate" access = access_hydroponics -/datum/supply_packs/hydro/goat +/datum/supply_pack/hydro/goat name = "Goat crate" cost = 25 containertype = /obj/structure/largecrate/animal/goat containername = "Goat crate" access = access_hydroponics -/datum/supply_packs/hydro/chicken +/datum/supply_pack/hydro/chicken name = "Chicken crate" cost = 25 containertype = /obj/structure/largecrate/animal/chick containername = "Chicken crate" access = access_hydroponics -/datum/supply_packs/hydro/seeds +/datum/supply_pack/hydro/seeds name = "Seeds crate" contains = list( /obj/item/seeds/chiliseed, @@ -107,7 +107,7 @@ containername = "Seeds crate" access = access_hydroponics -/datum/supply_packs/hydro/weedcontrol +/datum/supply_pack/hydro/weedcontrol name = "Weed control crate" contains = list( /obj/item/weapon/material/knife/machete/hatchet = 2, @@ -121,14 +121,14 @@ containername = "Weed control crate" access = access_hydroponics -/datum/supply_packs/hydro/watertank +/datum/supply_pack/hydro/watertank name = "Water tank crate" contains = list(/obj/structure/reagent_dispensers/watertank) cost = 10 containertype = /obj/structure/largecrate containername = "water tank crate" -/datum/supply_packs/hydro/bee_keeper +/datum/supply_pack/hydro/bee_keeper name = "Beekeeping crate" contains = list( /obj/item/beehive_assembly, @@ -141,7 +141,7 @@ containername = "Beekeeping crate" access = access_hydroponics -/datum/supply_packs/hydro/tray +/datum/supply_pack/hydro/tray name = "Empty hydroponics trays" cost = 50 containertype = /obj/structure/closet/crate/hydroponics diff --git a/code/datums/supplypacks/materials.dm b/code/datums/supplypacks/materials.dm index 4c5ddedf476..cd799a235b1 100644 --- a/code/datums/supplypacks/materials.dm +++ b/code/datums/supplypacks/materials.dm @@ -4,45 +4,45 @@ */ -/datum/supply_packs/materials +/datum/supply_pack/materials group = "Materials" -/datum/supply_packs/materials/metal50 +/datum/supply_pack/materials/metal50 name = "50 metal sheets" contains = list(/obj/fiftyspawner/steel) cost = 10 containertype = /obj/structure/closet/crate containername = "Metal sheets crate" -/datum/supply_packs/materials/glass50 +/datum/supply_pack/materials/glass50 name = "50 glass sheets" contains = list(/obj/fiftyspawner/glass) cost = 10 containertype = /obj/structure/closet/crate containername = "Glass sheets crate" -/datum/supply_packs/materials/wood50 +/datum/supply_pack/materials/wood50 name = "50 wooden planks" contains = list(/obj/fiftyspawner/wood) cost = 10 containertype = /obj/structure/closet/crate containername = "Wooden planks crate" -/datum/supply_packs/materials/plastic50 +/datum/supply_pack/materials/plastic50 name = "50 plastic sheets" contains = list(/obj/fiftyspawner/plastic) cost = 10 containertype = /obj/structure/closet/crate containername = "Plastic sheets crate" -/datum/supply_packs/materials/cardboard_sheets +/datum/supply_pack/materials/cardboard_sheets contains = list(/obj/fiftyspawner/cardboard) name = "50 cardboard sheets" cost = 10 containertype = /obj/structure/closet/crate containername = "Cardboard sheets crate" -/datum/supply_packs/materials/carpet +/datum/supply_pack/materials/carpet name = "Imported carpet" containertype = /obj/structure/closet/crate containername = "Imported carpet crate" @@ -53,7 +53,7 @@ ) -/datum/supply_packs/misc/linoleum +/datum/supply_pack/misc/linoleum name = "Linoleum" containertype = /obj/structure/closet/crate containername = "Linoleum crate" diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 2c2e26d97da..555df731c47 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -4,10 +4,10 @@ */ -/datum/supply_packs/med +/datum/supply_pack/med group = "Medical" -/datum/supply_packs/med/medical +/datum/supply_pack/med/medical name = "Medical crate" contains = list( /obj/item/weapon/storage/firstaid/regular, @@ -25,28 +25,28 @@ containertype = /obj/structure/closet/crate/medical containername = "Medical crate" -/datum/supply_packs/med/bloodpack +/datum/supply_pack/med/bloodpack name = "BloodPack crate" contains = list(/obj/item/weapon/storage/box/bloodpacks = 3) cost = 10 containertype = /obj/structure/closet/crate/medical containername = "BloodPack crate" -/datum/supply_packs/med/bodybag +/datum/supply_pack/med/bodybag name = "Body bag crate" contains = list(/obj/item/weapon/storage/box/bodybags = 3) cost = 10 containertype = /obj/structure/closet/crate/medical containername = "Body bag crate" -/datum/supply_packs/med/cryobag +/datum/supply_pack/med/cryobag name = "Stasis bag crate" contains = list(/obj/item/bodybag/cryobag = 3) cost = 40 containertype = /obj/structure/closet/crate/medical containername = "Stasis bag crate" -/datum/supply_packs/med/surgery +/datum/supply_pack/med/surgery name = "Surgery crate" contains = list( /obj/item/weapon/surgical/cautery, @@ -66,7 +66,7 @@ containername = "Surgery crate" access = access_medical -/datum/supply_packs/med/deathalarm +/datum/supply_pack/med/deathalarm name = "Death Alarm crate" contains = list( /obj/item/weapon/storage/box/cdeathalarm_kit, @@ -77,7 +77,7 @@ containername = "Death Alarm crate" access = access_medical -/datum/supply_packs/med/clotting +/datum/supply_pack/med/clotting name = "Clotting Medicine crate" contains = list( /obj/item/weapon/storage/firstaid/clotting @@ -87,7 +87,7 @@ containername = "Clotting Medicine crate" access = access_medical -/datum/supply_packs/med/sterile +/datum/supply_pack/med/sterile name = "Sterile equipment crate" contains = list( /obj/item/clothing/under/rank/medical/scrubs/green = 2, @@ -100,7 +100,7 @@ containertype = "/obj/structure/closet/crate" containername = "Sterile equipment crate" -/datum/supply_packs/med/extragear +/datum/supply_pack/med/extragear name = "Medical surplus equipment" contains = list( /obj/item/weapon/storage/belt/medical = 3, @@ -113,7 +113,7 @@ containername = "Medical surplus equipment" access = access_medical -/datum/supply_packs/med/cmogear +/datum/supply_pack/med/cmogear name = "Chief medical officer equipment" contains = list( /obj/item/weapon/storage/belt/medical, @@ -137,7 +137,7 @@ containername = "Chief medical officer equipment" access = access_cmo -/datum/supply_packs/med/doctorgear +/datum/supply_pack/med/doctorgear name = "Medical Doctor equipment" contains = list( /obj/item/weapon/storage/belt/medical, @@ -160,7 +160,7 @@ containername = "Medical Doctor equipment" access = access_medical_equip -/datum/supply_packs/med/chemistgear +/datum/supply_pack/med/chemistgear name = "Chemist equipment" contains = list( /obj/item/weapon/storage/box/beakers, @@ -183,7 +183,7 @@ containername = "Chemist equipment" access = access_chemistry -/datum/supply_packs/med/paramedicgear +/datum/supply_pack/med/paramedicgear name = "Paramedic equipment" contains = list( /obj/item/weapon/storage/belt/medical/emt, @@ -211,7 +211,7 @@ containername = "Paramedic equipment" access = access_medical_equip -/datum/supply_packs/med/psychiatristgear +/datum/supply_pack/med/psychiatristgear name = "Psychiatrist equipment" contains = list( /obj/item/clothing/under/rank/psych, @@ -230,7 +230,7 @@ containername = "Psychiatrist equipment" access = access_psychiatrist -/datum/supply_packs/med/medicalscrubs +/datum/supply_pack/med/medicalscrubs name = "Medical scrubs" contains = list( /obj/item/clothing/shoes/white = 3,, @@ -251,7 +251,7 @@ containername = "Medical scrubs crate" access = access_medical_equip -/datum/supply_packs/med/autopsy +/datum/supply_pack/med/autopsy name = "Autopsy equipment" contains = list( /obj/item/weapon/folder/white, @@ -268,7 +268,7 @@ containername = "Autopsy equipment crate" access = access_morgue -/datum/supply_packs/med/medicaluniforms +/datum/supply_pack/med/medicaluniforms name = "Medical uniforms" contains = list( /obj/item/clothing/shoes/white = 3, @@ -295,7 +295,7 @@ containername = "Medical uniform crate" access = access_medical_equip -/datum/supply_packs/med/medicalbiosuits +/datum/supply_pack/med/medicalbiosuits name = "Medical biohazard gear" contains = list( /obj/item/clothing/head/bio_hood = 3, @@ -313,7 +313,7 @@ containername = "Medical biohazard equipment" access = access_medical_equip -/datum/supply_packs/med/portablefreezers +/datum/supply_pack/med/portablefreezers name = "Portable freezers crate" contains = list(/obj/item/weapon/storage/box/freezer = 7) cost = 25 @@ -321,7 +321,7 @@ containername = "Portable freezers" access = access_medical_equip -/datum/supply_packs/med/virus +/datum/supply_pack/med/virus name = "Virus sample crate" contains = list(/obj/item/weapon/virusdish/random = 4) cost = 25 @@ -329,7 +329,7 @@ containername = "Virus sample crate" access = access_cmo -/datum/supply_packs/med/defib +/datum/supply_pack/med/defib name = "Defibrillator crate" contains = list(/obj/item/device/defib_kit = 2) cost = 30 diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 225e29335f6..bc7687ab780 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -4,14 +4,14 @@ */ -/datum/supply_packs/misc +/datum/supply_pack/misc group = "Miscellaneous" -/datum/supply_packs/randomised/misc +/datum/supply_pack/randomised/misc group = "Miscellaneous" -/datum/supply_packs/randomised/misc/card_packs +/datum/supply_pack/randomised/misc/card_packs num_contained = 5 contains = list( /obj/item/weapon/pack/cardemon, @@ -23,14 +23,14 @@ containertype = /obj/structure/closet/crate containername = "cards crate" -/datum/supply_packs/misc/eftpos +/datum/supply_pack/misc/eftpos contains = list(/obj/item/device/eftpos) name = "EFTPOS scanner" cost = 10 containertype = /obj/structure/closet/crate containername = "EFTPOS crate" -/datum/supply_packs/misc/chaplaingear +/datum/supply_pack/misc/chaplaingear name = "Chaplain equipment" contains = list( /obj/item/clothing/under/rank/chaplain, @@ -48,14 +48,14 @@ containertype = "/obj/structure/closet/crate" containername = "Chaplain equipment crate" -/datum/supply_packs/misc/hoverpod +/datum/supply_pack/misc/hoverpod name = "Hoverpod Shipment" contains = list() cost = 80 containertype = /obj/structure/largecrate/hoverpod containername = "Hoverpod Crate" -/datum/supply_packs/randomised/misc/webbing +/datum/supply_pack/randomised/misc/webbing name = "Webbing crate" num_contained = 4 contains = list( @@ -71,7 +71,7 @@ containertype = "/obj/structure/closet/crate" containername = "Webbing crate" -/datum/supply_packs/misc/holoplant +/datum/supply_pack/misc/holoplant name = "Holoplant Pot" contains = list(/obj/machinery/holoplant/shipped) cost = 15 diff --git a/code/datums/supplypacks/munitions.dm b/code/datums/supplypacks/munitions.dm index 662de4da731..63102aa405c 100644 --- a/code/datums/supplypacks/munitions.dm +++ b/code/datums/supplypacks/munitions.dm @@ -3,13 +3,13 @@ * related to weapons live. */ -/datum/supply_packs/munitions +/datum/supply_pack/munitions group = "Munitions" -/datum/supply_packs/randomised/munitions +/datum/supply_pack/randomised/munitions group = "Munitions" -/datum/supply_packs/munitions/weapons +/datum/supply_pack/munitions/weapons name = "Weapons - Security basic equipment" contains = list( /obj/item/device/flash = 2, @@ -24,7 +24,7 @@ containername = "Security equipment crate" access = access_security -/datum/supply_packs/munitions/egunpistol +/datum/supply_pack/munitions/egunpistol name = "Weapons - Energy sidearms" contains = list(/obj/item/weapon/gun/energy/gun = 2) cost = 40 @@ -32,7 +32,7 @@ containername = "Energy sidearms crate" access = access_security -/datum/supply_packs/munitions/flareguns +/datum/supply_pack/munitions/flareguns name = "Weapons - Flare guns" contains = list( /obj/item/weapon/gun/projectile/sec/flash, @@ -45,7 +45,7 @@ containername = "Flare gun crate" access = access_security -/datum/supply_packs/munitions/eweapons +/datum/supply_pack/munitions/eweapons name = "Weapons - Experimental weapons crate" contains = list( /obj/item/weapon/gun/energy/xray = 2, @@ -55,7 +55,7 @@ containername = "Experimental weapons crate" access = access_armory -/datum/supply_packs/munitions/energyweapons +/datum/supply_pack/munitions/energyweapons name = "Weapons - Laser rifle crate" contains = list(/obj/item/weapon/gun/energy/laser = 3) cost = 50 @@ -63,7 +63,7 @@ containername = "Energy weapons crate" access = access_armory -/datum/supply_packs/munitions/shotgun +/datum/supply_pack/munitions/shotgun name = "Weapons - Shotgun crate" contains = list( /obj/item/weapon/storage/box/shotgunammo, @@ -75,7 +75,7 @@ containername = "Shotgun crate" access = access_armory -/datum/supply_packs/munitions/erifle +/datum/supply_pack/munitions/erifle name = "Weapons - Energy marksman" contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2) cost = 100 @@ -83,7 +83,7 @@ containername = "Energy marksman crate" access = access_armory -/datum/supply_packs/munitions/burstlaser +/datum/supply_pack/munitions/burstlaser name = "Weapons - Burst laser" contains = list(/obj/item/weapon/gun/energy/gun/burst = 2) cost = 50 @@ -91,7 +91,7 @@ containername = "Burst laser crate" access = access_armory -/datum/supply_packs/munitions/ionweapons +/datum/supply_pack/munitions/ionweapons name = "Weapons - Electromagnetic Rifles" contains = list( /obj/item/weapon/gun/energy/ionrifle = 2, @@ -102,7 +102,7 @@ containername = "Electromagnetic weapons crate" access = access_armory -/datum/supply_packs/munitions/ionpistols +/datum/supply_pack/munitions/ionpistols name = "Weapons - Electromagnetic pistols" contains = list( /obj/item/weapon/gun/energy/ionrifle/pistol = 2, @@ -113,7 +113,7 @@ containername = "Electromagnetic weapons crate" access = access_armory -/datum/supply_packs/munitions/bsmg +/datum/supply_pack/munitions/bsmg name = "Weapons - Ballistic SMGs" contains = list(/obj/item/weapon/gun/projectile/automatic/wt550 = 2) cost = 50 @@ -121,7 +121,7 @@ containername = "Ballistic weapon crate" access = access_armory -/datum/supply_packs/munitions/brifle +/datum/supply_pack/munitions/brifle name = "Weapons - Ballistic Rifles" contains = list(/obj/item/weapon/gun/projectile/automatic/z8 = 2) cost = 80 @@ -129,7 +129,7 @@ containername = "Ballistic weapon crate" access = access_armory -/datum/supply_packs/munitions/bolt_rifles_competitive +/datum/supply_pack/munitions/bolt_rifles_competitive name = "Weapons - Competitive shooting rifles" contains = list( /obj/item/device/assembly/timer, @@ -144,7 +144,7 @@ containername = "Ballistic weapons crate" access = access_security -/datum/supply_packs/munitions/shotgunammo +/datum/supply_pack/munitions/shotgunammo name = "Ammunition - Shotgun shells" contains = list( /obj/item/weapon/storage/box/shotgunammo = 2, @@ -155,7 +155,7 @@ containername = "Ballistic ammunition crate" access = access_armory -/datum/supply_packs/munitions/beanbagammo +/datum/supply_pack/munitions/beanbagammo name = "Ammunition - Beanbag shells" contains = list(/obj/item/weapon/storage/box/beanbags = 3) cost = 25 @@ -163,7 +163,7 @@ containername = "Ballistic ammunition crate" access = null -/datum/supply_packs/munitions/bsmgammo +/datum/supply_pack/munitions/bsmgammo name = "Ammunition - 9mm top mounted lethal" contains = list(/obj/item/ammo_magazine/m9mmt = 6) cost = 25 @@ -171,7 +171,7 @@ containername = "Ballistic ammunition crate" access = access_armory -/datum/supply_packs/munitions/bsmgammorubber +/datum/supply_pack/munitions/bsmgammorubber name = "Ammunition - 9mm top mounted rubber" contains = list(/obj/item/ammo_magazine/m9mmt/rubber = 6) cost = 25 @@ -179,7 +179,7 @@ containername = "Ballistic ammunition crate" access = access_security -/datum/supply_packs/munitions/brifleammo +/datum/supply_pack/munitions/brifleammo name = "Ammunition - 7.62mm lethal" contains = list(/obj/item/ammo_magazine/m762 = 6) cost = 25 @@ -187,7 +187,7 @@ containername = "Ballistic ammunition crate" access = access_armory -/datum/supply_packs/munitions/pcellammo +/datum/supply_pack/munitions/pcellammo name = "Ammunition - Power cell" contains = list(/obj/item/weapon/cell/device/weapon = 3) cost = 50 diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index 7f801ea1b36..684ef962f42 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -4,14 +4,14 @@ */ -/datum/supply_packs/recreation +/datum/supply_pack/recreation group = "Recreation" -/datum/supply_packs/randomised/recreation +/datum/supply_pack/randomised/recreation group = "Recreation" access = access_security -/datum/supply_packs/recreation/foam_weapons +/datum/supply_pack/recreation/foam_weapons name = "Foam Weapon Crate" contains = list( /obj/item/weapon/material/sword/foam = 2, @@ -23,7 +23,7 @@ containertype = /obj/structure/closet/crate containername = "foam weapon crate" -/datum/supply_packs/recreation/lasertag +/datum/supply_pack/recreation/lasertag name = "Lasertag equipment" contains = list( /obj/item/weapon/gun/energy/lasertag/red, @@ -35,7 +35,7 @@ containername = "Lasertag Closet" cost = 10 -/datum/supply_packs/recreation/artscrafts +/datum/supply_pack/recreation/artscrafts name = "Arts and Crafts supplies" contains = list( /obj/item/weapon/storage/fancy/crayons, @@ -58,7 +58,7 @@ containertype = "/obj/structure/closet/crate" containername = "Arts and Crafts crate" -/datum/supply_packs/recreation/painters +/datum/supply_pack/recreation/painters name = "Station Painting Supplies" cost = 10 containername = "station painting supplies crate" diff --git a/code/datums/supplypacks/robotics.dm b/code/datums/supplypacks/robotics.dm index d9f20c5aa67..67292de6546 100644 --- a/code/datums/supplypacks/robotics.dm +++ b/code/datums/supplypacks/robotics.dm @@ -4,14 +4,14 @@ */ -/datum/supply_packs/robotics +/datum/supply_pack/robotics group = "Robotics" -/datum/supply_packs/randomised/robotics +/datum/supply_pack/randomised/robotics group = "Robotics" access = access_robotics -/datum/supply_packs/robotics/robotics_assembly +/datum/supply_pack/robotics/robotics_assembly name = "Robotics assembly crate" contains = list( /obj/item/device/assembly/prox_sensor = 3, @@ -24,7 +24,7 @@ containername = "Robotics assembly" access = access_robotics -/*/datum/supply_packs/robotics/robolimbs_basic +/*/datum/supply_pack/robotics/robolimbs_basic name = "Basic robolimb blueprints" contains = list( /obj/item/weapon/disk/limb/morpheus, @@ -35,7 +35,7 @@ containername = "Robolimb blueprints (basic)" access = access_robotics -/datum/supply_packs/robotics/robolimbs_adv +/datum/supply_pack/robotics/robolimbs_adv name = "All robolimb blueprints" contains = list( /obj/item/weapon/disk/limb/bishop, @@ -52,7 +52,7 @@ access = access_robotics */ -/datum/supply_packs/robotics/robolimbs/morpheus +/datum/supply_pack/robotics/robolimbs/morpheus name = "Morpheus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/morpheus) cost = 20 @@ -60,7 +60,7 @@ containername = "Robolimb blueprints (Morpheus)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/cybersolutions +/datum/supply_pack/robotics/robolimbs/cybersolutions name = "Cyber Solutions robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/cybersolutions) cost = 20 @@ -68,7 +68,7 @@ containername = "Robolimb blueprints (Cyber Solutions)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/xion +/datum/supply_pack/robotics/robolimbs/xion name = "Xion robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/xion) cost = 20 @@ -76,7 +76,7 @@ containername = "Robolimb blueprints (Xion)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/grayson +/datum/supply_pack/robotics/robolimbs/grayson name = "Grayson robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/grayson) cost = 30 @@ -84,7 +84,7 @@ containername = "Robolimb blueprints (Grayson)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/hephaestus +/datum/supply_pack/robotics/robolimbs/hephaestus name = "Hephaestus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/hephaestus) cost = 35 @@ -92,7 +92,7 @@ containername = "Robolimb blueprints (Hephaestus)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/wardtakahashi +/datum/supply_pack/robotics/robolimbs/wardtakahashi name = "Ward-Takahashi robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/wardtakahashi) cost = 35 @@ -100,7 +100,7 @@ containername = "Robolimb blueprints (Ward-Takahashi)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/zenghu +/datum/supply_pack/robotics/robolimbs/zenghu name = "Zeng Hu robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/zenghu) cost = 35 @@ -108,7 +108,7 @@ containername = "Robolimb blueprints (Zeng Hu)" access = access_robotics -/datum/supply_packs/robotics/robolimbs/bishop +/datum/supply_pack/robotics/robolimbs/bishop name = "Bishop robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/bishop) cost = 70 @@ -116,7 +116,7 @@ containername = "Robolimb blueprints (Bishop)" access = access_robotics -/datum/supply_packs/robotics/mecha_ripley +/datum/supply_pack/robotics/mecha_ripley name = "Circuit Crate (\"Ripley\" APLU)" contains = list( /obj/item/weapon/book/manual/ripley_build_and_repair, @@ -128,7 +128,7 @@ containername = "APLU \"Ripley\" Circuit Crate" access = access_robotics -/datum/supply_packs/robotics/mecha_odysseus +/datum/supply_pack/robotics/mecha_odysseus name = "Circuit Crate (\"Odysseus\")" contains = list( /obj/item/weapon/circuitboard/mecha/odysseus/peripherals, @@ -139,7 +139,7 @@ containername = "\"Odysseus\" Circuit Crate" access = access_robotics -/datum/supply_packs/randomised/robotics/exosuit_mod +/datum/supply_pack/randomised/robotics/exosuit_mod num_contained = 1 contains = list( /obj/item/device/kit/paint/ripley, @@ -152,7 +152,7 @@ containertype = /obj/structure/closet/crate/science containername = "heavy crate" -/datum/supply_packs/randomised/robotics/exosuit_mod/durand +/datum/supply_pack/randomised/robotics/exosuit_mod/durand contains = list( /obj/item/device/kit/paint/durand, /obj/item/device/kit/paint/durand/seraph, @@ -160,7 +160,7 @@ ) name = "Random Durand exosuit modkit" -/datum/supply_packs/randomised/robotics/exosuit_mod/gygax +/datum/supply_pack/randomised/robotics/exosuit_mod/gygax contains = list( /obj/item/device/kit/paint/gygax, /obj/item/device/kit/paint/gygax/darkgygax, @@ -168,7 +168,7 @@ ) name = "Random Gygax exosuit modkit" -/datum/supply_packs/robotics/jumper_cables +/datum/supply_pack/robotics/jumper_cables name = "Jumper kit crate" contains = list( /obj/item/device/defib_kit/jumper_kit = 2 diff --git a/code/datums/supplypacks/science.dm b/code/datums/supplypacks/science.dm index c2f3a24159b..83407c28662 100644 --- a/code/datums/supplypacks/science.dm +++ b/code/datums/supplypacks/science.dm @@ -2,17 +2,17 @@ * Here is where any supply packs * related to security tasks live */ -/datum/supply_packs/sci +/datum/supply_pack/sci group = "Science" -/datum/supply_packs/sci/coolanttank +/datum/supply_pack/sci/coolanttank name = "Coolant tank crate" contains = list(/obj/structure/reagent_dispensers/coolanttank) cost = 15 containertype = /obj/structure/largecrate containername = "coolant tank crate" -/datum/supply_packs/sci/phoron +/datum/supply_pack/sci/phoron name = "Phoron research crate" contains = list( /obj/item/weapon/tank/phoron = 3, @@ -28,7 +28,7 @@ containername = "Phoron assembly crate" access = access_tox_storage -/datum/supply_packs/sci/exoticseeds +/datum/supply_pack/sci/exoticseeds name = "Exotic seeds crate" contains = list( /obj/item/seeds/replicapod = 2, @@ -43,14 +43,14 @@ containername = "Exotic Seeds crate" access = access_hydroponics -/datum/supply_packs/sci/integrated_circuit_printer +/datum/supply_pack/sci/integrated_circuit_printer name = "Integrated circuit printer" contains = list(/obj/item/device/integrated_circuit_printer = 2) cost = 15 containertype = /obj/structure/closet/crate containername = "Integrated circuit crate" -/datum/supply_packs/sci/integrated_circuit_printer_upgrade +/datum/supply_pack/sci/integrated_circuit_printer_upgrade name = "Integrated circuit printer upgrade - advanced designs" contains = list(/obj/item/weapon/disk/integrated_circuit/upgrade/advanced) cost = 30 diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index eb031e7bd9f..7593837b829 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -4,15 +4,15 @@ */ -/datum/supply_packs/security +/datum/supply_pack/security group = "Security" access = access_security -/datum/supply_packs/randomised/security +/datum/supply_pack/randomised/security group = "Security" access = access_security -/datum/supply_packs/randomised/security/armor +/datum/supply_pack/randomised/security/armor name = "Armor - Security armor" num_contained = 5 contains = list( @@ -32,7 +32,7 @@ containertype = /obj/structure/closet/crate/secure/gear containername = "Armor crate" -/datum/supply_packs/security/riot_gear +/datum/supply_pack/security/riot_gear name = "Gear - Riot" contains = list( /obj/item/weapon/melee/baton = 3, @@ -47,7 +47,7 @@ containername = "Riot gear crate" access = access_armory -/datum/supply_packs/security/riot_armor +/datum/supply_pack/security/riot_armor name = "Armor - Riot" contains = list( /obj/item/clothing/head/helmet/riot, @@ -60,7 +60,7 @@ containername = "Riot armor crate" access = access_armory -/datum/supply_packs/security/ablative_armor +/datum/supply_pack/security/ablative_armor name = "Armor - Ablative" contains = list( /obj/item/clothing/head/helmet/laserproof, @@ -73,7 +73,7 @@ containername = "Ablative armor crate" access = access_armory -/datum/supply_packs/security/bullet_resistant_armor +/datum/supply_pack/security/bullet_resistant_armor name = "Armor - Ballistic" contains = list( /obj/item/clothing/head/helmet/bulletproof, @@ -86,7 +86,7 @@ containername = "Ballistic armor crate" access = access_armory -/datum/supply_packs/security/combat_armor +/datum/supply_pack/security/combat_armor name = "Armor - Combat" contains = list( /obj/item/clothing/head/helmet/combat, @@ -99,7 +99,7 @@ containername = "Combat armor crate" access = access_armory -/datum/supply_packs/security/tactical +/datum/supply_pack/security/tactical name = "Armor - Tactical" containertype = /obj/structure/closet/crate/secure/gear containername = "Tactical armor crate" @@ -124,7 +124,7 @@ /obj/item/clothing/gloves/black ) -/datum/supply_packs/security/securitybarriers +/datum/supply_pack/security/securitybarriers name = "Misc - Security Barriers" contains = list(/obj/machinery/deployable/barrier = 4) cost = 20 @@ -132,7 +132,7 @@ containername = "Security barrier crate" access = null -/datum/supply_packs/security/securityshieldgen +/datum/supply_pack/security/securityshieldgen name = "Misc - Wall shield generators" contains = list(/obj/machinery/shieldwallgen = 4) cost = 20 @@ -140,7 +140,7 @@ containername = "Wall shield generators crate" access = access_teleporter -/datum/supply_packs/randomised/security/holster +/datum/supply_pack/randomised/security/holster name = "Gear - Holsters" num_contained = 4 contains = list( @@ -153,7 +153,7 @@ containertype = /obj/structure/closet/crate containername = "Holster crate" -/datum/supply_packs/security/extragear +/datum/supply_pack/security/extragear name = "Gear - Security surplus equipment" contains = list( /obj/item/weapon/storage/belt/security = 3, @@ -165,7 +165,7 @@ containertype = /obj/structure/closet/crate containername = "Security surplus equipment" -/datum/supply_packs/security/detectivegear +/datum/supply_pack/security/detectivegear name = "Forensic - Investigation equipment" contains = list( /obj/item/weapon/storage/box/evidence = 2, @@ -192,7 +192,7 @@ containername = "Forensic equipment" access = access_forensics_lockers -/datum/supply_packs/security/detectiveclothes +/datum/supply_pack/security/detectiveclothes name = "Forensic - Investigation apparel" contains = list( /obj/item/clothing/under/det/black = 2, @@ -214,7 +214,7 @@ containername = "Investigation clothing" access = access_forensics_lockers -/datum/supply_packs/security/officergear +/datum/supply_pack/security/officergear name = "Gear - Officer equipment" contains = list( /obj/item/clothing/suit/storage/vest/officer, @@ -244,7 +244,7 @@ containername = "Officer equipment" access = access_brig -/datum/supply_packs/security/wardengear +/datum/supply_pack/security/wardengear name = "Gear - Warden equipment" contains = list( /obj/item/clothing/suit/storage/vest/warden, @@ -272,7 +272,7 @@ containername = "Warden equipment" access = access_armory -/datum/supply_packs/security/headofsecgear +/datum/supply_pack/security/headofsecgear name = "Gear - Head of security equipment" contains = list( /obj/item/clothing/head/helmet/HoS, @@ -298,7 +298,7 @@ containername = "Head of security equipment" access = access_hos -/datum/supply_packs/security/securityclothing +/datum/supply_pack/security/securityclothing name = "Misc - Security uniform red" contains = list( /obj/item/weapon/storage/backpack/satchel/sec = 2, @@ -316,7 +316,7 @@ containertype = /obj/structure/closet/crate/secure containername = "Security uniform crate" -/datum/supply_packs/security/navybluesecurityclothing +/datum/supply_pack/security/navybluesecurityclothing name = "Misc - Security uniform navy blue" contains = list( /obj/item/weapon/storage/backpack/satchel/sec = 2, @@ -337,7 +337,7 @@ containertype = /obj/structure/closet/crate/secure containername = "Navy blue security uniform crate" -/datum/supply_packs/security/corporatesecurityclothing +/datum/supply_pack/security/corporatesecurityclothing name = "Misc - Security uniform corporate" contains = list( /obj/item/weapon/storage/backpack/satchel/sec = 2, @@ -357,7 +357,7 @@ containertype = /obj/structure/closet/crate/secure containername = "Corporate security uniform crate" -/datum/supply_packs/security/biosuit +/datum/supply_pack/security/biosuit name = "Gear - Security biohazard gear" contains = list( /obj/item/clothing/head/bio_hood/security = 3, diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm index dd553c4f1e2..ade2fa907c6 100644 --- a/code/datums/supplypacks/supply.dm +++ b/code/datums/supplypacks/supply.dm @@ -3,10 +3,10 @@ * related to civilian tasks live */ -/datum/supply_packs/supply +/datum/supply_pack/supply group = "Supplies" -/datum/supply_packs/supply/food +/datum/supply_pack/supply/food name = "Kitchen supply crate" contains = list( /obj/item/weapon/reagent_containers/food/condiment/flour = 6, @@ -20,14 +20,14 @@ containertype = /obj/structure/closet/crate/freezer containername = "Food crate" -/datum/supply_packs/supply/toner +/datum/supply_pack/supply/toner name = "Toner cartridges" contains = list(/obj/item/device/toner = 6) cost = 10 containertype = /obj/structure/closet/crate containername = "Toner cartridges" -/datum/supply_packs/supply/janitor +/datum/supply_pack/supply/janitor name = "Janitorial supplies" contains = list( /obj/item/weapon/reagent_containers/glass/bucket, @@ -50,7 +50,7 @@ containertype = /obj/structure/closet/crate containername = "Janitorial supplies" -/datum/supply_packs/supply/shipping +/datum/supply_pack/supply/shipping name = "Shipping supplies" contains = list( /obj/fiftyspawner/cardboard, @@ -64,7 +64,7 @@ containertype = "/obj/structure/closet/crate" containername = "Shipping supplies crate" -/datum/supply_packs/supply/bureaucracy +/datum/supply_pack/supply/bureaucracy contains = list( /obj/item/weapon/clipboard = 2, /obj/item/weapon/pen/red, @@ -84,14 +84,14 @@ containertype = /obj/structure/closet/crate containername = "Office supplies crate" -/datum/supply_packs/supply/spare_pda +/datum/supply_pack/supply/spare_pda name = "Spare PDAs" cost = 10 containertype = /obj/structure/closet/crate containername = "Spare PDA crate" contains = list(/obj/item/device/pda = 3) -/datum/supply_packs/supply/minergear +/datum/supply_pack/supply/minergear name = "Shaft miner equipment" contains = list( /obj/item/weapon/storage/backpack/industrial, @@ -115,21 +115,21 @@ containername = "Shaft miner equipment" access = access_mining -/datum/supply_packs/supply/mule +/datum/supply_pack/supply/mule name = "Mulebot Crate" contains = list() cost = 20 containertype = /obj/structure/largecrate/animal/mulebot containername = "Mulebot Crate" -/datum/supply_packs/supply/cargotrain +/datum/supply_pack/supply/cargotrain name = "Cargo Train Tug" contains = list(/obj/vehicle/train/cargo/engine) cost = 35 containertype = /obj/structure/largecrate containername = "Cargo Train Tug Crate" -/datum/supply_packs/supply/cargotrailer +/datum/supply_pack/supply/cargotrailer name = "Cargo Train Trolley" contains = list(/obj/vehicle/train/cargo/trolley) cost = 15 diff --git a/code/datums/supplypacks/supplypacks.dm b/code/datums/supplypacks/supplypacks.dm index 3d2d4807fde..d29f03be6f3 100644 --- a/code/datums/supplypacks/supplypacks.dm +++ b/code/datums/supplypacks/supplypacks.dm @@ -4,6 +4,7 @@ //ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards. //BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle. //NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points. +//NOTE NOTE: Hidden var is now deprecated, whoever removed support for it should've removed the var altogether //var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Atmospherics","Medical","Reagents","Reagent Cartridges","Science","Hydroponics", "Supply", "Miscellaneous") var/list/all_supply_groups = list("Atmospherics", @@ -24,30 +25,35 @@ var/list/all_supply_groups = list("Atmospherics", "Supplies", "Voidsuits") -/datum/supply_packs +/datum/supply_pack var/name = null - var/list/contains = list() - var/manifest = "" + var/list/contains = list() // Typepaths, used to actually spawn the contents + var/list/manifest = list() // Object names, used to compile manifests var/cost = null var/containertype = null var/containername = null var/access = null - var/hidden = 0 var/contraband = 0 + var/num_contained = 0 //number of items picked to be contained in a /randomised crate var/group = "Miscellaneous" -/datum/supply_packs/New() - manifest += "" + manifest += "\proper[initial(O.name)]" -/datum/supply_packs/randomised - var/num_contained //number of items picked to be contained in a randomised crate +/datum/supply_pack/proc/get_html_manifest() + var/dat = "" + if(num_contained) + dat +="Contains any [num_contained] of:" + dat += "" + return dat -/datum/supply_packs/randomised/New() - manifest += "Contains any [num_contained] of:" - ..() \ No newline at end of file +// Keeping this subtype here for posterity, so it's more apparent that this is the subtype to use if making new randomised packs +/datum/supply_pack/randomised + num_contained = 1 \ No newline at end of file diff --git a/code/datums/supplypacks/voidsuits.dm b/code/datums/supplypacks/voidsuits.dm index 699c8ce9eed..e24403e03e2 100644 --- a/code/datums/supplypacks/voidsuits.dm +++ b/code/datums/supplypacks/voidsuits.dm @@ -4,10 +4,10 @@ */ -/datum/supply_packs/voidsuits +/datum/supply_pack/voidsuits group = "Voidsuits" -/datum/supply_packs/voidsuits/atmos +/datum/supply_pack/voidsuits/atmos name = "Atmospheric voidsuits" contains = list( /obj/item/clothing/suit/space/void/atmos = 2, @@ -21,7 +21,7 @@ containername = "Atmospheric voidsuit crate" access = access_atmospherics -/datum/supply_packs/voidsuits/atmos/alt +/datum/supply_pack/voidsuits/atmos/alt name = "Heavy Duty Atmospheric voidsuits" contains = list( /obj/item/clothing/suit/space/void/atmos/alt = 2, @@ -35,7 +35,7 @@ containername = "Heavy Duty Atmospheric voidsuit crate" access = access_atmospherics -/datum/supply_packs/voidsuits/engineering +/datum/supply_pack/voidsuits/engineering name = "Engineering voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering = 2, @@ -49,7 +49,7 @@ containername = "Engineering voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/engineering/construction +/datum/supply_pack/voidsuits/engineering/construction name = "Engineering Construction voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering/construction = 2, @@ -63,7 +63,7 @@ containername = "Engineering Construction voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/engineering/hazmat +/datum/supply_pack/voidsuits/engineering/hazmat name = "Engineering Hazmat voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering/hazmat = 2, @@ -77,7 +77,7 @@ containername = "Engineering Hazmat voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/engineering/alt +/datum/supply_pack/voidsuits/engineering/alt name = "Reinforced Engineering voidsuits" contains = list( /obj/item/clothing/suit/space/void/engineering/alt = 2, @@ -91,7 +91,7 @@ containername = "Reinforced Engineering voidsuit crate" access = access_engine_equip -/datum/supply_packs/voidsuits/medical +/datum/supply_pack/voidsuits/medical name = "Medical voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical = 2, @@ -105,7 +105,7 @@ containername = "Medical voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/medical/emt +/datum/supply_pack/voidsuits/medical/emt name = "Medical EMT voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical/emt = 2, @@ -119,7 +119,7 @@ containername = "Medical EMT voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/medical/bio +/datum/supply_pack/voidsuits/medical/bio name = "Medical Biohazard voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical/bio = 2, @@ -133,7 +133,7 @@ containername = "Medical Biohazard voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/medical/alt +/datum/supply_pack/voidsuits/medical/alt name = "Vey-Med Medical voidsuits" contains = list( /obj/item/clothing/suit/space/void/medical/alt = 2, @@ -147,7 +147,7 @@ containername = "Vey-Med Medical voidsuit crate" access = access_medical_equip -/datum/supply_packs/voidsuits/security +/datum/supply_pack/voidsuits/security name = "Security voidsuits" contains = list( /obj/item/clothing/suit/space/void/security = 2, @@ -160,7 +160,7 @@ containertype = "/obj/structure/closet/crate/secure" containername = "Security voidsuit crate" -/datum/supply_packs/voidsuits/security/crowd +/datum/supply_pack/voidsuits/security/crowd name = "Security Crowd Control voidsuits" contains = list( /obj/item/clothing/suit/space/void/security/riot = 2, @@ -174,7 +174,7 @@ containername = "Security Crowd Control voidsuit crate" access = access_armory -/datum/supply_packs/voidsuits/security/alt +/datum/supply_pack/voidsuits/security/alt name = "Security EVA Riot voidsuits" contains = list( /obj/item/clothing/suit/space/void/security/alt = 2, @@ -188,7 +188,7 @@ containername = "Security EVA Riot voidsuit crate" access = access_armory -/datum/supply_packs/voidsuits/supply +/datum/supply_pack/voidsuits/supply name = "Mining voidsuits" contains = list( /obj/item/clothing/suit/space/void/mining = 2, @@ -201,7 +201,7 @@ containername = "Mining voidsuit crate" access = access_mining -/datum/supply_packs/voidsuits/supply/alt +/datum/supply_pack/voidsuits/supply/alt name = "Frontier Mining voidsuits" contains = list( /obj/item/clothing/suit/space/void/mining/alt = 2, diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm index e76f4db4683..02a5d31a9f1 100644 --- a/code/game/machinery/computer/supply.dm +++ b/code/game/machinery/computer/supply.dm @@ -1,226 +1,202 @@ +// While it initially feels like the ordering console should be a subtype of the main console, +// their function is similar enough that the ordering console emerges as the less specialized, +// and therefore more deserving of parent-class status -- Ater + +// Supply requests console /obj/machinery/computer/supplycomp + name = "supply ordering console" + icon_screen = "request" + circuit = /obj/item/weapon/circuitboard/supplycomp + var/authorization = 0 + var/temp = null + var/reqtime = 0 //Cooldown for requisitions - Quarxink + var/can_order_contraband = 0 + var/last_viewed_group = "categories" + var/menu_tab = 0 + var/list/expanded_packs = list() + +// Supply control console +/obj/machinery/computer/supplycomp/control name = "supply control console" icon_keyboard = "tech_key" icon_screen = "supply" light_color = "#b88b2e" req_access = list(access_cargo) circuit = /obj/item/weapon/circuitboard/supplycomp - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/can_order_contraband = 0 - var/last_viewed_group = "categories" - -/obj/machinery/computer/ordercomp - name = "supply ordering console" - icon_screen = "request" - circuit = /obj/item/weapon/circuitboard/ordercomp - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/last_viewed_group = "categories" - -/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob) - return attack_hand(user) + authorization = SUP_SEND_SHUTTLE | SUP_ACCEPT_ORDERS /obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob) return attack_hand(user) -/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat - if(temp) - dat = temp - else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (shuttle) - dat += {"
Supply shuttle
- Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
-
Supply points: [supply_controller.points]
-
\nRequest items

- View approved orders

- View requests

- \nView export report

- Close"} - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - -/obj/machinery/computer/ordercomp/Topic(href, href_list) - if(..()) - return 1 - - if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) ) - usr.set_machine(src) - - if(href_list["order"]) - if(href_list["order"] == "categories") - //all_supply_groups - //Request what? - last_viewed_group = "categories" - temp = "Supply points: [supply_controller.points]
" - temp += "Main Menu


" - temp += "Select a category

" - for(var/supply_group_name in all_supply_groups ) - temp += "[supply_group_name]
" - else - last_viewed_group = href_list["order"] - temp = "Supply points: [supply_controller.points]
" - temp += "Back to all categories


" - temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] - if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to - temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - - else if (href_list["doorder"]) - if(world.time < reqtime) - for(var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") - return - - //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] - if(!istype(P)) return - - var/timeout = world.time + 600 - var/reason = sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text) - if(world.time > timeout) return - if(!reason) return - - var/idname = "*None Provided*" - var/idrank = "*None Provided*" - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - idname = H.get_authentification_name() - idrank = H.get_assignment() - else if(issilicon(usr)) - idname = usr.real_name - - supply_controller.ordernum++ - var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) - reqform.name = "Requisition Form - [P.name]" - reqform.info += "

[station_name()] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" - reqform.info += "REQUESTED BY: [idname]
" - reqform.info += "RANK: [idrank]
" - reqform.info += "REASON: [reason]
" - reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)]
" - reqform.info += "CONTENTS:
" - reqform.info += P.manifest - reqform.info += "
" - reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" - - reqform.update_icon() //Fix for appearing blank when printed. - reqtime = (world.time + 5) % 1e5 - - //make our supply_order datum - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - O.object = P - O.orderedby = idname - supply_controller.requestlist += O - - temp = "Thanks for your request. The cargo team will process it as soon as possible.
" - temp += "
Back Main Menu" - - else if (href_list["vieworders"]) - temp = "Current approved orders:

" - for(var/S in supply_controller.shoppinglist) - var/datum/supply_order/SO = S - temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
" - temp += "
OK" - - else if (href_list["viewrequests"]) - temp = "Current requests:

" - for(var/S in supply_controller.requestlist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" - temp += "
OK" - - else if (href_list["mainmenu"]) - temp = null - - add_fingerprint(usr) - updateUsrDialog() - return - /obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob) - if(!allowed(user)) - user << "Access Denied." - return - if(..()) return user.set_machine(src) - post_signal("supply") - var/dat - if (temp) - dat = temp - else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (shuttle) - dat += "
Supply shuttle
" - dat += "\nLocation: " - if (shuttle.has_arrive_time()) - dat += "In transit ([shuttle.eta_minutes()] Mins.)
" - else - if (shuttle.at_station()) - if (shuttle.docking_controller) - switch(shuttle.docking_controller.get_docking_status()) - if ("docked") dat += "Docked at station
" - if ("undocked") dat += "Undocked from station
" - if ("docking") dat += "Docking with station [shuttle.can_force()? "Force Launch" : ""]
" - if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" - else - dat += "Station
" - - if (shuttle.can_launch()) - dat += "Send away" - else if (shuttle.can_cancel()) - dat += "Cancel launch" - else - dat += "*Shuttle is busy*" - dat += "
\n
" - else - dat += "Away
" - if (shuttle.can_launch()) - dat += "Request supply shuttle" - else if (shuttle.can_cancel()) - dat += "Cancel request" - else - dat += "*Shuttle is busy*" - dat += "
\n
" - - - dat += {"
\nSupply points: [supply_controller.points]
\n
- \nOrder items
\n
- \nView requests
\n
- \nView orders
\n
- \nView export report
\n
- \nClose"} - - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") + ui_interact(user) return /obj/machinery/computer/supplycomp/emag_act(var/remaining_charges, var/mob/user) if(!can_order_contraband) - user << "Special supplies unlocked." - can_order_contraband = 1 + to_chat(user, "Special supplies unlocked.") + authorization |= SUP_CONTRABAND req_access = list() return 1 + + + +/obj/machinery/computer/supplycomp/ui_interact(mob/user, ui_key = "supply_records", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null) + var/data[0] + var/shuttle_status[0] // Supply shuttle status + var/supply_pack[0] // List of supply packs, sorted by category + var/sorted_pack[0] // List of supply packs, sorted by category, with numerical indices for nanoUI iteration + var/orders[0] + var/receipts[0] + + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if(shuttle) + if(shuttle.has_arrive_time()) + shuttle_status["location"] = "In transit" + shuttle_status["mode"] = SUP_SHUTTLE_TRANSIT + shuttle_status["time"] = shuttle.eta_minutes() + + else + shuttle_status["time"] = 0 + if(shuttle.at_station()) + if(shuttle.docking_controller) + switch(shuttle.docking_controller.get_docking_status()) + if("docked") + shuttle_status["location"] = "Docked" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + if("undocked") + shuttle_status["location"] = "Undocked" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKED + if("docking") + shuttle_status["location"] = "Docking" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKING + shuttle_status["force"] = shuttle.can_force() + if("undocking") + shuttle_status["location"] = "Undocking" + shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKING + shuttle_status["force"] = shuttle.can_force() + + else + shuttle_status["location"] = "Station" + shuttle_status["mode"] = SUP_SHUTTLE_DOCKED + + else + shuttle_status["location"] = "Away" + shuttle_status["mode"] = SUP_SHUTTLE_AWAY + + if(shuttle.can_launch()) + shuttle_status["launch"] = 1 + else if(shuttle.can_cancel()) + shuttle_status["launch"] = 2 + else + shuttle_status["launch"] = 0 + + switch(shuttle.moving_status) + if(SHUTTLE_IDLE) + shuttle_status["engine"] = "Idle" + if(SHUTTLE_WARMUP) + shuttle_status["engine"] = "Warming up" + if(SHUTTLE_INTRANSIT) + shuttle_status["engine"] = "Engaged" + + else + shuttle["mode"] = SUP_SHUTTLE_ERROR + + // Uses two separate lists, one of which indexes on the category for easy insertion + for(var/cat in all_supply_groups) // Global list of supply categories + supply_pack[cat] = list() // Create an index for the category + + for(var/pack_name in supply_controller.supply_pack) + var/datum/supply_pack/P = supply_controller.supply_pack[pack_name] + var/list/pack = list( + "name" = P.name, + "cost" = P.cost, + "contraband" = P.contraband, + "manifest" = uniquelist(P.manifest), + "random" = P.num_contained, + "expand" = 0, + "ref" = "\ref[P]" + ) + + + if(P in expanded_packs) + pack["expand"] = 1 + + supply_pack[P.group][++supply_pack[P.group].len] = pack + + for(var/index in supply_pack) + sorted_pack[++sorted_pack.len] = list("name" = index, "category_packs" = supply_pack[index]) + + // Compile user-side orders + // Status determines which menus the entry will display in + // Organized in field-entry list for iterative display + // List is nested so both the list of orders, and the list of elements in each order, can be iterated over + for(var/datum/supply_order/S in supply_controller.order_history) + orders[++orders.len] = list( + "ref" = "\ref[S]", + "status" = S.status, + "entries" = list( + list("field" = "Supply Pack", "entry" = S.name), + list("field" = "Cost", "entry" = S.cost), + list("field" = "Index", "entry" = S.index), + list("field" = "Reason", "entry" = S.comment), + list("field" = "Ordered by", "entry" = S.ordered_by), + list("field" = "Ordered at", "entry" = S.ordered_at), + list("field" = "Approved by", "entry" = S.approved_by), + list("field" = "Approved at", "entry" = S.approved_at) + ) + ) + + // Compile exported crates + for(var/datum/exported_crate/E in supply_controller.exported_crates) + receipts[++receipts.len] = list( + "ref" = "\ref[E]", + "contents" = E.contents, + "error" = E.contents["error"], + "title" = list( + list("field" = "Name", "entry" = E.name), + list("field" = "Value", "entry" = E.value) + ) + ) + + data["user"] = "\ref[user]" + data["currentTab"] = menu_tab // Communicator compatibility, controls which menu is in use + data["shuttle_auth"] = (authorization & SUP_SEND_SHUTTLE) // Whether this ui is permitted to control the supply shuttle + data["order_auth"] = (authorization & SUP_ACCEPT_ORDERS) // Whether this ui is permitted to accept/deny requested orders + data["shuttle"] = shuttle_status + data["supply_points"] = supply_controller.points + data["supply_packs"] = sorted_pack + data["orders"] = orders + data["receipts"] = receipts + data["contraband"] = can_order_contraband + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "supply_records.tmpl", "Supply Console", 475, 700, state = key_state) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every five Master Controller tick + ui.set_auto_update(5) + + + + /obj/machinery/computer/supplycomp/Topic(href, href_list) if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + world.log << "## ERROR: The supply_controller datum is missing." return var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle if (!shuttle) - world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." + world.log << "## ERROR: The supply shuttle datum is missing." return if(..()) return 1 @@ -228,177 +204,210 @@ if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) ) usr.set_machine(src) - //Calling the shuttle - if(href_list["send"]) - if(shuttle.at_station()) - if (shuttle.forbidden_atoms_check()) - temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.

OK" - else - shuttle.launch(src) - temp = "Initiating launch sequence. \[Force Launch\]

OK" - else - shuttle.launch(src) - temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" - post_signal("supply") + // NEW TOPIC - if (href_list["force_send"]) - shuttle.force_launch(src) + // Switch menu + if(href_list["switch_tab"]) + menu_tab = href_list["switch_tab"] - if (href_list["cancel_send"]) - shuttle.cancel_launch(src) + if(href_list["pack_ref"]) + var/datum/supply_pack/S = locate(href_list["pack_ref"]) - else if (href_list["order"]) - //if(!shuttle.idle()) return //this shouldn't be necessary it seems - if(href_list["order"] == "categories") - //all_supply_groups - //Request what? - last_viewed_group = "categories" - temp = "Supply points: [supply_controller.points]
" - temp += "Main Menu


" - temp += "Select a category

" - for(var/supply_group_name in all_supply_groups ) - temp += "[supply_group_name]
" - else - last_viewed_group = href_list["order"] - temp = "Supply points: [supply_controller.points]
" - temp += "Back to all categories


" - temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] - if((N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to - temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - - else if (href_list["doorder"]) - if(world.time < reqtime) - for(var/mob/V in hearers(src)) - V.show_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") + // Invalid ref + if(!istype(S)) return - //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] - if(!istype(P)) return + // Expand the supply pack's contents + if(href_list["expand"]) + expanded_packs ^= S - var/timeout = world.time + 600 - var/reason = sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text) - if(world.time > timeout) return - if(!reason) return + // Make a request for the pack + if(href_list["request"]) + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return - var/idname = "*None Provided*" - var/idrank = "*None Provided*" - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - idname = H.get_authentification_name() - idrank = H.get_assignment() - else if(issilicon(usr)) - idname = usr.real_name + if(world.time < reqtime) + visible_message("[src]'s monitor flashes, \"[reqtime - world.time] seconds remaining until another requisition form may be printed.\"") + return - supply_controller.ordernum++ - var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) - reqform.name = "Requisition Form - [P.name]" - reqform.info += "

[station_name()] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" - reqform.info += "REQUESTED BY: [idname]
" - reqform.info += "RANK: [idrank]
" - reqform.info += "REASON: [reason]
" - reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)]
" - reqform.info += "CONTENTS:
" - reqform.info += P.manifest - reqform.info += "
" - reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" + var/timeout = world.time + 600 + var/reason = sanitize(input(user, "Reason:","Why do you require this item?","") as null|text) + if(world.time > timeout) + to_chat(user, "Error. Request timed out.") + return + if(!reason) + return - reqform.update_icon() //Fix for appearing blank when printed. - reqtime = (world.time + 5) % 1e5 + supply_controller.create_order(S, user, reason) - //make our supply_order datum - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - O.object = P - O.orderedby = idname - supply_controller.requestlist += O + var/idname = "*None Provided*" + var/idrank = "*None Provided*" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + idname = H.get_authentification_name() + idrank = H.get_assignment() + else if(issilicon(user)) + idname = user.real_name + idrank = "Stationbound synthetic" - temp = "Order request placed.
" - temp += "
Back | Main Menu | Authorize Order" + var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) + reqform.name = "Requisition Form - [S.name]" + reqform.info += "

[station_name()] Supply Requisition Form


" + reqform.info += "INDEX: #[supply_controller.ordernum]
" + reqform.info += "REQUESTED BY: [idname]
" + reqform.info += "RANK: [idrank]
" + reqform.info += "REASON: [reason]
" + reqform.info += "SUPPLY CRATE TYPE: [S.name]
" + reqform.info += "ACCESS RESTRICTION: [get_access_desc(S.access)]
" + reqform.info += "CONTENTS:
" + reqform.info += S.get_html_manifest() + reqform.info += "
" + reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
" - else if(href_list["confirmorder"]) - //Find the correct supply_order datum - var/ordernum = text2num(href_list["confirmorder"]) - var/datum/supply_order/O - var/datum/supply_packs/P - temp = "Invalid Request" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] - if(SO.ordernum == ordernum) - O = SO - P = O.object - if(supply_controller.points >= P.cost) - supply_controller.requestlist.Cut(i,i+1) - supply_controller.points -= P.cost - supply_controller.shoppinglist += O - temp = "Thanks for your order.
" - temp += "
Back Main Menu" - else - temp = "Not enough supply points.
" - temp += "
Back Main Menu" - break + reqform.update_icon() //Fix for appearing blank when printed. + reqtime = (world.time + 5) % 1e5 - else if (href_list["vieworders"]) - temp = "Current approved orders:

" - for(var/S in supply_controller.shoppinglist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
" - temp += "
OK" -/* - else if (href_list["cancelorder"]) - var/datum/supply_order/remove_supply = href_list["cancelorder"] - supply_shuttle_shoppinglist -= remove_supply - supply_shuttle_points += remove_supply.object.cost - temp += "Canceled: [remove_supply.object.name]


" + if(href_list["order_ref"]) + var/datum/supply_order/O = locate(href_list["order_ref"]) - for(var/S in supply_shuttle_shoppinglist) - var/datum/supply_order/SO = S - temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] (Cancel)
" - temp += "
OK" -*/ - else if (href_list["viewrequests"]) - temp = "Current requests:

" - for(var/S in supply_controller.requestlist) - var/datum/supply_order/SO = S - temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove
" + // Invalid ref + if(!istype(O)) + return - temp += "
Clear list" - temp += "
OK" + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return - else if (href_list["viewexport"]) - temp = "Previous shuttle export report:

" - var/cratecount = 0 - var/totalvalue = 0 - for(var/S in supply_controller.exported_crates) - var/datum/exported_crate/EC = S - cratecount += 1 - totalvalue += EC.value - temp += "[EC.name] exported for [EC.value] supply points
" - temp += "
Shipment of [cratecount] crates exported for [totalvalue] supply points.
" - temp += "
OK" + if(href_list["edit"]) + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return - else if (href_list["rreq"]) - var/ordernum = text2num(href_list["rreq"]) - temp = "Invalid Request.
" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] - if(SO.ordernum == ordernum) - supply_controller.requestlist.Cut(i,i+1) - temp = "Request removed.
" - break - temp += "
Back Main Menu" + switch(href_list["edit"]) + if("Supply Pack") + O.name = new_val - else if (href_list["clearreq"]) - supply_controller.requestlist.Cut() - temp = "List cleared.
" - temp += "
OK" + if("Cost") + var/num = text2num(new_val) + if(num) + O.cost = num - else if (href_list["mainmenu"]) - temp = null + if("Index") + var/num = text2num(new_val) + if(num) + O.index = num + + if("Reason") + O.comment = new_val + + if("Ordered by") + O.ordered_by = new_val + + if("Ordered at") + O.ordered_at = new_val + + if("Approved by") + O.approved_by = new_val + + if("Approved at") + O.approved_at = new_val + + if(href_list["approve"]) + supply_controller.approve_order(O, user) + + if(href_list["deny"]) + supply_controller.deny_order(O, user) + + if(href_list["delete"]) + supply_controller.delete_order(O, user) + + if(href_list["clear_all_requests"]) + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + supply_controller.deny_all_pending(user) + + if(href_list["export_ref"]) + var/datum/exported_crate/E = locate(href_list["export_ref"]) + + // Invalid ref + if(!istype(E)) + return + + var/mob/user = locate(href_list["user"]) + if(!istype(user)) // Invalid ref + return + + if(href_list["index"]) + var/list/L = E.contents[href_list["index"]] + + if(href_list["edit"]) + var/field = alert(user, "Select which field to edit", , "Name", "Quantity", "Value") + + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(field) + if("Name") + L["object"] = new_val + + if("Quantity") + var/num = text2num(new_val) + if(num) + L["quantity"] = num + + if("Value") + var/num = text2num(new_val) + if(num) + L["value"] = num + + if(href_list["delete"]) + E.contents.Cut(href_list["index"], href_list["index"] + 1) + + // Else clause means they're editing/deleting the whole export report, rather than a specific item in it + else if(href_list["edit"]) + var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) + if(!new_val) + return + + switch(href_list["edit"]) + if("Name") + E.name = new_val + + if("Value") + var/num = text2num(new_val) + if(num) + E.value = num + + else if(href_list["delete"]) + supply_controller.delete_export(E, user) + + else if(href_list["add_item"]) + supply_controller.add_export_item(E, user) + + + + switch(href_list["send_shuttle"]) + if("send_away") + if (shuttle.forbidden_atoms_check()) + to_chat(usr, "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.") + else + shuttle.launch(src) + to_chat(usr, "Initiating launch sequence.") + + if("send_to_station") + shuttle.launch(src) + to_chat(usr, "Supply Records + + +
+ + Supply points: {{:data.supply_points}}
+ + +
+

Supply Shuttle

+
+ Location:
+ Engines: +
+
+ {{:data.shuttle.location}}
+ {{:data.shuttle.engine}} +
+ {{if data.shuttle.mode == 4}} +
+ ETA: +
+
+ {{:data.shuttle.time}} minutes +
+ {{/if}} + {{if data.shuttle_auth}} + + {{if data.shuttle.launch == 1 && data.shuttle.mode == 0}} + {{:helper.link('Send away', 'suitcase', {'send_shuttle' : 'send_away'})}} + {{else data.shuttle.launch == 2 && (data.shuttle.mode == 3 || data.shuttle.mode == 1)}} + {{:helper.link('Cancel launch', 'stop', {'send_shuttle' : 'cancel_shuttle'})}} + {{else data.shuttle.launch == 1 && data.shuttle.mode == 5}} + {{:helper.link('Send shuttle', 'suitcase', {'send_shuttle' : 'send_to_station'})}} + {{/if}} + {{if data.shuttle.force}} + {{:helper.link('Force launch', 'alert', {'send_shuttle' : 'force_shuttle'})}} + {{/if}} + {{/if}} +
+
+ + +{{if data.currentTab == 0}} +
+ +
+ {{:helper.link('Request items', 'note', {'switch_tab' : 1})}} +
+ + +
+ {{:helper.link('View accepted orders', 'cart', {'switch_tab' : "Approved"})}} +
+ + +
+ {{:helper.link('View pending requests', 'cart', {'switch_tab' : "Requested"})}} +
+ + + {{:helper.link('View order history', 'document', {'switch_tab' : "All"})}} + + +
+ {{:helper.link('View export history', 'document', {'switch_tab' : "Export"})}} +
+
+ +{{else}} + {{:helper.link('Back to menu', 'arrowreturn-1-w', {'switch_tab' : 0})}} + + + + {{if data.currentTab == 1}} + {{for data.supply_packs}} +
+ {{:helper.link(value.name, 'bookmark', {'switch_tab' : value.name})}} +
+ {{/for}} + + + {{else data.currentTab == "Export"}} +

Exported Crates

+ {{for data.receipts}} +
+
+ {{for value.title :titleVal:titleIndex}} +
+ {{:titleVal.field}} +
+
+ {{:titleVal.entry}} + {{if data.order_auth}} + + {{:helper.link('Edit', 'wrench', {'order_ref' : value.ref, 'edit' : titleVal.field, 'default' : titleVal.entry, 'user' : data.user})}} + + {{/if}} +
+ {{/for}} + + {{if value.error}} +
+ + Error + +
+
+ {{:value.error}} +
+ {{else}} + {{for value.contents :contentVal:contentIndex}} +
+ {{:contentVal.quantity}}x {{:contentVal.object}} - {{:contentVal.value}} points +
+ {{if data.order_auth}} +
+ {{:helper.link('Edit Quantity','wrench', {'export_ref' : value.ref, 'edit' : 1, 'default' : contentVal.quantity, 'index' : contentIndex, 'user' : data.user})}} + {{:helper.link('Delete Entry', 'trash', {'export_ref' : value.ref, 'delete' : 1, 'index' : contentIndex, 'user' : data.user})}} +
+ {{/if}} + {{/for}} + {{/if}} + + {{if data.order_auth}} +
{{:helper.link('Add item to record', 'plus', {'export_ref' : value.ref, 'add_item' : 1, 'user' : data.user})}} +
{{:helper.link('Delete record', 'trash', {'export_ref' : value.ref, 'delete' : 1, 'user' : data.user})}} + {{/if}} +
+ {{empty}} +
No receipts on record!
+ {{/for}} + + + + + + {{else data.currentTab == "Approved" || data.currentTab == "Requested" || data.currentTab == "All"}} +

{{:data.currentTab}} Orders

+ {{for data.orders}} + {{if (value.status == data.currentTab) || (data.currentTab == "All")}} +
+
+ {{for value.entries :entryVal:entryIndex}} + + {{if entryVal.entry}} +
+ {{:entryVal.field}} +
+
+ {{:entryVal.entry}} + {{if data.order_auth}} + + {{:helper.link('Edit', 'wrench', {'order_ref' : value.ref, 'edit' : entryVal.field, 'default' : entryVal.entry, 'user' : data.user})}} + + {{/if}} +
+ {{/if}} + {{/for}} + + {{if data.currentTab == "All"}} +
+ Status +
+
+ {{:value.status}} +
+ {{if data.order_auth}} +
{{:helper.link('Delete record', 'trash', {'order_ref' : value.ref, 'delete' : 1, 'user' : data.user})}} + {{/if}} + {{/if}} + + {{if data.order_auth && data.currentTab == "Requested"}} + {{:helper.link('Approve', 'check', {'order_ref' : value.ref, 'approve' : 1, 'user' : data.user})}} + {{:helper.link('Deny', 'cancel', {'order_ref' : value.ref, 'deny' : 1, 'user' : data.user})}} + {{/if}} +
+ {{/if}} + {{empty}} +
No orders on record!
+ {{/for}} + + {{if data.currentTab == "Requested" && data.order_auth}} + {{:helper.link('Clear all requests', 'trash', {'clear_all_requests' : 1, 'user' : data.user})}} + {{/if}} + + + + {{else}} + {{for data.supply_packs}} + {{if data.currentTab == value.name}} +
+ {{:helper.link('Back to categories', 'arrow-return-1-w', {'switch_tab' : 1})}} +
+ + {{for value.category_packs :packValue:packIndex}} + {{if !packValue.contraband || data.contraband}} +
+ + {{:helper.link(packValue.name + ' - ' + packValue.cost, packValue.expand ? 'folder-open' : 'folder-collapsed', {'cartridge_topic' : 1, 'pack_ref' : packValue.ref, 'expand' : 1})}} +
+ + {{if packValue.expand}} +
+
+ {{if packValue.random}} + Contains any {{:packValue.random}} of:
+ {{/if}} + + {{for packValue.manifest :manifestElem:manifestIndex}} + {{:manifestElem}}
+ {{/for}} +
+ +
+ {{:helper.link('Request', 'cart', {'cartridge_topic' : 1, 'pack_ref' : packValue.ref, 'request' : 1, 'user' : data.user})}} +
+
+
+ {{/if}} + {{/if}} + {{/for}} + {{/if}} + {{/for}} + {{/if}} +{{/if}} \ No newline at end of file diff --git a/polaris.dme b/polaris.dme index 587300118ec..1e22d8f6bc2 100644 --- a/polaris.dme +++ b/polaris.dme @@ -48,6 +48,7 @@ #include "code\__defines\species_languages.dm" #include "code\__defines\stat_tracking.dm" #include "code\__defines\subsystems.dm" +#include "code\__defines\supply.dm" #include "code\__defines\targeting.dm" #include "code\__defines\turfs.dm" #include "code\__defines\unit_tests.dm"